多功能万年历.docx

上传人:b****8 文档编号:10626838 上传时间:2023-02-22 格式:DOCX 页数:33 大小:421.32KB
下载 相关 举报
多功能万年历.docx_第1页
第1页 / 共33页
多功能万年历.docx_第2页
第2页 / 共33页
多功能万年历.docx_第3页
第3页 / 共33页
多功能万年历.docx_第4页
第4页 / 共33页
多功能万年历.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

多功能万年历.docx

《多功能万年历.docx》由会员分享,可在线阅读,更多相关《多功能万年历.docx(33页珍藏版)》请在冰豆网上搜索。

多功能万年历.docx

多功能万年历

 

电子设计竞赛设计报告

 

题目多功能万年历

学生姓名

指导教师

时间2010年1月

 

目录

摘要………………………………………………………1

一.方案论证与分析…………………………………1

1.1微控制部分论证与分析……………………………1

1.2日历时钟论证与分析………………………………2

1.3键盘控制模块论证与分析…………………………2

1.4显示模块论证与分析………………………………2

1.5温度检测模块论证与分析…………………………2

1.6声音发生模块分析与论证…………………………3

二.系统硬件设计………………………………………3

2.1系统总体设计………………………………………3

2.2日历时钟模块设计…………………………………4

2.3温度检测模块设计…………………………………5

2.4显示模块设计………………………………………5

2.5键盘发声装置设计…………………………………6

三.系统软件设计………………………………………6

四.系统测试……………………………………………8

4.1测试仪器及设备………………………………………7

4.2功能测试………………………………………………7

4.2.1基本功能测试………………………………………7

4.2.2发挥部分功能测试…………………………………7

五.结论…………………………………………………8

六.附录…………………………………………………8

摘要

为了满足多功能万年历的设计要求,进行了各单元电路方案的比较论证及确定,系统ATMEL公司的AT89C52单片机作为控制核心。

定时器系统采用比较容易控制并且自带电源的价格低廉的DS1302作为核心核心器件。

系统显示部分选用LCD1602液晶显示,低功耗,长寿命,编程容易,美观大方。

增加了温度用18B20检测与实时监控显示、开机欢迎界面显示和可调闹钟的铉铃声,懒人模式,语音报时五个个功能。

关键词:

AT89C52DS1302万年历温度检测液晶显示

Abstract:

Inordertosatisfythedesignrequirementsofmulti-functioncalendar,eachunitcircuitschemecomparisondemonstrationanddetermineATMELcompany,thesystemofAT89C52singlechipcomputerascontrolcore.TimersystemadoptsrelativelyeasytocontrolandpowersupplyofcheapcabinDS1302ascorecoredevice.Systemshowspartialchoosegraphicsdot-matrixLCD16*02dotmatrixdisplay,serialinterface,programmingeasy,beautifulanddignified.Increasedwithtemperature18B20detectionandreal-timemonitoringdisplay,bootwelcomescreendisplayandadjustablealarmbell,Xuandawdlermode5eachfunction.

Keywords:

AT89C52,DS1302,calendartemperaturedetecting,liquidcrystaldisplay(LCD)

一.方案论证与分析

本题要求设计并制作一个多功能万年历。

实现年月日时分秒的液晶显示,定时功能的实现,以及其他一些扩展功能,上述各模块的方案论证如下:

1.1微控制器模块论证与分析

方案一:

采用Atmel公司出产的AT89C52单片机。

51单片机价格便宜,应用广泛,编程方便可以很简单的实现题目要求,如果系统需要增加语音播报功能,还需外接语音芯片,实现较为复杂。

方案二:

采用SPCE061A单片机来实现,此单片机内置8路10位ADC和2路DAC,避免了外接A/D转换芯片和D/A转换芯片,并且I/O接口比较多,易于扩展外围电路,开发板集成了语音播报的硬件,通过软件编程即可以用于语音采集和播报。

但是很多功能在本次设计中都没有用到。

所以综合考虑成本与本体要求选择方案一

1.2日历时钟论证与分析

方案一:

(DS1302)

这个是美国DALLAS公司推出的一种高性能,低功耗的实时时钟芯片,可以提供秒、分、时、日、星期、月、年,月份少的自动调整,同时也具有闰年补偿功能。

很适合这个题目的要求。

方案二:

(51单片机内部时钟)

