万年历实训报告分析.docx
- 文档编号:3143311
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:26
- 大小:233.32KB
万年历实训报告分析.docx
《万年历实训报告分析.docx》由会员分享,可在线阅读,更多相关《万年历实训报告分析.docx(26页珍藏版)》请在冰豆网上搜索。
万年历实训报告分析
单
片
机
万
年
历
实
训
报
告
课程名称:
单片机C程序设计
专业:
电子信息专业
班级:
13电信
班
学号:
1318201
姓名:
钟善友
指导教师:
黄丽英/候聪玲
时间:
2015年1月22日
一、万年历设计思路
操作分析
二、硬件特性介绍
AT89C51的工作原理
功能特性概述
主要性能参数
三、工作原理
万年历工作原理
通用LCD162液晶介绍
LCD162工作原理
四、控制系统设计
按键设计
LCD162电路
软件设计
五、控制程序设计
六、设计心得
万年历设计思路
按照功能要求,本时钟系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟的调整及显示。
本次设计万年历电路,分组独立计年月日星期时分秒:
设计一个单片机控制的日期系统,利用单片机的定时器计数器定时和计数的原理,结合显示电路、LCD液晶显示器以及按键来设计计数器。
使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂线路,使电路简明易懂,使用按键调整年月日星期时分秒,同时使用C语言程序控制整个显示,使编程变得更容易,这样通过芯片和显示屏完成设计。
软件采用可读性强的C语言来写,经过KeilC编译通过,并最终将十六进制(HEX)文件烧写到单片机中。
程序编写采取模块化、结构化设计。
语言程序可以分为几个主要功能模块程序:
驱动程序,定时/计数器程序,键盘中断扫描程序,1602LCD液晶显示程序。
操作分析
以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:
●使用字符型LCD显示器显示当前时间。
●显示格式为“年—月—日星期”
●时时:
分分:
秒秒
●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。
功能键K1~K4功能如下。
●K1—进入设置年,月,日,星期,小时,分钟,秒。
●K2—设置所选位的加1。
●K3—设置所选位减1。
●K4—确认完成设置。
程序执行后工作指示灯LCD闪动,表示程序开始执行,LCD显示“2015—01—224,”,“10:
30:
10”,然后开始计时。
AT89C51的工作原理
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存
储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,
兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提
供许多高性价比的应用场合,可灵活应用于各种控制领域。
功能特性概述:
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计
数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻
辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及
中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
主要性能参数:
·与MCS-51产品指令系统完全兼容
·4k字节可重擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:
0Hz-24MHz
·三级加密程序存储器
·128×8字节内部RAM
·32个可编程I/O口线
·2个16位定时/计数器
·6个中断源
·可编程串行UART通道
·低功耗空闲和掉电模式
万年历工作原理:
利用51单片机内部定时计数器功能产生1S的计时,通过设定好的变量及函数分别按一定进制累加到秒、分、时、星期,日、月、年上,通过按键扫描完成时间修改,最后通过LCD1602显示时间。
通用LCD162液晶介绍:
LCD162工作原理:
LCD162的基本操作
单片机对LCD模块有四种基本操作:
写命令、写数据、读状态和读数据,由LCD162模块的三个引脚RS、R/W和E的不同状态组合状态确定的。
LCD162模块控制端
LCD162基本操作
RS
R/W
E
0
0
写命令操作:
用于初始化、清屏、光标定位等
0
1
读状态操作:
读忙标志,当忙标志为1时,表明LCD正在进行部内操作,此时不能进行其他三类操作:
当忙标志为0时,表明LCD内部操作已经结束,可以进行其他三类操作,一般采用查询方式
1
0
写数据操作:
写入要显示的内容
1
1
读数据操作:
将显示存储区中的数据反读出来,一般比较少用
控制系统设计
按键设计
1、调节时钟,分分钟,星期以及年月日等。
如图所示:
K1键用于选择调节的对象,时钟还是分钟?
K2键与K3键用于增减当前选择的时钟或分钟。
在按下K4键时,确认调节值,变为正常继续运行。
2、通过控制键来控制所要调节的时,分,秒等。
在控制键按下后,会在相应的位置出现光标,这是通过加数键或减数键来控制时分秒的加减。
LCD162电路:
当按下K1时,屏幕变成以下显示方式:
接着按下K2增加选择的时钟或者分钟,按下K3减少选择的时钟或分钟。
如果当前选择的是时钟,每按下一次K2,时钟的值会增1,每按下一次K3,时钟的值会减1;如果选择的是分钟,也是一样的。
当按下K4时,确认当前调节的时分。
然后程序继续运行。
例如:
要把当前时间调到*年*月*日**:
**:
**;然后当调好后,程序就从*年*月*日**:
**:
**接着运行下去。
软件设计
1、软件完成的主要功能:
1)显示时间程序
用软件调节时间,通过程序的调节,最后用LCD现实时钟。
2)调节时间程序
按键调节时间,能实现时分的调节。
软件设计的主要流程:
2、系统的总流程图
主要功能是负责时间的显示,通过写地址和写数据来实现时间的调节和控制。
最后通过调用显示子程序显示出来。
如图所示:
控制程序设计
控制程序,用中断准确的控制时间,秒分采用60进制,60秒为一分,60分为一个小时,全天设置为24个小时,7天为一周,4周为一月,12月为一年。
程序流程如图所示:
程序用C语言编写,编程时采用KEIL。
程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
uchara,count,K1dj,xqnum;
ucharyue,ri,shi,fen,miao;
uintnian;
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
sbitK1=P1^0;//定义键--设置
sbitK2=P1^1;//定义键—加1
sbitK3=P1^2;//定义键--减1
sbitK4=P1^3;//定义键--退出
ucharcodetable0[]="2015-01-224";
ucharcodetable1[]="10:
30:
10";
ucharcodexingqi[]="1234567";
voiddelay(uintz)//一个延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=200;y>0;y--);
}
voidw_cmd(ucharcmd)//液晶写命令
{
RW=0;
delay(5);//写
RS=0;//命令/状态
delay(5);
P0=cmd;
delay(5);
E=1;
delay(5);
E=0;
}
voidw_data(uchardat)//液晶写数据
{
RW=0;//写
delay(5);
RS=1;//写数据
delay(5);
P0=dat;
delay(5);
E=1;
delay(5);
E=0;
}
voidw_sfm(ucharadd,uchardat)//写时分秒函数
{
ucharshi,ge;
shi=dat/10;
ge=dat%10;
w_cmd(0xc0+add);//
w_data(0x30+shi);
w_data(0x30+ge);
}
voidw_yr(ucharadd,uchardat)//写月日函数
{
ucharshi,ge;
shi=dat/10;
ge=dat%10;
w_cmd(0x80+add);
w_data(0x30+shi);
w_data(0x30+ge);
}
voidw_nian(ucharadd,uintdat)//写年函数
{
uintqian,bai,shi,ge;
qian=dat/1000;
bai=dat%1000/100;
shi=dat%100/10;
ge=dat%10;
w_cmd(0x80+add);
w_data(0x30+qian);
w_data(0x30+bai);
w_data(0x30+shi);
w_data(0x30+ge);
}
voidinit_lcd()//液晶初始化函数
{
nian=2015;
yue=1;
ri=22;
shi=10;//初始化shi、fen、miao
fen=30;
miao=10;
w_cmd(0x38);//设置16x2显示,5x7点阵,8位数据口
w_cmd(0x0c);//设置开显示,不显示光标
w_cmd(0x06);//写一个字符后地址指针加1
w_cmd(0x01);//液晶屏清0
}
voidinit()//初始化函数
{
init_lcd();//液晶初始化
w_cmd(0x80);//设置显示初始坐标
for(a=0;a<12;a++)//显示年月日初始值
{
w_data(table0[a]);
delay(5);
}
w_cmd(0xc0);//设置显示初始坐标位置
for(a=0;a<8;a++)//显示时分秒初始值
{
w_data(table1[a]);
delay(5);
}
w_nian(0,nian);
w_sfm(6,miao);//分别将shi、fen、miao送去液晶显示
w_sfm(3,fen);
w_sfm(0,shi);
count=0;//初始化全局变量count
xqnum=3;
K1dj=0;
TMOD=0x01;//设置定时器T0工作模式1
TH0=(65535-50000)/256;//定时器装初始值
TL0=(65535-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
voidt0()interrupt1//定时器T0中断服务程序
{
TH0=(65535-50000)/256;//重装定时器初始值
TL0=(65535-50000)%256;
count++;//中断次数累加
if(count==20)//20次50ms即1s
{
count=0;
miao++;
if(miao==60)//秒加到60时分加1
{
miao=0;
fen++;
if(fen==60)//分加到60
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 报告 分析