单片机相关毕业设计Word格式文档下载.docx
- 文档编号:17772701
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:26
- 大小:683.39KB
单片机相关毕业设计Word格式文档下载.docx
《单片机相关毕业设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机相关毕业设计Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
(5)合理编辑程序。
2.2方案论证
设计的电子时钟是利用8051单片机内部的晶振产生振荡,每秒频率为12MHZ,其精度稳定,不受外界温度和湿度的影响,但是会有如下问题出现:
(1)外界复杂的电磁环境,会影响到单片机信号的输入、输出,而且单片机内部运行的机械周期也会使电子时钟的精度受到影响。
方案:
在电子时钟外壳内装备较薄的金属薄片,屏蔽外部电磁干扰。
(2)由于芯片执行程序需要一定的时间,从而使定时计数产生误差。
定时计数再未进行初始化的时候,处于原始状态,不能进行定时和计数,所以需要对定时计数器里的初始值进行计算和调整,并且选定合适的工作方式。
通过与日常生活中常用的时钟比较,找出产生误差的原因,计算误差的大小,通过对程序的调整和初始值得设定,减小误差,使之达到使用精度。
(3)需随时对时间进行调整,要求设置键盘,并对键盘输入的稳定性进行调整。
采用列式键盘,按键数为4,编辑去抖动程序。
(4)要求对时间进行动态显示,精确到秒。
采用LCD液晶显示器进行动态显示。
(5)接线复杂,易出现错接误接。
采用电路板进行连接
第三章总体方案确定与实现
3.1电子时钟电路设计框图
图3.1-1
3.2系统硬件
该电路是由MCS8051单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;
时钟电路也由MCS8051单片机提供,减少芯片的使用,节约成本,它可以对年、月、日、周、日、时、分、秒进行计时,时间显示部份采用液晶LM016L(LCD),此次单片机数字时钟的设计采用MCS8051为主控制芯片,并由其定时器提供时钟,利用LCD进行时间按显示。
其电路原理图如下所示:
图3.2-1
3.3软件方案
进行应用软件设计时采用模块化程序设计方法,其优点是:
(1)每个模块程序机构简单,任务明确,易于编写,调试和修改。
(2)程序可读性好,对程序的修改可局部进行,其他部分可保持不变,便于功能的扩充和版本升级。
(3)对于使用频繁的子程序可以建立子程序库,便于多模块调用。
(4)便于分工合作,多个程序员同时进行程序的编写和调试工作,加快软件研制进度。
该程序可划分为7个模块:
主程序,LCD显示模块,当前时间计时模块,输入闹钟模块,当前时间调整模块,音频报警模块,数据转坏模块。
第四章硬件设计
4.1LCD显示模块
在实际应用中,用户很少直接设计LCD显示器驱动接口,一般是直接使用专用的LCD显示驱动器和LCD显示模块。
其中,LCD显示模块LCM(Liquid
Crystal
Display
Module)是把LCD显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。
其内部结构如图4.1-1所示。
LCD显示模块只留一个接口与外部通信。
显示模块通过这个接口接收显示命令和数据,并按指令和数据的要求进行显示。
外部电路通过这个接口读出显示模块的工作状态和显示数据。
LCD显示模块一般带有内部显示RAM和字符发生器,只要输入ASCII码就可以进行显示。
LCD显示模块按功能显示可分为:
LCD段式显示模块、LCD字符型显示模块、LCD图形显示块三类。
液晶显示器因其功耗低、重量轻而成为便携式应用中的主流显示技术。
这里所用的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等。
液晶显示有点振式和字符式两种,在这里采用字符式液晶显示器1602来实现显示电路的功能。
该设计采用液晶显示装置即把时钟信号以及温度信号同时显示在液晶显示器上,不仅结构简单清新可见,而且省电也容易控制。
数据的传输采用P0口进行控制,其引脚VSS接地,VEE接VCC,RS和RW、E是显示器的控制端分别由单片机的引脚P1.0、P1.1、P1.3进行控制。
而VDD是作为液晶显示器的灰度调节引脚,接一变阻器来改变其显示的清晰度。
图4.1-1LM016L液晶显示器
图4.1-2LCD显示电路
由于1602液晶显示器是本身带有驱动模块的液晶屏,它只有并口线和一些控制线,与单片机的连接有两种不同的方法,直接访问方式和间接访问方式。
直接访问方式就是微处理器把液晶显示模块当作存储器或I/O设备直接挂在总线上,模块8位数据总线与微处理器的数据总线相连,用读操作
或写操作
信号与地址信号共同产生控制信号。
4.2CPU8051
8051是ROM型16位单片机,共有40个引脚。
内含4K字节的ROM。
其主要组成如下:
(1)面向控制的8位CPU和指令系统。
(2)4K字节的程序存储器(ROM或EPROM)。
(3)128字节的数据存储器。
(4)可编程的并行I/O口P0~P3,有32位双向输入/输出线。
(5)一个全双工串行口。
(6)两个16位定时器/计数器。
(7)五个中断源,两个优先级中断机构。
(8)一个片内时钟振荡器和时钟电路。
(9)可寻址的64K字节的程序存储器和64K字节的外部数据存储器。
MCS-51的片外三总线结构:
(1)地址总线AB:
地址总线的宽度为16位,因此外部存储器直接寻址为64K字节。
16位地址总线中,由P0口经地址锁存器提供低8位地址A0~A7:
P2口直接提供高8位地址A8~A15。
(2)数据总线:
数据总线宽度为8位,由P0口提供D0~D7。
(3)控制总线CB:
由P3口的第二功能状态和4根独立控制线REST,/EA,ALE,和/PSEN组成。
其芯片结构如图4.2-2所示
图4.2-2
4.3引脚功能
Vcc(40):
电源电压GND(20):
接地
P0口(32-39):
P0口是一个8位双向I/O接口,也即地址/数据总线复用口。
作为输出口用时,每位吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器时,这组口线分时转换地址(低8位)和数据总线复用。
P1口(1-8):
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”通过内部的上拉电阻把端口拉到高电平时,此时可作输入口。
作为输入品使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
与AT89C51不同之处是,P1.0和P1.1还可以分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。
P2口(21-28):
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平时,此时可作输入口。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器时,P2口输出P2锁存器的内容。
P3口(10-17):
P3是一组带有内部上拉电阻的8位双向I/O口,P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口P3写“1”时,它们被内部上拉电阻拉高并可作为输入端口,此时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INT0(外中断0)
P3.3
INT1(外中断1)
P3.4
T0(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
WR(外部数据存储器写通道)
P3.7
RD(外部数据存储器读通道)
表3-1P3口的第二功能
RST(9):
复位信号输入端。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG(30):
地址锁存有效信号输出端。
当访问片外程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节,一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的,要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
PSEN(29):
程序存储允许输出端。
是片外程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP(31):
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地),需注意的是:
如果加密位LB1被编程,复位时内部会锁EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1(19):
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL1(18):
振荡器反相放大器的输出端。
通过XTAL1、XTAL2外接晶振后,即可构成自激振荡器,驱动内部时钟发生器向主机提供时钟信号。
4.4键盘模块
采用矩阵式1×
4键盘,其行接8051的P1口,列接8051P3口,如图所示:
图3.3-1
键盘扫描:
(1)确定是否有键按下。
(2)当有键按下时,则对键进行键译码,找出按下的是那个键;
当无键按下时,即返回。
(3)当按下的是数字键,则送显示缓冲单元;
当按下的是功能键,即转到对应的键服务程序。
(4)去抖动:
按键从开启到闭合稳定,或从闭合到完全打开,总要有数毫秒的弹跳时间(即抖动)。
弹跳将引起按一次键被多次输入的误动作。
为此,在键盘处理程序中,必须设法去掉抖动。
可以用硬件去抖动的方法,也可以采用硬件去抖动。
第五章软件设计
5.1程序流程图
图5.1-1
5.2初始值计算
以毫秒为基本计数单元,采用方式0,定时器1,其计算过程如下:
因为方式0采用13位计数器,8051的时钟频率为f=12MHZ,计数周期为1us,所以其最大定时时间为8192us,选择定时时间为5ms,再循环200次,即得到1S延时。
计数值为5ms/1us=5000
则定时器1的初值为
C=M-计数值=8192-5000=3192=C78H
采用方式0
故TMOD=00H
5.3主程序设计
MAIN:
MOVSP,#30H
MOVDPTR,#0E100H
MOVA,#03H
MOVX@DPTR,A
MOVTCON,#0
MOVIP,#02H
MOVIE,8AH
MOVTMOD,#21H
MOVTH0,#3CH
MOVTL0,0B0H
MOVR4,#10;
设置定时器T0的走秒用计数器
MOV71H,#0
MOV72H,#0
MOV73H,#00H
MOV74H,00H
MOVCLKBCD,#0
MOVCLKBCD+1,#0
MOVCLKBCD+2,#0
MOVCLKBCD+3,#0
MOVCLKBCD+4,#0
MOVCLKBCD+5,#0
SETBTR0;
启动计数走秒
REPDISP;
MOVR5,#3;
将计时值存放区的计时值拆分并存入计时值的BCD数据存放区为显示时间值做好准备
MOVRO,#70H
MOVR1,#CLKBCD
CLRTRO;
暂停计数,以防出现显示错误
CHAIREPI:
LCALLCHAI;
开始拆分转存
DJNZR5,CHAIREPI
MOVA,TL0
ADDA,#31H
MOVTL0,A
ADDCA,#0
MOVTH0,A
SETBTR0;
IT;
再次启动计数走秒
LCALLSTARTDISPLAY;
显示时间值
LCALLTESTKEY;
有键入吗?
JZAL;
没有键入则跳转到ALARM
SJMPNOAL;
有键入则读入键码
AL:
LJMPAI
NOAL:
LCALLGETKEY;
CJNZA,#0AH,BKEY;
是A键吗?
不是则跳转到BKEY
是“A”键则暂停计数走秒
MOVTL0,#0B0H
MOVR1,#60H
MOVR5,#2
LCALLSETTIME;
继续检测有无键时间修正值“0~2”键?
(时十位)
MOVA,60H
CJNZA,#2,NINE
MOVR5,#3
SJMPTHREE
NINE:
MOVR5,#9
THREE:
继续检测有无键时间修正值“0~3”或“0~9”键?
(时个位)
MOVR5,#5
继续检测有无键时间修正值“0~5”键?
(分十位)
(分个位)
MOVR5,#5
LCALLSTETIME;
(秒十位)
(秒个位)
MOVR5,#3将修正值存入70~72H
MOVRO,#60H
MOVR1,#70H
HEREP:
LCALLHE
DJNZR5,HEREP
恢复计数走秒
LJMPA1
BEKY:
CJNEA,#0BH,AL;
不是“B”键则跳转到ALARM,是“B”键则显示先前设定的闹钟时间
MOV60H,#0B0H
MOV61H,#10H
MOVR0,#73H;
显示先前设定的闹钟时间
MOVR1,#62H
CHAIREP:
LCALLCHAI
DJNZR5,CHAIREP
BEKY:
LCALLSTARTDISPLAY
LCALLTESTKEY;
继续检测有无键入
JZBKEY1;
没有键入则继续显示
LCALLGERTKEY;
CJNEA,#0BH,BKEY2;
如果再次键入“B”键则跳过设定闹钟值间的程序段
SJMPENDBKEY
BKEY2:
CJNEA,#2,JJ1
MOV62H,A
SJMPJJ3
JJ1:
JNCJJ2
MOV62H,A
SJMPJJ3
JJ2:
MOVR1,#62H
MOVR5,#2;
如果既不是“B”键又不是“0~2”之间的键,则等待键入“0~2”之间的键
LCALLSETTIME
JJ3:
MOVR1,#63H
MOVA,62H;
继续检测是否为闹钟时间值“0~9”或“0~3”键(时个位)
CJNEA,#2,NINE1
MOVR5,#3
SJMPTHREE1
NINE1:
MOVR5,#9H
THREE1:
LCALLSETTIME;
继续检测是否为闹钟时间值“0~9”或“0~3”键?
LCALLSETTIME;
继续检测是否为闹钟时间值“0~5”键?
MOVR5,#2;
将设定的闹钟时间值存入73H、74H单元
MOVR0,#62H
MOVR1,#73H
HEREP1:
DJNZR5,HEREP1
BKEY3:
继续检测有无键入“B”键,以便结束闹钟时间设定
JZBKEY3
LCALLGETKEY
CJNEA,#0BH,BKEY3;
不是“B”键则继续显示刚才设定的闹钟时间
ENDBKEY:
NOP
A1:
MOVR2,74H
CJNER2,#ALARM;
判断是否有闹钟时间
MOVR2,73H
CJNER2,#0,ALARM
LJMPALARM1
A1ARM:
MOVA,70H
CJNEA,73H,NOA1ARM;
判断是否到了闹铃时间
MOVA,71H
CJNEA,74H,NOA1ARM
LCALLMUSIC
SJMPA1ARMI
NOA1ARM:
CLRTR1
LJMPREPDISP
注:
定时器初始化,将定时器控制寄存器TCON置为0,设置定时器方式寄存器TMON为21H(#00100001B)即定时器0为方式1,定时器1为方式2.T0作为走秒定时器,T1作为闹钟定时器。
100Ms的计数初值为3CB0H,TH0=3CH,TL0=0B0H,将计时值存放区70H~72H放入初始值0,将闹钟时间存放区73H~74H放入初始值0,将计时值BCD数据存放区置初始值0,启动定时器T0,将70H小时存放区拆成时十位和时个位送给计时值BCD数据存放区,之后存入70H,将64H,65H合并后存入72H,恢复计数走秒。
调用A1判断是否有闹铃时间。
A为键码与0BH比较,判断是否为B键,不是B键跳转到A1,是B键显示先前设定的闹铃时间。
5.4子程序设计
5.4.1键盘扫描程序设计
TESTKEY:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A;
输出线置为0
MOVDPTR,#IN
MOVXA,@DPTR;
读入键状态
CPIA
ANLA,#0FH;
高四位不用
RET
KEYTABLE:
;
数字键码定义
DB00H,01H,04H,07H
DB0FH,02H,05H,08H
DB0CH,03H,06H,09H
DB0DH,OCH,0BH,0AH
DB10H,10H,10H,10H
DB10H,10H,10H,10H
GETKEY:
MOVP2,DPH
MOVR0,LOW(IN)
MOVR1,#00100000B
MOVR2,#6
KLOOP:
MOVA,R1;
找出键所在列
CPLA
MOVX@DPTR,A
MOVR1,A;
下一列
MOVXA,@R0
ANLA,#0FH
JNZGOON1;
该列有键入
DJNZR2,KLOOP
MOVR2,#0FFH;
没有键按下,返回0FFH
SJMPEXIT
GOON1:
MOVR1,A;
键值=列×
4+行
MOVA,R2
DCCA
R1A
MOVR2,A;
R2=(R2-1)×
4
MOVA,R1;
R1中为读入的行值
MOVR1,#4
LOOPC:
RRCA;
移位找出所在行
JCEXIT
INCR2;
R2=R2+行值
DJNZR1,LOOPC
EXIT:
MOVA,R2;
取出键码
MOVDPTR,#KEY
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 相关 毕业设计