|
這個(gè)是本桂電學(xué)長(zhǎng)的一個(gè)項(xiàng)目,分享給大家
項(xiàng)目地址https://github.com/lstwwa/universit
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
這個(gè)是圖
單片機(jī)源程序如下:
- /*************************************************************************
- *名稱(chēng):頻率計(jì)
- *說(shuō)明:實(shí)現(xiàn)0~5000hz頻率計(jì)的統(tǒng)計(jì)
- *主程序
- *************************************************************************/
- #include "target.h"
- #include "led.h"
- //#define delay_time 25000
- sbit bee=P2^1;
- sbit ledunwork=P2^3;
- sbit ledwork=P2^2;
- void INIT(void)
- {
- }
- uchar displayBuff[4]={'0','0','0','0'}; //數(shù)碼管顯示緩沖區(qū),千,百,十,個(gè)
- const uchar displayMode=0x00; //后四位分別對(duì)應(yīng)緩沖區(qū)中每位的數(shù)據(jù)類(lèi)型,1為任意字符顯示,0為數(shù)字顯示
- void main()
- {
- uint get_fre;
- target_init();
- init_led();
- sei();
- while(1)
- {
- get_fre=get_fre_number();
-
- if(get_fre/1000<0x01) //0-1000
- {
- get_fre=get_fre;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledunwork=1;
- ledwork=0;
- bee=1;
- }
-
- if(get_fre/1000>=0x01&&get_fre/1000<0x02) //1000-2000
- {
- get_fre=get_fre-85;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledunwork=1;
- ledwork=0;
- bee=1;
- }
- if(get_fre/1000>=0x02&&get_fre/1000<0x03) // 2000-3000
- {
- get_fre=get_fre-170;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledwork=0;
- ledunwork=1;
- bee=0;
- }
-
- if(get_fre/1000>=0x03&&get_fre/1000<0x04) // 3000-4000
- {
- get_fre=get_fre-255;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledwork=0;
- ledunwork=1;
- bee=0;
- }
-
- if(get_fre/1000>=0x04&&get_fre/1000<0x05) // 4000-5000
- {
- get_fre=get_fre-340;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledwork=0;
- ledunwork=1;
- bee=0;
- }
-
- if(get_fre/1000>=0x05&&get_fre/1000<0x06) // 5000-6000
- {
- get_fre=get_fre-425;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledwork=1;
- ledunwork=0;
- bee=0;
- }
-
- if(get_fre/1000>=0x06&&get_fre/1000<0x07) // 6000-7000
- {
- get_fre=get_fre-510;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledwork=1;
- ledunwork=0;
- bee=0;
- }
-
- if(get_fre/1000>=0x07&&get_fre/1000<0x08) // 7000-8000
- {
- get_fre=get_fre-595;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledwork=1;
- ledunwork=0;
- bee=0;
- }
-
- if(get_fre/1000>=0x08&&get_fre/1000<0x09) // 8000-9000
- {
- get_fre=get_fre-680;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledwork=1;
- ledunwork=0;
- bee=0;
- }
-
-
-
- if(get_fre/1000>=0x09) //>9000
- {
- get_fre=get_fre-765;
- displayBuff[0]=get_fre/1000+'0'; //計(jì)算頻率千位,放在緩沖區(qū)第0位
- displayBuff[1]=(get_fre/100)%10+'0'; //計(jì)算頻率百位,放在緩沖區(qū)第1位
- displayBuff[2]=(get_fre%100)/10+'0'; //計(jì)算頻率十位,放在緩沖區(qū)第2位
- displayBuff[3]=get_fre%10+'0'; //計(jì)算頻率個(gè)位,放在緩沖區(qū)第3位
- ledSweepDisplay(displayBuff,displayMode,0x04);//循環(huán)顯示數(shù)碼管緩沖區(qū)中數(shù)據(jù)
- ledunwork=1;
- ledwork=0;
- bee=0;
- }
-
- }
- }
復(fù)制代碼
仿真工程有2個(gè)錯(cuò)誤:
基于89c51的頻率計(jì).zip
(301.96 KB, 下載次數(shù): 31)
2019-11-13 14:14 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|