直接通过编程,利用内部中断来进行定时操作,对硬件的要求比较少,但是对程序的要求比较高,而且精确度达不到指定的要求,所以不能在这里使用。

综上所述选择DS1302作为日历的时钟

1.3键盘控制模块论证与分析

方案一:

采用矩阵键盘进行编程和控制操作,可利用的键盘个数满足要求,而且占用的单片机端口相对较少,利用率高,对于扩展功能提供发展空间。

方案二:

独立键盘,占用的端口较多,数量有限,所以在这个题目中不选择这个方案。

所以综上所述,为了更好的实现功能选择方案一

1.4显示模块论证与分析

方案一:

用LED进行显示。

数码管由于显示速度快,对环境要求低,使用简单,显示效果简洁明了而得到了广泛应用,但是耗能高,显示单一在这里不予采用。

方案二:

LCD1602液晶显示设备功能相对强大,它既能显示数字和文字,甚至可以显示部分图形信息,功耗低,寿命长,稳定性很好,在这里作为万年历的显示器很适合。

方案三:

128*64液晶显示。

这个显示器可以显示文字,图片等,显示的内容比较丰富,但是编程要求较高,成本也相对高处很多。

综合考虑选择方案二作为显示模块。

1.5温度检测模块论证与分析

方案一:

热电偶测温热电偶是温度测量中最广泛应用的一种传感器,在一般的测量和控制中,常用于高温的温度检测,在测量中需要冷端补偿,在数字电子中实现不方便

方案二:

热电阻测温度人电阻测量温度,精度和灵敏度都还是可以的,但是它的电阻值与温度的线性关系不是很好,不便于数字的方法处理

方案三:

DS18B20测温DS18B20具有零待机功耗,独特的单线接口方式,在微处理器连接时仅仅需要一条口线就可以实现微处理器与DS18B20的双向通信,成本相对较低,方便使用

综上所述最终选择方案三作为温度传感器

1.6声音发生模块分析与论证

方案一:

采用蜂鸣器。

蜂鸣器一般是高阻,直流电阻无限大,交流阻抗也很大;但发声的频带很窄,需要6V以上较大的电压来驱动;而且声音脉冲脉宽较窄,脉冲周期较小时,蜂鸣器还会漏掉部分声音脉冲信号。

方案二:

采用小喇叭。

小喇叭应用灵活,可以用各种频率的信号发声,对于短周期脉冲依旧能发出声音,且驱动电压只需5V。

综上所述,我们决定采用方案二。

二.系统硬件设计

2.1系统总体设计

 

本系统以AT89C52为控制核心通过LCD1602进行实时显示,处理器接受两个芯片出书的实时数据,通过数据处理控制蜂鸣器并且显示相应的时间,按键模块随时可以进行手动调整。

程序流程图见上图

中央处理器选用的是AT89C52单片机,其原理图电路如下:

其中包括单片机的最小电路11.0592MHz的晶振,以及下载程序必备的烧程序的接口,以及上拉电阻和复位电路的连接方式。

89C52单片机功耗相对低,具有8K字节在系统可编程Flash储存器,支持在线编程,调试方便

 

2.2日历时钟模块设计

本系统采用的是DS1302作为时钟芯片,它与单片机的连接仅需要三根线:

CE引脚、SCLK时钟引脚、I/O串行数据引脚,另外Vcc2是外接备用电源,外接32.768Hz的晶振,为芯片提供计时脉冲,芯片内部带有寄存器。

其原理图及在电路中的接线方式见下图:

2.3温度检测模块设计

本系统采用DS18B20作为温度传感器,支持“一线总线”接口,测温范围为-55~+125摄氏度,精确度在-10到85摄氏度内±0.5摄氏度,抗干扰能力强体积小,灵活,价格便宜GND接地,DQ输入输出操作,VCC电源。

与处理器的连接方式如图:

2.4显示模块设计

液晶显示选用的是LCD1602液晶显示屏,接线方式如右图所示。

具体管脚图件附录

2.5键盘声音发生装置设计

键盘采用的是四成四矩阵键盘原理图如下:

喇叭送用的是如下图连接:

三.系统软件设计

经过我们的分析得到如下结论,要使整个系统稳定且高效的运行,则程序之间的配合要达到互不干扰的程度,严格按照芯片的驱动程序对各个芯片经行初始化,进而进行控制。

总的程序框图如右图所示:

 

四.系统测试

4.1测试仪器及设备

