proteus計時表仿真圖+程序,下面是原理圖:
0.png (25.99 KB, 下載次數: 92)
下載附件
2017-4-9 01:17 上傳
51單片機源程序:
- //簡易計時表,未開始計時時8循環左移,INT0計時開始,INT1計時停止,精確度為0.1s
- //單片機晶振選擇12MHZ
- //收獲,定時器計算1us為一個指令周期,可以通過公式直接 求的所需時間
- //在數據傳輸很容易犯錯誤,因此要注意在草稿紙上演練
- //在獲得數值與運用數值時,除了必要的數據轉化,盡量不要處理,直接運用有利于減少錯誤
- #include<reg52.h>
- unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void System_Init();
- unsigned char flag=0;
- unsigned int Timer,Time;
- unsigned char Dissbuf[3]={0,0,0};
- void main()
- {
- unsigned char i=0;
- System_Init();
- while(1)
- {
-
- if(flag==0)
- {
- i=Time/10;
- if(i%3==0)
- {P0=0x00;P2=0xff;P1=0xff;}
- if((i+2)%3==0)
- {P0=0xff;P2=0x00;P1=0xff;}
- if((i+1)%3==0)
- {P0=0xff;P2=0xff;P1=0x00;}
- }
- if(flag==1)
- {
- i=20;
- P0=0xff;
- P2=0xff;
- P1=0xff;
- while(i--);
- i=256;
- P0=Dissbuf[0];
- P2=Dissbuf[1];
- P1=Dissbuf[2];
- while(i--);
- }
- }
- }
- void System_Init()
- {
-
- TMOD = 0x01;
- TH0 = (65535-50000)/256;
- TL0 = (65535-50000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- IT0=1;
- EX0=1;
- IT1=1;
- EX1=1;
- }
- void into() interrupt 0
- {
- flag=1;
- P0=0xff;
- P2=0xff;
- P1=0xff;
- Time=0;
- TR0=1;
- }
- void TIMER0() interrupt 1
- {
- TH0 = (65535-50000)/256;
- TL0 = (65535-50000)%256;
- Timer++;
- if(Timer==2)
- {
- Timer=0;
- Time++;
- if(Time==999)
- {Time=0;}
- Dissbuf[0]=M[Time%10];
- Dissbuf[1]=M[Time%100/10]-0x80;
- Dissbuf[2]=M[Time/100];
- }
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (54.35 KB, 下載次數: 53)
下載附件
2017-4-9 01:17 上傳
單片機計時表仿真工程文件和源碼下載:
計時器.zip
(80.91 KB, 下載次數: 13)
2017-4-8 23:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|