51單片機做的數(shù)碼管顯示頻率計,0-9999Hz頻率的范圍.
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
0.png (21.66 KB, 下載次數(shù): 52)
下載附件
2017-7-1 01:22 上傳
高頻時仿真很慢很慢的,要有足夠的耐心等待。!
0.png (45.96 KB, 下載次數(shù): 45)
下載附件
2017-7-1 01:23 上傳
單片機源程序如下:
- /*一個機器周期采樣值為1,下一個機器周期采樣為0,則計數(shù)器加1*/
- /*外部事件的最高計數(shù)頻率為晶振的1/24,故最高計數(shù)為0.9216M;*/
- /*目前狀態(tài)下只是顯示0到9999HZ的頻率*/
- /*原創(chuàng)作者:陳永剛*/
- /*優(yōu)化整理:tiansir*/
- /*測頻率原理*/
- /*定時器T0作為定時裝置,編程設(shè)定定時1s,定時器T1對外部信號計數(shù),每1S中對計數(shù)結(jié)果處理*/
- #include<reg51.h>
- #include<absacc.h>
- #define SEG_Q XBYTE[0xfcec]
- #define SEG_B XBYTE[0xfced]
- #define SEG_S XBYTE[0xfcee]
- #define SEG_G XBYTE[0xfcef]
- //通用數(shù)碼管顯示函數(shù),傳入數(shù)據(jù)0~9999
- void renew_disp(unsigned int number)
- {
- unsigned char code tab1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char temp,flag=0;
- if(number < 10000)
- {
- //千位數(shù)碼管
- temp = number/1000%10;
- if (temp)
- {
- SEG_Q = tab1[temp];
- flag = 1;
- }
- else
- {
- SEG_Q = 0xff;//數(shù)碼管熄滅
- flag = 0;
- }
- //百位數(shù)碼管
- temp = number/100%10;
- if(flag | temp)
- {
- SEG_B = tab1[temp];
- flag = 1;
- }
- else
- {
- SEG_B = 0xff;//數(shù)碼管熄滅
- flag = 0;
- }
-
- //十位數(shù)碼管
- temp = number/10%10;
- if(flag | temp) SEG_S = tab1[temp];
- else SEG_S = 0xff;//數(shù)碼管熄滅
-
- //個位數(shù)碼管
- temp = number%10;
- SEG_G = tab1[temp];
- }
- else
- {
- SEG_Q = 0xbf;
- SEG_B = 0xbf;
- SEG_S = 0xbf;
- SEG_G = 0xbf;
- }
- }
- //T0定時中斷,晶振22.1184M
- void T0_int(void) interrupt 1
- {
- static char counter=0;
- TH0=(65536-46063)/256;
- TL0=(65536-46063)%256;
- if(counter++==39)
- {
- counter=0;
- TR1=0;
- renew_disp(256*TH1+TL1);
- TH1=TL1=0;
- TR1=1;
- }
- }
- void main()
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
數(shù)碼管顯示0-9999Hz頻率計.rar
(68.52 KB, 下載次數(shù): 50)
2017-6-30 21:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|