电子万年历设计论文Word文件下载.docx
- 文档编号:18063139
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:38
- 大小:300.24KB
电子万年历设计论文Word文件下载.docx
《电子万年历设计论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子万年历设计论文Word文件下载.docx(38页珍藏版)》请在冰豆网上搜索。
3.3AT89C52主要性能介绍
AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在线系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使AT89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89C52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有部上拉电阻。
在flash编程时,P0口也用来接收指令字节;
在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口是一个具有部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个
TTL逻辑电平。
对P1端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
P2口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVXDPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的部上拉发送1。
在使用8位地址(如MOVXRI)访问外部数据存储器时,P2口输出P2锁存器的容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口是一个具有部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
P3口亦作为AT89C52特殊功能(第二功能)使用,如图3-2所示。
在flash编程和校验时,P3口也接收一些控制信号。
图3-2
3.4DS1302芯片的介绍
DS1302是DALLAS公司推出的涓流充电时钟芯片含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1RES复位2I/O数据线3SCLK串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mW。
DS1302是由DS1202改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应Vcc1为可编程涓流充电电源附加七个字节存储器它广泛应用于传真便携式仪器以及电池供电的仪器仪表等产品领域下面将主要的性能指标作一综合:
1.实时时钟具有能计算2100年之前的秒分时日日期星期月年的能力还有闰年调整的能力
2.31×
8位暂存数据存储RAM
3.串行I/O口方式使得管脚数量最少
4.宽围工作电压2.0-5.5V
5.工作电流2.0V时,小于300nA
6.读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送
7.8脚DIP封装或可选的8脚SOIC封装(根据表面装配)
8.简单3线接口
9.与TTL兼容Vcc=5V
10.可选工业级温度围-40℃+85℃
3.4.1管脚说明
管脚描述:
管脚配置:
图3-3
图3-4
3.4.2DS1302时钟信号设置模式
如图3-5所示
图3-5
3.5LCD1602液晶介绍
模块组件部主要由LCD显示屏、控制器、列驱动器和偏压产生电路构成。
LCD显示屏为行和列交叉形成的点阵,以5×
8点阵的字符结构模式和设置的显示字符数目,选择适宜的行数,分单屏、双屏或者多屏显示规定的字符。
对于双屏或者多屏显示结构的LCD,每一显示屏结构部分,均由各自独立的使能信号E控制。
列驱动器与控制器配套使用,它接收来自控制器的振荡、帧同步输出、串行输出的数据和移位及锁存脉冲,产生列交流扫描驱动信号。
控制器接受来自MPU的指令和数据,控制着整个模块的工作,由CGROM、CGRAM、DDRAM等字符存储域、以及与MPU和列驱动器的I/O接口、指令寄存和译码机构、地址计数器等部分组成。
在控制器的控制下,模块通过数据总线DB0~DB7和E、R/W、RS三个输入控制端与MPU接口。
这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线DB接收MPU发送来的指令和数据,从CGROM中找到欲显示字符的字符码,送入DDRAM,在LCD显示屏上与DDRAM存储单元对应的规定位置显示出该字符。
控制器还可以根据MPU的指令,实现字符的显示、闪烁和移位等显示效果。
3.5.1端口的定义:
管脚号
符号
功能
1
Vss
电源地(GND)
2
Vdd
电源电压(+5V)
3
V0
LCD驱动电压(可调)
4
RS
寄存器选择输入端,输入MPU选择模块部寄存器类型信号;
RS=0,当MPU进行写模块操作,指向指令寄存器;
当MPU进行读模块操作,指向地址计数器;
RS=1,无论MPU读操作还是写操作,均指向数据寄存器
5
R/W
读写控制输入端,输入MPU选择读/写模块操作信号;
R/W=0读操作;
R/W=1写操作
6
E
使能信号输入端,输入MPU读/写模块操作使能信号;
读操作时,高电平有效;
写操作时,下降沿有效
7
DB
数据输入/输出口,MPU与模块之间的数据传送通道
8
9
10
11
12
13
14
15
A
背光的正端+5V
16
K
背光的负端0V
3.5.2操作时序图
写操作时序如图3-6
图3-6
读操作时序如图3-7
图3-7
3.5.3指令说明
一般情况下,部RAM的数据传送的功能使用最为频繁,因此,RAM中的地址指针所具备的自动加一或减一功能,在一定程度上减轻了MPU编程负担。
此外,由于数据移位指令与写显示数据可同时进行,这样用户就以最少系统开发时间,达到最高的编程效率。
这里值得一提的是,在每次访问模块之前,MPU应首先检测忙标志BF,确认BF=0后,访问过程才能进行。
Cleardisplay清显示指令码:
Returnhome归位指令码:
Entrymodeset设置输入模式指令码:
I/D=1,完成一个字符码传送后,AC自动加1;
I/D=0,完成一个字符码传送后,AC自动减1;
S=1,将全部显示向右(I/D=0)或者向左(I/D=1)移位;
S=0,显示不发生移位;
Displayon/offcontrol显示开/关控制指令码:
D:
显示开/关控制标志:
D=1,开显示;
D=0,关显示;
C:
光标显示控制标志:
C=1,光标显示;
C=0,光标不显示;
B:
闪烁显示控制标志:
B=1,光标所指位置上,交替显示全黑点阵和显示字符,产生闪烁效果。
Cursorordisplayshift光标或显示移位指令码:
光标或显示移位指令可使光标或显示在没有读写显示数据的情况下,向左或向右移动;
运用此指令可以实现显示的查找或替换;
在双行显示方式下,第一行和第二行会同时移位;
当移位越过第一行第四十位时,光标从第一行跳到第二行,但显示数据只在本行水平移位,第二行的显示决不会移进第一行;
倘若仅执行移位操作,地址计数器AC的容不会发生改变。
S/C
R/L
说明
0
光标向左移动,AC自动减一
光标向右移动,AC自动加一
光标和显示一起向左移动
光标和显示一起向右移动
第4章系统程序的设计
多功能万年历系统的软件设计主要由主程序、温度子程序、时钟程序、定时中断子程序及液晶显示子程序组成。
由于C语言编写的程序逻辑性强,也方便移植。
而汇编虽然效率高,但相对比较繁琐,特别是遇到综合性强的逻辑运算时,执行起来比较困难。
下面主要对时钟程序和闹钟子程序加以详细介绍。
4.1高准确度时钟程序算法
电子计时器通常以石英晶振为时钟源。
时钟源的频率通常为几十khz乃至几十mhz,而所用时钟的最小计单位一般在0.01s~1s。
高频的时钟源脉冲通过分频器后产生基本定时脉冲。
电子计时器的计时部分就是对基本定时脉冲进行累加,产生秒、分、时等时间信息乃至日、月、年等日期信息。
而常常一个电子时钟会出现走时误差,一个常规电子计时器的计时准确度,取决于晶振标称频率(fs)与实际频率(fo)的频率偏差和晶振频率的时漂、温漂等离散参数。
普通晶振的实际频率与标称频率有较大的偏差,可达万分之五,折算到一天计时误差就是43.2s。
而减少计时误差的最好方法就是用软件控制,我们本实验中用到的AT89C52的晶振频率是12MHZ,实际长期平均振荡频率fo=12.0006mhz,量化精度取1字节,取tns=10ms,则分频系数为:
n0=fo/(12×
tns)=12.0006/(12×
106×
10-2)=10000.5
令n=int(n0)=10000
ni为第i决定时值,可能是10000或10001,这取决于nti的进位;
nti为第i次尾数暂存值。
每次定时中断服务程序均执行上式,取得第i次定时计数值,然后实时时钟增加10ms,完成时钟功能。
这样进行软件计时校正后,每10天的计时误差<
1s。
所以这种基于软件提高时钟准确度的算法,具有极高的实用价值。
4.2定时闹钟程序
时钟的闹钟主要是通过外部设置的按键来定时,当时钟的时间与设置的时间相同时,将会触发中断源,进入闹钟子程序,这时蜂鸣器将会被接通,发出声音。
当中断时间达到规定的时间后,闹钟程序讲会自动退出,蜂鸣器停止响。
闹钟工作的程序框图如图3-8所示
图3-8
第5章调试与结果分析
经过理论分析和仿真调试后,最后按照硬件电路制作出了成品——多功能电子万年历,现在进入了最后的调试阶段。
开始为整个系统接上电源后,液晶显示器不亮,通过调节与液晶显示器电源端相连的电位器,显示屏点亮了。
5.1调试
我们发现虽然显示屏亮了,但是时钟不走,复位也不起作用,4个时间设置按键也没有反应,通过认真的分析后,软件应该是没有问题的,因为在仿真的时候是能正常工作的,这只可能是在硬件上出现了问题,通过检查电路的焊接,连线都没有错误的情况下,最后确定应该是某个模块没有正常工作,通过查资料,发现时钟芯片DS1302的数据端口和时钟信号端口要接上拉电阻,这样才能正常的工作,通过调试,最后时钟开始走起来,达到了预期的效果。
5.2结果分析
时钟虽然是正常的走了,整个系统也运行顺畅,但是时钟精度不够高。
5.2.1误差分析
一个常规的电子时钟走时不准的原因主要是时钟标称频率与实际频率有误差,这样导致时钟计数不准确,另外是环境的温度影响,也会导致走时有误差,因为每个元器件都有一个正常工作温度围,但超出这个围后,就会使元件不能正常工作,这样也就导致了整个系统的误差产生。
第6章总结
多功能万年历是能同时显示日历、星期、时间、温度的电子时钟。
这次的毕业设计从选题上也花了很多时间,板也做了一块又一块,在做的过程中还是出现了很多常见的错误,比如在画原理图的时候,连线连错,网络标号不对应,电源和地接反,这些都是很小的错误,但是小错误也能成大错,导致最后做出来的板不能实现预期的功能。
另外就是对一些芯片的运用不熟悉,导致显示乱码也是很正常的,比如时钟芯片DS1302的数据端口和信号端口必须接上拉电阻后再接电源端,否则芯片不能正常工作,软件无常运行,整个系统也将瘫痪无常显示。
还有液晶显示器的电源端也要接个电位器,一是方便调节明暗度,二是防止电流过大,烧坏显示屏,这些都是很基本的知识,但必须要熟记和掌握,以致才能运用的更加熟练。
另外对于这次的毕业设计,感觉自己的能力又得到了一定的提高,特别是对设计的整体流程有了更清晰的认识,包括选题、设计,制版,调试、写报告。
但是还有很多要弥补的地方,比如写软件程序,对于一个学单片机的人来说,不仅要懂硬件,更要懂软件,只有都懂了,才能设计出更好的电路,要学好这些,只有不断的去尝试,尝试中不断的发现错误,不断的改正错误,只有这样能力才能得到一步步的提高。
参考文献
[1]权昌.兴富·
单片机原理及应用·
华南理工大学,2007年8月
[2]正振.电子电路设计与制作广西交通职业技术学院信息工程系2007年
[3]科技.8051系列单片机C程序设计.:
人民邮电,2006年
[4]谭浩强.C程序设计.:
清华大学,1991年
附录
附录一电路原理图
附录二电路PCB图
附录三元件清单
元件
类型
个数
电阻
1K
排阻
10K
晶振
12M
32.768K
电解电容
22u
瓷片电容
22p
单片机
AT89C52
温感器
DS18B20
三极管
NPN
时钟芯片
DS1302
电位器
蜂鸣器
附录四源程序
#include<
reg51.H>
INTRINS.H>
#defineucharunsignedchar
#defineuintunsignedint
#defineTIME(0X10000-50000)
#defineFLAG0XEF//闹钟标志
sbitrst=P3^5;
sbitclk=P3^4;
sbitdat=P3^3;
sbitrs=P1^5;
sbitrw=P1^6;
sbite=P1^7;
sbitDQ=P1^4;
//温度输入口
sbitP3_2=P3^2;
sbitACC_7=ACC^7;
uchari=20,j,time1[16];
//全局变量及常量定义
ucharalarm[2],time2[15],time[3];
ucharcodeDay[]={31,28,31,30,31,30,31,31,30,31,30,31};
//12个月的最大日期(非闰年)
//音律表
uintcodetable1[]={64260,64400,64524,64580,64684,64777,
64820,64898,64968,65030,65058,65110,65157,65178,65217};
//发声部分的延时时间
ucharcodetable2[]={0x82,1,0x81,0xf4,0xd4,0xb4,0xa4,
0x94,0xe2,1,0xe1,0xd4,0xb4,0xc4,0xb4,4,0};
//LCD自建字
ucharcodetab[]={0x18,0x1b,5,4,4,5,3,0,
0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,//年
0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,//月
0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};
//日
//*******温度小数部分用查表法**********//
Ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
//闹钟中用的全局变量
ucharth1,tl1;
uchartemp_data[2]={0x00,0x00};
//读出温度暂放
bitflag;
//18b20存在标志位
/***********11微秒延时函数**********/
delay(uintt)
{
for(;
t>
0;
t--);
}
/***********18B20复位函数**********/
ow_reset(void)
uchari;
DQ=1;
_nop_();
DQ=0;
//
delay(50);
//550us
//
delay(6);
//66us
for(i=0;
i<
0x30;
i++)
{
if(!
DQ)
gotod1;
}
flag=0;
//清标志位,表示ds1820不存在
return;
d1:
delay(45);
//延时500us
flag=1;
//置标志位,表示ds1820存在
}
/**********18B20写命令函数*********/
//向1-WIRE总线上写一个字节
voidwrite_byte(ucharval)
for(i=8;
i>
i--)//
DQ=1;
DQ=0;
//5us
DQ=val&
0x01;
//最低位移出
delay(6);
//66us
val=val/2;
//右移一位
delay
(1);
/*********18B20读1个字节函数********/
//从总线上读取一个字节
ucharread_byte(void)
ucharvalue=0;
i>
i--)
value>
>
=1;
_nop_();
//4us
//4us
if(DQ)
value|=0x80;
return(value);
/***********读出温度函数***
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 万年历 设计 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)