自制万年历

更新时间:2024-01-14 00:54:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

武汉理工大学《能力拓展训练》课程设计说明书

数字定时器设计

摘 要

单片机在电子产品中的应用越来越广泛,特别是51系列的单片机,由于其使用方便、价格低廉等优势,在市场上占有很大的份额。AT89S52就是51系列中的一个比较成熟的型号,它完全兼容51单片机的指令。

本文详细介绍了基于AT89S52单片机的数字电子钟的设计,本电子钟可以实现日期、时间的显示和调整,带有整点提示和一个闹钟,并且可以显示当前气温。

本设计包括硬件设计和软件设计两部分。主要硬件有:三端稳压器LM7805、AT89S52单片机、字符型液晶显示模块HY1602A和若干按键等。软件大致思路为:使用12MHz的晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的,不断扫描按键,如果有按键按下,则对按键做出相应的响应。

关键字:单片机; 电子钟; LCD1602;

武汉理工大学《能力拓展训练》课程设计说明书

Abstract

MCU in the application of electronic products becomes more widely, particularly the 51 series of MCU, because of its ease of use, low prices and other advantages,it’s in a large market share. AT89S52 is a more mature models in the 51series, it is fully compatible with the directive MCU 51.

This paper describes the MCU based on the AT89S52 the design of digital electronic clock, the electronic clock can be achieved date, time and adjust the show, it also has the exact point timekeeping and a clock,for the better it can display the current temperature.

The design includes hardware and software design in two parts. Main hardware: AT89S52 MCU, character LCD module HY1602A, a number of buttons. the general idea for Software: by use of 12 MHz crystal, the MCU's internal timer 0 works in the methods 1, each count 50,000 machine cycle (50 ms) resulted in an interruption, Composition a second by interruptting 20 times, so that you can achieve precise The purpose of time. it will be displayed the real-time data on the LCD1602 at the same time, and constantly scan button, if a button is depressed, it will be produce the corresponding response with the button.

Keywords: MCU; electronic clock; LCD1602;

武汉理工大学《能力拓展训练》课程设计说明书

目 录

1 设计方案 ..................................................... 1

1.1 设计要求 ............................................... 1 1.2 设计方案论证 ........................................... 1 2 硬件设计 ..................................................... 2

2.1 器件选型 ............................................... 2 2.2 器件介绍 ............................................... 2

2.2.1单片机AT89S52 .................................... 2 2.2.2 LCD1602显示模块 ................................. 3

3 软件设计 .................................................... 5

3.1 软件设计思路 .......................... 错误!未定义书签。

3.1.1 实现功能 ........................ 错误!未定义书签。 3.1.2编程思路 ......................................... 5 3.1.3操作及功能介绍 .................. 错误!未定义书签。 3.2 主程序流程图 ........................................... 6 4 仿真图 ....................................................... 7 5 设计体会及小结 ............................................... 7 参考文献 ...................................... 错误!未定义书签。 附录1 硬件电路设计图 ......................... 错误!未定义书签。 附录2 主程序 ................................. 错误!未定义书签。

武汉理工大学《能力拓展训练》课程设计说明书

武汉理工大学《能力拓展训练》课程设计说明书

1 设计方案

1.1 设计要求

用AT89S52单片机,在1602LCD上显示年月日、星期、时分秒设计数字钟,内有3组可设置的时间的按钮,当你按动选择键第一次后,秒针开始闪烁,这时按动加或者减去调整秒的时间,当你按动选择键第二次后,分针开始闪烁, 这时按动加或者减去调整秒的时间,以此类推,当年份设定好以后,在按动一下选择键,时间开始走动。

1.2 设计方案论证

本设计是纯粹的应用性设计,主要以实现计时、定时、温度显示等功能为最终目的。设计以Atmel公司的AT89S52为核心,在最小系统的基础上扩展键盘,数字温度计,以及LCD显示模块,硬件设计简单节约,其功能的实现主要靠软件设计,所以软件在本设计中是最为重要的,在计时设计思路上有两种方案可以选取。

方案一:选用外部时钟芯片,单片机只负责其数据的存取读写以及外部辅助电路的扩展,这种方案的优点是计时准确,软件编写相对简单,但其要求对其芯片必须要有比较深的了解

方案二:利用单片机的内部时钟和定时器进行计数,这种方案电路简单,容易实现,但时间容易丢失,且长时间计数会有误差,而且软件编写也相对复杂。

考虑到本次设计的目的,采用方案二,并加入了年月日的扩展,由于时间和精力有限年月日只是进行简单的模拟,没有精确的进行计算。只是进行适当的扩展。

本设计包括硬件设计和软件设计两部分。主要硬件有AT89S52单片机、字符型液晶显示模块LCD1602和若干按键等。软件大致思路为:使用12MHz的

1

武汉理工大学《能力拓展训练》课程设计说明书

晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的。在把实时数据显示在LCD1602上的同时,不断扫描按键,如果有按键按下,则对按键做出相应的响应。

2 硬件设计 2.1 器件选型

本设计选取主控MCU为Atmel公司的AT89S52,显示器件选择市面上常见的字符型液晶显示模块LCD1602A。

