這周實訓弄得一個簡單的秒表
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (13.22 KB, 下載次數: 44)
下載附件
2017-6-15 18:41 上傳
0.png (52.04 KB, 下載次數: 51)
下載附件
2017-6-15 18:41 上傳
單片機源程序如下:
- #include <reg51.H>
- sbit sta_end=P0^0;
- sbit reset=P3^7;
- unsigned char code table0[]={
- 0x3F,/*0*/
- 0x06,/*1*/
- 0x5B,/*2*/
- 0x4F,/*3*/
- 0x66,/*4*/
- 0x6D,/*5*/
- 0x7D,/*6*/
- 0x07,/*7*/
- 0x7F,/*8*/
- 0x6F,/*9*/
- };
- unsigned char code table1[]={
- 0x3F,/*0*/
- 0x06,/*1*/
- 0x5B,/*2*/
- 0x4F,/*3*/
- 0x66,/*4*/
- 0x6D,/*5*/
- 0x7D,/*6*/
- 0x07,/*7*/
- 0x7F,/*8*/
- 0x6F,/*9*/
- };
- /*聲明second10用于計數十分之一秒變化,second1用于記錄秒的個*/ /*位,second2用于記錄秒的十位*/
- unsigned int second10,second1,second2;
- bit bdata flag; /*以下是設置延時功能的函數*/
- void delay()
- {
- unsigned char i,j;
- for(i=90;i>0;i--)
- for(j=200;j>0;j--);
- }
- /*以下是設置時間的函數*/
- void setTime()
- {
- second10++;
- if(second10==10) /*當十分之一秒計數到十后從零重新計時*/
- {
- second10=0; /*同時秒計時個位加一*/
- second1++;
- if(second1==10) /*當秒計數個位到十后從零重新計時*/
- {
- second1=0;
- second2++; /*同時秒計時十位加一*/
- if(second2==10)
- second2=0;
- }
- }
- }
- /*以下是向LED管輸數據并使之顯示的函數*/
- void dispact()
- {
- P3=0xfe;
- P1=table1[second1];
- delay();
- P3=0xfd;
- P1=table1[second2];
- delay();
- P2=table0[second10];
- }
- /*十分之一秒刷新一次,實現十分之一秒進一*/
- Timer0 () interrupt 1 using 1
- {
- TH0 = (65535 - 50000)/256;
- TL0 = (65535 - 50000)%256;
- if(flag)
- setTime();
- dispact();
- }
- void main(void)
- {
- TMOD = 0x01;
- TH0 = (65535 - 50000)/256; /*定時器賦初值*/
- TL0 = (65535 - 50000)%256;
- flag = 0;
- EA = 1; /*cpu開中斷*/
- TR0 = 1; /*利用定時器0*/
- ET0 = 1; /*外部中斷允許*/
- do
- {
- if(!sta_end)
- {
- if(flag == 0)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
新建文件夾.rar
(17.34 KB, 下載次數: 12)
2017-6-15 08:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|