单片机万年历课程设计 2.docx
《单片机万年历课程设计 2.docx》由会员分享,可在线阅读,更多相关《单片机万年历课程设计 2.docx(21页珍藏版)》请在冰豆网上搜索。
单片机万年历课程设计2
电子万年历课程设计
课程名称:
嵌入式系统开发实训
专业:
计算机科学与技术
摘要
日月如梭,斗转星移!
从远古的铜壶滴漏、日咎计时,到16世纪因伽利略等时性定律而诞生的摆钟,到现今100万年才有1秒误差原子钟。
科学不断的在进步,技术时刻在更新!
多功能电子万年历更是适应现代化个性生活的一个新需求。
该系统以AT89S51片机作为系统控制处理器,采用美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时。
同时通过DS18B20温度采集芯片对温度进行测试,并将其通过数码管显示。
关键字:
AT89S51单片机、数码管动态显示、DS1302、DS18B20
目录
一、任务设计3
二、方案论证4
三、总体方案6
四、系统硬件设计7
五、系统软件设计流程12
六、程序15
七、多功能数字时钟使用说明19
八、测量及其结果分析20
九、设计心得体会21
十、参考资料22
电子万年历设计
一、任务设计
1、设计任务:
设计并制作一个电子万年历。
2、设计要求:
●设计能支持年、月、日、星期、时、分、秒的时钟,时钟有时间调整功能;
●时钟附带有一个温度计功能,温度检测精度高于2度,显示精度为1度;
●时钟具有装卸电池时掉电保护功能,保护时间大于5分钟;
●时钟功耗小于0.5MA/5V。
3.发挥部分:
●提高温度检测精度,在0℃-40℃显示0.1℃;
●将每个公历对应的农历显示出来;
●闹铃设置,整点报时功能;
●记事本、备忘录功能。
4.创新部分:
●非易失定时闹铃
●重要日期提醒
●整点报时
二、方案论证
1.显示部分:
显示部分是本次设计的重要部分,一般有以下两种方案:
方案一:
采用LCD显示。
LCD液晶显示具有丰富多样性、灵活性、电路简单、易于控制而且功耗小等优点,但是程序编写过于复杂,价格有点偏高。
方案二:
采用LED显示,分静态显示和动态显示。
对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,且可靠性也较低。
而对于动态显示方式,即可可以避免静态显示的问题,又可以在编写程序的过程中节省大量的时间,
鉴于上述原因,我们采用方案二的数码管动态显示。
2.数字时钟:
数字时钟是本设计的核心的部分之一。
根据需要可采用以下两种方案实现:
方案一:
方案完全用软件实现数字时钟。
即在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。
该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。
而且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
方案二:
用DS12C887实现时钟计数。
DS12C887内部带有锂电池和晶振,掉电可自动行走,并带有闹钟功能、内带114字节RAM等功能。
但是要控制Intel或Motorola总线时序复杂,并行通信占用I/O口多,而且体积大,管脚多,价格昂贵。
方案三:
方案采用Dallas公司的专用时钟芯片DS1302。
该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
当电网电压不足或突然掉电时,可使系统自动转换到内部锂电池供电系统。
而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
基于时钟芯片的上述优点,本设计采用方案三完成数字时钟的功能。
3.温度采集:
由于现在用品追求多样化,多功能化,给系统加上温度测量显示模块,能够方便人们的生活,使该设计具有人性化。
方案一:
采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测小于1摄氏度的信号是不适用的。
方案二:
采用温度传感器DS18B20。
DS18B20可以满足从-55摄氏度到+125摄氏度测量范围,且DS18B20测量精度高,增值量为0.5摄氏度,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
基于DS18B20的以上优点,我们决定选取DS18B20来测量温度。
5.电源模块:
方案一:
采用干电池作为系统电源。
但需经常换电池,不符合节约型社会的要求。
方案二:
采用直流稳压电源作为系统主电源,干电池作为辅助电源。
不仅不需要经常更换电源,并且当市电停止时能够采用干电池做为系统电源,使用更加安全可靠。
基于以上分析,我们决定采用方案二。
三、总体方案
1.工作原理:
本设计采用AT89S51单片机作为本系统的控制模块。
单片机可以把有DS1B20、DS1602中的数据利用软件进行处理,从而把数据传输到显示模块(LED数码管显示模块),实现温度、日历的显示。
在本系统中,可以通过按键来设置或调整相应的数值,可以通过发光二极管的亮与灭来判断其他一些相关的信息。
2.总体设计:
设计总体框架图如图1
图1设计总体框图
四、系统硬件设计(单元电路设计及分析)
1.AT89S51单片机最小系统:
1.1最小系统电路图
最小系统包括晶体振荡电路、复位开关和电源部分。
图2为AT89S51单片机的最小系统。
图2最小系统电路图
1.2主要芯片介绍
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
其主要功能列举如下:
1、为一般控制应用的8位单芯片;
2、晶片内部具时钟振荡器(传统最高工作频率可至12MHz);
3、内部程式存储器(ROM)为4KB;
4、内部数据存储器(RAM)为128B;
5、外部程序存储器可扩充至64KB;
6、外部数据存储器可扩充至64KB;
7、32条双向输入输出线,且每条均可以单独做I/O的控制;
8、5个中断向量源;
9、2组独立的16位定时器;
10、1个全多工串行通信端口。
2.温度测量模块:
2.1测温模块电路图
图3测温电路模块接口电路
温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为
-55℃~125℃,可编程为9位~12位A/D转换精度,测温分辨率达到0.0625℃,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。
接口电路如图3所示。
2.2主要芯片介绍
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域,其技术性能的描述如下
1、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;
2、测温范围-55℃~+125℃,固有测温分辨率0.5℃;
3、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定;
4、工作电源:
3~5V/DC;
5、在使用中不需要任何外围元件;
6、测量结果以9~12位数字量方式串行传送;
7、不锈钢保护管直径Φ6;
8、适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温;
9、标准安装螺纹M10X1,M12X1.5,G1/2”任选;
10、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
3.时钟模块:
3.1时钟芯片模块电路图
时钟模块采用DS1302芯片,DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线:
RST复位、I/O数据线、SCLK串行时钟。
时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。
DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW,其接线电路如图4所示:
图4时钟芯片电路图
3.2主要芯片介绍
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。
4.LED数码管显示模块:
本设计采用LED共阳数码管显示日期、时间及温度,采用三极管8550作为驱动,其连线图如图5所示:
图5LED显示电路
5.系统电源:
电源电路如图6所示
图6电源电路
6.整体电路:
系统整体电路如图7所示:
图7系统总体电路图
五、系统软件设计流程
1.主程序流程如图8所示:
图8主程序流程图
1.时间设定程序流程如图9所示:
图9DS1302工作流程图
2.温度测量流程图如图10所示:
图10DS18B20工作流程
六、程序:
//DS18B20测温函数
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1^7;
sbitduan=P3^6;
sbitwei=P2^4;
uchartmp;
unsignedcharsmg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x70};
unsigned
charsmg_we[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
ucharinit_ds18b20(void);
voiddelay(uintt);
voidwrite_byte(uchardat);
ucharread_byte(void);
ucharread_temperature(void);
voiddisplay(void);
**************************************主函数****************************************************************
voidmain(void)
{
while
(1)
{
tmp=read_temperature();
display();
}
}
*************************************延时函数**********************************************************
voiddelay(uintt)
{
while(t--);
}
*********************************************18b20初始化***********************************************
ucharinit_ds18b20(void)
{
ucharpresence;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
presence=DQ;
delay(4);
returnpresence;
}
****************************************写单个字节***************************************************
voidwrite_byte(uchardat)
{
uchari;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay(4);
dat>>=1;
}
delay(4);
}
*********************************读单个字节**********************************************************
ucharread_byte(void)
{
uchari,value;
for(i=0;i<8;i++)
{DQ=0;
value>>=1;
DQ=1;
if(DQ)
value|=0x80;
delay(4);
}
returnvalue;
}
*************************************读取温度**********************************************************
ucharread_temperature(void)
{
uchara,b;
init_ds18b20();
write_byte(0xcc);
write_byte(0x44);
delay(300);
init_ds18b20();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
b<<=4;
b+=(a&0xf0)>>4;
returnb;
}
***************************************显示函数*******************************************
voiddisplay(void)
{
while
(1)
{
duan=0;
P0=smg_du[tmp%10];
P2=smg_we[7];
duan=1;
delay(10000);
P0=0xff;
delay(1000);
duan=0;
P0=smg_du[tmp/10];
P2=smg_we[8];
duan=1;
delay(10000);
P0=0xff;
delay(1000);
}
}
七、多功能数字时钟使用说明:
(从左到右依次为K1,K2,K3,K4,K5)
1)K1(复位键):
单片机复位电路的复位按钮。
2)K2(转换键):
按下该键,数码管显示时间的方式变化,如如果当前数码管显示的时间是12小时制,当按下此键后数码管显示的时间应该变成24小时制
3)K3(设置键):
按下此键,数码管两位闪,代表此时已经选中该两端数码管,可以通过k4,k5键进行调节。
4)K4(增加键):
当k3处于接通状态时,按下此键,相应的数码管位加1.。
5)K5(简少键):
当K3处于接通状态时,按下此键,相应的数码管位减1。
八、测量及其结果分析
(1)测试仪器:
秒表、温度表、万用表
(2)基本要求部分的测试与分析:
●系统上电后,首先显示欢迎词,接着进入显示时间和温度。
按各功能键执行相应的功能。
●显示时间时通过与秒表对比,测试的系统时钟走时准确,误差很小。
●显示温度与温度计对比,测试系统温度的精度。
将温度传感器DS18B20和温度计放入不同的测试环境中进行测试,所得测试结果如表1所示。
表1数字温度计与标准温度计测量值比较表:
温度计示值(摄氏度)
28.7
30.7
33.5
45.0
温度输出(摄氏度)
29.0
30.8
33.3
45.1
由测试知,数字钟的输出与温度计值基本上相等,误差不大于0.5度。
九、设计心得体会
经过了10多天的努力,我终于完成了这次课程设计,尽管结果不是那么的尽如人意,但是过程中付出的点点滴滴都值得细细品味。
我觉得在这次课程设计中,我最大的收获就是那种一丝不苟,永不放弃的精神,从第一天就开始画的原理图说起,老师要求我们在原理图中加入地址总线数据总线,同学们就毫不犹豫的把已经找好了的资料改成了老师要求的方式。
还有就是后面的PCB图手动布线,很多次很想放弃,但是最终还是坚持下来了,一根一根步,一步一步走,终于老师的一句现在你们的图画的可以了让我万分感激,一股成就感由心而来。
对于这次课程设计,我真的很重视,因为这也许是我大学生活最后一次课程设计了,我真的很荣幸能够跟我的同学们并肩作战,当别人在看电影聊天玩游戏时,我们却在实验室埋头苦干,在这10多天的课程设计中,我们遇到了很多的挫折,困难,但是我们的努力没有白费,我们的付出为我们换来了今天的收获。
学习是一个漫长的过程,除了51单片机之外所有这些芯片我们都基本没接触过,每天就是在那里摸索,上网找资料,写程序,仿真,买回来后连接好后,下载,看现象,调试,得不到预期的结果又不知道是硬件还是软件出问题了!
在这个过程中我们要耐得住寂寞,坚守自己的信念,尽管是废寝忘食,决战凌晨,但我们都从未放弃,坚持到底。
好在天道酬勤,一个个的难关被我们攻破。
通过这10多天的课程设计,无论是在团队的合作,计划的安排,问题的处理,还是在个人思想的长进,自学能力的提高,都有一个全新的飞跃。
课程设计即将结束,但是我们对电子设计的爱好却不会停止,我们对知识的追求不会停止,我们依旧会迈着坚定的步伐,继续追寻我们的梦想,并且永不言弃。
。
十、参考资料
[1]求是科技《单片机典型模块设计实例导航》人民邮电出版社2005.8
[2]徐淑华《单片微型机原理及应用》哈尔滨工业大学出版社2005.1
[3]谢维成《单片机原理与应用及C51程序设计》清华大学出版社2009.7
[4]楼然苗《51系列单片机原理及设计实例》北京航空航天大学出版社2010.5
[5]赵亮《单片机C语言编程与实例》人民邮电出版社2003.9
[6]《DS1302数据手册》
[7]《DS18B20数据手册》
[8]阿莫电子论坛51单片机模块
[9]电子爱好者社区