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

2019-09-01 22:02

if(++clock.m==60) /*分位判断*/ {

clock.m=0;

if(++clock.h==24) /*时位判断*/ { clock.h=0;

if(++date.day==(getmonthdays(date.year,date.month)+1)) {

date.day=1;

if(++date.month==13) date.month=1; } } } } }

void timerplus() /*秒表1/100秒位加1,判断秒、分子程序*/ {

if(++timer.ms==100) {

timer.ms=0; if(++timer.s==60) {

timer.s=0; if(++timer.m==60) { timer.m=0; } } } }

void update_clockstr(void) /*更新时钟显示代码数组clockstr*/ {

clockstr[0]=led[clock.s]; /*给元素0赋相应数码管显示编码,编码序号是秒数的个位*/

clockstr[1]=led[(int)(clock.s/10)]; /*给元素1赋相应数码管显示编码,编码序号是秒数的十位*/ clockstr[2]=led[clock.m]; /*以下类推*/ clockstr[3]=led[(int)(clock.m/10)]; clockstr[4]=led[clock.h]; clockstr[5]=led[(int)(clock.h/10)]; }

void update_alartstr(void) /*更新闹钟显示代码数组alartstr*/ { /*右边两位显示on:闹钟开启 of:闹钟关闭*/ if(Alart_EN) alartstr[0]=ledchar[1];/*显示字母n*/

else alartstr[0]=ledchar[2]; /*显示字母f*/ alartstr[1]=ledchar[0]; /*显示字母o*/ alartstr[2]=led[alart.m]; alartstr[3]=led[(int)(alart.m/10)]; alartstr[4]=led[alart.h]; alartstr[5]=led[(int)(alart.h/10)]; }

void update_datestr(void) /*更新日期显示代码数组datestr*/ {

datestr[0]=led[date.day]; datestr[1]=led[(int)(date.day/10)]; datestr[2]=led[date.month]; datestr[3]=led[(int)(date.month/10)]; datestr[4]=led[date.year]; datestr[5]=led[(int)(date.year/10)]; }

void update_timerstr(void) /*更新秒表显示代码数组timerstr*/ {

timerstr[0]=led[timer.ms]; timerstr[1]=led[(int)(timer.ms/10)]; timerstr[2]=led[timer.s]; timerstr[3]=led[(int)(timer.s/10)];

timerstr[4]=led[timer.m]; timerstr[5]=led[(int)(timer.m/10)]; }

void display(void) /*刷新显示六位LED一次*/ {

unsigned char i; for(i=0;i<6;i++) {

LED_ON(i); /*选通相应位*/

XBYTE[LED_SEG]=dispbuf[i]; /*写显示段码*/ deley(50); /*延时显示*/ LED_OFF; /*写LED全灭段码*/ } }

void update_dispbuf(unsigned char *str) /*更新显示缓冲区子函数,参数为要用来更新缓冲区的源字符数组的首地址*/ {

dispbuf[0]=str[0]; /*将要更新的源字符数组内容COPY至dispbuf数组,用作显示缓冲区*/ dispbuf[1]=str[1];

dispbuf[2]=str[2]|0x80; /*默认把时位和分位后面的小数点显示出来,根据需要再取舍*/

dispbuf[3]=str[3]; dispbuf[4]=str[4]|0x80; dispbuf[5]=str[5]; }

void deley(int i) /*延时子函数*/ { while(i--); }

unsigned char getkeycode(void) /*键盘扫描子程序,返回获得的键码*/ {

unsigned char keycode; /*键码变量,一开始存行码*/ unsigned char scancode=0x20; /*列扫描码*/ unsigned char icolumn=0; /*键的列号*/ display(); /*用刷新数码管显示的时间去抖*/ XBYTE[KEY_COLUMN]=0x00;

keycode=XBYTE[KEY_LINE]&0x0f; /*从行端口读入四位行码*/

while((scancode&0x3f)!=0) /*取scancode的低六位,只要没变为全0,则执行循环*/ {

XBYTE[KEY_COLUMN]=(~scancode)&0x3f; /*给列赋扫描


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

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

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

马上注册会员

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