单片机数字钟.docx
- 文档编号:27571600
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:31
- 大小:342.20KB
单片机数字钟.docx
《单片机数字钟.docx》由会员分享,可在线阅读,更多相关《单片机数字钟.docx(31页珍藏版)》请在冰豆网上搜索。
单片机数字钟
课程设计说明书
课程名称:
单片机原理与应用课程设计
题目:
数字钟
专业班级:
学生姓名:
学号:
指导教师:
设计周数:
设计成绩:
目录
一、摘要………………………………………………………3
二、设计目的和任务…………………………………………3
2.1设计目的………………………………………………...…3
2.2设计任务………………………………………………...…4
三、设计正文
3.1系统分析………………………………………………….…4
3.2基本元器件介绍……………………………………….…...4
3.2.1AT89C51介绍………………………….…………………….……4
3.2.2液晶的管脚说明………………………………………………...…8
3.3方案设计………………………………………….……10
3.4硬件设计
3.4.1控制模块……………………………………………………..……10
3.4.2显示模块………………………………………………………….…11
3.4.3按键模块………………………………………….……………….11
3.4.4消抖电路………………………………………………….……….12
3.5软件设计
3.5.1总原理图………………………………………………………..…12
3.5.2主程序…………………………………………………………..…13
四、课程设计总结……………………………………..……26
参考文献……………………………………………………26
心得体会……………………………………………………27
附录…………………………………………………………29
摘要
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
本次设计中以单片机的发展过程和发展方向为背景,介绍了单片机的输入输出的工作原理和操作方法,中断的工作原理和操作方法。
单片机的工作原理和操作方法,LED的内部结构。
电路设计及调试过程。
本次做的数字钟是以单片机(51)为核心,结合相关的元器件(液晶1602),再配以相应的软件,达到制作简易数字钟的目的,其硬件部分难点在于元器件的选择、布局及焊接。
关键词:
单片机液晶1602
二、设计目的和任务
2.1设计目的
本次设计的目的就是让同学们在理论学习的基础上,通过完成一个基于MSC—51单片机实现功能所需功能的开发板以及编程应用,使我们不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深了解和认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到全面的锻炼和提高,为今后能够独立进行某些单片机应用法系统的开发设计工作打下一定的基础。
主要可以概括成一下几个方面:
(1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;
(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;
(3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤;
(4)掌握计数器、加法器、半导体数码管显示器的使用;
(5)连接数字钟的工作原理。
2.2设计任务
基于AT89C51单片机,通过液晶1602显示本次课程设计所要求实现的功能。
设计任务如下:
1、可调整时间的时钟。
要求:
液晶1602可显示年月日、小时、分钟和秒,通过按键
来设定初始时间。
2、开关控制秒表。
要求:
按键控制秒表的启动/停止/复位。
3、闹铃功能。
要求:
时间到,声音提示。
3、设计正文
3.1系统分析
本系统是由控制模块、显示模块、按键模块、消抖电路模块四大部分组成。
(图1)系统框图
3.2基本元器件介绍
3.2.1AT89C51介绍
微型计算机的基本组成有三部分,即中央处理器CPU(通常包括运算器和控制器)+存储器+输入/输出(I/O)接口。
若将组成计算机的基本部件集成在一块芯片上,则俗称单片微机。
80C51内部结构主要包括中央处理器CPU(算术逻辑部件ALU、控制器等)、只读存储器ROM、随机存取存储器RAM、定时器/计数器、并行I/O口P0~P3、串行口、中断系统以及定时控制逻辑电路等。
(图2)单片机引脚图
1、中央处理器
单片机中的中央处理器是单片机的核心,主要完成运算和控制功能,又增设了“面向控制”的处理功能,增强了实时性。
2、程序存储器
根据内部是否带有程序存储器而形成三种型号:
内部没有程序存储器的称80C31,内部带ROM的称80C51,内部以EPROM代替ROM的称87C51。
目前单片机的程序存储器有以下几种结构形式:
(1)片内只读存储器
片内掩膜ROM的特点是程序必须在制作单片机时写入。
片内可编程的ROM可直接由用户进行编程,紫外线可擦出型ROM-EPROM型单片机(如87C51)。
EPROM需用紫外线擦除,必须脱机固化,不能在线改写。
电可擦除型ROM-EEPROM,称为Flash单片机(如89C51)。
EPROM和EEPROM都是可以多次擦除和编程的,或称MTP的ROM。
OTP的ROM,仅允许用户一次编程。
(2)片外只读存储器
利用单片机的并行扩展技术可以外扩片外只读存储器。
3数据存储器(RAM)
在单片机中,用随机存取存储器来存储程序在运行期间的工作变量和数据,所以称为数据存储器。
在单片机中,常把寄存器(如工作寄存器、特殊功能寄存器、堆栈等)在逻辑上划分在片内RAM空间中,所以可将单片机内部RAM看成是寄存器堆,有利于提高运行速度。
当内部RAM容量不够时,还可通过串行总线或者并行总线外扩数据存储器。
4.并行I/O口
单片机往往提供了许多功能强、使用灵活的并行输入/输出引脚,用于检测与控制。
有些I/O引脚还具有很多功能,比如还可以作为数据总线的数据线、地址总线的地址线、控制总线的控制线等。
单片机I/O口引脚的驱动能力也逐渐增大,甚至可以直接驱动外扩的LED显示器。
5.串行I/O口
目前高档8位单片微机均设置了全双工串行I/O口,用以实现与某些终端设备进行串行通信,或者和一些特殊功能的器件相连的能力,甚至用多个单片机相连构成多机系统。
随着应用的拓展,有些型号的单片机内部还包括含有两个串行I/O口。
6.定时器/计数器
在单片机的实际应用中,往往需要精确的定时,或者需对外部事件进行计数。
为了减少软件开销和提高单片机的实时控制能力,因而均在单片机内部设置定时器/计数器电路。
80C51共有两个16位的定时器/计数器,80C52则有三个16位的定时器/计数器。
7.中断系统
80C51单片机的中断能力较强,具有内、外五个中断源,二个中断优先级。
8.定时电路及元件
计算机的整个工作是在时钟信号的驱动下,按照严格的时序有规律的一个节拍一个节拍的执行各种操作。
单片机微机内部设有定时电路,只需外接震荡元件即可工作。
外接震荡元件一般选用晶体振荡器,或用廉价的RS振荡器,也可用外部时钟源,作为震荡元件。
近来有的单片机将震荡元件也集成在芯片内部。
按引脚的功能可分为三部分:
1.电源和晶振:
Vcc—运行和程序校验时接电源。
Vss—接地。
XTAL1—输入到单片微机内部振荡器的方相放大器。
当采用外部振荡器时,对单片机,此引脚应接地;对CHMOS单片机,此引脚作驱动端。
XTAL2—反相放大器的输出,输入到内部时钟发生器。
当采用外部振动器时,XTAL2接收振荡器信号。
2.I/O:
共4个口,32根I/O线。
P0---8位、漏极开路的双向I/O口。
当使用片外存储器(ROM及RAM)时,作低八位地址和数据总线分时复用。
P0口(作为总线时)能驱动8个LSTTL负载。
P1---8位、准双向I/O口。
在编程/校验期间,用做输入低位字节地址。
P1口可以驱动4个LSTTL负载。
P2--8位、准双向I/O口。
当使用片外存储器(ROM及RAM)时,输出高8位地址。
在编程/校验期间,接收高位字节地址。
P2口可以驱动4个LSTTL负载。
P3口---8位、准双向I/O口,具有内部上拉电路。
P3提供各种替代功能,在提供这些功能时,其输出锁存器应由程序置1。
P3口可以输入/输出4个LSTTL负载。
串行口:
P3.0------RXD串行输入口。
P3.1------TXD串行输出口。
中断口:
P3.2-------外部中断0输入。
P3.3-------外部中断1输入。
定时器/计数器:
P3.4--------定时器/计数器T0的外部输入。
P3.5--------定时器/计数器T1的外部输入。
数据存储器选通:
P3.6--------WR低电平有效,输出,片外存储器写选通。
P3.7--------RD低电平有效,输出,片外存储器读选通。
3.控制线:
共4根。
RST-----复位输入信号,高电平有效。
在振荡器工作时,在RST上作用两个机器周期以上的高点平,将器件复位。
EA/Vpp------片外程序存储器访问允许信号,低电平有效。
EA=1,选择片外程序存储器(80C51为4KB);EA=0,则程序存储器全部在片外而不管片内是否有程序存储器。
ALE/PROG------地址锁存器允许信号,输出。
在访问片外存储器或I/O时,用于锁存器低八位地址,以实现低八位地址与数据的隔离。
由于ALE以1/6的振荡频率固定速率输出,可作为对外输出的时钟或用作外部定时脉冲。
在EPROM编程期间,作输入。
输入编程脉冲(PROG)。
ALE可以驱动8个LSTTL负载。
PSEN-----片外程序存储器读选通信号。
低电平有效。
在从片外程序存储器取值期间,在每个机器周期中,当有效时,程序存储器的内容被送上P0口(数据总线)。
可以驱动8个LSTTL负载。
3.2.2液晶的管脚说明
(表1)液晶管脚说明
1602基本操作时序
1.读状态:
输入:
RS=0,RW=1,EN=1;输出:
D0~D7=状态字。
2.写指令:
输入:
RS=0,RW=0,D0~D7=指令码EN=高脉冲;输出无。
3.读数据:
输入:
RS=1,RW=1,EN=1;输出:
D0~D7=数据。
4.写数据:
输入:
RS=1,RW=0,D0~D7=数据,EN=高脉冲;输出无。
1602指令说明
指令码
功能
00111000
设置16×2显示,5×7点阵,8位数据端口
00001DCB
D=1开显示D=0关显示
C=1显示光标C=0不显示光标
B=1光标闪烁B=0光标不闪烁
000001NS
N=1当读或写一个字节地址指针加一,且光标加一
N=0当读或写一个字节地址指针减一,且光标减一
S=1写一个字符,屏幕显示左移(N=1)或右移(N=0)以得到光标不动而屏幕移动的效果
S=0屏幕显示不移动
80H+地址码(0-27H,40H-67H)
设置数据地址指针
01H
显示清屏
02H
显示回车
(表2)1602液晶指令
(图3)液晶初始化流程
3.3方案设计
本方案完全采用软件实现数字时钟。
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息,并通过程序控制扫描输出显示数据。
利用定时器0与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。
该方案具有硬件电路简单的特点,但当单片机不接电源时,程序将不执行。
且由于每次执行程序时,定时器都要重新赋值,固该时钟精度不够高。
3.4系统硬件设计
3.4.1控制模块
控制模块电路图如
(图4)控制模块电路图
3.4.2显示模块
显示模块电路图
(图5)显示模块电路图
3.4.3按键模块
按键模块电路图
(图6)按键模块电路图
本按键模块采用的是4*4矩阵键盘,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
行线所接的4个I/O口作为输出端,列线所接的单片机4个I/O口作为输入端,而这样,当按键没有被按下时,所有的输出端都是高电平,代表无按键按下。
如行输出线是低电平,一旦有键按下,则列线输入就会被拉低,从而通过读入列输入线的状态可知是否有键按下了。
我们设计的是所使用的是单片机的P3口作为键盘I/O口,行线接P3.0~P3.3口,列线P3.4~P3.7口。
3.4.4消抖电路
消抖可以采用硬件(施密特触发器)的方式,也可以采用软件的方式。
在此只讨论软件方式。
软件消抖有定时器定时,和利用延时子程序两种方式。
一,定时器定时消抖可以不影响显示模块扫描速度,其实现方法是:
设置标志位,在定时器中断中将其置位,然后在程序中查询。
将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。
二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。
因此,延时子程序的延时时间应该小于20毫秒,如果采用定时器定时的方式,延时时间不影响时钟。
如果,设计时采用的是中断的方式来完成有关操作,同样可以采用软件的方式来消抖,其处理思想是:
中断不能连续执行,两次之间有一定的时间间隔。
3.5软件设计
3.5.1总原理图
(图7)总原理图
3.5.2主程序
主程序框图
(图8)主程序框图
主程序:
#include
#include
#include"1602.h"
#defineucharunsignedchar
#defineuintunsignedint
sbits1=P3^0;
sbits2=P3^1;
sbits3=P3^2;
sbits4=P3^3;
sbitrd=P3^7;
sbitbuzzer=P2^3;
ucharcount,s1num,s4num;
ucharmiao,shi,fen,date,month,year;
ucharmiao_set,shi_set,fen_set;
ucharflag;
uchartable[]="YMD2011-06-22";
uchartable1[]="TME00:
00:
00";
voiddelay_ms(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************************蜂鸣器报警函数*****************************/
voidbuzzer_alarm(ucharm)
{
uchara;
for(a=m;a>0;a--)
{
buzzer=0;
delay_ms(1000);
buzzer=1;
delay_ms(500);
buzzer=0;
delay_ms(1000);
}
}
/**************************定时计数器初始化函数**************************/
voidInitTimer()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/******************************键盘扫描函数********************************/
voidKeyScan(viod)
{
rd=0;
if(s1==0)//扫描S1
{
delay_ms(10);
if(s1==0)
{
TR0=0;
s1num++;
while(!
s1);
switch(s1num)
{
case1:
Write_LCD_Command(0xc0|10);
Write_LCD_Command(0x0f);
break;
case2:
Write_LCD_Command(0xc0|7);
break;
case3:
Write_LCD_Command(0xc0|4);
break;
case4:
Write_LCD_Command(0x80|12);
break;
case5:
Write_LCD_Command(0x80|9);
break;
case6:
Write_LCD_Command(0x80|6);
break;
case7:
s1num=0;
Write_LCD_Command(0x0c);
TR0=1;
break;
}
}
}
if(s4==0)
{
delay_ms(10);
if(s4==0)
{
s4num++;
flag=1;
Write_1602(10,1,miao_set);
Write_1602(7,1,fen_set);
Write_1602(4,1,shi_set);
while(!
s4);
switch(s4num)
{
case1:
Write_LCD_Command(0xc0|10);//按键一次,调整光标位置和形状
Write_LCD_Command(0x0f);
break;
case2:
Write_LCD_Command(0xc0|7);
break;
case3:
Write_LCD_Command(0xc0|4);
break;
case4:
s4num=0;
flag=0;
Write_LCD_Command(0x0c);
Write_1602(10,1,miao);
Write_1602(7,1,fen);
Write_1602(4,1,shi);
break;
}
}
}
if(s1num)//在S1被按下的情况作相应处理
{
if(s2==0)
{
delay_ms(10);
if(s2==0)
{
while(!
s2);
switch(s1num)
{
case1:
miao++;
if(miao==60)miao=0;
Write_1602(10,1,miao);
Write_LCD_Command(0xc0|10);
break;
case2:
fen++;
if(fen==60)fen=0;
Write_1602(7,1,fen);
Write_LCD_Command(0xc0|7);
break;
case3:
shi++;
if(shi==24)shi=0;
Write_1602(4,1,shi);
Write_LCD_Command(0xc0|4);
break;
case4:
date++;
if(date==31)date=1;
Write_1602(12,0,date);
Write_LCD_Command(0x80|12);
break;
case5:
month++;
if(month==13)month=1;
Write_1602(9,0,month);
Write_LCD_Command(0x80|9);
break;
case6:
year++;
Write_1602(6,0,year);
Write_LCD_Command(0x80|6);
break;
case7:
break;
}
}
}
if(s3==0)
{
delay_ms(10);
if(s3==0)
{
while(!
s3);
switch(s1num)
{
case1:
miao--;
if(miao==-1)miao=59;
Write_1602(10,1,miao);
Write_LCD_Command(0xc0|10);
break;
case2:
fen--;
if(fen==-1)fen=59;
Write_1602(7,1,fen);
Write_LCD_Command(0xc0|7);
break;
case3:
shi--;
if(shi==-1)shi=23;
Write_1602(4,1,shi);
Write_LCD_Command(0xc0|4);
break;
case4:
date--;
if(date==0)date=30;
Write_1602(12,0,date);
Write_LCD_Command(0x80|12);
break;
case5:
month--;
if(month==0)month=12;
Write_1602(9,0,month);
Write_LCD_Command(0x80|9);
break;
case6:
year--;
Write_1602(6,0,year);
Write_LCD_Command(0x80|6);
break;
case7:
break;
}
}
}
}
if(s4num)//在S4被按下作相应处理
{
if(s2==0)
{
delay_ms(10);
if(s2==0)
{
while(!
s2);
switch(s4num)
{
case1:
miao_set++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字