- /**************************************************************************************
- * 计时器程序
- * 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];
- }
- }
复制代码
|