系統性能測試與功能說明
走時:默認走時狀態,按24小時制分別小時“時時-分分-秒秒”,時間會按實際時間以秒為最小單位變化。
走時調整:按K1、K2和K3可以調整時分秒,第一次按下K1選擇調整小時數,按下K2,小時數加1,按下K3,小時數減1。第二次按下K1選則調整分鐘數,按下K2,分鐘數加1,按下K3,分鐘數減1。第三次按下K1選擇調整秒數,按下K2,秒數加1,按下K3,秒數減1。第四次按下K1選擇退出調試。
預覽:
單片機源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit _led=P2^7;
- sbit key1=P2^0;
- sbit key2=P2^1;
- sbit key3=P2^2;
- uchar num=0,temp=0,count=0;
- uchar aa;
- uchar hour,min,sec;
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void delay(uint z);
- void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar aa);
- void read_key();
- void led();
- void time_change();
- void main() //主函數
- {
- P2=0xff;
- hour=12;
- min=0;
- sec=0;
- TMOD=0x11;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- EA=1;
- ET0=1;
- ET1=1;
- TR0=1;
- TR1=1;
- aa=0xff;
- while(1)
- {
- time_change();
- display(table[hour/10],table[hour%10],table[min/10],table[min%10],table[sec/10],table[sec%10],0xff);
- }
- }
- void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar aa) //顯示函數
- {
- if(num==1){P1=0x01&aa;P0=a;delay(2);}else{P1=0x01;P0=a;delay(2);} //hour
- if(num==1){P1=0x02&aa;P0=b;delay(2);}else{P1=0x02;P0=b;delay(2);} //hour
- if(num==2){P1=0x04&aa;P0=c;delay(2);}else{P1=0x04;P0=c;delay(2);} //min
- if(num==2){P1=0x08&aa;P0=d;delay(2);}else{P1=0x08;P0=d;delay(2);} //min
- if(num==3){P1=0x10&aa;P0=e;delay(2);}else{P1=0x10;P0=e;delay(2);} //sec
- if(num==3){P1=0x20&aa;P0=f;delay(2);}else{P1=0x20;P0=f;delay(2);} //sec
- }
- void timer0() interrupt 1 //定時器0中斷函數
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- temp++;
- }
- void timer1() interrupt 3 //定時器1中斷函數
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- count++;
- if(count>=20)
- count=0;
- }
- void delay(uint z) //延時函數
- {
- uint j,k;
- for(j=z;j>0;j--)
- for(k=120;k>0;k--);
- }
- void read_key() //讀按鍵函數
- {
- if(key1==0)
- {
- _led=0;
- delay(100);
- if(key1==0)
- {
- delay(100);
- _led=1;
- num++;
- if(num>3)
- {
- num=0;
- }
- while(1)
- {
- if(key1==0)
- {
- _led=0;
- delay(10);
- if(key1==0)
- {
- num++;
- if(num>3)
- {
- num=0;
- break;
- }
- }
- while(!key1);
- delay(10);
- while(!key1);
- _led=1;
- }
- if(key2==0)
- {
- _led=0;
- delay(80);
- if(key2==0)
- {
- if(num==1){hour++;if(hour==24)hour=0;}
- if(num==2){min++;if(min==60)min=0;}
- if(num==3){sec++;if(sec==60)sec=0;}
- }
- while(!key1);
- delay(10);
- while(!key1);
- _led=1;
- }
- if(key3==0)
- {
- _led=0;
- delay(80);
- if(key3==0)
- {
- if(num==1)
- {
- hour--;
- if(hour==0)
- {
- hour=23;
- }
- }
- if(num==2)
- {
- min--;
- if(min==0)
- {
- min=59;
- }
- }
- if(num==3)
- {
- sec--;
- if(sec==59)
- {
- sec=59;
- }
- }
- while(!key1);
- delay(10);
- while(!key1);
- _led=1;
- }
- if(count<=15)
- display(table[hour/10],table[hour%10],table[min/10],table[min%10],table[sec/10],table[sec%10],0xff);
- if(count>15)
- display(table[hour/10],table[hour%10],table[min/10],table[min%10],table[sec/10],table[sec%10],0x00);
- }
- }
- while(!key1);
- delay(10);
- while(!key1);
- _led=1;
- }
- }
- }
- void time_change() //時間調整函數
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
資料.7z
(127.21 KB, 下載次數: 66)
2021-3-24 02:11 上傳
點擊文件名下載附件
|