- /**************************************************************************************
- * 計時器程序
- * xxxxxxxx
- * xxxxxxxx
- **************************************************************************************/
- #include<reg51.h>
- #define uchar unsigned char
- uchar second,i,led_co;
- sbit K_start = P1^6; //定義按鍵
- sbit K_stop = P1^7;
- uchar code tab[10]={0x3f,0x06,0X5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar lius[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- //延時
- void ys(unsigned int x)
- {
- uchar j;
- while(x--)
- for(j=0;j<120;j++);
- }
- //定時器0初始化
- void InitTimer0(void)
- {
- TMOD = 0x01;
- TH0 = 0x3c;
- TL0 = 0xb0;
- EA = 1;
- ET0 = 1;
- }
- //定時器0中斷
- void Timer0Interrupt()interrupt 1
- {
- uchar k;
- TH0 = 0x3c; //重新賦初值
- TL0 = 0xb0;
- i++;
- if(i==20)
- {
- i=0;
- second++;
- second%=100; //記滿1s,更新second變量
- led_co = 1;
- P1 = 0xff;
- for(k=0;k<8;k++)
- {
- P1 = lius[k];
- ys(100); //注意延時盡量短,需要調整
- }
- }
- }
- //主函數
- void main(void)
- {
- //uchar k;
- second = 0;
- led_co = 0;
- P1 = 0xff;
- P0 = tab[0];
- P2 = tab[0];
- InitTimer0();
- //
- while(1)
- {
- /* BAK
- if(led_co==1)
- {
- led_co = 0;
- P1 = 0xff;
- for(k=0;k<8;k++)
- {
- P1 = lius[k];
- ys(100);
- }
- }
- */
- if(!K_start)
- {
- while(!K_start);
- second=0;
- TR0 = 1;
- }
- if(!K_stop)
- {
- while(!K_stop);
- TR0 = 0;
- }
- P0 = tab[second/10];
- P2 = tab[second%10];
- }
- }
復制代碼
|