计算机控制课程设计报告万年历Word文档下载推荐.docx
- 文档编号:17280659
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:28
- 大小:499.03KB
计算机控制课程设计报告万年历Word文档下载推荐.docx
《计算机控制课程设计报告万年历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机控制课程设计报告万年历Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
人为的校正年、月、日、时、分、秒;
第一次开机显示2009-01-0100:
00:
00。
本设计采用的是AT89S52单片机,该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有8KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。
计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。
显示器件采用通用型1602液晶,可显示32个字符,如果使用数码管来做显示器件需消耗大量的系统资源,因此采用低功耗的1602液晶,该液晶显示方便,功能强大,完全能满足数字万年历的显示要求。
通过此次设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。
任务书
1、设计任务:
利用单片机、时钟芯片DS1302、1602液晶等实现日期、时间、的显示即一个简单的万年历。
2、设计要求
(1)通过DS1302能够准确的计时,时间可调并在液晶上显示出来。
(2)第一次开机显示2009-01-0100:
(3)时间日期可调。
1方案论证与设计
本系统以AT89S52单片机为控制核心,通过与DS1302通信获取实时时间,并将得到的数据通过1602液晶显示出来,同时通过相应的按键调整相应的值。
因此本设计可分为一下模块:
单片机最小系统、显示模块、实时时间计算模块、设置模块,下面对各个模块逐一进行论证分析。
1.1液晶显示模块
方案一:
数码管是利用发光二极管的特性组合而成数字显示器件,通过控制相应的二极管的状态显示相应的数字。
要使数码管正常显示就得有驱动电路驱动相应的段码,数码管的现实方式可分为静态显示和动态显示,静态显示方式只适合显示单个的数字,因此本设计应采用动态显示方式。
由于动态显示方式利用的是人眼视觉暂留的特性,扫描的时间应不大于20毫秒,占用系统资源大,而且显示的个数和字型有限,在本设计中不易采用。
方案二:
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用。
1602的驱动电路带有11条指令,可以很方便的控制液晶的现实效果如:
清屏、左移右移、光标显示。
而且1602显示的字符在下一条指令为到来之前不会改变,也就是能够维持显示的字符,1602液晶占用的系统资源也少。
综合比较上述两种方案,应采用1602液晶组成本设计的显示模块。
1.2实时时间计算模块
AT89S52单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592的晶振就能实现零误差的计时,因此可以利用此功能实现计时,但因为只有单一的计时功能要实现“万年历”的功能需要较复杂的程序,而且如果单片机掉电无法继续进行计时,所以使用不便。
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
利用单片机强大的控制功能就可实现实时计时的功能,而且消耗的系统资源少,程序简单。
综合上述两种方案,宜采用方案
(2)实现实时计时功能。
1.3设置模块
因设置模块只需编写相应的程序外加相应的按键即可实现,实现方法较简单,在此不再论述。
1.4总体方案组成框图
2系统硬件设计
2.1LCD显示模块设计
(1)1602液晶功耗较小可直接与单片机接口相接,电源直接与电源电路相接,使用单片机的P0口和P2口与1602进行通信。
(2)1602相应功能特性介绍
⏹+5V电压,对比度可调
⏹内含复位电路
⏹提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能
⏹有80字节显示数据存储器DDRAM
⏹内建有160个5X7点阵的字型的字符发生器CGROM
⏹8个可由用户自定义的5X7的字符发生器CGRAM
(3)1602引脚介绍
(4)1602液晶11条指令介绍
1.清屏指令
功能:
<
1>
清除液晶显示器,即将DDRAM的内容全部填入“空白”的字符码20H;
2>
光标归位,即将光标撤回液晶显示屏的左上方;
3>
将地址计数器(AC)的值设为0;
2.光标归位指令
把光标撤回到显示器的左上方;
把地址计数器(AC)的值设置为0;
保持DDRAM的内容不变;
3.输入模式设置指令
设定每次写入1位数据后光标的移位方向,并且设定每次写入的一个字符是否
移动。
参数设定的情况如下所示:
位名
设置
I/D
0=写入新数据后光标左移
1=写入新数据后光标右移
S
0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字
4.显示开关控制指令
控制显示器开/关、光标显示/关闭以及光标是否闪烁。
参数设定的情况如下:
D
0=显示功能关
1=显示功能开
C
0=无光标
1=有光标
B
0=光标不闪烁
1=光标闪烁
5.设定显示屏或光标移动方向指令
使光标移位或使整个显示屏幕移位。
S/C
R/L
设定情况
0
0
光标左移1格,且AC值减1
1
光标右移1格,且AC值加1
1
显示器上字符全部左移一格,但光标不动
显示器上字符全部右移一格,但光标不动
6.功能设定指令(非常重要的指令)
设定数据总线位数、显示的行数及字型。
设置
DL
0=数据总线为4位1=数据总线为8位
N
0=显示1行1=显示2行
F
0=5×
7点阵/每字符
1=5×
10点阵/每字符
7.设定CGRAM地址指令
设定下一个要存入数据的CGRAM的地址。
8.设定DDRAM地址指令
9.读取忙信号或AC地址指令
读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机
送来的数据或指令;
当BF=0时,液晶显示器可以接收单片机送来的数据或指令;
读取地址计数器(AC)的内容。
10.数据写入DDRAM或CGRAM指令
将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;
<
将用户自己设计的图形存入CGRAM。
11.从CGRAM或DDRAM读出数据的指令
读取DDRAM或CGRAM中的内容。
基本操作时序:
读状态
输入:
RS=L,RW=H,E=H
输出:
DB0~DB7=状态字
写指令
RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码
无
读数据
RS=H,RW=H,E=H
DB0~DB7=数据
写数据
RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据
(5)、1602液晶与单片机接口电路
2.2时间计算模块设计
DS1302通过三根口线实现与单片机的通信,因DS1302功耗很小,即使电源掉电后通过3V的纽扣电池仍能维持DS1302精确走时。
(1)DS1302特性介绍
(2)DS1302引脚介绍
各引脚的功能为:
8、Vcc1:
备用电池端;
1、Vcc2:
5V电源。
当Vcc2>
Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2<
Vcc1时,由Vcc1向DS1302供电。
7、SCLK:
串行时钟,输入;
6、I/O:
数据输入输出口;
5、CE/RST:
复位脚
23、X1、X2是外接晶振脚(32.768KHZ的晶振)
4、地(GND)
(4)DS1302有关日历、时间的寄存器
寄存器的说明如下:
1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。
当初始上电时该位置为1,
时钟振荡器停止,DS1302处于低功耗状态;
只有将秒寄存器的该位置改写为0时,时钟才能开
始运行。
2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。
当为
高时,选择12小时模式。
在12小时模式时,位5是,当为1时,表示PM。
在24小时模式时,
位5是第二个10小时位
3、控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。
在对任何的时钟和
RAM的写操作之前,WP位必须为0。
当WP位为1时,写保护位防止对任一寄存器的写操作。
也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,
只有首先将WP改写为0,才能进行其它寄存器的写操作。
(5)DS1302控制字介绍
控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6:
如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1(A4~A0):
指示操作单元的地址;
位0(最低有效位):
如为0,表示要进行写操作,为1表示进行读操作。
读数据:
读数据时在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,
读出的数据是从最低位到最高位。
写数据:
控制字总是从最低位开始输出。
在控制字指令输入后的下一个SCLK时钟的上升沿时,
数据被写入DS1302,数据输入也是从最低位(0位)开始。
为1表示进行读操作。
如为0,表示要进行写操作,
控制字后SCLK下降沿读数据SCLK上升沿写数据
(6)DS1302单字节读写时序介绍
DS1302的数据读写是通过I/O串行进行的。
当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作,以及操作的址。
第二个字节就是要读或写的数据了。
我们先看
单字节写:
在进行操作之前先得将CE(也可说是RST)置高电平,然后单片机将控制字的位0放到I/O上,当I/O的数据稳定后,将SCLK置高电平,DS1302检测到SCLK的上升沿后就将I/O上的数据读取,然后单片机将SCLK置为低电平,再将控制字的位1放到I/O上,如此反复,将一个字节控制字的8个位传给DS1302。
接下来就是传一个字节的数据给DS1302,当传完数据后,单片机将CE置为低电平,操作结束。
单字节读操作的一开始写控制字的过程和上面的单字节写操作是一样,但是单字节读操作在写控制字的最后一个位,SCLK还在高电平时,DS1302就将数据放到I/O上,单片机将SCLK置为低电平后数据锁存,
单机机就可以读取I/O上的数据。
如此反复,将一个字节的数据读入单片机。
读与写操作的不同就在于,写操作是在SCLK低电平时单片机将数据放到IO上,当SCLK上升沿时,DS1302读取。
而读操作是在SCLK高电平时DS1302放数据到IO上,将SCLK置为低电平后,单片机就可从IO上读取数据。
(7)DS1302操作指令介绍
操作说明:
首先要通过8EH将写保护去掉,将日期,时间的初值写时各个寄存器。
然后就可以对80H、82H、84H、86H、88H、8AH、8CH进行初值的写入。
同时也通过秒寄存器将位7的CH值改成0,这样DS1302就开始走时运了。
将写保护寄存器再写为80H,防止误改写寄存器的值。
不断读取80H-8CH的值,将它们格式化后显示到1602LCD液晶上
(8)DS1302与单片机接口电路
2.3设置模块
设置模块采用四个按键与P3.0、P3.1、P3.2
相接组成独立按键,接口电路如下;
3系统软件设计
软件设计是本设计的关键,软件程序编写的好坏直接影响着系统运行情况的良好。
因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。
程序框图如下:
设置时间
有
4系统硬件仿真运行情况图
4.1显示实时时间
4.2时间设置
参考文献
【1】.张靖武.周灵彬.单片机原理、应用与PROTEUS仿真;
【2】.江志红.51单片机技术与应用系统开发案例精选;
【3】.周润景.基于PROTEUS的51单片机设计与仿真;
【4】.王守中.51单片机开发入门与典型实例;
【5】.张齐.朱宁西.单片机系统设计与开发;
【6】.周立功单片机开发网
【7】.天津锐志单片机开发网
【8】.维纳电子DS18B20温度传感器中文PDF资料
【9】.ATMEL公司AT89S52单片机中文PDF资料;
【10】.长沙太阳人电子有限公司通用型1602液晶PDF资料
附录A:
系统硬件电路及仿真图
本设计硬件电路图如下
系统硬件PROTEUS仿真原理图
附录B:
源程序代码
主文件:
#include<
reg52.h>
#include"
lcd1602.h"
ds1302.h"
#defineuintunsignedint
#defineucharunsignedchar
uintb[6];
//年月日时分秒
ucharcoderow1[]={"
2010-01-12"
};
ucharcoderow2[]={"
12:
02:
23"
ucharyear1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
//平年
ucharyear2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
//润年
ucharj[6]={0x85,0x88,0x8b,0x84+0x40,0x87+0x40,0x8a+0x40};
//LCD地址
uchari,k,jj=0,w,clock=0,bigclock=0,c=0,num;
//i循环数k温度缓存jj地址位
uinttemp;
sbitb1=P3^0;
//设置
sbitb2=P3^1;
//上调
sbitb3=P3^2;
//下调
sbitb4=P3^3;
//转换
sbitb5=P3^4;
//闹钟
sbitspeaker=P3^6;
lcdscan()
{
for(i=0;
i<
6;
i++)
{
lcdwrite(j[i]);
lcdshuju(a[11-i*2]+0x30);
lcdwrite(j[i]+0x01);
lcdshuju(a[10-i*2]+0x30);
}
}
voidkey()
if(b1==0)
dsaddshuju(0x80,(a[1]<
4)+a[0]+0x80);
while(b1==0)
{
for(i=0;
{
b[i]=a[11-i*2+clock]*10+a[10-i*2+clock];
}
if(b4==0)
delay(3);
jj++;
if(jj==6)
{
jj=0;
}
if(b2==0)
b[jj]++;
if(b[5]==60)b[5]=0;
if(b[4]==60)b[4]=0;
if(b[3]==24)b[3]=0;
if((b[0]%4==0&
&
b[0]%100!
=0)||b[0]%400==0){if(b[2]>
year2[b[1]-1])b[2]=1;
else{if(b[2]>
year1[b[1]-1])b[2]=1;
if(b[1]==13)b[1]=1;
if(b[0]==100)b[0]=0;
if(b3==0)
b[jj]--;
if(b[5]==-1)b[5]=59;
if(b[4]==-1)b[4]=59;
if(b[3]==-1)b[3]=23;
if((b[0]%4==0&
b[0]%100!
=0)||b[0]%400==0){if(b[2]<
=0)b[2]=year2[b[1]-1];
else{if(b[2]<
=0)b[2]=year1[b[1]-1];
if(b[1]==0)b[1]=12;
if(b[0]==-1)b[0]=99;
a[11-i*2+clock]=b[i]/10;
a[10-i*2+clock]=b[i]%10;
lcdwrite(j[jj]);
lcdshuju(0);
lcdwrite(j[jj]+1);
delay(200);
lcdshuju(a[11-2*jj+clock]+0x30);
lcdshuju(a[10-2*jj+clock]+0x30);
if(b1==1)
dsaddshuju(0x80,(a[1]<
4)+a[0]);
dson();
if(b5==0)clock=12;
}
voidmain()
{
speaker=0;
lcdrw=0;
dson();
lcdon();
lcdwrite(0x83);
10;
lcdshuju(row1[i]);
delay
(1);
lcdwrite(0x84+0x40);
8;
lcdshuju(row2[i]);
dsrst=0;
dssclk=0;
while
(1)
for(i=0;
5;
dsrst=1;
dswrite
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机控制 课程设计 报告 万年历