基于单片机的万年历_课程设计内容摘要:
但由于虚焊导致其并无电气连接,只能对焊脚进行在加工直到解决问题。 电路工作一段时间之后有的芯片发热严重。 经查发现原来是有尖锐的管脚刺破邻近的漆包线造成短路,断掉该线并再次连接可解决问题。 由于本系统涉及到多个子程序,多个芯片的编程。 首先必须对可编程芯片的控制字即其控制指令要熟记于心。 其次,芯片很多都有时钟输入端,需要晶振支持。 对芯片的读写都需要在相应的触发沿到来时才能进行。 由于 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。基于单片机的万年历_课程设计
相关推荐
外探测器 微波探测器 AT89C51 Alam0 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 共 50 页 第 8 页 1. 热释电效应 热释电效应是指如果使某些强介电质材料 (如钦酸钡、钛锆酸铅 (PZT)等 )的表面温度发生变化,则随着温度的上升或下降,材料表面发生极化
活率以及生长发育和生产性能。 所以一定要重视孵化,了解和掌握孵化的原理、胚胎发育过程中各阶段对外界条件的要求。 孵化条件 胚胎发育所需要的条件有温度、湿度、通风、翻蛋、凉蛋等。 1温度条件 温度是孵化过程中最重要的条件。 保证胚胎正常发育所需的适宜温度,才能获得高孵化率和优质雏鸡。 孵化期间出现高温,胚胎发育增快,孵化期缩短,胚胎死亡率增加,初生雏鸡质量下降 (王超, 1999)。
有两个, I/O 口线 则 有 32 个。 完全能够满足设计的要求,并且价格低廉用起来也很方便简单。 23 图 89C51 单片机 、 AT89C51 单片机的主要特性 与 MCS51 兼容 4K 字节可编程 FLASH 存储器 寿命: 1000 写 /擦循环 数据保留时间: 10 年 全静态工作: 0Hz24MHz 1288 位内部 RAM 32 可编程 I/O 线 两个 16 位 定时
进行采集并转换成数字信号, 再 用单片机 STC89C52 进行数据分析和处理,为显示电路提供信号。 实验证明该设计系统实现了对环境温湿度精确检测,达到了相应的效果,具有一定的实用价值。 教师提问及学生回答: DHT11 传感器输出的信号是模拟信号还是数字信号。 答:数字信号。 答:传感器( DHT11) ,单片机( STC89C52),显示(字符型 LCD1602 三个部分) ? 答
dings, industry。 microputers embedded control system as the main and core, instead of the traditional control System of conventional electronic circuits. At the same time the development of
和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。 其中, 中央处理器 CPU 是整个单片机的核心部件,是 8 位数据宽度的处理器,能处理 8 位二进制数据或代码, CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 8751 内部有 128 个 8 位用户数据存储单元和 128 个专用寄存器单元,它们是统一编址的