功能:計時器相當(dāng)于秒表,有四個按鍵分別是開始,存儲,回顯和復(fù)位。
器件:at89c51、兩個74H573、排阻、數(shù)碼管、led、電阻等。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真界面.png (113.24 KB, 下載次數(shù): 116)
下載附件
仿真2
2018-9-10 17:18 上傳
仿真1.png (111.98 KB, 下載次數(shù): 111)
下載附件
仿真1
2018-9-10 17:18 上傳
程序3.png (110.02 KB, 下載次數(shù): 94)
下載附件
程序3
2018-9-10 17:18 上傳
程序2.png (112.23 KB, 下載次數(shù): 83)
下載附件
程序2
2018-9-10 17:18 上傳
程序1.png (125.1 KB, 下載次數(shù): 99)
下載附件
程序1
2018-9-10 17:18 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- #define duan P0
- #define wei P2
- /*******端口定義*******/
- sbit deng=P1^0;
- sbit seg_sel=P1^4;
- sbit bit_sel=P1^5;
- sbit start=P3^2;
- sbit store=P3^3;
- sbit diskey=P3^4;
- sbit reset=P3^5;
- /*******變量定義*******/
- u16 tem_ms;
- u8 temp_buf[5][3];
- u8 arr_pt;
- u8 run_flag;//為1開始計數(shù)
- u8 n_ten_ms,n_sec,n_min;
- u8 code seg_table[]={0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; //段選
- u8 code bit_table[]={0x01,0x02,0x04,0x08,
- 0x10,0x20,0x40,0x80 //位選 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xbf}
- };
- void delay(u16 num)
- {
- u16 x,y;
- for(x=num;x>0;x--)
- for(y=110;y>0;y--);
- }
- void display_led(u8 which_bit,u8 which_number)
- {
- bit_sel=1;
- wei=bit_table[which_bit];
- bit_sel=0;
- seg_sel=1;
- duan=seg_table[which_number];
- seg_sel=0;
- }
- void display(u8 which_bit,u8 which_number)
- {
- u8 x,y;
- x=which_number/10;//分離十位
- y=which_number%10;//分離個位
- display_led(5,16);
- delay(2);
- display_led(2,16);
- delay(2);
- if(which_bit==1)
- {
- display_led(6,y);
- delay(2);
- display_led(7,x);
- delay(2);
-
- }
- if(which_bit==2)
- {
- display_led(4,y);
- delay(2);
- display_led(3,x);
- delay(2);
-
- }
- if(which_bit==3)
- {
- display_led(1,y);
- delay(2);
- display_led(0,x);
- delay(2);
-
- }
- }
- void reflash(void)
- {
- display(1,n_ten_ms);
- display(2,n_sec);
- display(3,n_min);
- }
- int main(void)
- {
- TMOD=0x01;
- TH0=(65535-10000)/256;
- TL0=(65535-10000)%256;
- EA=1;
- ET0=1;//開放定時器0的溢出中斷
- //TR0=1;
- while(1)
- {
- if(start==0)//開始程序
- {
- deng=0;
- delay(5);
- if(start==0)
- {
- run_flag=~run_flag;
- }while(!start);
- }
- if(reset==0)//復(fù)位程序
- {
- deng=1;
- delay(5);
- if(reset==0)
- {
- n_ten_ms = 0;
- n_sec = 0;
- n_min = 0;
- }while(!reset);
-
- }
- if(store==0)//存儲程序
- {
- delay(5);
- if(store==0)
- {
- if((arr_pt>=0)&&(arr_pt<5))
- temp_buf[arr_pt][0]=n_ten_ms;
- temp_buf[arr_pt][1]=n_sec;
- temp_buf[arr_pt][2]=n_min;
- arr_pt++;
- }while(!store);
- }
- if(run_flag)//運行模式標(biāo)志位
- {
- TR0=1;//開始計數(shù)
- }
-
- else if(!run_flag)
- {
- TR0=0;
- if(diskey==0)//回顯程序
- {
- delay(5);
- if(diskey==0)
- {
- arr_pt--;
- n_ten_ms= temp_buf[arr_pt][0];
- n_sec= temp_buf[arr_pt][1];
- n_min= temp_buf[arr_pt][2];
- }while(!diskey);
- }
- }
- reflash();
- }
- }
- void t0_server(void) interrupt 1//中斷服務(wù)函數(shù)
- {
- TH0=(65535-10000)/256;
- TL0=(65535-10000)%256;
- n_ten_ms++;
- if(n_ten_ms>=80)
- {
- n_ten_ms=0;
- n_sec++;
- if(n_sec>=60)
- {
- n_sec=0;
- n_min++;
- if(n_min>=60)
- n_min=0;
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
計時器.rar
(75.4 KB, 下載次數(shù): 192)
2018-9-10 17:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|