单片机课程设计实验报告-基于stc89c52rc的电子万年历设计内容摘要:

*// void key16() { key=keyboard()。 /************闹钟开关显示 ****************/ if(key==1) {if(clk_switch==0) {clk_switch=1。 TR0=0。 //write_1602(0x0f)。 //设置光标为闪烁 write_1602(er0x02+0x0f)。 write_1602dat(39。 O39。 )。 write_1602(er0x01+0x0f)。 write_1602dat(39。 N39。 )。 write_1602(er+0x0f)。 write_1602dat(39。 39。 )。 TR0=1。 } else {clk_switch=0。 TR0=0。 //write_1602(0x0f)。 //设置光标为闪烁 write_1602(er0x02+0x0f)。 write_1602dat(39。 O39。 )。 write_1602(er0x01+0x0f)。 17 write_1602dat(39。 F39。 )。 write_1602(er+0x0f)。 write_1602dat(39。 F39。 )。 TR0=1。 } } if(key2n==0||key2n==8) { if(key==11)////12 为功能键(时间设置键) { buzzer=0。 delay(20)。 buzzer=1。 key1n++。 if(key1n==9)key1n=1。 //设置按键共有 年 、 月 、 日 、 星期、 时 、 分 、 秒 、返回, 8 个功能循环 switch(key1n) { case 1: TR0=0。 //关闭定时器 write_1602(yh+0x04)。 //按动 1 次, nian write_1602(0x0f)。 //设置光标为闪烁 break。 case 2: write_1602(yh+0x07)。 //按动 2 次, yue break。 case 3: write_1602(yh+0x0a)。 //按动 3 次, ri break。 case 4: write_1602(yh+0x0e)。 //按动 4 次, week break。 case 5: write_1602(er0x02+0x03)。 //按动 5 次, shi break。 case 6: write_1602(er0x02+0x06)。 //按 6 次 fen 位置显示光标 break。 case 7: write_1602(er0x02+0x09)。 //按 7 次,秒位置显示光标 break。 case 8: write_1602(0x0c)。 //按动到第 8 次,设置光标不闪烁 TR0=1。 break。 //打开定时器 default:break。 } } if(key1n!=0)//当 key1 按下以下。 再按以下键才有效(按键次数不等于零) { if(key==3) //上调键 { write_1602(er0x02+0x09)。 //因为设置液晶的模式是写入数据后,指针自动加一, 18 在这里是写回原来的位置 buzzer=0。 //蜂鸣器短响一次 delay(20)。 buzzer=1。 switch(key1n) { case 1:nian++。 ri=1。 write_nyr(9,ri)。 if(nian==100) nian=0。 write_nyr(3,nian)。 //令 LCD 在正确的位置显示 加 设定好的年份数据 write_1602(yh+4)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 2:yue++。 ri=1。 write_nyr(9,ri)。 //令 LCD在正确的位置显示 加 设定好的日期数据 if(yue==13) yue=1。 write_1602(yh+7)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 write_nyr(6,yue)。 //令 LCD 在正确的位置显示 加 设定好的月份数据 write_1602(yh+7)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 3:ri++。 run=nian%4。 if(run==0) {} else run=1。 switch(yue) { case 1 : if(ri==32) ri=1。 break。 case 2 : if(run==0) {if(ri==30) ri=1。 break。 } else {if(ri==29) ri=1。 break。 } case 3 : if(ri==32) ri=1。 break。 case 4 : if(ri==31) ri=1。 break。 case 5 : if(ri==32) ri=1。 break。 case 6 : if(ri==31) ri=1。 break。 case 7 : if(ri==32) ri=1。 break。 case 8 : if(ri==32) ri=1。 break。 case 9 : if(ri==31) ri=1。 break。 case 10: if(ri==32) ri=1。 break。 19 case 11:if(ri==31) ri=1。 break。 case 12:if(ri==32) ri=1。 break。 default:break。 } write_nyr(9,ri)。 //令 LCD 在正确的位置显示 加 设定好的日期数据 write_1602(yh+10)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 4:week++。 if(week=8) week=1。 write_1602(yh+0x0C)。 //指定 39。 加 39。 后的周数据显示位置 write_week(week)。 //指定周数据显示内容 write_1602(yh+0x0e)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 5:shi++。 if(shi==24) {shi=0。 } write_sfm(2,shi)。 //令 LCD 在正确的位置显示 加 设定好的小时数据 write_1602(er2+3)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 6:fen++。 if(fen=60) fen=0。 write_sfm(0x05,fen)。 //令 LCD 在正确位置显示 加 设定好的分数据 write_1602(er2+6)。 //因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 break。 case 7:miao++。 if(miao=60) miao=0。 //秒超过 59,再加 1,就归零 write_sfm(0x08,miao)。 //令 LCD 在正确位置显示 加 设定好的秒数 write_1602(er0x02+0x09)。 //因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 // write_1602(0x0b)。 break。 } 20 } } //减键 key3,各句功能参照 39。 加键 39。 注释 if(key==7) { buzzer=0。 //蜂鸣器短响一次 delay(20)。 buzzer=1。 switch(key1n) { case 1:nian。 ri=1。 write_nyr(9,ri)。 if(nian==1) nian=99。 write_nyr(3,nian)。 write_1602(yh+4)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 2:yue。 ri=1。 write_nyr(9,ri)。 //令 LCD在正确的位置显示 加 设定好的日期数据 if(yue==0) yue=12。 write_nyr(6,yue)。 write_1602(yh+7)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 3:ri。 run=nian%4。 if(run==0) {} else {run=1。 } switch(yue) {case 1 : if(ri==0) ri=31。 break。 case 2 : if(run==0) {if(ri==0) ri=29。 break。 } else {if(ri==0) ri=28。 break。 } case 3 : if(ri==0) ri=31。 break。 case 4 : if(ri==0) ri=30。 break。 case 5 : if(ri==0) ri=31。 break。 case 6 : if(ri==0) ri=30。 break。 case 7 : if(ri==0) ri=31。 break。 21 case 8 : if(ri==0) ri=31。 break。 case 9 : if(ri==0) ri=30。 break。 case 10: if(ri==0) ri=31。 break。 case 11:if(ri==0) ri=30。 break。 case 12:if(ri==0) ri=31。 break。 default:break。 } write_nyr(9,ri)。 write_1602(yh+10)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 4:week。 if(week==0) week=7。 write_1602(yh+0x0C)。 //指定 39。 加 39。 后的周数据显示位置 write_week(week)。 //指定周数据显示内容 write_1602(yh+0x0e)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 5:shi。 if(shi==1){ shi=23。 } write_sfm(2,shi)。 write_1602(er2+3)。 //因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break。 case 6:fen。 if(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。