图2-1 硬件连接总图

2.2 器件介绍

2.2.1单片机AT89S52

2

武汉理工大学《能力拓展训练》课程设计说明书

一、功能特性描述

AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

二、外部引脚图

如图2-2为单片机AT89S52的引脚图。

图2-2AT89S52引脚图

2.2.2 LCD1602显示模块

一、LCD1602概述

3

武汉理工大学《能力拓展训练》课程设计说明书

字符型型液晶是一种用5×7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字。本设计所采用的LCD1602即为最常用的2行16个字。

下面是HY1602A液晶模块的一些主要技术参数: 1、逻辑工作电压(VDD):+4.5~+5.5V 2、LCD驱动电压(VDD-VL):+4.5~+13.0V

3、工作温度(Ta):0~60℃(常温)/-20~75℃(宽温) 4、工作电流:<2.0mA 二、引脚图及功能介绍

本设计使用带背光的液晶模块1602采用标准的16脚接口,如图2-3,其引脚功能如下:

图2-3 LCD1602引脚图

第1脚:VSS为电源地,接GND。 第2脚:VDD接5V正电源。

第3脚:VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

4

武汉理工大学《能力拓展训练》课程设计说明书

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15脚:BLA背光电源正极(+5V)输入引脚(本图未显示)。 第16脚:BLK背光电源负极,接GND(本图未显示)。 注意:液晶模块背光须消耗电流约为50mA左右。

3 软件设计

3.1.2编程思路

1. 给以下变量赋初值:年(Year)、月(Month)、日(Day)、时(Hour)、分(Min)、秒(Sec)。

2. 因为晶振频率为12MHz,所以计数频率为12MHz/12=1MHz,这就需要计数器0计数1000000次才可以达到一秒钟。我们用定时器0工作在方式1状态,每次计数50000次,如此进行20次,即可凑够一秒钟。这样可以得到初始化定时器的控制字:TMOD=0x01,计数初值65536-50000=15536即 0x3cb0,这样就可以设计一个计数一秒的函数。

3. 读相应变量的值,送入LCD显示时间等信息。

4. 不断的扫描按键,并且响应按键输入。在进入设定模式后,所有时间变量被过渡变量代替,如果确认设置,则过渡变量赋给时间变量,如果取消设置,则还使用原时间变量。

5

武汉理工大学《能力拓展训练》课程设计说明书

3.2 主程序流程图

判断是否有 有 扫描键盘 初始化 开始

键按下 设定时间 否 显示时间 结束 图3-1 主程序流程图

6

武汉理工大学《能力拓展训练》课程设计说明书

4 仿真图

5 设计体会及小结

本设计在Proteus仿真软件测试成功,但是,此电子钟有自身的先天缺陷。首先,由于采用单片机内部定时器产生时间信号,所以如果时钟意外掉电,则会丢失当前的时间和闹钟等数据,需要重新设定。由于本人能力和时间有限,只能暂时实现本既定方案。

课设也大大锻炼了我们的自学能力。比如我们要用到的很多芯片,不可能样样都在课本上学习过的,学过的毕竟是少数,在以后的学习实践和工作中,要用的东西五花八门,怎么可能四年都学遍呢?而且像我们学的这门迅速发展中的学科,知识更新一日千里,要准备好学习一辈子的,在大学里课堂上所学

7

武汉理工大学《能力拓展训练》课程设计说明书

的只是方法,至于其中的内容,还要靠自己去挖掘,所谓“师傅领进门,修行在个人”就是这个道理,这才是成年人的学习生活,因此,通过课设,我们掌握了一项很基本但对于我们来讲很重要且具有十分深刻意义的技能,就是学会自学,这是前所未有的。

源程序

#include

#define uchar unsigned char #define uint unsigned int

uchar code table[]=\ 2012-12-30 MON\ uchar code table1[]=\ 23:59:54\

sbit RS=P2^0; sbit E=P2^2; sbit xue=P3^0; sbit jia=P3^3; sbit jian=P3^7; sbit di=P3^4;

uchar num,flag,a,nian,yue,ri; uchar shi,fen,miao; void delay(uchar z) {

uint x,y;

for(x=z;x>0;x--)

8

武汉理工大学《能力拓展训练》课程设计说明书

for(y=110;y>0;y--);

}

void R_COMD(uchar i) { RS=0;

P0=i; delay(5);

E=1;

delay(5);

E=0;

}

void R_date(uchar date) { RS=1;

P0=date; delay(5);

E=1;

delay(5);

E=0;

}

void inti ()

9

武汉理工大学《能力拓展训练》课程设计说明书

{

di=0;

E=0;

R_COMD(0x01); R_COMD(0x38);

R_COMD(0x0c); R_COMD(0x06); R_COMD(0x80); TMOD=0X01;

ET0=1;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; TR0=1;

for(num=0;num<16;num++) {

R_date(table[num]); }

R_COMD(0x80+0x40);

for(num=0;num<12;num++) {

R_date(table1[num]); delay(20);

10

武汉理工大学《能力拓展训练》课程设计说明书

}

delay(20); }

void write_sfm(uchar add,uchar datt)

