|
今天給51黑電子論壇的朋友們分享一個51單片機(jī)做的數(shù)字頻率計,用數(shù)碼管顯示,有詳細(xì)的程序代碼.
仿真原理圖如下:
0.png (24.49 KB, 下載次數(shù): 35)
下載附件
2017-3-17 23:14 上傳
部分單片機(jī)源碼預(yù)覽:
freCountMain.c文件:
- /*************************************************************************
- *實例名稱:頻率計
- *實例說明:實現(xiàn)0~9000hz頻率計的統(tǒng)計
- *作者:yd
- *時間:09.06.20
- *************************************************************************/
- #include "target.h"
- #include "led.h"
- uchar displayBuff[4]={'0','0','0','0'}; //數(shù)碼管顯示緩沖區(qū),千,百,十,個
- const uchar displayMode=0x00; //后四位分別對應(yīng)緩沖區(qū)中每位的數(shù)據(jù)類型,1為任意字符顯示,0為數(shù)字顯示
- void main()
- {
- uint get_fre;
- target_init();
- init_led();
- sei();
- while(1)
- {
- get_fre=get_fre_number();
- if(get_fre/1000<0x0A)
- {
- displayBuff[0]=get_fre/1000+'0'; //計算頻率千位,放在緩沖區(qū)第0位
- }
- displayBuff[1]=(get_fre/100)%10+'0'; //計算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計算頻率個位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- }
- }
復(fù)制代碼
led.c文件:
- #define LED_GLOBAL 1
- #include "led.h"
- /*******************************************************************************************
- *函數(shù)名稱:delay_us(uint us)
- *函數(shù)功能:實現(xiàn)微秒級的延時
- *函數(shù)入口:us,延時函數(shù)循環(huán)后期數(shù)
- *函數(shù)出口:無
- *******************************************************************************************/
- void delay_us(uint us)
- {
- uint i;
- while(us--)
- {
- for(i=0;i<100;i++);
- }
- }
- /*******************************************************************************************
- *函數(shù)名稱:led_init(void)
- *函數(shù)功能:四位七段數(shù)碼管顯示初始化
- *函數(shù)入口:無
- *函數(shù)出口:無
- *******************************************************************************************/
- void init_led(void)
- {
- LED=segLedCode[0];
- LED_CS1=0;
- LED_CS2=0;
- LED_CS3=0;
- LED_CS4=0;
- }
- /*******************************************************************************************
- *函數(shù)名稱:ledWrite(uchar c,uchar n,uchar mod)
- *函數(shù)功能:對一組數(shù)碼管的某一位進(jìn)行短暫顯示
- *函數(shù)入口:c,要顯示的數(shù)據(jù);n,顯示一組數(shù)碼管中的第n位;mod,c的數(shù)據(jù)形式
- *函數(shù)出口:無
- *說明:當(dāng)mod==DIGITAL時,c為數(shù)字0~9的ANCII碼形式,此時在n位數(shù)碼管上顯示想用數(shù)字
- 當(dāng)mod==CHARACTER,直接將c輸出數(shù)據(jù)口
- *******************************************************************************************/
- void ledWrite(uchar c,uchar n,uchar mod)
- {
- if(CHARACTER==mod)
- {
- LED=c;
- }
- else if(DIGITAL==mod)
- {
- if((c-'0')<0x0a)
- {
- LED=segLedCode[c-'0'];
- }
- else
- {
- LED=segLedCode[0];
- }
- }
- switch(n)
- {
- case 0x01:
- {
- LED_CS1=0;
- delay_us(10);
- LED_CS1=1;
- break;
- }
- case 0x02:
- {
- LED_CS2=0;
- delay_us(10);
- LED_CS2=1;
- break;
- }
- case 0x03:
- {
- LED_CS3=0;
- delay_us(10);
- LED_CS3=1;
- break;
- }
- case 0x04:
- {
- LED_CS4=0;
- delay_us(10);
- LED_CS4=1;
- break;
- }
- default:
- break;
- }
- }
- /*******************************************************************************************
- *函數(shù)名稱:ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
- *函數(shù)功能:循環(huán)在數(shù)碼管上顯示緩沖區(qū)中的數(shù)據(jù)
- *函數(shù)入口:segCode,指向顯示緩沖區(qū)中的指針;segCodeMod,0~7位為1或0標(biāo)示1~8位數(shù)碼管顯示的數(shù)據(jù)的類型(DIGITAL或者CHARACTER);segNumber,代表要顯示數(shù)碼管的位數(shù)
- *函數(shù)出口:無
- *說明:本函數(shù)主要實現(xiàn)將顯示緩沖區(qū)中的數(shù)據(jù)在數(shù)碼管上顯示出來
- *******************************************************************************************/
- void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
- {
- uchar segCount;
- for(segCount=0;segCount<segNumber;segCount++)
- {
- if(segCodeMod&0x01) /*1代表此處顯示任意字符 */
- {
- ledWrite(segCode[segCount],segCount+1,CHARACTER);
- }
- else
- {
- ledWrite(segCode[segCount],segCount+1,DIGITAL);
- }
- segCodeMod=segCodeMod>>1;
- }
- }
復(fù)制代碼
0.png (46.18 KB, 下載次數(shù): 45)
下載附件
2017-3-17 23:08 上傳
0.png (50.12 KB, 下載次數(shù): 52)
下載附件
2017-3-17 23:08 上傳
全部資料下載(含仿真工程文件和完整代碼而且經(jīng)過51hei.com測試通過):
數(shù)字頻率計.rar
(20.4 KB, 下載次數(shù): 98)
2017-3-17 23:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|