簡易頻率計單片機課程設計
① 基於AT89S52單片機簡易頻率計的設計
AT89s51可能不行,其它速度快一點的能行。
1,信號變換到0與5V的高低電平
2、用一個單片機采樣中斷方式直接計數
3、用一個單片機單獨顯示
這樣簡單一些,不過頻率不會太高!
② 求一份數字頻率計的課程設計,基於C51單片機的,使用proteus、keilC軟體
我電腦找找看有沒有
③ 單片機數字頻率計課程設計
http://hi..com/lyzhangxiang/blog/item/0837ba13cea8b8c9c3fd78e7.html
去我的博客看看吧 我是上傳了
④ 求一個簡易單片機頻率計設計程序
我有一個通過數碼管顯示的,你可以把他改成1602顯示,如果你要買一個,我可以給你改,大概80元左右,但你要自己付郵費,當然,也可以把程序給你,把數碼管的硬體圖給你畫一個,你自己去研究,不用收你費。
⑤ 簡易頻率計設計(單片機課設)
要說也沒什麼難的,就是挺復雜,主要是輸入信號的電壓變化區間比較大,考慮的話那就要首先採集最高電壓峰值,然後轉換電平比較電壓值來實現進一步的頻率測量。如不考慮的話,電壓的量程范圍受 能測量 0.1V 的限制不能太高。不過你使用 較貴的 運放 可以忽略,比如 10元左右的 OP27。
使用 OP27 運放 正負5V 至 正負15V做電源 採用差分放大100或1000倍連接,輸入端採用10M歐及100K歐電阻分壓後分別輸入到差分放大電路的兩個輸入端,差分放大的特點是 正輸入 和負輸入 比較 誰電勢高輸出誰,正輸入電勢高輸出正並且放大100倍或1000倍電壓最高到運放源電壓正,負輸入電勢高則輸出負並且放大100倍或1000倍電壓最高到運放源電壓負。其實只需要再這里弄兩個光耦把正負運放源電壓變成 單片機的 高低電平就OK了。採用10M歐和100K歐電阻分壓後220V的交流電被分壓到2.2V差,0.1V 的電壓被分壓到 0.001V差,沒關系,我們的OP27能識別0.000002V的壓差。一個周期,兩個光耦會分別輸出一次低電平,取其中一個接入到I/O 口 做中斷,單片機調用自己定義的兩個地址B到兩個地址A並以兩個地址A內容循環刷顯數碼管以100mS做一個周期,循環結束時對自己定義的兩個地址B清零,中斷產生時兩個地址B加1,並注意進位。這樣一來,兩個地址B會在100mS內產生 一個周期加1的特點,如超過量程 自動跳轉到 10mS做周期的循環去,同理,,,,,,頻率越高就採用更短的循環周期。顯示這里用數組查表顯示即可。此法只可測頻率電壓范圍可以為1000V 到 10mV 。頻率視單片機的最高頻率而定可到M級單位。
⑥ 51單片機製作簡易數字頻率計程序
這里有一個四位數碼管的頻率計,供參考
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位碼
//ucharwei[4]={0XEf,0XDf,0XBf,0X7f};//位的控制端 (開發板)
ucharwei[4]={0X80,0X40,0X20,0X10};//位的控制端 (模擬)
uintz,x,c,v,date; //定義數據類型
uintdispcount=0;
uintlck=0;
uintdisp=0;
/******************************************************************
延時函數
******************************************************************/
voiddelay(uchart)
{
uchari,j;
for(i=0;i<t;i++)
{
for(j=13;j>0;j--);
{;
}
}
}
/**********************************************************************
數碼管動態掃描
*********************************************************************/
voidxianshi()
{
/*****************數據轉換*****************************/
z=date/1000; //求千位
x=date%1000/100; //求百位
c=date%100/10; //求十位
v=date%10; //求個位
P2=wei[0];
P0=an[z];
delay(50);
P2=wei[1];
P0=an[x];
delay(50);
P2=wei[2];
P0=an[c];
delay(50);
P2=wei[3];
P0=an[v];
delay(50);
}
/*************************************************************************
定時器初值1ms
**************************************************************************/
voidinitTimer(void)
{
TMOD=0x0;
TH0=0xe3;
TL0=0xc;
}
/*************************************************************************
定時器函數
**************************************************************************/
voidtimer0(void)interrupt1
{
TH0=0xe3;
TL0=0xc;
lck++;
if(lck==1000)
{
disp=dispcount;
lck=0;
dispcount=0;
}
}
/*************************************************************************
中斷函數
**************************************************************************/
voidint0(void)interrupt0
{
dispcount++;//每一次中斷,計數加一
}
/*************************************************************************
主函數
**************************************************************************/
voidmain(void)
{
IT0=1;//INT0下降沿中斷
EX0=1;//允許INT1中斷
initTimer();//裝入初值
TR0=1;
ET0=1;
EA=1;
while(1)
{
date=disp;
xianshi();
}
}
⑦ 求基於單片機簡易頻率計設計。要有電路圖,程序,最好還有模擬圖
#include <reg51.h>
unsigned long count = 0;
unsigned long show_count = 0;
unsigned char digest[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,0xF8,0x80,0x98,0xC6};
unsigned char scancode[8] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};
sbit P1_0 = P1^0;
#define HIGH_BIT 0xFB
#define LOW_BIT 0x80
void Disp(int id)
{
P2 = 0;
P2 = scancode[id];
P0 = 0xff;
switch (id)
{
0: P0 = digest[(show_count / 10000000) % 10]; break;
case 1: P0 = digest[(show_count / 1000000) % 10]; break;
case 2: P0 = digest[(show_count / 100000) % 10]; break;
case 3: P0 = digest[(show_count / 10000) % 10]; break;
case 4: P0 = digest[(show_count / 1000) % 10]; break;
case 5: P0 = digest[(show_count / 100) % 10]; break;
case 6: P0 = digest[(show_count /10) % 10]; break;
case 7: P0 = digest[show_count % 10]; break;
}
}
void Timer0() interrupt 1
{
static unsigned int scount = 0;
static unsigned char rcount = 0;
TH0 = HIGH_BIT;
TL0 = LOW_BIT + 34;
scount++;
if (scount == 800) //1 second
{
scount = 0;
show_count = count;
count = 0;
}else if (scount % 2 == 0)
{
rcount++;
if (rcount == 8) rcount = 0;
Disp(rcount);
}
count += (TH1 << 8) | TL1;
TH1 = TL1 = 0;
}
void main()
{
TMOD = 0x51;
// 11.0592 Mhz 1.152 ms
TH0 = HIGH_BIT;
TL0 = LOW_BIT;
//initalize output counter
TH1 = 0;
TL1 = 0;
EA=1;
ET0=1;
TR0=1;
TR1=1;
for (;;);
}
⑧ 基於單片機控制的簡易頻率計設計,數碼管顯示。
神馬分都不給,誰幫你弄!暈倒!曬太陽去!
⑨ 51單片機的簡易頻率計設計
單片機直接用復USB連電腦制只能取電不能通訊,通訊的話 需要介面電路,例如USB轉TTL的晶元,CH340,PL2303,這樣的晶元才可以,如果直接測TTL電平的話 確實不需要其他外圍電路了,因為51的信號就是TLL電平的。