基于mcs51单片机的闹钟提醒器设计报告(编辑修改稿)内容摘要:

Addr,*pClock)。 /* 秒 分 时 日 月 星期 年 */ pClock++。 ucAddr +=2。 } W1302(0x8e,0x80)。 /* 控制命令 ,WP=1,写保护 */ } /*开机显示 */ void display1(void) { uchar i。 uchar code dis[4]=week。 uchar code p1[16]=Name:Chen haomin。 uchar code p2[16]= No:1008030204。 delay(1000)。 for(i=0。 i16。 i++) { lcd_wcmd(0x80|i)。 lcd_wdat(p1[i])。 } for(i=0。 i16。 i++) { lcd_wcmd(0xc0|i)。 lcd_wdat(p2[i])。 } delay_4s()。 lcd_init()。 delay(1000)。 delay(1000)。 lcd_wcmd(0x80)。 //2 lcd_wdat(0x32)。 lcd_wcmd(0x81)。 //0 lcd_wdat(0x30)。 for(i=0。 i4。 i++) { 淮南师范学院 电气信息工程学院 电子信息工程专业 Proteus 课程论文 第 12 页 delay(10)。 lcd_wcmd(0x80|i+0x0b)。 lcd_wdat(dis[i])。 } } /*显示部分 */ void disp(void) { /*显示时间 */ lcd_wcmd(0x82)。 lcd_wdat(R1302(0x8d)/16+0x30)。 //年 lcd_wcmd(0x83)。 lcd_wdat(R1302(0x8d)%16+0x30)。 lcd_wcmd(0x84)。 // lcd_wdat(45)。 lcd_wcmd(0x85)。 lcd_wdat(R1302(0x89)/16+0x30)。 //月 lcd_wcmd(0x86)。 lcd_wdat(R1302(0x89)%16+0x30)。 lcd_wcmd(0x87)。 // lcd_wdat(45)。 lcd_wcmd(0x88)。 lcd_wdat(R1302(0x87)/16+0x30)。 //日 lcd_wcmd(0x89)。 lcd_wdat(R1302(0x87)%16+0x30)。 lcd_wcmd(0x8a)。 lcd_wdat(32)。 lcd_wcmd(0x8f)。 lcd_wdat(R1302(0x8b)%16+0x30)。 //星期 lcd_wcmd(0xc0)。 lcd_wdat(R1302(0x85)/16+0x30)。 //时 lcd_wcmd(0xc1)。 lcd_wdat(R1302(0x85)%16+0x30)。 //lcd_wcmd(0xc2)。 //: //lcd_wdat(58)。 lcd_wcmd(0xc3)。 lcd_wdat(R1302(0x83)/16+0x30)。 //分 lcd_wcmd(0xc4)。 lcd_wdat(R1302(0x83)%16+0x30)。 //lcd_wcmd(0xc5)。 //lcd_wdat(58)。 //: lcd_wcmd(0xc6)。 淮南师范学院 电气信息工程学院 电子信息工程专业 Proteus 课程论文 第 13 页 lcd_wdat(R1302(0x81)/16+0x30)。 //秒 lcd_wcmd(0xc7)。 lcd_wdat(R1302(0x81)%16+0x30)。 /*显示闹钟 */ lcd_wcmd(0xcb)。 lcd_wdat(alarm_temp[1]/10+0x30)。 //时 lcd_wcmd(0xcc)。 lcd_wdat(alarm_temp[1]%10+0x30)。 lcd_wcmd(0xcd)。 lcd_wdat(58)。 lcd_wcmd(0xce)。 lcd_wdat(alarm_temp[0]/10+0x30)。 //分 lcd_wcmd(0xcf)。 lcd_wdat(alarm_temp[0]%10+0x30)。 //秒 } /*系统设置 */ void sys_set(void) { uchar i,j。 uchar key_state=0。 TR0=0。 //停止闪烁,显示 : lcd_wcmd(0xc2)。 lcd_wdat(58)。 lcd_wcmd(0xc5)。 lcd_wdat(58)。 while(key_break) { if(!key_set) //adjust the key state { delay(10000)。 if(!key_set) while(!key_set)。 key_state++。 if(key_state==9) key_state=0。 } switch(key_state)//调整时间时,需要的时候再读出各寄存器的值,以完成调整时间的要求 //虽然会浪费一定的空间,但能保证较快地响应请求 //在每次读出数据后应将 bcd 码转化为 16 进制数,调整完成后,再将 16 进制数转化为 bcd 码,最后给 ds1302 送数 { case 0://时钟 秒调整 time_temp[0] 淮南师范学院 电气信息工程学院 电子信息工程专业 Proteus 课程论文 第 14 页 lcd_wcmd(0xc8)。 lcd_wdat(67)。 //c lcd_wcmd(0xc9)。 lcd_wdat(45)。 // lcd_wcmd(0xca)。 lcd_wdat(83)。 //s time_temp[0]=R1302(0x81)。 //读出秒寄存器 time_temp[0]=time_temp[0]/16*10+time_temp[0]%16。 //转化为 16 进制数 if(!key_add) { delay(10000)。 if(!key_add) { while(!key_add)。 time_temp[0]++。 if(time_temp[0]==60) time_temp[0]=0。 } } if(!key_sub) { delay(10000)。 if(!key_sub) { while(!key_sub)。 time_temp[0]。 if(time_temp[0]==255) time_temp[0]=59。 } } W1302(0x8e,0x00)。 W1302(0x80,time_temp[0]/10*16+time_temp[0]%10)。 W1302(0x8e,0x80)。 break。 case 1://时钟 分调整 lcd_wcmd(0xc8)。 lcd_wdat(67)。 //c lcd_wcmd(0xc9)。 lcd_wdat(45)。 // lcd_wcmd(0xca)。 lcd_wdat(77)。 //m time_temp[1]=R1302(0x83)。 //读出分寄存器 time_temp[1]=time_temp[1]/16*10+time_temp[1]%16。 if(!key_add) //++ 淮南师范学院 电气信息工程学院 电子信息工程专业 Proteus 课程论文 第 15 页 { delay(10000)。 if(!key_add) { while(!key_add)。 time_temp[1]++。 { if(time_temp[1]==60) time_temp[1]=0。 } } } if(!key_sub) // { delay(10000)。 if(!key_sub) { while(!key_sub)。 time_temp[1]。 { if(time_temp[1]==255) time_temp[1]=59。 } } } W1302(0x8e,0x00)。 W1302(0x82,time_temp[1]/10*16+time_temp[1]%10)。 W1302(0x8e,0x80)。 break。 case 2://时钟 时调整 lcd_wcmd(0xc8)。 lcd_wdat(67)。 //c lcd_wcmd(0xc9)。 lcd_wdat(45)。 // lcd_wcmd(0xca)。 lcd_wdat(72)。 //h time_temp[2]=R1302(0x85)。 //读出时寄存器 time_temp[2]=time_temp[2]/16*10+time_temp[2]%16。 if(!key_add) //++ { delay(10000)。 if(!key_add)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。