秒表,暫停、清零、開始 外加矩陣鍵盤定時秒表上限反向計時

單片機源程序如下:
- #include <reg52.h>
- unsigned int code Act_Num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不帶下標的數字編碼
- unsigned int code Set_Num[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//帶有下標的數字編碼
- unsigned char code BitNumber[] = {0xef,0xdf,0xbf,0x7f};
- unsigned int x0,flag = 0,j,num=80,key,key1,k=0,x1;
- unsigned char temp, led[4];
- sbit KEY = P3^2;
- sbit KEY1 = P3^3;
- void delay(int time);
- void inti();
- void inti1();
- void main()
- {
- unsigned int i;
-
- TMOD = 0x01;
- ET0 = 1;
- EA = 1;
-
- inti();
- inti1();
- while (1)
- {
- led[0] = Act_Num[flag/10%10];
- led[1] = Set_Num[flag%10];
- led[2] = Act_Num[x1/10%10];
- led[3] = Act_Num[x1%10];
- for(i=0;i<4; i++)
- {
- P0=0x00;
- P0=led[i];
- P2=BitNumber[i];
- delay(4);
- P2=0xff;
- }
- }
- }
- void time0() interrupt 1
- {
- unsigned int i;
- TH0 = 0xff;
- TL0 = 0xa4;
- x0++;
- i++;
- if (x0==10000)
- {
- x0 =0;
-
- if (flag==60)
- {
- k=1;
- }
- else if (flag==0)
- {
- k=0;
- }
- if (k==1)
- {
- flag--;
- }
- else
- {
- flag++;
- }
- }
- if (i==100)
- {
- i=0;
- if (k==1)
- {
- x1--;
- }
- else
- {
- x1++;
- }
- if (x1==60)
- {
- x1=0;
- }
- }
- }
- void delay(int time)
- {
- unsigned int i;
- for (i = 0; i< time;i++)
- {
-
- }
- }
- void inti()
- {
- EA = 1;
- IT0 = 1;
- EX0 = 1;
- }
- void stop()interrupt 0
- {
- if (KEY==0)
- {
- delay(2);
- if (KEY==0)
- {
- j++;
- switch(j)
- {
- case 1:
- TH0 = 0xff;
- TL0 = 0xa4;
- TR0 = 1;
- break;
- case 2:
- TR0= 0;
- j=0;
- num=80;
- break;
- }
- while(KEY==0);
- }
- }
- while(!KEY);
- }
- void inti1()
- {
- EA = 1;
- IT1 = 1;
- EX1 = 1;
- }
- void qinglin()interrupt 2
- {
- if (KEY1==0)
- {
- delay(2);
- if (KEY1==0)
- {
- j=0;
- TR0=0;
- flag=0;
- x1=0;
- }
- while(KEY1==0);
- }
- while(!KEY1);
- }
復制代碼
所有資料51hei提供下載:
帶分.zip
(29.76 KB, 下載次數: 24)
2018-4-7 15:06 上傳
點擊文件名下載附件
|