{ }

uchar shi,ge; shi=datt/10; ge=datt;

R_COMD(0x80+0x40+add); R_date(0x30+shi); R_date(0x30+ge);

void write_nyr(uchar add,uchar num)

{ }

void keyscan() {

uchar shi,ge; shi=num/10; ge=num; R_COMD(0x80+add); R_date(0x30+shi); R_date(0x30+ge);

11

武汉理工大学《能力拓展训练》课程设计说明书

uchar aa; // miao=0;

if(xue==0) {

aa++; delay(5); if(xue==0) { if(aa==1) {

while(xue==0); TR0=0;

R_COMD(0x0d);

R_COMD(0x80+0x40+11); } if(aa==2) {

while(xue==0);

R_COMD(0x80+0x40+8);

}

if(aa==3) {

while(xue==0);

R_COMD(0x80+0x40+5);

}

12

武汉理工大学《能力拓展训练》课程设计说明书

if(aa==4) {

while(xue==0); R_COMD(0x80+11);

} if(aa==5) {

while(xue==0); R_COMD(0x80+8); } if(aa==6) {

while(xue==0); R_COMD(0x80+5); } if(aa==7) {

while(xue==0); aa=0; TR0=1; R_COMD(0x0c);

13

武汉理工大学《能力拓展训练》课程设计说明书

}

}

}

if(aa!=0) {

if(aa==1) {

if(jia==0) {

delay(5); if(jia==0) {

while(jia==0); miao++; } {

delay(5); if(jian==0) {

if(jian==0) if(miao==60) miao=0; write_sfm(10,miao); R_COMD(0x80+0x40+11); }

14

武汉理工大学《能力拓展训练》课程设计说明书

while(jian==0); miao--; } }

if(miao==-1)

miao=59;

write_sfm(10,miao); R_COMD(0x80+0x40+11); }

if(aa==2) { {

delay(5); if(jia==0) {

while(jia==0); fen++;

if(fen==60) fen=0; write_sfm(7,fen);

R_COMD(0x80+0x40+8); if(jia==0)

15

武汉理工大学《能力拓展训练》课程设计说明书

} {

delay(5); if(jian==0) {

while(jian==0); fen--; } } if(aa==3) { {

delay(5); if(jia==0)

if(jia==0) } if(fen==-1) fen=59; write_sfm(7,fen);

R_COMD(0x80+0x40+8); if(jian==0) }

16

武汉理工大学《能力拓展训练》课程设计说明书

{

while(jia==0); shi++;

if(shi==24) shi=0; write_sfm(4,shi);

R_COMD(0x80+0x40+5);

}

}

if(jian==0) {

delay(5); if(jian==0) {

while(jian==0); shi--; if(shi==-1)

shi=23; write_sfm(4,shi);

R_COMD(0x80+0x40+5); }

17

武汉理工大学《能力拓展训练》课程设计说明书

} }

if(aa==4)

{ {

delay(5); if(jia==0) {

while(jia==0); ri++;

if(ri==31) ri=1; write_nyr(10,ri); R_COMD(0x80+11); if(jia==0)

}

}

if(jian==0) {

delay(5);

18

武汉理工大学《能力拓展训练》课程设计说明书

if(jian==0) {

while(jian==0); ri--; if(ri==-1) } }

ri=30; write_nyr(10,ri); R_COMD(0x80+11); }

if(aa==5) { {

delay(5); if(jia==0) {

while(jia==0);

yue++; if(jia==0)

19

武汉理工大学《能力拓展训练》课程设计说明书

if(yue==13) yue=1; write_nyr(7,yue); R_COMD(0x80+8);

}

}

if(jian==0) {

delay(5); if(jian==0) {

while(jian==0);

yue--;

if(yue==-1) }

yue=12; write_nyr(7,yue); R_COMD(0x80+8); }

20

武汉理工大学《能力拓展训练》课程设计说明书

}

if(aa==6) { {

delay(5); if(jia==0) {

while(jia==0);

nian++; if(nian==2099) nian=2000; write_nyr(4,nian); R_COMD(0x80+5); if(jia==0)

}

}

if(jian==0)

21

武汉理工大学《能力拓展训练》课程设计说明书

{

delay(5); if(jian==0) {

while(jian==0);

} }

}

}

void main() { inti();

while(1) { keyscan();

nian--;

if(nian==-1) nian=2099; write_nyr(4,nian); R_COMD(0x80+5);

}

22

武汉理工大学《能力拓展训练》课程设计说明书

}

}

void temer() interrupt 1 { TH0=(65536-50000)/256;

TL0=(65536-50000)%6; a++; if(a==20) { a=0; miao++; if(miao==60) {

miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; ri++; if(ri==31)

{

23

武汉理工大学《能力拓展训练》课程设计说明书

ri=1; yue++; if(yue==13) { yue=1; nian++; write_nyr(4,nian); }

write_nyr(7,yue); }

write_nyr(10,ri); }

write_sfm(4,shi); }

write_sfm(7,fen);

}

write_sfm(10,miao); }

}

24

本文来源:https://www.bwwdw.com/article/ek1o.html

Top