电子秒表原理图及程序.docVIP

  • 22
  • 0
  • 约1.92千字
  • 约 3页
  • 2020-07-26 发布于河北
  • 举报
#includereg52.h #define uint unsigned int #define uchar unsigned char /**********************************数码管查表法*****************************************************/ uchar code dula[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//段码控制 //此表为8个数码管位选控制, 共阴数码管 1-8个 uchar code wela[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//位选控制查表的方法控制 uchar cnt=0; uchar LedNumVal; sbit key1 = P1^0;//开始计时 sbit key2 = P1^1;//暂停 sbit key3 = P1^2;//复位 /**********************************延迟函数********************************************************/ void Delay_ms(uint i) { uchar j; for(;i0;i--)for(j=123;j0;j--); } /**********************************定时器初始化程序************************************************/ void Timer_Init(void) { TMOD |= 0x01;//启用定时器1,模式1 TH0 = 0x3c;//定时初值50ms TL0 = 0xb0; ET0 = 1;//定时器0允许 EA = 1;//全局中断 } /*********************************按键程序*******************************************************/ void Key_Scan(void) { if(!key1) //开始计时 { Delay_ms(5); if(!key1) { TR0 = 1;//开定时器 } } if(!key2) //暂停 { Delay_ms(5); if(!key2) { TR0 = 0;//关定时器 } } if(!key3) //复位 { Delay_ms(5); if(!key3) { LedNumVal=0; } } } /***********************************主函数********************************************************/ void main(void) { uchar LedOut[2],i; Timer_Init(); while(1) { Key_Scan(); if(cnt20)//一秒到了 { cnt=0; LedNumVal++; if(LedNumVal99)LedNumVal=0; } LedOut[0]=dula[LedNumVal%100/10];//十位 LedOut[1]=dula[LedNumVal%10];//个位 for(i=0;i2;i++) { P0 = LedOut[i]; P2 = wela[i];//使用查表法进行位选 Delay_ms(150);//扫描间隔时间(太长会数码管会有闪烁感) } } } /**********************************定时器服务程序*********************************************/ void Timer0_(void) interrupt 1 { TH0 = 0x3c;//启用定时器1,模式1 TL0 = 0xb0;//定时初值50ms cnt++; }

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档