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

2019-09-01 22:02

码,第一次为011111*/

if((XBYTE[KEY_LINE]&0x0f)==keycode) break; /*检测按键所在的列跳出循环*/

scancode=scancode>>1; /*列扫描码右移一位*/ icolumn++; /*列号加1*/ }

keycode=keycode<<4; /*把行码移到高四位*/ keycode=keycode|icolumn; /*由行码和列码组成键码*/ //等待按键放开

XBYTE[KEY_COLUMN]=0x00;

while((XBYTE[KEY_LINE]&0x0f)!=0x0f) display(); return keycode; }

void keyprocess(unsigned char keycode) /*键值处理函数*/ {

switch (keycode) {

case 0x73: Akey(); break;

case 0xB3: Bkey(); break;

case 0xD3: Ckey();

break;

case 0xE3: Dkey(); break; default: break; }

update_dispbuf(CurrentMode); }

unsigned char getmonthdays(unsigned int year,unsigned char month)/*得到某月的天数*/ {

unsigned char days; switch (month) { case 4: case 6: case 9:

case 11:days=30; break;

case 2: if(year%4==0) days=29; else days=28; break;

default:days=31;

break; }

return days; }

/*功能键子函数部分*/

void Akey(void) /*对当前设置位进行加一操作,如果设置秒位,则给秒位清零*/ {

if(CurrentMode==TIMER) /*秒表模式下启闭走时*/ { TR1=!TR1; return; }

if(!IsSet) return; /*如果不是设置模式退出*/ switch (SetSelect) {

case SECOND:if(CurrentMode==CLOCK) {

clock.s=0; /*如果当前被设置位是秒位,则清零秒位*/ update_clockstr(); }

if(CurrentMode==ALART) {

Alart_EN=!Alart_EN; update_alartstr(); }

if(CurrentMode==DATE) {

if(++date.day==(getmonthdays(date.year,date.month)+1)) date.day=1; update_datestr(); }

if(CurrentMode==TIMER) {

TR1=!TR1; } break;

case MINUTE:if(CurrentMode==CLOCK) {

if(++clock.m==60) clock.m=0; /*如果当前被设置分位,则分位加1*/ update_clockstr(); }

if(CurrentMode==ALART) {

if(++alart.m==60) alart.m=0; update_alartstr(); }

if(CurrentMode==DATE) {

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

case HOUR: if(CurrentMode==CLOCK) {

if(++clock.h==24) clock.h=0; /*如果当前被设置时位,则时位加1*/

update_clockstr(); }

if(CurrentMode==ALART) {

if(++alart.h==24) alart.h=0; update_alartstr(); }

if(CurrentMode==DATE) {


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

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

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

马上注册会员

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