|
51單片機(jī)做的數(shù)碼管顯示頻率計(jì),0-9999Hz頻率的范圍.
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
0.png (21.66 KB, 下載次數(shù): 52)
下載附件
2017-7-1 01:22 上傳
高頻時(shí)仿真很慢很慢的,要有足夠的耐心等待!。
0.png (45.96 KB, 下載次數(shù): 45)
下載附件
2017-7-1 01:23 上傳
單片機(jī)源程序如下:
- /*一個(gè)機(jī)器周期采樣值為1,下一個(gè)機(jī)器周期采樣為0,則計(jì)數(shù)器加1*/
- /*外部事件的最高計(jì)數(shù)頻率為晶振的1/24,故最高計(jì)數(shù)為0.9216M;*/
- /*目前狀態(tài)下只是顯示0到9999HZ的頻率*/
- /*原創(chuàng)作者:陳永剛*/
- /*優(yōu)化整理:tiansir*/
- /*測(cè)頻率原理*/
- /*定時(shí)器T0作為定時(shí)裝置,編程設(shè)定定時(shí)1s,定時(shí)器T1對(duì)外部信號(hào)計(jì)數(shù),每1S中對(duì)計(jì)數(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ù)碼管熄滅
-
- //個(gè)位數(shù)碼管
- temp = number%10;
- SEG_G = tab1[temp];
- }
- else
- {
- SEG_Q = 0xbf;
- SEG_B = 0xbf;
- SEG_S = 0xbf;
- SEG_G = 0xbf;
- }
- }
- //T0定時(shí)中斷,晶振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()
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
數(shù)碼管顯示0-9999Hz頻率計(jì).rar
(68.52 KB, 下載次數(shù): 50)
2017-6-30 21:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|