题目基于stc12c5a16s2单片机的电子万年历和温度采集系统设计内容摘要:

or , . [18] 朱路 . 连续补充充电实时时钟芯片 DS1302 及其应用 [J]. 现代电子技术 , :116118. [19] 白雪宇 . 小热电 DCS 控制系统研究 [D]. 长春理工大学 ,2020 [20] 于永学 ,葛建 . 1Wire 总线数字温度传感器 DS18B20 及应用 [J]. 电子产品世界 .2020(24). Electronic calendar and temperature acquisition system design based on STC12C5A16S2 microcontroller Abstract: Microcontroller is a high integration, high reliability, small size, low power consumption, lowcost microprocessors, has been widely used in various occasions. This paper using the electronic calendar of the MCS51 series microcontroller STC12C5A16S2 designcentric device, described in detail the principle of singlechip control, LCD display principle, principle of operation of the temperature sensor and timely clock control principle. The system has a calendar clock and temperature display can accurately show the year, month, week, day, hours, minutes, seconds and temperature, you can make flexible use of the key line tone. Keyword: MCU of STC12C5A16S2; DS1302; liquid crystal display; DS18B20 12 附录 附录Ⅰ 电子万年历 电路原理图和 PCB 电路板 附图 1 电子万年历 电路原理图 附图 2 电子万年历 PCB 图 13 附录Ⅱ 电子万年历程序 1.电子万年历主程序 +键盘扫描程序 /******************************************/ /*******文件名称:电子万年历主程序 +键盘扫描 ****/ /*******完成日期: 2020 年 11 月 8 日 ************/ /*******修改日期 : 2020 年 2 月 29 日 *************/ /*******作者:杨富 *************************/ /******************************************/ include include include include include include include sbit k1=P1^0。 //按键端口定义 sbit k2=P1^1。 sbit k3=P1^2。 sbit k4=P1^3。 define uchar unsigned char define uint unsigned int uchar key1=0,key2=0,key3=0。 /***函数名称:键盘消抖延时 ************/ /***入口参数: uint Z******************/ /***函数功能:短暂延时,去除键盘抖动 **/ void delayK(uint z) { uint x,y。 for(x=z。 x0。 x) for(y=110。 y0。 y)。 } /***函数名称:键盘管理程序 *****/ /***函数功能:扫面按键,设定 ***/ /******************************/ void key() { uchar nian=0,yue=0,ri=0,zhou=0,xiaoshi=0,fenzhong=0,miao=0。 if(!k1) //功能选择 { delayK(20)。 //按键消抖 if(!k1) { lcd_pos(4,1)。 //显示设置提示 lcd_wdat(DIS7[0])。 //设 lcd_wdat(DIS7[1])。 lcd_wdat(DIS7[2])。 //置 lcd_wdat(DIS7[3])。 lcd_wdat(DIS3[1])。 // lcd_wdat(DIS3[2])。 // key1++。 if(key1==8) 14 key1=1。 switch(key1) //进行设定功能选择 { case 1: { lcd_pos(4,4)。 //年 lcd_wdat(DIS7[4])。 lcd_wdat(DIS7[5])。 }。 break。 case 2: { lcd_pos(4,4)。 //月 lcd_wdat(DIS7[6])。 lcd_wdat(DIS7[7])。 }。 break。 case 3: { lcd_pos(4,4)。 //日 lcd_wdat(DIS7[10])。 lcd_wdat(DIS7[11])。 }。 break。 case 4: { lcd_pos(4,4)。 //周 lcd_wdat(DIS7[8])。 lcd_wdat(DIS7[9])。 }。 break。 case 5: { lcd_pos(4,4)。 //时 lcd_wdat(DIS7[12])。 lcd_wdat(DIS7[13])。 }。 break。 case 6: { lcd_pos(4,4)。 //分 lcd_wdat(DIS7[14])。 lcd_wdat(DIS7[15])。 }。 break。 case 7: { lcd_pos(4,4)。 //秒 lcd_wdat(DIS7[16])。 lcd_wdat(DIS7[17])。 }。 break。 } //end switch } //end if1 while(k1==0)。 //等待按键释放 } // end if(k1) if(!k2) //增加键控制 { delayK(200)。 if(!k2) { if (key1 == 1) //如果选择年 { nian=((now[6]4)amp。 0x0F)*10 + (now[6]amp。 0x0F)。 //将年的 BCD 码转换为十进制数 15 nian++。 if (nian == 100) { nian = 0。 } if (nian 0) { nian = 99。 } now[6]=((nian/10)4)|(nian%10)。 //将年的十进制数转换为 BCD 码 DS1302_WriteData(0x8e, 0x00)。 //允许写操作 DS1302_WriteData(0x8c, now[6])。 DS1302_WriteData(0x8e, 0x80)。 //写保护 } if (key1 == 2) //如果选择月 { yue=((now[4]4)amp。 0x0F)*10 + (now[4]amp。 0x0F)。 //将月的 BCD 码转换为十进制数 yue++。 if (yue == 13) { yue = 1。 } if (yue == 0) { yue = 12。 } now[4]=((yue/10)4)|(yue%10)。 //将月的十进制数转换为 BCD 码 DS1302_WriteData(0x8e, 0x00)。 //允许写操作 DS1302_WriteData(0x88, now[4])。 DS1302_WriteData(0x8e, 0x80)。 //写保护 } if (key1 == 3) //如果选择日 { ri=((now[3]4)amp。 0x0F)*10 + (now[3]amp。 0x0F)。 //将日的 BCD 码转换为十进制数 ri++。 if (ri == 32) { ri = 1。 } if (ri == 0) { ri = 31。 } now[3]=((ri/10)4)|(ri%10)。 //将日的十进制数转换为 BCD 码 DS1302_WriteData(0x8e, 0x00)。 //允许写操作 DS1302_WriteData(0x86, now[3])。 DS1302_WriteData(0x8e, 0x80)。 //写保护 } if (key1 == 4) //如果选择星期 { zhou=((now[5]4)amp。 0x0F)*10 + (now[5]amp。 0x0F)。 //将星期的 BCD 码转换为十进制数 zhou++。 if (zhou == 8) { zhou = 1。 } switch(zhou) { 16 case 1: now[5]=0x01。 break。 case 2: now[5]=0x02。 break。 case 3: now[5]=0x03。 break。 case 4: now[5]=0x04。 break。 case 5: now[5]=0x05。 break。 case 6: now[5]=0x06。 break。 case 7: now[5]=0x07。 break。 } DS1302_WriteData(0x8e, 0x00)。 //允许写操作 DS1302_WriteData(0x8a, now[5])。 DS1302_WriteData(0x8e, 0x80)。 //写保护 } if (key1 == 5) //如果选择小时 { xiaoshi=((now[2]4)amp。 0x0F)*10 + (now[2]amp。 0x0F)。 //将小时的 BCD 码转换为十进制数 xiaoshi++。 if (xiaoshi == 24) { xiaoshi = 0。 } now[2]=((xiaoshi/10)4)|(xiaoshi%10)。 //将小时的十进制数转换为 BCD 码 DS1302_WriteData(0x8e, 0x00)。 //允许写操作 DS1302_WriteData(0x84, now[2])。 DS1302_WriteData(0x8e, 0x80)。 //写保护 } if (key1 == 6) //如果选择分钟 { fenzhong=((now[1]4)amp。 0x0F)*10 + (now[1]amp。 0x0F)。 //将 时的 BCD 码转换为十进制数 fenzhong++。 if (fenzhong == 60) { fenzhong = 0。 } now[1]=((fenzhong/10)4)|(fenzhong%10)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。