本設(shè)計(jì)提出了一種基于AT89C51單片機(jī)開發(fā)的數(shù)字頻率計(jì)測(cè)量?jī)x的設(shè)計(jì)。系統(tǒng)以單片機(jī)AT89C51為核心,構(gòu)成了完備的測(cè)量系統(tǒng)。可以對(duì)信號(hào)進(jìn)行頻率的精確測(cè)量,測(cè)頻在1KHz到100KHz。采用液晶LCD1602顯示被測(cè)信號(hào)的頻率。與傳統(tǒng)的電路系統(tǒng)相比,其有處理速度快、穩(wěn)定性高、性價(jià)比高、硬件結(jié)構(gòu)簡(jiǎn)單的優(yōu)點(diǎn)。 (1)能測(cè)量頻率范圍為10HZ-100KHZ,,要求用液晶顯示器顯示測(cè)量結(jié)果。 (2)被測(cè)信號(hào)可以是正弦波、三角波、方波,幅值300mV-3V。 (3)具有超量程警告(可以是LED燈顯示,也可以用蜂鳴器報(bào)警)。 (4)當(dāng)測(cè)量脈沖信號(hào)時(shí),能顯示其占空比
單片機(jī)課設(shè)頻率計(jì)的仿真圖
程序源碼如下:
- #include<reg51.h>
- #include<math.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar m=0;
- uchar u;
- uint i;
- uint x;
- uint c; //相位數(shù)據(jù)結(jié)果保存
- float t0,f;
- uint a[]={70,61,48,48,48,48,48,46,48,48,72,90}; //頻率數(shù)據(jù)結(jié)果保存
- //F,=,0,0,0,0,0,.,0,0,H,Z
- sbit lcdrw=P2^1;
- sbit lcdrs=P2^0;
- sbit lcden=P2^2;
- /////////////////LCD1602的設(shè)置//////////////////////////////////
- void delay(uint s)//延時(shí)1MS
- {
- uint r,g;
- for(r=s;r>0;r--)
- for(g=110;g>0;g--);
- }
- void write_com(uchar com) // 寫指令
- {
- lcdrs=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_data(uchar date) // 寫數(shù)據(jù)
- {
- lcdrs=1;
- P0=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void initlcd()//初始化
- {
- lcdrw=0;
- lcden=0;
- //write_com(0x01);//顯示清屏
- write_com(0x38);//顯示模式設(shè)置
- write_com(0x0c); //顯示開,開游標(biāo),不閃爍
- write_com(0x06); // 字符時(shí)整體不移動(dòng)
- }
- ////////////LCD1602設(shè)置///////////////
- ///////////定時(shí)器的設(shè)置//////////////
- void CT_init() //定時(shí)計(jì)數(shù)器初始化
- { TMOD=0x99; //GATE=1,T1、T0工作在方式1,定時(shí)方式
- TH0=0; //定時(shí)計(jì)數(shù)器初值清零
- TL0=0;
- // TH1=0;
- // TL1=0;
- TR0=1; //TR0,TR1置位,此時(shí)定時(shí)計(jì)數(shù)器的啟動(dòng)有INT0,INT1引腳電平?jīng)Q定
- // TR1=1;
- ET0=1; //開中斷
- // ET1=1;
- }
- void ITC0() interrupt 0 //外部中斷0服務(wù)程序
- {
- u=m; //讀定時(shí)計(jì)數(shù)器0溢出次數(shù)
- m=0; //溢出次數(shù)清零
- x=TH0*256+TL0; //讀定時(shí)計(jì)數(shù)器0當(dāng)前值
- TH0=0; //定時(shí)計(jì)數(shù)器0清零
- TL0=0;
- }
- void TIME0() interrupt 1 //定時(shí)計(jì)數(shù)器0溢出中斷
- {
- m++; //溢出次數(shù)加1
- }
- ////////////定時(shí)器的設(shè)置//////////////
- void main()
- {
- initlcd(); //液晶顯示初始化
- CT_init(); //定時(shí)計(jì)數(shù)器初始化
- EA=1; //開總中斷
- EX0=1; //允許外部中斷
- // EX1=1;
- IT0=1; //設(shè)置外部中斷方式為下降沿觸發(fā)
- // IT1=1;
- P3=0xff;
- while(1)
- {
- t0=u*65536+x; //計(jì)算脈沖時(shí)間寬度
- f=1000000/(2*t0); //計(jì)算頻率
- c=f*100; //計(jì)算結(jié)果逐位保存
- a[9]=c%10+48;
- a[8]=(c/10)%10+48;
- c=f;
- a[6]=c%10+48;
- a[5]=(c/10)%10+48;
- a[4]=(c/100)%10+48;
- a[3]=(c/1000)%10+48;
- a[2]=(c/10000)%10+48;
- write_com(0x80);
- for(i=0;i<=11;i++)
- {
- write_data(a[i]);
- delay(10);
- }
- }
- }
復(fù)制代碼
課程設(shè)計(jì)的所有資料打包下載:
頻率計(jì).zip
(6.57 MB, 下載次數(shù): 289)
2016-5-15 12:22 上傳
點(diǎn)擊文件名下載附件
頻率計(jì)含源代碼、仿真圖和原理圖
|