作息时间控制系统设计.docx
《作息时间控制系统设计.docx》由会员分享,可在线阅读,更多相关《作息时间控制系统设计.docx(28页珍藏版)》请在冰豆网上搜索。
作息时间控制系统设计
XXXXXX大学
单片机最小应用系统
设
计
报
告
指导老师:
XXXX
学生:
XXXX
学号:
0XXXXX
XXXX学院
XXXX年XX月
单片机最小应用系统设计报告
一、设计题目………………………………………………………1
二、设计目的………………………………………………………1
三、系统硬件图……………………………………………………1
四、程序流程图……………………………………………………3
五、系统说明与分析
六、源程序………………………………………………………17
七、总结…………………………………………………………21
八、参考文献……………………………………………………21
一、设计题目
作息时间控制系统设计:
二、设计目的
1、通过本次实验,掌握利用芯片89S51。
2、通过对74LS1464,四位八段数码管的使用和编程,掌握数模转换的基本原理。
3、搭建单片机最小应用系统,进一步加深对单片机应用的理解,提高处理实际问题的能力和独立分析思考的能力。
二、系统硬件图
1作息时间控制系统的硬件电路原理图如下:
图1电路原理图
2、PCB图如下:
图2PCB图
三、程序流程图
四、系统说明与分析
4.1系统主要组成部分
作息时间控制系统主要分为四个部分:
单片机最小系统,显示部分,串行行口扩展并行输出部分,键盘处理部分。
所用主要元件有:
AT89S51,74LS164,八段四位共阴数目管,12MH晶振。
4.2串行行口扩展并行输出部分
74LS164是一种串行输入,并行输出的集成芯片,它将将单片机最小系统的输出的串行数字信号转换为并行输出控制信号。
74LS164的管脚图
图4DAC0832的管脚图。
Vcc芯片电源电压:
+4.5V~+5.5V;
A,B:
串行输入
QA,AB,..QH:
并行输出
GND:
接地端
CLOCK:
时钟信号
CLEAR:
清除端
4.3单片机最小系统部分
MCS-51系列单片机是一种高性能的8位机系列,广泛应用于各种小型控制系统中,其引脚图如图所示。
本论文采用的AT89s51单片机是AMTEL公司生产的MCS-51系列的兼容产品,与MCS-51指令系统兼容,系统结构相同,CMOS工艺制造并带有非易失性Flash程序存储器。
全部支持12时钟和6时钟操作。
AT89C51包含128字节RAM、32条I/O口线、3个16位定时/计数器、6输入4优先级嵌套中断结构、1个串行I/O口(可用于多机通信I/O扩展或全双工UART以及片内振荡器和时钟电路)。
CPU
RAM
ROM
I/O接口
电路
定时器/
计数器
时钟
图10MCS-51引脚图
MCS-51系列单片机的并行I/O口
接口电路是微机必不可少的组成部分,并行输入确出接口是CPU和外部进行信息交换的主要通道。
MSC-51系列单片有4个8位并行双向I/O口P0~P3,共32根I/O线。
每一根线能独立用作输入或输出。
单片机可以外接键盘、显示器等外围设备.还可以进行系统扩展,以解决硬件资源不足问题。
4个并行口都是双向口,既可以输入又可以输出。
P0、P2口经常作外部扩展存储器时的数据、地址线,P3口除作I/O口外,每一根都有第二功能。
这4个I/O口结构基本相同,但仍存在差别。
(1)P1口是最常用的I/O口如图所示,因为不作数据地址线,其结构中没有数据地址线,也没有多路开关MUX,输出驱动电路接有上拉电阻。
P1口输入输出时与P0作I/O时相似,输出数据时.先写入锁存器,经Q端反相,再经场效应管反相输出到引脚。
输入时,先向锁存器写l,使v管截止.外部引脚信号由下方读缓冲器送入内部总线,完成读引脚操作。
P1口也可以读锁存器。
外部提升电阻将引脚拉升至高电平,但输人的低电平信号能将其拉低,不会影响低电平的输入。
图11P1口一位结构
(2)P2口的位结构比P1多了一个控制转换部分如图5所示,结构与P0口基本相似,如下图所示。
P2口改P0推拉式输出驱动电路为上拉电阻式,当控制信号s为低电平,作I/O口使用时,多路开关MUX使锁存器输出端Q与输出驱动输入端接通,构成一个准双向口。
此外,当外部扩展存储器时,P2口常做高8位地址线使用。
图12P2口一位结构
下表中概括了单片机中使用到的并行口P1、P2功能:
表3P1、P2功能一览表
MCS-51系列单片机的工作方式和时序
单片机应用系统中,除了基本计算机系统单元电路外.还需配备完整的外围电路、以完成复位、掉电保护、提供时钟、节电等功能。
(1)时钟电路:
单片机内部有一个高增益的反相放大器,通过XTAL1和XTAL2引脚外接石英振于或陶瓷振子、微调电容组成振荡器如图13所示。
该振荡器发出的脉冲直接送入内部时钟电路。
振荡器若外接的是石英扳子,微调电容通常选择30pF;外接陶瓷娠子时选样47pF。
振荡频率范围选择1.2—12M。
MCS5-51系列单片机也可以采用外接时钟,这时XTAL2脚用来输入外部时钟信号(XTAL2脚为内部时钟电路的输入端),XTALl脚则接地如图13-b所示。
对于CHM05工艺制造的80C51单片机,则应从XTALl脚输入外部时钟信号,XTAL2脚悬空。
(a)外接石英晶体振荡电路(b)外接时钟电路
图13两种单片机时钟电路
(a)上电复位(b)按键电平复位
(c)RC放电过程(d)电平复位过程
图14单片机常用复位电路
(2)复位电路:
复位使单片机处于起始状态,并从此状态开始运行MCS5-51单片机RST引脚为复位端,该引脚连续保持2个机器周期(24个时钟振荡周期)以上的高电平。
可使单片机复位。
本论文使用的是外部复位电路,单片机在启动后要从复位状态开始运行,因此上电时要完成复位工作,称上电复位,如图14-a所示。
上电瞬间电容两端的电压不能发生突变,只RST端为高电平+5v,上电后电容通过及RC电路放电RST端电压逐渐下降,直至低电平0V,如图14-c所示。
适当选择R、C的值,使RST端的高I电平维持2个机器周期以上即可完成复位。
单片机L在运行过程中,出于本身或外并干扰的原因会导致出错。
这时可按复位键以重新开始远行,按键复位可分为按键电平复位或按健脉冲复位,如图14-b所示。
按键脉冲复位和上电平复值的原理是一样的,都是利用RC电路的放电原理,如图14-d所示。
让RST端能保持一段时间的高电平,以完成复位,按键电平复位时,按键时间也应保持在两个机器周期以上。
根据设计要求和计算简便的原则,我们选择12M的石英晶振、30PF的电容、+5V电源,最小系统如下:
图15单片机最小系统
5.5数码显示部分
八段LED数码管由8个发光二极管组成。
基中7个长条形的发光管排列成“日”字形,另一个圆点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。
LED数码管有两种不同的形式:
一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管。
四位八段数码管的引脚结构如下图所示:
图16四位八段数码管的引脚结构
其中S1,S2,S3,S4为字位选择端口,A,B,C,D,E,F,G,DP为字形选择端口。
在单片机应用系统中,数码管显示常用两种方法:
静态显示和动态扫描显示。
所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。
这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码。
动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。
其接口电路是把所有显示器的8个笔划段A-H同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。
CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。
所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
5.6电路板的制作
Protel99功能强大,为我们进行电子电路原理图和印制板图的设计提供了良好的操作环境。
用Protell99进行电路设计分为两大部分:
原理图的设计和电路板的设计。
原理图的设计实在SCH系统中进行的,电路原理图是印刷板电路设计的基础,只有设计好原理图才有可能进行下一步的电路板设计。
用protel99进行电路板设计的第一步是其原理图的设计。
显然,原理图决定整个电路的基本功能,也是接下来生成网表和设计印刷板电路的基础。
具体步骤如下:
(1)图面设置:
Protel99允许用户根据电路的规模设置图面的大小,按照偏好和习惯设置图面的样式。
实际上,设置图面就是设置了一个工作平面,以后的工作就要在这个平面上进行。
所以图面应该设置得足够大,为进一步工作提供一个足够大的工作空间。
(2)放置元件:
所谓放置元件就是从元件库中选取所需得元件,将其布置到图面上合适的位置,有时还要重定义元件的编号、封装。
元件的封装很重要,要根据元件的实际尺寸和实际封装来决定,要是元件没封装好,将会给以后电路板的制作带来很大的麻烦。
这些都是下一步工作的基础。
Protel99为用户提供了一个非完备的元件库,并且允许用户对这个元件库进行编辑或者新建自己的元件库。
电路板的制作过程
(1)打印:
将生成的PCB图打印到热转印纸上,需注意线不能太窄,墨要加重,否则制板时容易断线,如果在操作过程中断了线,可用电烙铁将锡带过。
(2)熨烫:
将热转印纸覆在铜板上,用电熨斗进行熨烫,关键要注意熨烫的时间,不能太久,也不能时间太短,否则,太久会把铜板烫坏,不够的话墨迹覆不上去。
(3)腐蚀:
把铜板放到三氯化铁溶液中腐蚀,需注意溶液浓度要较高,最好用热水配置,这样腐蚀更快,一般3分钟即可。
如果时间过长,需剩下的铜线也可能被腐蚀。
(4)打孔:
打孔时注意钻头尺寸,本次用的钻头大小是0.712mm的,最需注意的地方是集成块的管脚,如果打孔误差大,管座就很难插上。
(5)放置元件:
放置前应先打磨一下打孔后留下的毛刺,并均匀地涂上松香水(目的是防止铜线氧化,易于焊锡覆着焊盘,但多涂会导致焊接时焊点变黑,影响美观)。
放置元件时注意集成块的管脚,二极管和电解电容的正负,这些都是平时比较容易出错的地方。
(6)焊接:
焊接技术比较难掌握,焊锡、烙铁与焊盘的位置关系,焊锡熔化时间
长短,松香水的浓度,烙铁的温度等等,都是影响焊点美观的因素。
(7)检查:
检查是否有虚焊,集成块管脚位置是否正确,电源引线位置是否恰当等。
检查完毕就能进行调试了。
5.7系统连线说明分析
1、在本系统中单片机的P2.0-P2.3口与数码管的位选端口com1,com2,com3连接,P2.4,P2.5分别与74LS164的串行输入端A,B,时钟信号端相连。
74LS164的并行数据输出端与四位八段数码管的a,b,c,d,e,f,g相连。
单片机的P2.0-P2.3与数码管的位选端口S1、S2、S3、S4连接
2、观察数码管显示的值是否与当前温度值相符,如果不相符,微调精密可调电阻使值之与当前温度相同。
实验过程中的问题及改进方法
1、制作电路板过程中由于焊接等原因,造成电路连接不通现象,浪费了调试时间。
2、在实际测温过程中,由于AD590不是工作在理想状态下,因此所测温度不准确,可以通过调节精密可调电阻对温度进行修正,减少温度误差。
3、程序编制中,数码管的动态显示和串行输入,并行输出是个重点,需要花费时间来调
六、源程序
;......................................................................
;作息时间控制系统
;.............................头文件...................................
SDTABITP2.4;定义74LS164串行移位数据端
SCLKBITP2.5;定义74LS164串行移位时钟端
DISEQUP1;定义字形口
CONTROLEQUP0;控制输出
SW1BITp3.2;需要设定控制时间点时,应按SW1按
SW2BITP3.3;设定小时
SW3BITP3.4;设定分钟
MSEQU10H;定义50MS计数器
SECSEQU11H;定义秒计数器
MINUTEEQU12H;定义分钟计数器
HOUREQU14H;定义时钟计数器
T_MINUTEEQU15H;定义定时分单元
T_HOUREQU16H;定义定时时单元
TCONTROLEQU17H;定义控制码单元
;......................................................................
org0000h
LJMPMAIN
;......................................................................
ORG000BH
LJMPT0INT
;......................................................................
MAIN:
MOVSP,#70H;将栈区设置在70H~7FH
MOVIE,#10000010B;允许T0中断
MOVTMOD,#01H;T0定时方式1
MOVMS,#20;50ms单元初值,使20*50ms=1s
MOVSECS,#0;开机显示12:
00
MOVMINUTE,#0
MOVHOUR,#12H
MOVT_MINUTE,#0
MOVT_HOUR,#6
MOVB,#20H
CLRF0
MOVR7,#80
MOVTL0,#0BH;50ms定时参数
MOVTH0,#3CH
SETBTR0;驱动定时器
LOOP:
MOVR1,#MINUTE
LCALLSPILT
LCALLDISP
LCALLVERIFY
NOP
LCALLSETUP
MOVA,SECS
CJNEA,#5,LOOP
LCALLCOMPARE
SJMPLOOP
;..................................................................
;定时计数器
;..................................................................
T0INT:
PUSHACC;保护现场
MOVTL0,#0B0H;定时50ms
MOVTH0,#3CH
DJNZMS,T0EXIT;1秒(20*50ms)未到,则直接返回
MOVMS,#20
MOVA,SECS
INCA
MOVSECS,A
CJNEA,#60,T0EXIT;60秒未到,则直接返回
MOVSECS,#0;若大于或等于60秒,则回零
MOVA,MINUTE
INCA
MOVMINUTE,A
CJNEA,#60,T0EXIT
MOVMINUTE,#0
MOVA,HOUR
INCA
MOVHOUR,A
CJNEA,#24,T0EXIT
MOVHOUR,#0
T0EXIT:
POPACC
RETI
;....................................................................
;定时比较程序
;....................................................................
COMPARE:
MOVR0,#20H;时间表首地址
NEXTTIME:
LCALLDISP;显示时间
MOVA,@R0;取时间表的小时
CJNEA,HOUR,CLP1;与当前时间进行比较
INCR0;指向时间表的分钟
MOVA,@R0;取时间的分钟
CJNEA,MINUTE,CLP2;与当前时间的分钟比较
INCR0
MOVA,@R0
CPLA
MOVCONTROL,A
INCR0
RET
CLP1:
INCR0
CLP2:
INCR0
MOVA,@R0
JNZCLP3
RET
CLP3:
INCR0
CJNER0,#60H,NEXTTIME;判断时间表是否比较完
RET
VERIFY:
JBSW3,VLP3
CLREA
CLRTR0;在校时期间,暂时关闭定时
VLP1:
MOVA,MINUTE
ADDA,#1
DAA
MOVMINUTE,A
CJNEA,#60H,VLP2
MOVMINUTE,#0
VLP2:
MOVR6,#40
MOVR1,#MINUTE
LCALLSPILT
LCALLDISP
DJNZR6,$-3
JNBSW3,VLP1;若SW3未释放,则继续对分钟加1
MOVSECS,#0;校时期间,将秒清零
SETBEA
SETBTR0
RET
VLP3:
JBSW2,VEXIT
CLREA
CLRTR0
VLP4:
MOVA,HOUR
ADDA,#1
DAA
MOVHOUR,A
CJNEA,#24H,VLP5
MOVHOUR,#0
VLP5:
MOVR6,#40
MOVR1,#MINUTE
LCALLSPILT
LCALLDISP
DJNZR6,$-3
JNBSW2,VLP4
MOVSECS,#0
SETBEA
SETBTR0
VEXIT:
RET
;....................................................................
;设定时间子程序
;....................................................................
SETUP:
JNBSW1,SLP0;判断SW1是否闭合
RET
SLP0:
MOVR6,#20
MOV14h,#10h;显示缓冲区分个位
MOV15h,#0Ah;显示缓冲区分十位
MOV16h,#0Bh;显示缓冲区时个位
MOV17h,#0Ch;显示缓冲区时十位
LCALLDISP
DJNZR6,$-3
JNBSW1,SLP1
SLP1:
MOVR6,#20
MOV14h,#10h;显示缓冲区分个位
MOV15h,#0Ah;显示缓冲区分十位
MOV16h,#0Bh;显示缓冲区时个位
MOV17h,#0Ch;显示缓冲区时十位
LCALLDISP
DJNZR6,$-3
JBSW3,SLP2;按下SW1+SW3则清除所有数据
LCALLCLEAR
MOVR6,#20
MOV14h,#10h;显示缓冲区分个位
MOV15h,#0Ah;显示缓冲区分十位
MOV16h,#0Bh;显示缓冲区时个位
MOV17h,#0Ch;显示缓冲区时十位
LCALLDISP
DJNZR6,$-3
RET
SLP2:
JBSW2,SLP1
SETBF0
SLP21:
MOVR6,#50
MOV14h,#10h;显示缓冲区分个位
MOV15h,#0Ah;显示缓冲区分十位
MOV16h,#0Bh;显示缓冲区时个位
MOV17h,#0Ch;显示缓冲区时十位
LCALLDISP
DJNZR6,$-3
JBSW1,SLP21
SLP22:
MOVR6,#50
MOV14h,#10h;显示缓冲区分个位
MOV15h,#0Ah;显示缓冲区分十位
MOV16h,#0Bh;显示缓冲区时个位
MOV17h,#0Ch;显示缓冲区时十位
LCALLDISP
DJNZR6,$-3
SLP23:
JNBSW1,SLP22
SLP3:
MOVR1,#T_MINUTE
LCALLSPILT
LCALLDISP
JBSW3,SLP6
SLP4:
MOVA,T_MINUTE
ADDA,#1
DAA
MOVT_MINUTE,A
CJNEA,#60H,SLP5
MOVT_MINUTE,#0
SLP5:
MOVR6,#60
MOVR1,#T_MINUTE
LCALLSPILT
LCALLDISP
JNBSW3,SLP4
SLP6:
JBSW2,SLP9
SLP7:
MOVA,T_HOUR
ADDA,#1
DAA
MOVT_HOUR,A
CJNEA,#24H,SLP8
MOVT_HOUR,#0
SLP8:
MOVR6,#60
MOVR1,#T_MINUTE
LCALLSPILT
LCALLDISP
DJNZR6,$-3
JNBSW2,SLP7
SLP9:
JBSW1,SLP3
SLP10:
MOVR1,#T_MINUTE
LCALLSPILT
LCALLDISP
JNBSW1,SLP10
MOVTCONTROL,#0
JBSW3,SLP12
SLP11:
MOVA,TCONTROL
INCA
MOVTCONTROL,A
SLP12:
MOVA,TCONTROL
ANLA,#0FH
MOV14H,A
MOVA,TCONTROL
SWAPA
ANLA,#0FH
MOV15H,A
MOV16H,#10H
MOV17,10H
MOVR6,#50H
LCALLDISP
DJNZR6,$-3
JNBSW3,SLP11
JNBSW1,SLP15
SPL13:
JBSW2,SLP12
LCALLSTORE
SLP14:
MOVR6,#50H
LCALLDISP
DJNZR6,$-3
JNBSW2,SLP14
CLRF0
RET
SLP15:
MOVR6,#50H
LCALLDISP
DJNZR6,$-3
JNBSW1,SLP15
CLRF0
RET
;......................................................................
;清除子程序
;......................................................