1、多功能万年历电子设计竞赛设计报告题 目 多功能万年历 学生姓名 指导教师 时 间 2010年1月目录摘要 1一 方案论证与分析11.1 微控制部分论证与分析11.2 日历时钟论证与分析21.3 键盘控制模块论证与分析21.4 显示模块论证与分析21.5 温度检测模块论证与分析21.6 声音发生模块分析与论证3二 系统硬件设计32.1 系统总体设计32.2 日历时钟模块设计42.3 温度检测模块设计52.4 显示模块设计52.5 键盘发声装置设计6三 系统软件设计6四 系统测试84.1 测试仪器及设备74.2 功能测试74.2.1 基本功能测试74.2.2 发挥部分功能测试7五. 结论8六 附录
2、8摘要为了满足多功能万年历的设计要求,进行了各单元电路方案的比较论证及确定,系统ATMEL公司的AT89C52单片机作为控制核心。定时器系统采用比较容易控制并且自带电源的价格低廉的DS1302作为核心核心器件。系统显示部分选用LCD1602液晶显示,低功耗,长寿命,编程容易,美观大方。增加了温度用18B20检测与实时监控显示、开机欢迎界面显示和可调闹钟的铉铃声,懒人模式,语音报时五个个功能。关键词:AT89C52 DS1302 万年历 温度检测 液晶显示Abstract: In order to satisfy the design requirements of multi-function
3、 calendar, each unit circuit scheme comparison demonstration and determine ATMEL company, the system of AT89C52 single chip computer as control core. Timer system adopts relatively easy to control and power supply of cheap cabin DS1302 as core core device. System shows partial choose graphics dot-ma
4、trix LCD 16 * 02 dot matrix display, serial interface, programming easy, beautiful and dignified. Increased with temperature 18B20 detection and real-time monitoring display, boot welcome screen display and adjustable alarm bell, Xuan dawdler mode 5 each function.Keywords: AT89C52, DS1302, calendar
5、temperature detecting, liquid crystal display (LCD)一方案论证与分析本题要求设计并制作一个多功能万年历。实现年月日时分秒的液晶显示,定时功能的实现,以及其他一些扩展功能,上述各模块的方案论证如下:1.1 微控制器模块论证与分析 方案一:采用Atmel公司出产的AT89C52单片机。51单片机价格便宜,应用广泛,编程方便可以很简单的实现题目要求,如果系统需要增加语音播报功能,还需外接语音芯片,实现较为复杂。 方案二:采用SPCE061A单片机来实现,此单片机内置8路10位ADC和2路DAC,避免了外接A/D转换芯片和D/A转换芯片,并且I/O接口
6、比较多,易于扩展外围电路,开发板集成了语音播报的硬件,通过软件编程即可以用于语音采集和播报。但是很多功能在本次设计中都没有用到。 所以综合考虑成本与本体要求选择方案一1.2 日历时钟论证与分析 方案一:(DS1302) 这个是美国DALLAS公司推出的一种高性能,低功耗的实时时钟芯片,可以提供秒、分、时、日、星期、月、年,月份少的自动调整,同时也具有闰年补偿功能。很适合这个题目的要求。方案二:(51单片机内部时钟) 直接通过编程,利用内部中断来进行定时操作,对硬件的要求比较少,但是对程序的要求比较高,而且精确度达不到指定的要求,所以不能在这里使用。综上所述选择DS1302作为日历的时钟1.3键
7、盘控制模块论证与分析方案一:采用矩阵键盘进行编程和控制操作,可利用的键盘个数满足要求,而且占用的单片机端口相对较少,利用率高,对于扩展功能提供发展空间。方案二:独立键盘,占用的端口较多,数量有限,所以在这个题目中不选择这个方案。所以综上所述,为了更好的实现功能选择方案一1.4 显示模块论证与分析 方案一:用LED进行显示。数码管由于显示速度快,对环境要求低,使用简单,显示效果简洁明了而得到了广泛应用,但是耗能高,显示单一在这里不予采用。方案二:LCD1602液晶显示设备功能相对强大,它既能显示数字和文字,甚至可以显示部分图形信息,功耗低,寿命长,稳定性很好,在这里作为万年历的显示器很适合。方案
8、三:128*64液晶显示。这个显示器可以显示文字,图片等,显示的内容比较丰富,但是编程要求较高,成本也相对高处很多。综合考虑选择方案二作为显示模块。1.5 温度检测模块论证与分析方案一:热电偶测温 热电偶是温度测量中最广泛应用的一种传感器,在一般的测量和控制中,常用于高温的温度检测,在测量中需要冷端补偿,在数字电子中实现不方便方案二:热电阻测温度 人电阻测量温度,精度和灵敏度都还是可以的,但是它的电阻值与温度的线性关系不是很好,不便于数字的方法处理方案三:DS18B20测温 DS18B20具有零待机功耗,独特的单线接口方式,在微处理器连接时仅仅需要一条口线就可以实现微处理器与DS18B20的双
9、向通信,成本相对较低,方便使用综上所述最终选择方案三作为温度传感器1.6 声音发生模块分析与论证方案一:采用蜂鸣器。蜂鸣器一般是高阻,直流电阻无限大,交流阻抗也很大;但发声的频带很窄,需要6V以上较大的电压来驱动;而且声音脉冲脉宽较窄,脉冲周期较小时,蜂鸣器还会漏掉部分声音脉冲信号。方案二:采用小喇叭。小喇叭应用灵活,可以用各种频率的信号发声,对于短周期脉冲依旧能发出声音,且驱动电压只需5V。综上所述,我们决定采用方案二。二 系统硬件设计2.1 系统总体设计 本系统以AT89C52为控制核心通过LCD1602进行实时显示,处理器接受两个芯片出书的实时数据,通过数据处理控制蜂鸣器并且显示相应的时
10、间,按键模块随时可以进行手动调整。程序流程图见上图 中央处理器选用的是AT89C52单片机,其原理图电路如下: 其中包括单片机的最小电路11.0592MHz 的晶振,以及下载程序必备的烧程序的接口,以及上拉电阻和复位电路的连接方式。89C52单片机功耗相对低,具有8K字节在系统可编程Flash储存器,支持在线编程,调试方便2.2 日历时钟模块设计 本系统采用的是DS1302作为时钟芯片,它与单片机的连接仅需要三根线:CE引脚、SCLK时钟引脚、I/O串行数据引脚,另外Vcc2是外接备用电源,外接32.768Hz的晶振,为芯片提供计时脉冲,芯片内部带有寄存器。其原理图及在电路中的接线方式见下图:
11、 2.3 温度检测模块设计 本系统采用DS18B20作为温度传感器,支持“一线总线”接口,测温范围为-55+125摄氏度,精确度在-10到85摄氏度内0.5摄氏度,抗干扰能力强体积小,灵活,价格便宜GND接地,输入输出操作,VCC电源。与处理器的连接方式如图:2.4 显示模块设计 液晶显示选用的是LCD1602液晶显示屏,接线方式如右图所示。具体管脚图件附录 2.5 键盘声音发生装置设计 键盘采用的是四成四矩阵键盘原理图如下: 喇叭送用的是如下图连接:三 系统软件设计 经过我们的分析得到如下结论,要使整个系统稳定且高效的运行,则程序之间的配合要达到互不干扰的程度,严格按照芯片的驱动程序对各个芯
12、片经行初始化,进而进行控制。总的程序框图如右图所示: 四系统测试4.1 测试仪器及设备 仪器名称型号数量数字万用表DT9205N1数字示波器JC2042M1秒表AS87C1温度计水银温度计1手表14.2 功能测试4.2.1 基本功能测试 这个系统所有的几本功能是实现多功能万年历,液晶屏显示正常,闹钟按时响,按键可以控制还有就是,时间准确无误等.我们一共做了五组实验结果如下: 项目次数秒表时间与万年历时间差液晶屏显示是否出现差错按键调整过程中是否出错闹钟时间与表规定时间差闹钟鸣叫时间10.3否否1.26020.3否否0.86030.5否否1.15940.5否否1.06150.4否否0.560注意
13、:单位都是秒,且每次记录测试间隔十二分钟,最后一项多次重启后测得4.2.2 发挥部分功能测试 这个系统的发挥部分包括,蜂鸣器的声音调节,欢迎界面的显示,以及温度实时监控。次数1234实际温度15171319显示温度16.116.913.118.7 通过检测发现我们这个系统的稳定性还比较好,基本完成了要求的任务,并且有了部分创新。五. 结论 本系统以51单片机芯片为核心部件,DS18B20传感器和DS1302芯片的使用为辅助,使我们的多功能万年历实现了,时分秒甚至是年月日的精确显示,在某种程度上起到了闹钟的作用并且可以在误差允许的范围内实时监控环境温度。我们的万年历能够完成基本部分和部分发挥部分
14、的要求。还可以利用SPCE061A语音功能,使系统更加生动(还在开发中)。 在这几天中,我们遇到许许多多难题,通过本组成员的努力,及老师和同学的帮助大体得以解决。这几天的设计竞赛,增强了实践能力和协作精神,懂得了联系实际的重要性。我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请各位老师批评指正。六 附录6.1 参考资料1 谭博学,苗汇静.集成电路原理及应用(第2版).北京:电子工业出版社,2008.2姜志海,赵艳雷.单片机的C语言程序设计与应用.北京电子工业出版社,2008 3 黄智伟.全国大学生电子设计竞赛制作实训 北京航空航天大学出版社,2007.4. 童诗白,华成英。模
15、拟电子技术基础。北京:高等教育出版社,20035谭浩强. C语言程序设计(第二版). 北京:清华大学出版社,20006.2LCD1602液晶屏个管脚6.3 DS18B20程序流图64部分程序#include #include #define uint unsigned int #define uchar unsigned char #define nop() _nop_() sbit DQ =P35; /定义DS18B20通信端口 sbit speak = P27; sbit lcd_rs_port = P17; /*定义LCD的控制端口*/ sbit lcd_rw_port = P16; s
16、bit lcd_en_port = P24; #define lcd_data_port P0 sbit k1 = P10; sbit k2 = P11; sbit k3 = P12; sbit k4 = P13; uchar num2,num3 = 0; uchar data num4 =0x00,num1 = 0x00; sbit T_CLK = P14; sbit T_IO = P15; sbit T_RST = P22; sbit ACC0 = ACC0; sbit ACC7 = ACC7; uchar code dis1 = Welcome to SDUT; uchar code d
17、is2 = Designed by lxy; uchar code dis3 = Now begin the; uchar code dis4 = Calendar. ; /*格式为: 0 1 2 3 4 5 6*/ uchar z_y8 = 1,1, 1, 0, 0, 0, 0,; uchar z_x8 = 6,6, 3, 10, 7, 13, 4,; /*格式为: 分 时 日 月 星期 年 */ /*格式为: 1 2 3 4 5 6 */ uchar code Weeks3=SUN,MON,TUE,WED,THU,FRI,SAT,SUN; uchar data time_data_buff
18、7 = 0x50,0x49,0x23,0x28,0x12,0x02,0x10; uchar data time_buff7 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00; uchar data lcd1602_line1= 2000/00/00 000; uchar data lcd1602_line2= 00:00:00 00.0; uchar data lcd1602_line3= 00:00:00 ; uchar data M = S.; uchar code lcd_data= 0123456789ABCDFG; void delaylong(int ms)
19、 / 长延时子程序 int i; while(ms-) for(i = 0; i 250; i+) _nop_();_nop_();_nop_();_nop_(); /*DS18B20延时函数 大于6微妙*/ void delay1820(unsigned int i) while(i-); /*DS18B20初始化*/ void init_1820() uchar x = 0; DQ = 1; delay1820(8); DQ = 0; delay1820(80); DQ = 1; delay1820(14); x=DQ; delay1820(20); /*DS18B20读数据*/ ucha
20、r R1820(void) uchar Outdat = 0, i = 0; for(i=0;i= 1; DQ = 1; if(DQ) Outdat|=0x80; delay1820(5); return(Outdat); /*DS18B20写数据*/ void W1820(uchar dat) uchar i; for(i=0;i=1; /*DS18B20读温度*/ uint Rtemp(void) uchar a = 0; uchar b = 0; uint t = 0; float tt = 0; init_1820(); W1820(0xcc); W1820(0x44); init_1
21、820(); W1820(0xcc); W1820(0xbe); a = R1820(); /高位和低位的数据 b = R1820(); t = b; t=8; t = t|a; tt = t*0.0625; t = tt*10+0.5; return(t); /*LCD延时*/ void lcd_delay(uchar x) uchar j; while(x-) for(j=0;j250;j+) ; /*LCD写操作*/ void lcd_busy_wait() lcd_rs_port = 0; lcd_rw_port = 1; lcd_en_port = 1; lcd_data_port
22、=0xff; while(lcd_data_port&0x80); lcd_en_port = 0; /*LCD命令写操作*/ void lcd_write_com(uchar com) lcd_busy_wait(); lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = com; lcd_en_port = 1; lcd_en_port = 0; /*LCD字符写操作*/ void lcd_write_data(lcd_dat) lcd_busy_wait(); lcd_rs_port = 1; lcd_rw_
23、port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat; lcd_en_port = 1; lcd_en_port = 0; /*关闭使能端*/ /*LCD初始化函数*/ void lcd_int() lcd_en_port=0; lcd_write_com(0x38); lcd_write_com(0x0f); lcd_write_com(0x06); lcd_write_com(0x01); /*LCD光标位置*/ void lcd_sign(uchar x_pos,y_pos) x_pos &=0x0f; y_pos &=0x01; if(y
24、_pos=1)x_pos +=0x40; x_pos +=0x80; lcd_write_com(x_pos); void delay(uchar k) /*扫描延时*/ uchar g; while(k-) for(g=0;g0;i-) T_IO=ACC0; T_CLK = 1; T_CLK = 0; ACC = ACC1; /*时钟读取字节*/ uchar Outputbyte1302(uchar d) uchar i; ACC=d; for(i=8;i0;i-) ACC = ACC1; ACC7 = T_IO; T_CLK = 1; T_CLK = 0; return(ACC); /*向
25、1302里写入数据*/ void W1302(uchar addr,uchar da) T_RST = 0; T_CLK = 0; T_RST = 1; Inputbyte1302(addr); Inputbyte1302(da); T_CLK = 1; T_RST = 0; /*从1302中读取数据*/ uchar R1302(uchar addr) uchar Data; T_RST = 0; T_CLK = 0; T_RST = 1; Inputbyte1302(addr); Data = Outputbyte1302(); T_CLK = 1; T_RST = 0; return(Da
26、ta); /*设置初始时间*/ void Set1302(uchar *pClock) uchar i; uchar addr = 0x80; EA = 0; W1302(0x8e,0x00); for(i=7;i0;i-) W1302(addr,*pClock); pClock+; addr +=2; W1302(0x8e,0x80); EA = 1; /*设置定时时间*/ void Set1302clock(uchar *setClock) uchar i; uchar addr = 0xc0; EA = 0; W1302(0x8e,0x00); for(i=7;i0;i-) W1302(addr,*setClock); setClock+; addr +=2; W1302(0x8e,0x80); EA = 1; /*读取1302当前时间*/ void Get1302(uchar Curtime) uchar i; uchar a
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1