仪器名称

型号

数量

数字万用表

DT9205N

1

数字示波器

JC2042M

1

秒表

AS87C

1

温度计

水银温度计

1

手表

1

4.2功能测试

4.2.1基本功能测试

这个系统所有的几本功能是实现多功能万年历,液晶屏显示正常,闹钟按时响,按键可以控制还有就是,时间准确无误等.我们一共做了五组实验结果如下:

项目次数

秒表时间与万年历时间差

液晶屏显示是否出现差错

按键调整过程中是否出错

闹钟时间与表规定时间差

闹钟鸣叫时间

1

0.3

1.2

60

2

0.3

0.8

60

3

0.5

1.1

59

4

0.5

1.0

61

5

0.4

0.5

60

注意:

单位都是秒,且每次记录测试间隔十二分钟,最后一项多次重启后测得

4.2.2发挥部分功能测试

这个系统的发挥部分包括,蜂鸣器的声音调节,欢迎界面的显示,以及温度实时监控。

次数

1

2

3

4

实际温度

15

17

13

19

显示温度

16.1

16.9

13.1

18.7

通过检测发现我们这个系统的稳定性还比较好,基本完成了要求的任务,并且有了部分创新。

五.结论

本系统以51单片机芯片为核心部件,DS18B20传感器和DS1302芯片的使用为辅助,使我们的多功能万年历实现了,时分秒甚至是年月日的精确显示,在某种程度上起到了闹钟的作用并且可以在误差允许的范围内实时监控环境温度。

我们的万年历能够完成基本部分和部分发挥部分的要求。

还可以利用SPCE061A语音功能,使系统更加生动(还在开发中)。

在这几天中,我们遇到许许多多难题,通过本组成员的努力,及老师和同学的帮助大体得以解决。

这几天的设计竞赛,增强了实践能力和协作精神,懂得了联系实际的重要性。

我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请各位老师批评指正。

六.附录

6.1参考资料

[1]谭博学,苗汇静.集成电路原理及应用(第2版).北京:

电子工业出版社,2008.

[2]姜志海,赵艳雷.单片机的C语言程序设计与应用.北京电子工业出版社,2008

[3]黄智伟.全国大学生电子设计竞赛制作实训北京航空航天大学出版社,2007.

[4].童诗白,华成英。

模拟电子技术基础。

北京:

高等教育出版社,2003

[5]谭浩强.C语言程序设计(第二版).北京:

清华大学出版社,2000

6.2LCD1602液晶屏个管脚

 

6.3DS18B20程序流图

 

6.4部分程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#definenop()_nop_()

sbitDQ=P3^5;//定义DS18B20通信端口

sbitspeak=P2^7;

sbitlcd_rs_port=P1^7;/*定义LCD的控制端口*/

sbitlcd_rw_port=P1^6;

sbitlcd_en_port=P2^4;

#definelcd_data_portP0

sbitk1=P1^0;

sbitk2=P1^1;

sbitk3=P1^2;

sbitk4=P1^3;

ucharnum2,num3=0;

uchardatanum4=0x00,num1=0x00;

sbitT_CLK=P1^4;

sbitT_IO=P1^5;

sbitT_RST=P2^2;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

ucharcodedis1[]={"WelcometoSDUT"};

ucharcodedis2[]={"Designedbylxy"};

ucharcodedis3[]={"Nowbeginthe"};

ucharcodedis4[]={"Calendar..."};

/*格式为:

0123456*/

ucharz_y[8]={1,1,1,0,0,0,0,};

ucharz_x[8]={6,6,3,10,7,13,4,};

/*格式为:

分时日月星期年*/

/*格式为:

123456*/

