基于单片机的数字钟(电子日历)(转载)(2)

2019-09-01 22:02

unsigned char *CurrentMode; /*标志当前正设置的功能,如CurrentMode=CLOCK或CurrentMode=ALART等*/

void timerplus(void);

/**************************函数部分*************************/ void main(void) { sys_init(); while(1) {

XBYTE[KEY_COLUMN,0x00]; /*给键盘列线赋全零扫描码,判断是否有键按下 */

while((XBYTE[KEY_LINE]&0x0f)==0x0f) /*检测是否有键按下,无则一直进行LED的刷新显示*/ {

if(Alart_EN&&(clock.h==alart.h)&&(clock.m==alart.m)) {IsBeep=1;} else { IsBeep=0; P3_1=0;} display();

}

keyprocess(getkeycode()); /*有键按下时得到键值,并送入键值处理程序*/

display(); /*可要可不要*/ } }

void sys_init(void) {

TMOD=0x22; /*定时器0和1都设置为工作方式2,基准定时250×2=500us=0.5ms*/

TH0=6; /*定时器0中断服务用来产生1秒时钟定时及闹钟蜂鸣器蜂鸣脉冲*/

TL0=6; /*定时器1中断服务留给秒表使用,产生1/100秒定时*/ TH1=6; TL1=6; ET0=1; ET1=1; EA=1; TR0=1;

update_clockstr(); /*初始化时钟显示编码数组*/ update_alartstr(); /*初始化闹钟显示编码数组*/

update_datestr(); /*初始化日期显示编码数组*/ update_timerstr(); /*初始化秒表显示编码数组*/ update_dispbuf(clockstr);/*初始化显示缓冲数组*/ CurrentMode=CLOCK; /*默认的显示摸式为时钟*/ P3_1=0; /*蜂鸣器接线引脚复位*/ }

void timer0(void) interrupt 1 using 1 /*定时器0中断服务器,用来产生1秒定时*/ { itime++; if(itime==1000) {

if(IsSet) /*在设置模式下,对正在设置的位闪烁显示*/ {

dispbuf[SetSelect*2]=0; /*对正在设置的位所对应的显示缓冲区元素赋0,使LED灭*/ dispbuf[SetSelect*2+1]=0; }

if(IsBeep) P3_1=!P3_1; /*闹钟模式时,产生峰鸣器响脉冲*/ if(CurrentMode==CLOCK) {

dispbuf[2]=dispbuf[2]&0x7f;

dispbuf[4]=dispbuf[4]&0x7f; } }

if(itime==2000) /*两千次计数为1S 2000×0.5ms=1s*/ {

itime=0; /*定时1s时间到,软计数清零*/ clockplus(); /*时间结构体变量秒数加1 */ update_clockstr(); /* 更新时间显示编码数组 */

if(CurrentMode!=TIMER) update_dispbuf(CurrentMode); /* 用时间编码数组更新显示缓冲区 */ } }

void timer1(void) interrupt 3 using 2 /*定时器1中断服务器,用来产生1/100秒定时*/ { idot++;

if(++itime1==20) /*20*0.5ms=10ms*/ { itime1=0; timerplus(); update_timerstr(); if(CurrentMode==TIMER)

{

update_dispbuf(timerstr);

dispbuf[2]=dispbuf[2]&0x7f; /*关闭小数点的显示*/ dispbuf[4]=dispbuf[4]&0x7f; if(idot<1000) /*闪烁显示小数点*/ {

dispbuf[2]=dispbuf[2]|0x80; dispbuf[4]=dispbuf[4]|0x80; }else{

dispbuf[2]=dispbuf[2]&0x7f; dispbuf[4]=dispbuf[4]&0x7f; } } }

if(idot==2000) idot=0; }

/*功能模块子函数*/

void clockplus(void) /*时间加1s判断分,时子函数{

if(++clock.s==60) /*秒位判断*/ { clock.s=0;

*/


基于单片机的数字钟(电子日历)(转载)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:风电、光伏发电情况监管报告 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: