按樓主的意圖改成這樣試試。
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar sec,min,hour,num,num1,t;
- bit sign=0;
- sbit fm=P1^0;
- sbit led0=P1^6;
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit key3=P3^2;
- unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char a[]={0,0,0x40,0,0,0x40,0,0};
- /*
- void delay(unsigned char z)
- {
- unsigned char x,y;
- for(x=0;x<z;x++)
- for(y=0;y<255;y++);
- }*/
- void time () interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- num++;
- if(num>=20)
- {
- num=0;
- sec++;
- if(sec>=60)
- {
- sec=0;
- min++;
- if(min>=60)
- {
- min=0;
- hour++;
- if(hour>=24)
- hour=0;
- }
- }
- }
- }
- void led()
- {
- if(num>10)
- led0=1;
- else
- led0=0;
- if(min==0&&sec<=5)//整點報時5秒
- fm=1;
- else fm=0;
- }
- void display()
- {
- a[0]=table[hour/10];
- a[1]=table[hour%10];
- a[3]=table[min/10];
- a[4]=table[min%10];
- a[6]=table[sec/10];
- a[7]=table[sec%10];
- P0=0x00;
- P2=~(0x01<<t);
- P0=a[t];
- t=++t%8;
- }
- void key()
- {
- if(!key1||!key2||!key3)
- {
- if(++num1>=250&&sign==0)
- {
- sign=1;
- if(!key1)sec=++sec%60;
- if(!key2)min=++min%60;
- if(!key3)hour=++hour%24;
- }
- }
- else
- {
- num1=0;
- sign=0;
- }
- }
- void main()
- {
- fm=0;
- TMOD=1;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- led();
- display();
- key();
- }
- }
復制代碼
|