基于单片机的万年历_课程设计内容摘要:

但由于虚焊导致其并无电气连接,只能对焊脚进行在加工直到解决问题。 电路工作一段时间之后有的芯片发热严重。 经查发现原来是有尖锐的管脚刺破邻近的漆包线造成短路,断掉该线并再次连接可解决问题。 由于本系统涉及到多个子程序,多个芯片的编程。 首先必须对可编程芯片的控制字即其控制指令要熟记于心。 其次,芯片很多都有时钟输入端,需要晶振支持。 对芯片的读写都需要在相应的触发沿到来时才能进行。 由于 DS18B20 是串行通信数据,只用一个口线传输,在处理采集的模拟信号时需要一定的时间,会对延时有较高要求。 所以在调用温度子程序时,先关闭定时器 1 中断允许,在温度子程序反回时再打开定时器 1 中断允许。 以上所述即是电子万年历的设计全过程, [1] 王静霞 杨宏丽 刘俐 单片机应用技术( C 语言版) 电子工业出版社 [2] 朱清慧 张凤蕊 翟天嵩 proteus 教程――电子线路设计、制版与仿真 清华大学出版社 [3] 郭天袢 51 单片机 C 语言教程――入门、提高、开发、拓展全攻略 电子工业出版社 网络支持 百度 百度文库 电子发烧友论坛 电子工程世界网 附录:程序 /* 带农历万年历时钟程序 单 片 机: STC89C52RC 晶 振: 12MHz 时钟芯片: DS1302 液 晶 屏: LCM12864ks0108 温度传感器 ds18b20 功能描述 : 大数字显示时间。 能显示农历、温度。 有整点报时功能 红外遥控和按键都能设置时间 /* sbit key_beep P3^4 蜂鸣器 低电平有效 systemtime sys 系统日 期 NLDATA nldata 农历日期 */ include include include include include include include include include /*************************** 初 始 化 日 期*****************************/ void cal_init //时间为 BCD 码 0x13。 0x06。 0x04。 0x23。 0x59。 0x00。 0x06。 void init cal_init。 //初设时间 settime sys。 //初设时间送进 ds1302 gettime amp。 sys。 //ds1302 取得时间给结构体 LCD_init。 //初始化液晶 总大小为 48*84 像素 LCD_clear。 //LCD 清屏 void init_T0 EA 1。 ET0 1。 TMOD 0X01。 TR0 1。 TH0 6553650000 /256。 TL0 6553650000 %256。 void disp_lcd uchar i,j。 gettime amp。 sys。 //从 ds1302 中取时间 i。 //取时间的十位 j %10。 //取时间的个位 yw_disp 2*6,0,ying[2],year_flag。 yw_disp 3*6,0,ying[0],year_flag。 yw_disp 4*6,0,ying[i],year_flag。 yw_disp 5*6,0,ying[j],year_flag。 yw_disp 6*6,0,ying[14],Y。 i。 j %10。 yw_disp 7*6,0,ying[i],month_flag。 yw_disp 8*6,0,ying[j],month_flag。 yw_disp 9*6,0,ying[14],Y。 //显示 i。 j %10。 yw_disp 10*6,0,ying[i],day_flag。 yw_disp 11*6,0,ying[j],day_flag。 i。 hz_disp 4*12,4,Dayname[15],Y。 //显示周 hz_disp 5*12,4,Dayname[16],Y。 if i 7 hz_disp 6*12,4,Dayname[14],Y。 else hz_disp 6*12,4,Dayname[i],Y。 i。 j %10。 yw_disp 0*6,1,ying[i],hour_flag。 yw_disp 1*6,1,ying[j],hour_flag。 yw_disp 2*6,1,ying[15],Y。 i。 j %10。 yw_disp 3*6,1,ying[i],minute_flag。 yw_disp 4*6,1,ying[j],minute_flag。 yw_disp 5*6,1,ying[15],Y。 i。 j %10。 yw_disp 6*6,1,ying[i],second_flag。 yw_disp 7*6,1,ying[j],second_flag。 /**************************** 显 示 农 历*******************************/ void disp_noli uchar i,j。 Conversion 0,。 //把公历转成农历 i。 hz_disp 0*12,4,Minname[i1],Y。 hz_disp 1*12,4,Minname[12],Y。 //显示月 i。 j %10。 //把廿十换成二十 if 20 hz_disp 2*12,4,Dayname[2],Y。 hz_disp 3*13,4,Dayname[0],Y。 else if 10 //把十十换成初十 hz_disp 2*12,4,Dayname[10],Y。 hz_disp 3*12,4,Dayname[0],Y。 else hz_disp 2*12,4,Dayname[i+10],Y。 hz_disp 3*12,4,Dayname[j],Y。 /******************** 显示温度(可以半个小时更新一次)**********************/ void disp_ds18b20 //显示温度(可以半个小时更新一次) gettemp。 //温度转换函数 yw_disp 9*6,1,ying[10],Y。 //显示温度图标 yw_disp 10*6,1,ying[temp[0]],Y。 //十位 yw_disp 11*6,1,ying[temp[1]],Y。 yw_disp 12*6,1,ying[11],Y。 yw_disp 13*6,1,ying[13],Y。 void main init。 init_T0。 It_in。 while 1 scan_key。 //按键扫描函数 serve_key1。 disp_lcd。 disp_noli。 disp_ds18b20。 void T0_INT void interrupt 1 TH0 6553650000 /256。 TL0 6553650000 %256。 //50ms if key1_se ~key1 || key_eq 1 //设置键 key1_se key1。 //以后 key_eq 0。 state_flag 1。 if key2_se ~key2 || key_add 1 //加键 key2_se key2。 key_add 0。 inc_flag 1。 //time add inc1_flag 1。 //clock add if key3_se ~key3 || key_sub 1 //减键 key3_se key3。 key_sub 0。 dec_flag 1。 //time sub dec1_flag 1。 key_beep 1。 //colck sub if key4_se ~key4 //闹钟键 key4_se key4。 clo_flag 1。 //colck sub void IR_IN interrupt 0 using 0 unsigned char i,j,k,N 0。 EA 0。 I1: for i 0。 i 4。 i++ if IRIN 0 break。 if i 3 EA 1。 return。 delayms 20。 if IRIN 1 goto I1。 //确认 IR 信号出现 while !IRIN //等 IR 变为高电平 delayms 1。 for j 0。 j 4。 j++ for k 0。 k 8。 k++ while IRIN //等 IR 变为低电平 delayms 1。 while !IRIN //等 IR 变为高电平 delayms 1。 while IRIN //计算 IR 高电平时长 delayms 1。 N++。 if N 30 EA 1。 return。 IRCOM[j] IRCOM[j] 1。 if N 8 IRCOM[j] IRCOM[j] | 0x80。 N 0。 //end for k //end for j if IRCOM[2]! ~IRCOM[3] EA 1。 return。 IRCOM[5] IRCOM[2] amp。 0x0F。 IRCOM[6] IRCOM[2] amp。 0xF0。 IRCOM[6] IRCOM[6] 4。 key_beep 0。 /* 红外编码处理 */ switch IRCOM[2] case 0x16: key_0 1。 break。 //0 case 0x0c: key_1 1。 break。 //1 case 0x18: key_2 1。 break。 //2 case 0x5e: key_3 1。 break。 //3 case 0x08: key_4 1。 break。 //4 case 0x1c: key_5 1。 break。 //5 case 0x5a: key_6 1。 break。 //6 case 0x42: key_7 1。 break。 //7 case 0x52: key_8 1。 break。 //8 case 0x4a: key_9 1。 break。 //9 case 0x45: key_chs 1。 break。 //CH case 0x46: key_ch 1。 break。 //CH case 0x47: key_cha 1。 break。 //CH+ case 0x44: key_fa 1。 break。 //快退 case 0x40: key_sp 1。 break。 //快进 case 0x43: key_play 1。 break。 //播放 case 0x07: key_sub 1。 break。 // case 0x15: key_add 1。 break。 //+ case 0x09: key_eq 1。 break。 //EQ case 0x19: key_100 1。 break。 //100 case 0x0d: key_200 1。 bre。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。