第一篇:基于单片机的液位模糊控制器设计论文
摘 要:液位控制由于其应用极其普遍,种类繁多,其中不乏一些大型的复杂系统,譬如在石油化工等工业生产中。它主要有以下几个特点:
1、时滞性很大。在大型、复杂的液位控制系统中,当改变进出容器的液体流量来控制液位时,控制效果在较长的时间后才能得到体现,这会使得最后的稳态误差较大,液位在期望值附近波动。
2,时变性。液位控制一般是通过控制液体流入量的大小来控制液位的,流出量是根据后续工艺生产的需求而调节,这种需求的数量和速度是在不断变化的。
3,非线性。容器内液体流出量不仅随后续工艺生产需求变化,即使在控制阀门保持不变的情况下,实际的流出量也随着液位高度的变化而发生一种非线性的变化。这几个特点,都严重影响PID控制的效果,当实际生产对控制有较高的性能指标要求时,就需要将智能控制方法引入到液位控制系统中来。
关键词:模糊控制;液位;PID;单片机模糊控制的基本原理
模糊控制属于智能控制的范畴,它是以模糊数学和模糊逻辑为理论基础、模仿人的思维方式而统筹考虑的一种控制方式。它是以模糊集合论、模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制。模糊控制模仿人的思维方式,计算控制量时并不需要参数的精确量,而是以参数的模糊信息为基础,通过模糊推理得到控制量的模糊形式,然后再经过反模糊化处理输出具体的控制量。
模糊控制器的设计的基本原理
1. 在采样时刻,采样系统的输出值,然后根据所选择的系统的输入变量来进行计算,得到输入变量的具体值。一般系统通常选择误差及误差的变化情况作为输入变量。
2. 将输入变量的精确值变为模糊量。当然,在这之前需要先确定模糊变量的基本论域、模糊子集论域、模糊词集及隶属函数。系统中输入变量的实际变化范围称为变量的基本论域,对于模糊控制输入所要求的变化范围称为它们的模糊子集论域。模糊子集论域的确定和下一步的模糊推理中需要的模糊值有关。模糊值可用模糊词集来表示,人们对数值的模糊表示一般可用大、中、小加以区别,再加上正负模糊词集就可表示为:
{负 大,负中,负小,零,正小,正中,正大}
一般系统的输入变量的模糊子集论域所含的元素个数应为词集总数的两倍以上,这样才能确保模糊词集能较好地覆盖
模糊子集论域,避免出现失控现象。针对上面选用的模糊词集,模糊子集论域可选择为
{-6,-5,-4,-3,-2,一1,0 , 1,2 ,3 ,4 ,5 ,6 }
对于一个模糊控制系统,它的控制器输入变量的实际范围一般不会正好和模糊子集论域一致,这时就需要进行转化。假如基本论域为[a.b],模糊子集论域为[m, n],则将一个精确输入量x转化到模糊子集论域中的变量Y是通过以下公式来实现的。
y=(n-m)*[x-(b-a)/2]/(b-a)
模糊 子 集 论域和模糊词集之间是通过隶属函数来联系的。模糊变量的隶属函数就和普通变量的特征函数一样,但它的取值范围并不是单纯的0或1,而是在[0, 1]之间连续变化。隶属函数的形状常采用梯形、三角形、钟形、高斯形等。在实际应用中,为方便起见,采用三角形的较多。
3. 根据上一步得到的输入变量(模糊量)及模糊控制规则,按模糊推理合成规则计算控制量(模糊量)。模糊控制规则是根据操作者的经验或专家的知识,用if,then描述的一组条件语句。
4. 控制量的模糊量转化为精确量。上一步虽然通过模糊推理得到了控制量,但它是模糊形式的,而真正的执行机构不能接受模糊量,只能接受精确量,所以必须把控制量由模糊形式转化为精确形式,这一步也叫做解模糊化。模糊控制器的设计过程
2.1模糊控制器的结构设计
模糊控制器的结构设计是指确定模糊控制器的输入变量和输出变量。模糊控制器输入变量的个数称为模糊控制器的维数,目前广泛采用的均为二维模糊控制器.在此我们也选择这一结构形式。我们设计的是液位模糊控制器,就选择液位的误差和误差的变化作为模糊控制器的输入变量,分别记作E, Ec。模糊控制器的输出应该是用来控制液位的,液位实际上就是受流入量和流出量的影响,而流出量是根据后续工艺不停的变化,是不可控的。所以模糊控制器的输出就只有一个,作为控制流入量执行机构的控制量,记作U。对于模糊控制器的输出,可以有两种形式,一种是绝对的控制量输出,另一种是增量方式输出。在本次设计的模糊控制器中,我们选择了绝对值输出方式。
2.2模糊控制规则的设计
控制规则的设计一般包括三部分内容:选择描述输入输出变量的词集,定义各模糊变量的模糊子集和建立模糊控制器的控制规则。下面就分别来进行说明:
1.选择描述输入、输出变量的词集
对于液位误差、误差变化率及控制量我们选用相同的模糊词集,都用自然语言大、中、小来进行描述,将大、中、小再加上正、负两个方向并考虑变量的零状态,共有七个词汇,即
{负 大,负 中,负小,零,正小,正中,正大}
为叙述方便,用英文字头缩写表示为
{N B ,N M , N S ,Z E, PS, PM,P B}
其中,N=Negative, P=Positive, B=Big, M=Medium, S=Small, ZE=Zero。
2.定义各模糊变量的模糊子集
定义一个模糊子集,实际上就是要确定模糊子集隶属函数曲线的形状。对于输入变量误差和误差变化率,我们选用的模糊子集论域和隶属函数曲线都完全一致,所以在此就只针对误差的模糊子集的确定来进行说明。误差的模糊子集论域取[-6,6 ]之间,然后离散化,只取整数,所以它的模糊子集论域可表示为
{-6,-5,-4,-3,-2,-1,0 ,1 ,2 ,3 ,4 ,5 ,6 }
其中有13个元素,而模糊词集中有7个元素,基本满足了二倍的关系,可以保证不会出现失控现象。为了计算方便,将隶属函数曲线都选为三角形形式,而且根据经验,在靠近0附近,三角形的形状选的窄一些,这样有利于提高灵敏度,抑制超调。在远离0的地方,三角形的形状选的宽一些,因为这时候误差还很大,不会引起超调。至于三角形具体形状及位置的有关参数,是根据经验初步确定的,在控制器调试的时候还需要对这些进行反复的修改。
第二篇:基于单片机的液位控制器设计
专业基础综合实验报告 题目:测控技术与仪器专业
姓
名:学
号:专业班级:
1、总体设计方案
1.1 设计功能及要求
1、利用单片机和传感器构建一套完整的水位自动控制系统。要求既能实现水位自动控制,又能显示实际水位,便于用户监视。在水塔中经常要根据水面的高低进行水位的自动控制,同时进行水位压力的检测和控制。本液位器具有水位检测、报警、自动上水和排水(上水用电机正转模拟,下水用电机反转模拟)、压力检测功能。
2、该系统以89S52单片机为水塔水位控制系统的核心,用传感器采集水压模拟信号,然后将模拟信号送入A/D转换器,换算出某一时刻水塔水位的实际高度,然后拿它与标定水位进行比较,要求实时检测水箱的液位高度,并与开始预设定值做比较,由单片机控制开关的开断进行液位的调整,最终达到液位的预设定值。检测值若高于上限设定值时,要求报警,断开继电器,控制水泵停止上水;检测值若低于下限设定值,要求报警,开启继电器,控制水泵开始上水。现场实时显示测量值,从而实现对水箱液位的监控。如此重复“测量、比较、开启”这三步,直至实测水位与标定水位的偏差落入给定的精度范围之内。落入给定精度范围之后,将两个水泵同时关停。
电路焊接好后,接通电源,改变液位使检测点变化,当液位在A点以下时红灯连续亮并且发出频率较高的报警声,显示00,电机正转;当A≤液位
3、控制系统中标定水位用键盘输入,用十进制数码显示。本液位器具有水位检测、报警、自动上水和排水、压力检测功能。该控制器主要由89S52单片机,0809A/D转换器,A、B、C三点水位检测电路,压力检测电路、数码显示电路、键盘和电源电路组成。
4、可根据需要设定液位控制高度,同时具备报警、高度显示等功能,液位自动控制系统工作流程如下:将压力传感器传送来的电流信号经过前级放大和A/D转换进入单片机,经单片机计算处理(与用户的设定值作比较)。将输出数字量进行D/A转换送给电动执行机构。
5、基于单片机的水位自动控制系统的软件设计
本论文是以单片机为核心设计水塔水位控制系统,包括硬件电路的设计和控制系统程序的设计。通过此系统使水塔水位保持在要求的高度
1.2 设计方案
1.2.1硬件设计方案
(1)基于单片机的通用水位自动控制系统的硬件设计系统硬件部分的设计采用模块化的设计方法,根据功能的不同,把系统划分为如下模块(图2)。
图2 系统模块图
(1)硬件设计
液位控制器的硬件主要包括由单片机、传感器(带变送器)、键盘电路、数码显示电路、A/D转换器和输出控制电路等。
工作原理:基于单片机实现的液位控制器是以AT89C51芯片为核心,由键盘、数码显示、A/D转换、传感器,电源和控制部分等组成。工作过程如下:水箱(水塔)液位发生变化时,引起连接在水箱(水塔)底部的压力传感器,压力传感器的压力受到水的压力,即把变化量转化成电压信号;该信号经过运算放大电路放大后变成幅度为0~5 V标准信号,送入A/D转换器,A/D转换器把模拟信号变成数字信号量,由单片机进行实时数据采集,并进行处理,根据设定要求控制输出,同时数码管显示液位高度。通过键盘设置液位高、低和限定值以及强制报警值。该系统控制器特点是直观地显示水位高度,可任意控制水位高度。
1.2.2软件设计方案
(1)设计框图
(2)原理:通过软件设计将将模拟信号送入A/D转换器,换算出某一时刻水塔水位的实际高度,然后拿它与标定水位进行比较,要求实时检测水箱的液位高度,并与开始预设定值做比较,由单片机控制开关的开断进行液位的调整,最终达到液位的预设定值。检测值若高于上限设定值时,要求报警,断开继电器,控制水泵停止上水;检测值若低于下限设定值,要求报警,开启继电器,控制水泵开始上水。现场实时显示测量值,从而实现对水箱液位的监控。
2.硬件设计
2.1 液位检测电路
2.2 单片机最小系统
2.3 LED显示电路
2.4 按键电路
2.5 报警电路
2.6 电源电路
我们组做的是按键电路、报警电路和电源电路 PCB板图如下
3.软件设计
3.1 主程序设计
系统主程序设计:
ORG
0000H AJMP MAIN ORG
0060H MAIN: MOV P1, #FFH
;P1 P3口初始化置1 MOV
P3,#FFH JNB P1.3,AUT
;若手动在自动位置,跳到自动模式子程序 AJMP MEN
;否则转到手动模式子程序 END
自动模式子程序设计
AUT:NOP
;空命令 JNB P1.2 , LG
;水位高—LG JB
P1.1
LD,;水位没低---LD CLR P3.1
;水位低报警
JB
P1.0, LDD
;水位未低低---LDD CLR P3.0
;水位低低报警 JNB 3.1
P1.6,Y1
;M1已启动—Y1 CLR P1.4
;否则启动M1 Y1: JNB P1.7 ,Y2
;M2已启动---Y2
CLR P1.5
;否则启动M2 Y2: ACALL DELAY
;延时1分钟
AJMP AUT
;返回自动模式
LDD: JNB P1.6 ,Y3
;单独运行M1(LDD〈水位〈LD)CLR P1.4 Y3: JB
P1.7 Y2 SETB P1.5 AJMP Y2 LG: CLR P3.2
;水位高报警 LD: AJMP MAIN
;返回主程序
手动模式子程序设计
MEN: NOP JNB
P1.1 , MAIN
;水位高返回主程序 ACALL KEY CJNE A ,#FOH,NN
;有无键合 AJMP MEN NN:
JNB
ACC.4 ,HM1
JNB
ACC.5, HM2 JNB
ACC.6 ,DM1 JNB
ACC.7 ,DM2 AJMP MEN HM1: JNB
P1.6 ,MEN CLR
P1.4 AJMP MEN HM2: JNB
P1.7, MEN CLR
P1.5 AJMP MEN DM1: JB
P1.6, MEN SETB P1.4 AJMP MEN DM2: JB
P1.7, MEN SETB P1.5 AJMP MEN RET
3.2 子程序设计
3.2.1 键盘子程序设计
有无键合子程序:
KEY:
ACALL
KS1
;有无闭合 JNZ
LK1 ACALL
TIM AJMP
KEY
;无键闭合返回 LK1:
ACALL
TIM ACALL
TIM ACALL
KS1 JNZ
LK2
延时1S主程序:
T1M1:
MOV
R1, #F0H L4:
MOV
R2, #08H L1:
MOV
R3, #FAH L2:
MOV
R4, #FAH L1:
DJNZ
R4,L1 DJNZ
R3,L2 DJNZ
R2,L3 DJNZ
R1,L4 RET
3.2.2A/D转换子程序设计
A/D模数转换程序
入口参数:30H---33H;出口参数:BAI,SHI,GE CHANGE
CLRF BAI
CLRF SHI
CLRF GE
;先清除结果寄存器
MOV FW 31H
;
ADD WF 30H,1
MOV FW 32H
ADD WF 30H,1
MOV FW 33H
ADD WF 30H,1
RRF 30H,1
RRF 30H,0
MOV WF TEMP
MOV LW 64H
;减100,结果保留在W中
SUB WF TEMP,0
BTFSS
TATUS,C
;判断是否大于100
GOTO
SHI_VAL
;否,转求十位结果
MOVWF
TEMP
;是,差送回TEMP中
INC F BAI,1
;百位加1
GOTO
$-6
;返回继续求百位的值 SHI_VAL
MOV LW 0AH
;减10,结果保留在W中
SUBWF
TEMP,0
BTFSS
STATUS,C
;判断是否大于10
GOTO
GE_VAL
;否,转去判断个位结果
MOVWF
TEMP
;是,差送回TEMP中
INCF
SHI,1
;十位值加1
GOTO
$-6
;转会继续求十位的值 GE_VAL
MOVFW
TEMP
MOVWF
GE
RETURN 显示程序
入口参数:BAI,SHI,GE 出口参数:无 DISPLAY MOV FW
BAI
CALL
TABLE
MOVWF
PORTD
BCF
PORTA,3
CALL
DELAY
CALL
DELAY
BSF
PORTA,3
MOVFW
SHI
CALL
TABLE
MOVWF
PORTD
BCF
PORTA,4
CALL
DELAY
CALL
DELAY
BSF
PORTA,4
MOVFW
GE
CALL
TABLE
MOVWF
PORTD
BCF
PORTA,5
CALL
DELAY
CALL
DELAY
BSF
PORTA,5
RETURN
;个位的值
;显示百位
;显示十位
;显示个位
第三篇:模糊PID控制器设计
模糊PID控制器
0引言:
PID控制作为一种典型的传统反馈控制器,以其结构简单,易于实现和鲁棒性好等特点在工业过程控制中广泛应用。但是传统PID控制器的参数需要被控对象的数学模型来进行调整,而控制过程中的滞后性、控制参数的非线性和高阶陛增加了对Kp、Ki、Kd三个参数的调整难度。所以对确定的控制系统通过复杂的计算后,其三个参数的值在控制运行中一般是固定的,不易进行在线的调整。而在实际的工业生产过程中,许多被控对象受到负荷变化和干扰因素的作用,其对象参数的特征和结构易发生改变,这就需要对参数进行动态的调整。同样因为被控系统的复杂性和不确定性,其精确的数学模型难以建立,甚至无法建立模型,所以需要利用模糊控制技术等方法来解决。模糊PID无需考虑被控系统的模型,而只根据其误差e和误差变化ec等检测数据来自适应调整Kp、Ki、Kd的值,最终使被控系统处于稳定工作态。
1、传统PID控制器:
PID参数模糊自整定是找出PID中3个参数与e和ec之间的模糊关系,在运行中通过不断检测e和ec,根据模糊控制原理来对3个参数进行在线修改,以满足不同e和ec时对控制参数的不同要求,而使被控对象有良好的动稳态性能。从系统的稳定性、响应速度、超调量和稳态精度等方面来考虑Kp,Ki,Kd的作用如下:
(1)比例系数Kp的作用是:加快系统的响应速度,提高系统的调节精度。Kp越大,系统的响应速度越快,系统的调节精度越高,但易产生超调,甚至导致系统不稳定;Kp取值过小,则会降低调节精度,使响应速度缓慢,从而延长调节时间,使系统静态、动态特性变坏。(2)积分作用系数Ki的作用是:消除系统的稳态误差。Ki越大,系统的稳态误差消除越快,但Ki过大,在响应过程的初期会产生积分饱和现象,从而引起响应过程的较大超调;若Ki过小,将使系统稳态误差难以消除,影响系统的调节精度。
(3)微分作用系数Kd的作用是:改善系统的动态特性。其作用主要是能反应偏差信号的变化趋势,并能在偏差信号值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。
2、模糊PID参数自整定控制器设计
2.1控制器结构:
2.2模糊化
由PID各个参数对系统的影响得到:(a)当误差|e|较大时,说明误差的绝对值较大,不论误差的变化趋势如何,都应该考虑控制器的Kp取较大值,以提高响应的快速性;而为防止因为|ec|瞬时过大,kd应该取较小的值;为控制超调,ki也应该取值很小。(b)当误差|e|在中等大小时,为保证系统的相应速度并控制超调,应减小Kp,Ki值应增大,Kd应适中。
(c)当误差|e|较小时,为保证系统具有良好的稳态特性,应加大Kp、Ki的取值,同时为避免产生振荡,Kd的取值应该和|ec|联系起来。
模糊PID控制根据系统运行的不同状态,考虑Kp、Ki、Kd三者的关联,根据工程经验设计模糊整定这三个参数,选择输入语言变量为误差e和偏差变化率ec,语言变量值取{NB,NM,NS,0,PS,PM,PB}七个模糊值;选择输出语言变量为△Kp,△Ki,△Kd语言变量值也取{NB,NM,NS,0,PS,PM,PB}七个模糊值,建立△Kp,△Ki,△Kd的模糊规则。
2.3设计模糊控制器
在MATLAB命令空间输入fuzzy,弹出对话框,然后进行设置,如图:
设置为两输入三输出结构。
根据经验设置输入输出的隶属度函数都为:
设置完隶属度函数后,按照上述三个模糊规则表格设置模糊规则,如图
设置完毕后,保存文件“zhinengkongz.fis”至磁盘,留给仿真调用,生成的文件为: [System] Name='zhinengkongz' Type='mamdani' Version=2.0 NumInputs=2 NumOutputs=3 NumRules=49 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='centroid'
[Input1] Name='e' Range=[-3 3] NumMFs=7 MF1='nb':'zmf',[-3-1] MF2='nm':'trimf',[-3-2 0] MF3='ns':'trimf',[-3-1 1] MF4='zo':'trimf',[-2 0 2] MF5='ps':'trimf',[-1 1 3] MF6='pm':'trimf',[0 2 3] MF7='pb':'smf',[1 3]
[Input2] Name='ec' Range=[-3 3] NumMFs=7 MF1='nb':'zmf',[-3-1] MF2='nm':'trimf',[-3-2 0] MF3='ns':'trimf',[-3-1 1] MF4='zo':'trimf',[-2 0 2] MF5='ps':'trimf',[-1 1 3] MF6='pm':'trimf',[0 2 3] MF7='pb':'smf',[1 3]
[Output1] Name='kp' Range=[-3 3] NumMFs=7 MF1='nb':'zmf',[-3-1] MF2='nm':'trimf',[-3-2 0] MF3='ns':'trimf',[-3-1 1] MF4='zo':'trimf',[-2 0 2] MF5='ps':'trimf',[-1 1 3] MF6='pm':'trimf',[0 2 3] MF7='pb':'smf',[1 3]
[Output2] Name='ki' Range=[-3 3] NumMFs=7 MF1='nb':'zmf',[-3-1] MF2='nm':'trimf',[-3-2 0] MF3='ns':'trimf',[-3-1 1] MF4='zo':'trimf',[-2 0 2] MF5='ps':'trimf',[-1 1 3] MF6='pm':'trimf',[0 2 3] MF7='pb':'smf',[1 3]
[Output3] Name='kd' Range=[-3 3] NumMFs=7 MF1='nb':'zmf',[-3-1] MF2='nm':'trimf',[-3-2 0] MF3='ns':'trimf',[-3-1 1] MF4='zo':'trimf',[-2 0 2] MF5='ps':'trimf',[-1 1 3] MF6='pm':'trimf',[0 2 3] MF7='pb':'smf',[1 3]
[Rules] 1 1, 7 1 5(1): 1 1 2, 7 1 3(1): 1 1 3, 6 2 1(1): 1 1 4, 6 5 1(1): 1 1 5, 5 3 1(1): 1 1 6, 4 4 2(1): 1 1 7, 4 4 5(1): 1 2 1, 7 1 5(1): 1 2 2, 7 1 3(1): 1 2 3, 6 2 1(1): 1 2 4, 5 3 2(1): 1 2 5, 5 3 2(1): 1 2 6, 4 4 3(1): 1 2 7, 3 4 4(1): 1 3 1, 6 1 4(1): 1 3 2, 6 2 3(1): 1 3 3, 6 3 2(1): 1 3 4, 5 3 2(1): 1 3 5, 4 4 3(1): 1 3 6, 3 5 3(1): 1 3 7, 3 5 4(1): 1 4 1, 6 2 4(1): 1 4 2, 6 2 3(1): 1 4 3, 5 3 3(1): 1 4 4, 4 4 3(1): 1 4 5, 3 5 3(1): 1 4 6, 2 6 3(1): 1 4 7, 2 6 4(1): 1 5 1, 5 2 4(1): 1 5 2, 5 3 4(1): 1 5 3, 4 4 4(1): 1 5 4, 3 5 4(1): 1 5 5, 3 5 4(1): 1 5 6, 2 6 4(1): 1 5 7, 2 7 4(1): 1 6 1, 5 4 7(1): 1 6 2, 4 4 3(1): 1 6 3, 3 5 5(1): 1 6 4, 2 5 5(1): 1 6 5, 2 6 5(1): 1 6 6, 2 7 5(1): 1 6 7, 1 7 7(1): 1 7 1, 4 4 7(1): 1 7 2, 4 4 6(1): 1 7 3, 2 5 6(1): 1 7 4, 2 6 6(1): 1 7 5, 2 6 5(1): 1 7 6, 1 7 5(1): 1 7 7, 1 7 7(1): 1
3、系统仿真
设控制对象为:G(s)=25/s^2+6s+25 通过程序(含注释)仿真如下:
clear all;clc;a=readfis('zhinengkongz');%ts=0.001;%sys=tf(25,[1,6,25]);%读取设定的FIS模糊控制器 抽样时间为1MS
构造系统G(s)=25/s^2+6s+25 dsys=c2d(sys,ts,'z');%离散化 [num,den]=tfdata(dsys,'v');%得到系数 %设置系统初值 u1=0;u2=0;y1=0;y2=0;x=[0,0,0];e1=0;ec1=0;Kp0=0.3;Ki0=2;Kd0=1;for k=1:5000;%仿真5S time(k)=k*ts;r(k)=1;%输入阶跃信号 fpid=evalfis([e1,ec1],a);%模糊推理 Kp(k)=Kp0+fpid(1);%得到新的参数 Ki(k)=Ki0+fpid(2);Kd(k)=Kd0+fpid(3);u(k)=Kp(k)*x(1)+Ki(k)*x(2)+Kd(k)*x(3);%PID输出 y(k)=-den(2)*y1-den(3)*y2+num(1)*u(k)+num(2)*u1+num(3)*u2;%系统输出 e(k)=r(k)-y(k);%计算误差 u2=u1;u1=u(k);%更新数据 y2=y1;y1=y(k);x(1)=e(k);%对应KP x(2)=x(2)+e(k)*ts;%对应KI x(3)=e(k)-e1;%对应KD ec1=e(k)-e1;%重新计算ec e1=e(k);%重新计算e end %打印输出 figure(1);plot(time,y,'g',time,r,'r');grid on;xlabel('time(s)');ylabel('y ');
figure(2)plot(time,Kp,'r');xlabel('time(s)');ylabel('Kp ');grid on;
figure(3)plot(time,Ki,'b');grid on;xlabel('time(s)');ylabel('Ki ');
figure(4)plot(time,Kd,'g');xlabel('time(s)');ylabel('Kd ');grid on;结果显示:
1.40.51.20.40.30.210.8y 0.10.6Kp 0-0.1-0.2-0.30.40.2000.511.522.5time(s)33.544.55-0.4
00.511.522.5time(s)33.544.55
输入输出对比图 Kp自动调整曲线
2.82.70.912.62.52.4Ki Kd 0.80.70.60.50.40.30.22.32.22.121.91.800.511.522.5time(s)33.544.5500.511.52
Ki自动调整曲线 Kd自动调整曲线
可以看出,系统输出具有较好的超调量和调节时间,没有稳态误差,达到了理想的效果。
2.5time(s)33.544.554、结束语
模糊自调整PID是在常规PID算法的基础上,通过计算当前系统误差e和误差变化ec,利用模糊推理系统(FIS),查询模糊矩阵表进行参数调整,该方法实现简单、方便易用,对实际控制有重要指导意义。同时,利用模糊逻辑工具箱设计的模糊控制器,能方便地修改输入输出的论域、模糊子集、隶属度函数及模糊控制规则等,突破了传统方法需要编制大量程序的做法。用模糊推理的方法在动态过程中改变PID的参数,能够发挥两种控制方式的优点,克服两者的缺点,提高控制质量。
第四篇:基于单片机的时钟控制器设计论文
单片机原理与应用技术课程设计报告
基于单片机控制的时钟控制器
专业班级: _电气XX班_ __ 姓
名:__ ___XXX__ ___ 时 间:2013/11/25~12/15 指导教师: XXXX XXX
2013年12月11日
基于单片机控制的时钟控制器课程设计任务书
1。设计目的与要求
设计出一个基于单片机控制的时钟控制器。通过向单片机输入不同的指令可以实现24小时制时钟的基本显示和连续的调时,调分和调秒的功能,同时又扩展了整点报时功能。该电路硬件较为简单、计时精度高、可控性好,可以随时调整和设定时间,并且调时间的误差小,操作简单、通用性强。
(1)基本功能
<1>、显示:可以显示时、分和秒
<2>、调时功能:时(0-24)、分和秒(0-60)可以连续可调(2)性能:时间日误差< 2秒(3)扩展功能 <1>.增加整点报时功能 <2>.增加闹钟任意设定功能 2.设计内容
(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出; 3.编写设计报告
写出设计的全过程,附上有关资料和图纸,有心得体会。4.答辩
在规定时间内,完成叙述并回答问题。
目录
摘要...................................................................1 1.引言................................................................1 2.设计目的和要求......................................................1 3.总体设计方案........................................................1 3.1 方案设计要求.......................................................1 3.2 方案设计与论证.....................................................1 3.3 整体设计框图.......................................................2 3.4 系统设计流程图.....................................................2 4.设计原理分析........................................................3 4.1 外接晶振电路..................................................3 4.2 复位电路...........................................................3 4.3 数码管显示电路.....................................................3 4.4 键盘控制电路.......................................................4 4.5 Proteus仿真电路....................................................4 4.6 单片机程序的编写...................................................5 4.7 电路的检测.........................................................5 4.8 CAD电路的连接及PCB电路布线并做出电路板............................5 4.9 软件与硬件的调试...................................................5 5.总结与体会..........................................................5 6.附录................................................................5 6.1 CAD电路连接图......................................................5 6.2 PCB电路布线图......................................................6 6.3 时钟控制器参考源程序...............................................6 7.参考文献...........................................................13
基于单片机控制的时钟控制器 班级:电气115班 姓名:赵传阳
摘要:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点。本次设计的时钟控制器是以单片机(AT89C51)为核心,结合相关的元器件(3个2位共阳数码管,一个发光二极管和一个蜂鸣器)和应用程序(在Proteus软件和KEIL编译软件),构成相应的应用系统。
关键词:单片机 AT89C51 共阳数码管 发光二极管 蜂鸣器 Proteus软件 KEIL编译软件 中断
1.引言
随着科技的发展,电子技术得到了飞速的发展,尤其是单片机的应用更为普遍。单片机的应用已深入众多技术领域,从军事、工业到家庭日常生活,单片机因体积小、功能强、价格低廉而得到广泛应用。在此基础上,越来越多各式各样的时钟也逐渐走进我们的生活,它们设计精巧、方便、耐用、美观,深得各领域的厚爱。随着科技的进步,基于单片机控制的时钟控制器的出现则打破了人们对时钟的传统概念,因为数字时钟不仅可以通过数字直观地显示出时间,还可以定时发出各种声、光、电信号,以启动各种设备实现实时控制、时间顺序控制。该课程设计既有一般时钟的基本显示和调整功能,同时又增加了整点报时功能,复位功能及实时时钟控制功能。
2.设计目的与要求
设计出一个基于单片机控制的时钟控制器。通过向单片机输入不同的指令可以实现24小时制时钟的基本显示和连续的调时,调分和调秒的功能,同时又扩展了整点报时功能。该电路硬件较为简单、计时精度高、可控性好,可以随时调整和设定时间,并且调时间的误差小,操作简单、通用性强。
在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。
本文主要介绍用单片机为核心部件的时钟控制器,本设计由单片机AT89C51芯片和3个两位一体的共阳极的数码管为核心,辅以必要的电路,构成了一个单片机时钟控制器。基本要求:1.显示: 可以显示时、分和秒
2.调时功能:时(0-24)、分和秒(0-60)可以连续可调并进行校准 3.能够完成时间的显示、定时闹钟、整点报时及复位功能
3.总体设计方案
3.1.方案设计要求
设计制作一个时钟控制器,要求能实现基本走时,并以数字形式显示时、分、秒,采用24小时制,能实现校时、校分连续可调、整点报时功能、复位功能以及闹钟任意设定功能。3.2方案设计与论证
方案一:采用各种纯数字芯片实现数字时钟的设计。优点:各个模块功能清晰,电路易于理解实现。缺点:各个模块功能已定不能进行智能化调整,整体电路太庞大。
方案二:采用 FPGA模块用硬件语言实现功能。优点:运算速度快,走时精度高,算法简单。缺点:成本高,大材小用。
方案三:采用单片机最小系统实现功能。优点:电路简单,能通过程序进行随机调整并扩展功能,成本低,易于实现。缺点:走时有一定的误差。
经过综合考虑成本问题以及电路实现问题,选择第三种方案实现设计要求。3.3整体设计框图
整体设计框图如图1所示:
4.设计原理分析
4.1外接晶振电路
晶振连接电路图如图3,以12MHZ晶振为基准。
图3 外接晶振电路连接图
XTAL1、XTAL2:XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择,一般选用12MHZ晶振,电容取30PF左右。4.2复位电路
常用复位电路图如图4:
图4 复位电路连接图
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引:脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。4.3 数码管显示电路
二位一体共阳极数码管电路连接图如图5,以PNP三极管为驱动。
图5 数码管显示电路连接图
4.4 键盘控制电路
键盘控制电路如图6。
图6 时钟按键控制电路图
通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置,S0控制闹钟的启动和停止。按下S4键显示闹钟,松开后显示时间;按下S1键进入时间修改模式,再按S1键时间的时加1,按S3分加1,调整结束后按下S4恢复正常显示;按下S2键进入闹钟修改模式,再按S3键闹钟的时加1,按S3分加1,调整结束后按下S4恢复正常显示。在按键按下和放开时会出现抖动现象。通过延时程序,可以进行去抖动设计。4.5 Proteus仿真电路
整体电路连接图如图7:
图7 整体电路连接图
4.6 单片机程序的编写
用KEIL编译软件进行程序的设计、编译并生成可执行文件。4.7 电路的检测
电路连接完毕后,应用单片机程序烧录工具进行程序烧录,然后单击运行按钮进行仿真,检测电路是否有误。
4.8 CAD电路的连接及PCB电路布线并做出电路板
待仿真电路检测无误后,则通过CAD软件进行电路图的连接并对元件进行封装,确定无误后生成PCB图进行电路的布线,之后做出电路板进行元件的焊接。4.9 软件与硬件的调试
单片机应用系统的调试包括硬件和软件两部分,但是它们并不能完全分开。一般的方法是排除明显的硬件故障,再进行综合调试,排除可能的软件或硬件故障。
软件调试是指用仿真软件进行仿真调试,验证系统的各项功能;硬件调试即软件调试成功后,将程序下载至AT89C51芯片中,用焊接好的电路来进行各项功能的验证与检测。
需要特别注意的是软件调试与硬件调试的差异,软件调试只是初步的估测,硬件的调试才是最真实的。
5总结与体会
经过三周的实习设计,我设计的时钟控制器实现了它最基本功能,三个星期的紧张实习,让我获益非浅,更加熟练的掌握了Proteus软件、KEIL软件及CAD软件的应用,使我看到了自己专业知识的浅薄与不足。通过本次的课程设计,我对单片机这门课程有了更深的了解,单片机课程设计则是人生课程,我学到了很多课堂上无法学到的东西,懂得了学习的不容易,在以后的学习中我会更加努力的去学习和研究,以取得更好的成绩。
6.附录
6.1 CAD电路连线图如图8。
图8 CAD电路连接图
6.2 PCB电路布线图如图9。
图9 PCB布线电路图(注:未连线的端口用外接线连接)
6.3 时钟控制器参考源程序
使用keil软件编写源程序 ORG 0000H LJMP START ORG 000BH LJMP TIME;********初始化********* START: MOV SP, #50H MOV 20H,#00H;定义秒
MOV 21H,#00H;定义分 MOV 22H,#00H;定义时
MSTOP1: MOV C,P1.3;P1.3为0时转移 JNC MSTOP1 LCALL DELAY1;延时
MOV A,50H
INC 50H
CJNE A,#00H,HJ1
LJMP L0 HJ1: MOV C,P1.3 JNC MSTOP1 INC 22H;小时自加一 MOV A,22H CJNE A,#18H,GO12;MOV 22H,#00H;MOV 34H,#00H MOV 35H,#00H LJMP L0 L1: JB P1.1,L2;P1.1=1 MOV C,P1.1 JC L1 LCALL DELAY1;JC L1 MSTOP2: MOV C,P1.1 JNC MSTOP2 LCALL DELAY1;MOV C,P1.1 JNC MSTOP2 INC 21H;MOV A,21H CJNE A,#3CH,GO11;MOV 21H,#00H;MOV 32H,#00H MOV 33H,#00H LJMP L0 GO11: MOV B,#0AH DIV AB MOV 32H,B;MOV 33H,A;LJMP L0 GO12: MOV B,#0AH DIV AB MOV 34H,B;MOV 35H,A;LJMP L0 L2: JB P1.0,L0;P1.0 MOV C,P1.0 JC L2 LCALL DELAY1;MOV C,P1.0 JC L2 STOP1: MOV C,P1.0 JNC STOP1
小时计数循环
复位 时转移 延时;P1.1=0时转移 延时 分钟加一 分钟计数循环 复位 将A的低4位存入32单元 将A的高4位存入33单元 将A的低4位存入34单元 将A的高4位存入35单元=1时转移 延时;P1.0=0时转移
LCALL DELAY1;延时 MOV C,P1.0 JNC STOP1
MOV 50H,#00H LJMP MAIN;*******设置闹钟******* SETATIME:LCALL DISPLAY2;调用DISPLAY2显示闹钟 N0: LCALL DISPLAY2 MM2: JB P1.2,N1;P1.2=1时转移 MOV C,P1.2 JC MM2 LCALL DELAY1;JC MM2 MSTOP3: MOV C,P1.2 JNC MSTOP3 LCALL DELAY1;
LJMP N0 HJ2: MOV C,P1.2 JNC MSTOP3 INC 24H;MOV A,24H CJNE A,#24,GO22;MOV 24H,#00H;MOV 38H,#00H MOV 39H,#00H LJMP N0 N1: JB P1.1,N2;P1.1 MOV C,P1.1 JC N1 LCALL DELAY1;JC N1 MSTOP4: MOV C,P1.1 JNC MSTOP4 LCALL DELAY1;MOV C,P1.1 JNC MSTOP4 INC 23H;MOV A,23H CJNE A,#60,GO21;MOV 23H,#00H;MOV 36H,#00H MOV 37H,#00H LJMP N0 GO21: MOV B,#0AH DIV AB MOV 36H,B;MOV 37H,A;LJMP N0
延时 =0时转移 延时 小时加一 小时计数循环 复位 =1时转移 延时 =0时转移 延时 分钟加一 分钟计数循环 复位 将A的低4位存入36单元 将A的高4位存入37单元
;P1.2 MOV A,50H INC 50H CJNE A,#00H,HJ2;P1.1
GO22: MOV B,#0AH DIV AB MOV 38H,B;将A的低4位存入38单元 MOV 39H,A;将A的高4位存入39单元 LJMP N0 N2: JB P1.0 ,N0;P1.0=1时转移 MOV C,P1.0 JC N2 LCALL DELAY1;延时 MOV C,P1.0 JC N2 STOP2: MOV C,P1.0 JNC STOP2 LCALL DELAY1 MOV C,P1.0 JNC STOP2
MOV 50H,#00H LJMP MAIN;*******闹钟判断***************** TIMEPRO: MOV A,21H MOV B,23H CJNE A,B,BK;判断定时闹钟的分钟 MOV A,22H MOV B,24H CJNE A,B,BK;判断定时闹钟的小时 SETB 25H.0 MOV C,25H.0 LCALL TIMEOUT;调用TIMEOUT BK:RET;**************喇叭报警***************** TIMEOUT: X1: LCALL BZ;调用喇叭响应程序 CLR 25H.0;调用喇叭响应程序结束 LCALL DELAY;延时 CLR 25H.0 LJMP DISPLAY1 BZ:MOV C,25H.1 MOV P1.6,C CLR P1.7 MOV R7,#0FFH;喇叭响应时间 T2: MOV R6,#0FFH T3: DJNZ R6,T3 DJNZ R7,T2 SETB P1.7 RET;*************显示闹钟时间************ LOOKATIME:LCALL DISPLAY2 MM: JNB P1.0,LOOKATIME LCALL DELAY1 LJMP MAIN DELAY1: MOV R4,#14H;时间延时
0
POP ACC RETI;********显示子程序********** DISPLAY1: MOV R0,#30H MOV R3,#0FEH MOV A,R3 PLAY1: MOV P2,A MOV A,@R0;取要显示的数据 MOV DPTR,#DSEG1;指向字形段码首地址 MOVC A,@A+DPTR CJNE R0,#34H,PA ORL A,#80H PA:CJNE R0,#32H,PB ORL A,#80H PB:CPL A;MOV P0,A;LCALL DL1 MOV P2,#0FFH MOV A,R3;RL A;JNB ACC.6,LD1 INC R0;MOV R3,A LJMP PLAY1 LD1: RET DISPLAY2: PUSH ACC;PUSH PSW MOV R0,#36H MOV R3,#0FBH MOV A,R3
PLAY2: MOV P2,A MOV A,@R0;MOV DPTR,#DSEG1;MOVC A,@A+DPTR CJNE R0,#38H,PP ORL A,#80H PP:CPL A;MOV P0,A;LCALL DL1;MOV P2,#0FFH MOV A,R3;RL A;JNB ACC.6,LD2 INC R0;MOV R3,A LJMP PLAY2;LD2: POP PSW POP ACC;RET;******DELAY*******
查表取字形段码 指向P0口 判断是否显示到最低位 左移一位 缓冲器地址加一 保护现场 取要显示的数据 指向字形段码首地址 查表取字形段码 指向P0口 调用DL1 判断是否显示到最低位左移一位 缓冲器地址加一 调用PLAY2 恢复现场
DL1: MOV R7,#20H DL: MOV R6,#20H DL6: DJNZ R6,$ DJNZ R7,DL RET DSEG1: DB 3FH,06H,5BH,4FH,66H;七段码表 DB 6DH,7DH,07H,7FH,6FH END 7.参考文献
[1].王建校,杨建国.51系列单片机及C51程序设计.北京:科学出版社, 2002.[2].吴金戊, 沈庆阳等.8051单片机实践与应用.北京:清华大学出版社, 2002.[3].李建忠.单片机原理及应用(第二版).西安:西安电子科技大学出版社, 2008.2.[4].张毅刚.新编MCS-51单片机应用设计(第3版).哈尔滨: 哈尔滨工业大学出版社, 2006.10.[5].李学礼.基于Proteus的8051单片机实例教程.电子工业出版社出版时间, 2008.6.[6].百度文库:http://wenku.baidu.com/view/a9243c18fad6195f312ba6d3.html
第五篇:基于单片机的时钟控制器设计
时钟控制器设计任务书
1.设计目的与要求
设计出一个用于数字时钟的控制器,准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能:
(1)显示: 可以显示时、分和秒
(2)调时功能:时(0-24)、分和秒(0-60)可以连续可调(3)时间日误差< 2秒(4)增加整点报时功能(5)增加闹钟任意设定功能 2.设计内容
(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;(5)PCB文件生成与打印输出; 3.编写设计报告
写出设计的全过程,附上有关资料和图纸,有心得体会。4.答辩
在规定时间内,完成叙述并回答问题。
目录
1.引言…………………………………………………………………………-1-2 总体设计方案………………………………………………………………-1-2.1 设计思路…………………………………………………………………-1-2.2 方案确立…………………………………………………………………-1-2.3 设计方框图………………………………………………………………-2-3 设计原理分析………………………………………………………………-2-3.1 系统硬件电路设计 ……………………………………………………-2-3.2 主控器件AT89S51 ………………………………………………………-2-3.3 译码器74HC245 …………………………………………………………-3-3.4 显示电路 …………………………………………………………………3-3.5 按键电路…………………………………………………………………-4-3.6 复位电路…………………………………………………………………-4-3.7 蜂鸣电路…………………………………………………………………-5-3.8 时钟电路…………………………………………………………………-5-3.9 总体原理图………………………………………………………………-5-3.10程序框图…………………………………………………………………-5-4 结束语………………………………………………………………………-7-参考文献………………………………………………………………………-8-附录 1 电路总原理图 ………………………………………………………-9-附录 2 总程序………………………………………………………………-10-
基于单片机控制的时钟控制器
摘要:本设计以Atmel公司的AT89S51单片机为控制系统的核心,模型采用单片机作为主控制器,以汇编语言为程序设计的基础,设计的一个用两个四位一体数码管串口显示的时钟控制电路,包含了时钟控制电路的基本功能:数码显示,时间调整,闹钟设定,秒表显示等,按照二十四小时循环,具有调节方便,简单实用,可靠性强的优点,有很高的利用价值。关键词:单片机 AT89C51 74LS245 数码管 引言
数字钟是采用数字电路实现对时、分、秒及数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。为了适应时代的潮流,本设计采用AT89S51单片机为核心,使得计时的精度有了很大的提高,而且调节也变的简单实用,采用数字显示也跟加的直观方便。总体设计方案
2.1 设计思路
本设计采用AT89S51单片机为控制核心,产生精确的时钟震荡,来控制数码管显示电路来进行数码显示,外围电路主要有复位电路,震荡电路,按键电路,显示电路,蜂鸣电路组成;复位电路可及时的对单片机进行复位,恢复到初始的状态,震荡电路主要用于计数,定时,产生合适的波特率,按键电路主要是给人们提供一个合适的人机对话的界面,方便人们进行实时的调节,显示电路主要用于数码的显示,蜂鸣电路用于闹铃设定等辅助功能。2.2 方案确立
本设计主要有包含了时钟电路,按键扫描,显示电路等几个部分。由单片机实现时钟功能单片机内部具有定时器,可方便实现定时功能。按键电路:键盘分为矩阵式键盘扫描电路和独立式按键电路。。矩阵式键盘电路,此类键盘是采用行列扫描方式,优点是当按键较多时可以降低占用单片机的I/O口数目,缺点是电路复杂且会加大编程难度。独立按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。缺点是当按键较多时占用单片机的I/O数目较多,优点是电路设计简单,且编程极其容易。由于该系统采用了常规钟表式的校对方式,用键较少,系统资源足够用,故采用了独立按键电路。显示电路分为:静态显示法与动态显示法,由于静态显示法需要数据锁存器等硬件,接口复杂一些,又考虑到时钟显示只有6位,且系统没有其它复杂的处理任务,所以决定采用动态显示法。2.3 硬件设计方框图
电路的设计以AT89S51单片机为核心,包含了按键电路,复位电路,震荡电路,数 码显示电路,整点报时电路等一系列独立环节,下面介绍一下电路设计过程中的总体框图,如图1所示。
图1 时钟电路总体框图 设计原理分析
用AT89S51单片机控制的数字时钟电路,外接震荡电路,按键电路,显示电路,蜂鸣电路等:用单片机电路P0口来输出7段码数据,P2.0~P2.5口作列扫描输出;按键用P1口控制,分别用于调节时,分,以及秒表和闹钟的设定;P1.7口接5V的小蜂鸣器,用于按键发音以及定时提醒,整点报时提醒等;采用74HC245作为数码管的段码驱动,为了提供共阳LED数码管的列扫描驱动电压,用三极管8550做电源的驱动输出;采用12MHZ晶振,可提高秒计时的精确性;在软件设计方面,应完成时钟控制电路的各项要求。
3.1 系统硬件电路设计
系统硬件电路主要组成:主控制器AT89S52、译码器74HC245、显示电路、蜂鸣器电路,复位电路时钟电路。3.2 主控器件AT89C51 AT89S51是一款低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。管脚如图2所示。
图2 DIP-40封装89C51引脚图
3.3译码器74LS245 74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。当89S51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。P0口与74LS245输入端相连,E端接地,保证数据线畅通。管脚如图3所示。
图3 74LS245管脚图
3.4 显示电路
LED显示块是由发光二极管显示字段的显示器件。这种显示块有共阴与共阳两种结构。共阴极LED显示块的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,发光二极管点亮。共阳极LED显示块的放光二极管阳极并接。显示块与单片机接口非常容易,只要将一个8位并行输出口语显示块的发光二极管引脚相连即可(AT89S51需要加上拉电阻)。此次电路采用2个4位共阳LED数码管,从P0口输出段码,列扫描用P2.0~P2.7来实现。如图4所示。
图4 74LS245驱动段码显示电路图
3.5 按键电路
按键调节电路有四个独立的按键接到P1口的P1.0—P1.3端口,控制着电路的调时,调分以及秒表功能和闹钟的设定。具体电路如下图5所示。
图5 按键电路图
3.6 复位电路
AT89S51单片机的复位电路,如图5所示中左边电路。在RESET输入端出现高电平时实现复位和初始化。在震荡器运行的情况下,要实现复位操作,必须使RST引脚至少 保持两个机器周期的高电平。在CPU在第二个机器周期内执行内部复位操作,以后每一个机器周期重复一次,直至RST端电平变低复位期间不产生ALE信号。当RST引脚返回低电平以后,CPU从0地址开始执行程序。3.7 蜂鸣电路
蜂鸣器是广泛应用于各种电子产品的一种元器件,它用于提示、报警、音乐等许多应用场合。三极管8550作蜂鸣器的驱动,增加了蜂鸣器的驱动电流。蜂鸣器的正极性的一端接到三极管的集电极,另一端连接到地,三极管的基极由单片机的P1.7管脚控制,底电平时蜂鸣器响,高电平时不响。另外,蜂鸣器的声音大小及音调可以通过调整P1.7管脚的置低时间及输出的波形进行控制。蜂鸣器的连接电路的原理图如图5所示。3.8 时钟电路
AT89S51内部片内有一个由反相放大器构成的振荡电路,XTAL1和XTAL2分别为震荡电路的输入端和输出端。时钟可以由内部方式产生或外部方式产生。在XTAL1和XTAL2引脚上外接定时元件,内部震荡电路就产生自己震荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。外部方式的时钟电路,XTAL1接地,XTAL2接外部振荡器。一般要求输入方波信号的频率低于33Mhz。本文设计的系统采用的是内部方式的时钟电路。如图6所示。
图6 时钟电路原理图
3.9 总体原理图
见附录1 3.10程序框图
主程序如图7所示首先是初始化部分,主要是计时单元清零,中断初始化,启动定时器工作,然后是调用显示子程序,接着是判断有无按键。无按键则回到调用显示子程序处;有按键,则执行按键处理子程序,执行完后回到调用显示子程序处,重复循环。定时器T0中断如图8所示
图7 主程序流程图
图8 中断程序流程图 结束语
三周实习很快就过去了,通过自行设计、焊接和调试一个单片机系统,我熟悉了单片机基本的开发流程和单片机的深入学习。在完成这个设计的同时,我复习了书本上的许多相关内容,受益匪浅。因此我在获得理论知识的同时,实践中也获得了许多书本上没有的东西。提高了调试以及查找并解决问题的能力,我深入了解了焊普通元件与电路元件的技巧、数字时钟的工作原理及其它各电路元件的作用等。这些知识不仅在课堂上有效,对以后的学习工作有很大的指导意义,在日常生活中更是有着现实意义;也对自己的动手能力是个很大的锻炼。实践出真知,纵观古今,所有发明创造无一不是在实践中得到检验的。没有足够的动手能力,就奢谈在未来的科研尤其是实验研究中有所成就。最后,感谢老师对我们这次实习的辛勤指导和帮助。
参考文献
[1] 李光飞,楼然苗,胡佳文编著.单片机课程设计实例指导.北京:北京航空航天大学出版社.2004 [2] 黄仁欣主编.单片机原理及应用技术.北京: 清华大学出版社.2005.[3] 高吉祥主编.电子技术基础实验与课程设计.北京:电子工业出版社.2002 [4] 肖玲妮.印刷电路板设计教程.[M].北京:清华大学出版社,2003.[5] 康华光.电子技术基础.[M].北京;高等教育出版社,2006.[6] 余小平等.电子系统设计.[M].北京:北京航空航天大学出版社,2007.附录1: 11 电路总原理图
附录2: 总程序
ORG 0000H LJMP START ORG 000BH LJMP INIT0 START: MOV 70H,#0 MOV 71H,#0 MOV 72H,#0 MOV 73H,#0 MOV 74H,#0 MOV 75H,#0 MOV 76H,#0 MOV 77H,#0 MOV 78H,#0 MOV 79H,#0 MOV 7AH,#0 MOV 7BH,#0 MOV 7CH,#0 MOV 7DH,#0 MOV 7EH,#0 MOV 72H,#0AH;对连字符进行装值
MOV 75H,#0AH MOV 60H,#0 MOV 61H,#0 MOV 63H,#0 MOV 64H,#0 CLR P1.7 MOV TMOD,#01H;选择定时器/计数器T0的方式1 MOV TL0,#0B0H;对低位赋初值 MOV TH0,#03CH;高位赋初值 SETB EA SETB ET0 SETB TR0 START1: LCALL SCAN LCALL KEYSCAN SJMP START1 DL1MS: MOV R6,#14H;延时1子程序 DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET DELAY: MOV R6,#10 D1: MOV R7,#30 DJNZ R7,$ DJNZ R6,D1 RET
DL20MS: ACALL SCAN;延时20ms子程序 ACALL SCAN ACALL SCAN RET
;整点报时将秒和分的单元与零比较 SCAN: MOV A,7EH;7F单元的内容为0
CJNE A,79H,NEXT MOV A,7DH
CJNE A,7AH,NEXT SETB P1.7 AJMP NEXT1 NEXT: CLR P1.7 NEXT1:
MOV A,79H
CJNE A,#0,NEXT2 MOV A,78H
CJNE A,#0,NEXT2 SETB P1.7 LJMP NEXT3 NEXT2:CLR P1.7
;数码管总显示程序开始分两部分
;校正时间和数码管正常工作的显示程序 NEXT3: MOV A,78H MOV B,#0AH
DIV AB;时间秒的十位送给A,时间秒的个位送B
MOV 71H,A;时间秒要显示的十位
MOV 70H,B;时间秒要显示的个位
MOV A,79H MOV B,#0AH
DIV AB;时间分的十位送给A,时间分的个位送B
MOV 74H,A;时间分要显示的十位送地址
MOV 73H,B;时间分要显示的个位送地址
MOV A,7AH MOV B,#0AH DIV AB;时间时的十位送给A,时间时的个位送B MOV 77H,A;时间时显示的十位送地址
MOV 76H,B;时间时要显示的个位送地址
MOV R1,#70H LCALL DL1MS JB P1.2,LAST HERE3:JNB P1.2,HERE3 INC 7EH MOV A,7EH
CJNE A,#3CH,LOOP3 MOV 7EH,#00H;调制闹铃的时间显示 LOOP3: MOV DPTR,#TAB MOV R5,#0FEH MOV A,7DH MOV R3,#09H
MOV B,#10 SCAN1: MOV A,R5;数码管正常工作的显 DIV AB 示程序
MOV 64H,A MOV P2,A MOV 63H,B MOV A,@R1 MOV A,7EH MOV DPTR,#TAB
MOV B,#10 MOVC A,@A+DPTR;对字段表取值 DIV AB 显示
MOV 61H,A MOV P0,A MOV 60H,B MOV A,R5 MOV P2,#0F7H LCALL DL1MS MOV A,60H INC R1 MOVC A,@A+DPTR MOV A,R5 MOV P0,A RL A LCALL DELAY MOV R5,A MOV P2,#0EFH DJNZ R3,SCAN1 MOV A,61H MOV P2,#00H MOVC A,@A+DPTR MOV P0,#00H MOV P0,A JB P1.3,QQ LCALL DELAY LCALL DL1MS MOV P2,#0DFH JB P1.3,QQ MOV P0,#40H HERE: JNB P1.3,HERE LCALL DELAY SJMP LOOP1 MOV P2,#0BFH
MOV A,63H QQ: LJMP LAST MOVC A,@A+DPTR LOOP1:JB P1.1,LOOP2 MOV P0,A LCALL DL1MS LCALL DELAY JB P1.1,LOOP2 MOV P2,#07FH HERE1:JNB P1.1,HERE1 MOV A,64H INC 7DH MOVC A,@A+DPTR MOV A,7DH
MOV P0,A CJNE A,#18H,LOOP2 LCALL DELAY MOV 7DH,#00H JB P1.3,LOOP4 LOOP2:JB P1.2,LOOP3 LCALL DL1MS 14 JB P1.3,LOOP4 HERE4:JNB P1.3,HERE4 LJMP LAST LOOP4:LJMP LOOP1 LAST: RET;“0~9”和“-”的字段表 TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
;定时/计数器T0中断程序 INIT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 INC 7BH MOV A,7BH CJNE A,#14H,OUTT0;50ms是否到20次,没有到就继续执行50ms的延时
MOV 7BH,#00 INC 78H MOV A,78H CJNE A,#3CH,OUTT0;一秒的延时是否计到60次,没有就继续执行
MOV 78H,#00 INC 79H MOV A,79H CJNE A,#3CH,OUTT0 MOV 79H,#00 INC 7AH MOV A,7AH CJNE A,#18H,OUTT0;60分钟的延时是否计到24次,没有就继续执行程序 MOV 7AH,#00 OUTT0: SETB ET0;启动定时器T0 POP PSW POP ACC RETI;按键处理程序 KEYSCAN:CLR EA
JNB P1.0,KEYSCAN0;P1.0有按键按下则跳转到子程序
JNB P1.1,KEYSCAN1;P1.1有按键按下则跳转到子程序
JNB P1.2,KEYSCAN2;P1.2有按键按下则跳转到子程序
KEYOUT: SETB EA RET
KEYSCAN0:LCALL DL20MS;20ms的延时消抖
JB P1.0,KEYOUT WAIT0: JNB P1.0,WAIT0;判断按键是否松手,松手就往下执行程序 INC 7CH MOV A,7CH CLR ET0 CLR TR0
CJNE A,#04H,KEYOUT;按下第一次和第二次对时、分选定
MOV 7CH,#00;按下第三次时就启动计时
SETB ET0 SETB TR0 LJMP KEYOUT
KEYSCAN1:LCALL DL20MS;按键加一的程序
JB P1.1,KEYOUT WAIT1: JNB P1.1,WAIT1 MOV A,7CH
CJNE A,#03H,KSCAN11;如果功能键按下则对时加一调整 INC 78H MOV A,78H
CJNE A,#60,KEYOUT MOV 78H,#00 LJMP KEYOUT
KSCAN11: CJNE A,#02H,KSCAN12 INC 79H MOV A,79H
CJNE A,#60,KEYOUT;如果加到60则清零
MOV 79H,#00 LJMP KEYOUT KSCAN12:CJNE A,#01H,KEYOUT INC 7AH;如果功能键是按下第二次则对分进行加一调整
MOV A,7AH CJNE A,#18H,KEYOUT MOV 7AH,#00 LJMP KEYOUT KEYSCAN2:LCALL DL20MS;延时消抖程序 JB P1.2,KEYOUT WAIT2: JNB P1.2,WAIT2;判断是否放开按键
MOV A,7CH;如果功能键是按下第一次对时进行减一 CJNE A,#03H,KSCAN22 DEC 78H MOV A,78H CJNE A,#00H,KEYOUT MOV 78H,#3BH LJMP KEYOUT KSCAN22:CJNE A,#02H,KSCAN23 DEC 79H MOV A,79H CJNE A,#00H,KEYOUT1 MOV 79H,#3BH LJMP KEYOUT KSCAN23:CJNE A,#01H,KEYOUT1 DEC 7AH MOV A,7AH;如果功能键是按下第二次则对分进行减一 CJNE A,#00H,KEYOUT1 MOV 7AH,#17H LJMP KEYOUT1 KEYOUT1: SETB EA RET END