ucharcodeWeeks[][3]={{"SUN"},{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};

uchardatatime_data_buff[7]={0x50,0x49,0x23,0x28,0x12,0x02,0x10};

uchardatatime_buff[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};

uchardatalcd1602_line1[]={"2000/00/00000"};

uchardatalcd1602_line2[]={"00:

00:

0000.0"};

uchardatalcd1602_line3[]={"00:

00:

00"};

uchardataM[]={"S."};

ucharcodelcd_data[]={"0123456789ABCDFG"};

voiddelaylong(intms)//长延时子程序

{

inti;

while(ms--)

{

for(i=0;i<250;i++)

{

_nop_();_nop_();_nop_();_nop_();

}

}

}

/*DS18B20延时函数大于6微妙*/

voiddelay1820(unsignedinti)

{

while(i--);

}

/*DS18B20初始化*/

voidinit_1820()

{

ucharx=0;

DQ=1;

delay1820(8);

DQ=0;

delay1820(80);

DQ=1;

delay1820(14);

x=DQ;

delay1820(20);

}

/*DS18B20读数据*/

ucharR1820(void)

{

ucharOutdat=0,i=0;

for(i=0;i<8;i++)

{

DQ=0;

Outdat>>=1;

DQ=1;

if(DQ)Outdat|=0x80;

delay1820(5);

}

return(Outdat);

}

/*DS18B20写数据*/

voidW1820(uchardat)

{

uchari;

for(i=0;i<8;i++)

{

DQ=0;

DQ=dat&0x01;

delay1820(5);

DQ=1;

dat>>=1;

}

}

/*DS18B20读温度*/

uintRtemp(void)

{

uchara=0;

ucharb=0;

uintt=0;

floattt=0;

init_1820();

W1820(0xcc);

W1820(0x44);

init_1820();

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延时*/

voidlcd_delay(ucharx)

{

ucharj;

while(x--)

{

for(j=0;j<250;j++)

{;}

}

}

/*LCD写操作*/

voidlcd_busy_wait()

{

lcd_rs_port=0;

lcd_rw_port=1;

lcd_en_port=1;

lcd_data_port=0xff;

while(lcd_data_port&0x80);

lcd_en_port=0;

}

/*LCD命令写操作*/

voidlcd_write_com(ucharcom)

{

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字符写操作*/

voidlcd_write_data(lcd_dat)

{

lcd_busy_wait();

lcd_rs_port=1;

lcd_rw_port=0;

lcd_en_port=0;

lcd_data_port=lcd_dat;

lcd_en_port=1;

lcd_en_port=0;/*关闭使能端*/

}

/*LCD初始化函数*/

voidlcd_int()

{

lcd_en_port=0;

lcd_write_com(0x38);

lcd_write_com(0x0f);

lcd_write_com(0x06);

lcd_write_com(0x01);

}

/*LCD光标位置*/

voidlcd_sign(ucharx_pos,y_pos)

{

x_pos&=0x0f;

y_pos&=0x01;

if(y_pos==1)x_pos+=0x40;

x_pos+=0x80;

lcd_write_com(x_pos);

}

voiddelay(uchark)/*扫描延时*/

{

ucharg;

while(k--)

{

for(g=0;g<250;g++)

{;}

}

}

/*..............................................*/

/*时钟写入字节*/

voidInputbyte1302(uchard)

{

uchari;

ACC=d;

for(i=8;i>0;i--)

{

T_IO=ACC0;

T_CLK=1;

T_CLK=0;

ACC=ACC>>1;

}

}

/*时钟读取字节*/

ucharOutputbyte1302(uchard)

{

uchari;

ACC=d;

for(i=8;i>0;i--)

{

ACC=ACC>>1;

ACC7=T_IO;

T_CLK=1;

T_CLK=0;

}

return(ACC);

}

/*向1302里写入数据*/

voidW1302(ucharaddr,ucharda)

{

T_RST=0;

T_CLK=0;

T_RST=1;

Inputbyte1302(addr);

Inputbyte1302(da);

T_CLK=1;

T_RST=0;

}

/*从1302中读取数据*/

ucharR1302(ucharaddr)

{

ucharData;

T_RST=0;

T_CLK=0;

T_RST=1;

Inputbyte1302(addr);

Data=Outputbyte1302();

T_CLK=1;

T_RST=0;

return(Data);

}

/*设置初始时间*/

voidSet1302(uchar*pClock)

{

uchari;

ucharaddr=0x80;

EA=0;

W1302(0x8e,0x00);

for(i=7;i>0;i--)

{

W1302(addr,*pClock);

pClock++;

addr+=2;

}

W1302(0x8e,0x80);

EA=1;

}

/*设置定时时间*/

voidSet1302clock(uchar*setClock)

{

uchari;

ucharaddr=0xc0;

EA=0;

W1302(0x8e,0x00);

for(i=7;i>0;i--)

{

W1302(addr,*setClock);

setClock++;

addr+=2;

}

W1302(0x8e,0x80);

EA=1;

}

/*读取1302当前时间*/

voidGet1302(ucharCurtime[])

{

uchari;

uchara

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1