1、数码管显示时间/* 计时器* 用到138译码器P22 P23 P24* 数码管接到P0端口* 通过按K4可以切换闹铃与时间显示* 按K1可以调秒数(调设置时间的秒数,后同),按K2可以调分数,K3可以调小时数*/#include#define uint unsigned int #define uchar unsigned char sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;sbit Beep = P15 ;sbit K1=P31;sbit K2=P30;sbit K3=P32;sbit K4=P33;#define First LSA=0;LSB=0;LS
2、C=0 /138译码器位数设置#define Second LSA=1;LSB=0;LSC=0#define Third LSA=0;LSB=1;LSC=0#define Fourth LSA=1;LSB=1;LSC=0#define Fifth LSA=0;LSB=0;LSC=1#define Sixth LSA=1;LSB=0;LSC=1#define Seventh LSA=0;LSB=1;LSC=1#define Eighth LSA=1;LSB=1;LSC=1uchar code DIG_CODE16=0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
3、0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码uchar Time=0;uchar miao1=0,miao2=0,fen1=0,fen2=0,shi1=0,shi2=0;char Setmiao1=-1,Setmiao2=0,Setfen1=0,Setfen2=0,Setshi1=0,Setshi2=0;void TimerConfiguration();void delayms(uchar x);void Timer(); /时间显示void SetingTime(); /时间设置vo
4、id Clock(); /闹铃void SetingClock(); /闹铃时间设置void SetingClockDisplay(); /闹钟设置显示void Delay(unsigned int i) ; /蜂鸣器所用延时main() uchar Num=1; Beep=0; TimerConfiguration(); while(1) if(K4=0) /通过K4来选择是计时还是设置闹铃 delayms(1); if(K4=0) Num+; while(!K4); if(Num=2) Num=0; if(Num) SetingClock(); else SetingTime(); Tim
5、er(); Clock(); void SetingTime() /时间设置 if(K1=0) delayms(1); if(K1=0) miao1+; while(!K1); else if(K2=0) delayms(1); if(K2=0) fen1+; while(!K2); else if(K3=0) delayms(1); if(K3=0) shi1+; while(!K3); else void Timer() /时间显示 if(Time=20|Time20) /每秒miao1+ Time=0; miao1+; else /显示:在第一位显示秒的个位 P0=0x00; First
6、; P0=0x00; P0=DIG_CODEmiao1; if(miao1=10) miao1=0; miao2+; else /显示秒的十位 P0=0x00; Second; P0=0x00; P0=DIG_CODEmiao2; if(miao2=6) miao2=0; fen1+; P0=0x00; /显示第三位的“-” Third; P0=0x00; P0=0x40; if(fen1=10) fen1=0; fen2+; else /显示分的个位 P0=0x00; Fourth; P0=0x00; P0=DIG_CODEfen1; if(fen2=6) fen2=0; shi1+; el
7、se /分的十位 P0=0x00; Fifth; P0=0x00; P0=DIG_CODEfen2; P0=0x00; /显示第六位的“-” Sixth; P0=0x00; P0=0x40; if(shi1=10) shi1=0; shi2+; else /显示时的个位 P0=0x00; Seventh; P0=0x00; P0=DIG_CODEshi1;/ P0=0x00; if(shi2=2) shi2=0; else /显示时的十位 P0=0x00; Eighth; P0=0x00; P0=DIG_CODEshi2;/ P0=0x00; void SetingClock() /闹铃时间设
8、置 SetingClockDisplay(); /闹钟设置显示/*通过按键来设置闹铃时间*/ if(K1=0) delayms(1); if(K1=0) Setmiao1+; while(!K1); else if(K2=0) delayms(1); if(K2=0) Setfen1+; while(!K2); else if(K3=0) delayms(1); if(K3=0) Setshi1+; while(!K3); else /*时间的进位设置*/ if(Setmiao1=10) Setmiao1=0; Setmiao2+; if(Setmiao2=6) Setmiao2=0; Set
9、fen1+; if(Setfen1=10) Setfen1=0; Setfen2+; if(Setfen2=6) Setfen2=0; Setshi1+; if(Setshi1=10) Setshi1=0; Setshi2+; if( (Setshi2=2)&(Setshi1=3) ) /即23时 Setshi1=0; Setshi2=0; void Clock() /闹铃 if( (Setmiao1=miao1)&(Setmiao2=miao2)&(Setfen1=fen1)&(Setfen2=fen2)&(Setshi1=shi1)&(Setshi2=shi2) ) while(1) Be
10、ep=1; Delay(5); Beep=0; Delay(5); void SetingClockDisplay() /闹钟设置显示 P0=0x00; First; P0=0x00; P0=DIG_CODESetmiao1; P0=0x00; Second; P0=0x00; P0=DIG_CODESetmiao2; P0=0x00; Fourth; P0=0x00; P0=DIG_CODESetfen1; P0=0x00; Fifth; P0=0x00; P0=DIG_CODESetfen2; P0=0x00; Seventh; P0=0x00; P0=DIG_CODESetshi1; P
11、0=0x00; Eighth; P0=0x00; P0=DIG_CODESetshi2;void TimerConfiguration() /中断的设置 TMOD = 0x01; /选择工作方式1 TH0 = 0x3C; /设置初始值,定时50MS TL0 = 0xB0; EA = 1; /打开总中断 ET0 = 1; /打开定时器0中断 TR0 = 1; /启动定时器0/* 函数名 : Timer0()* 函数功能 : 定时器0中断函数* 输入 : 无* 输出 : 无*/ void Timer0() interrupt 1 TH0 = 0x3C; /设置初始值 TL0 = 0xB0; Time+;void delayms(uchar x) /x*10毫秒 uchar a,b,c; for(c=x;c0;c-) for(b=38;b0;b-) for(a=130;a0;a-); void Delay(unsigned int i) /蜂鸣器用延时函数 char j; for(i; i 0; i-) for(j = 200; j 0; j-);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1