猜数字vhdl设计-数字电路实验报告 本文关键词:数字电路,实验,数字,报告,设计
猜数字vhdl设计-数字电路实验报告 本文简介:数字电路实验报告猜数字学院:班级:姓名:学号:实验组号:一.实验要求【基本要求】1、游戏规则:通常由两个人玩,一方出数字,另一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜的人知道。2、数字设置:通过4*4键盘进行4位数字输入,在数码管(DISP0~DISP3)上显示当前所输入的数字。通过
猜数字vhdl设计-数字电路实验报告 本文内容:
数字电路实验报告
猜数字
学院:
班级:
姓名:
学号:
实验组号:
一.实验要求
【基本要求】
1、
游戏规则:通常由两个人玩,一方出数字,另一方猜。出数字的人要想好一个没有
重复数字的4位数,不能让猜的人知道。
2、
数字设置:通过4*4键盘进行4位数字输入,在数码管(DISP0~DISP3)上显示当前
所输入的数字。通过设置确定键(BTN1键)进行锁定,此时数码管上的数值消失,
同时用点阵开始倒计时,即:初始状态点阵全亮,然后从右下角开始,由右到左、
由下到上逐点逐排依次熄灭,间隔时间为1s,共计64s。
3、
猜数字:可以通过4*4键盘进行4位数字输入进行猜数字,且每输入一位数字在数
码管(DISP0~DISP3)上显示当前所输入的数字,按确定键(BTN2键)进行确认,
此时要根据输入的这组数字给出几A几B,其中:
l
A前面的数字表示位置正确的数的个数,用DISP5显示
l
B前的数字表示数字正确而位置不对的数的个数,用DISP4显示
l
如正确答案为
2134,而猜的人猜
5314,则是
1A2B,其中有一个4的位置对
了,记为1A,而1和3这三个数字对了,而位置没对,因此记为
2B,合起来就
是
1A2B
l
接着猜的人再根据出题者的几A几B继续猜,直到猜中(即
4A0B)为止。
4、
若数字正确则显示猜数字成功,点阵显示“?”笑脸;若输入数字错误系统仍然处
于猜数字状态,点阵显示“X”,并用蜂鸣器或led闪烁报警。
5、
若到点阵全灭时(64s结束)仍未猜出正确数字,游戏失败,点阵显示“囧”。
6、
设置游戏机开关。
【实验所用仪器及元器件】
1.计算机
2.数字系统与逻辑设计实验开发板
【实验软件】
Quartus
Ⅱ
【资源利用】
二、
程序设计
1、
程序流程图
开始
初始化
开始游戏?
设置数字
猜测
猜数字,点阵倒计时
确认数字
?A?B
计时结束?
正确?
重新开始?
结束
是
否
是
否
否
显示笑脸
是
是
显示囧
否
否
是
2、
逻辑框图
蜂鸣器模块
点阵模块
数码管模块
分频模块
状
态
机
CLK
键盘模块
3、
MDS图
Idle
初始化
S1
设置数字
S3
?A?B
S2
猜数字
Over
结束
st=’1’
rs=’1’
rs=’1’
reset=’1’
ms1=’1’
ms2=’1’
done=’1’
tm=’1’
tf=’0’
tm=’0’
st=’1’
rs=’1’
三、程序分析
1、
引脚注释
clk——时钟
st——游戏开始
scan_out[30]——键盘的行扫描输出信号
key_row[30]——键盘的列输入信号
ms1——输入确认键
ms2——猜数字
rs
——复位
bee_out——蜂鸣器输出
ld_out——状态指示灯
seg_out
——数码管显示
cat_out——数码管排列显示
led_row_out——点阵行显示
led_col_out——点阵列显示
2、
键盘数字
data0
IF
st=
1
THEN
next_state
IF
ms1=
1
THEN—确认输入数字
next_state
IF
ms2=
1
THEN
---开始猜数字
next_state
IF
done=
1
THEN
–判断完成,数字对比结束
next_state
IF
st=
1
THEN
next_statenext_state
CASE
cat
IS
WHEN
“111110“=>
cat
cat
cat
cat
cat
cat
cat
CASE
cat
IS
WHEN
“111110“=>
cat
cat
cat
cat
cat
cat
cat
CASE
cat
IS
WHEN
“111110“=>
cat
cat
cat
cat
cat
cat
cat
CASE
cat
IS
WHEN
“111110“=>
cat
cat
cat
cat
cat
cat
cat
CASE
cat
IS
WHEN
“111110“=>
cat
cat
cat
cat
cat
cat
catNULL;
END
CASE;
cat_out
scan
scan
scan
scan
scan
seg_a
seg_a
seg_a
seg_a
seg_a
seg_a
seg_b
seg_b
seg_b
seg_b
seg_b
seg_b
x1
count_clear
CASE
scan
IS
WHEN
“0111“=>
key1
key1
key1
key1
NULL;
END
CASE;
WHEN
“1011“=>
CASE
scan
IS
WHEN
“0111“=>
key1
key1
key1
key1
NULL;
END
CASE;
WHEN
“1101“=>
CASE
scan
IS
WHEN
“1011“=>
key1
key1
NULL;
END
CASE;
WHEN
OTHERS
=>
NULL;
END
CASE;
CASE
count1
IS
WHEN
0
=>
IF
key1
/=
x4
THEN
x1
IF
key1
/=
x1
THEN
x2
IF
key1
/=
x2
THEN
x3
IF
key1
/=
x3
THEN
x4
NULL;
END
CASE;
WHEN
s2
=>
bee
CASE
scan
IS
WHEN
“0111“=>
key2
key2
key2
key2
NULL;
END
CASE;
WHEN
“1011“=>
CASE
scan
IS
WHEN
“0111“=>
key2
key2
key2
key2
NULL;
END
CASE;
WHEN
“1101“=>
CASE
scan
IS
WHEN
“1011“=>
key2
key2
NULL;
END
CASE;
WHEN
OTHERS
=>
NULL;
END
CASE;
CASE
count2
IS
WHEN
0
=>
IF
key2
/=
y4
THEN
y1
IF
key2
/=
y1
THEN
y2
IF
key2
/=
y2
THEN
y3
IF
key2
/=
y3
THEN
y4
NULL;
END
CASE;
WHEN
s3=>
count5:=0;
count6:=0;
IF
x1=y1
THEN
count5:=count5+1;
ELSIF
x1=y2
THEN
count6:=count6+1;
ELSIF
x1=y3
THEN
count6:=count6+1;
ELSIF
x1=y4
THEN
count6:=count6+1;
ELSE
NULL;
END
IF;
IF
x2=y2
THEN
count5:=count5+1;
ELSIF
x2=y1
THEN
count6:=count6+1;
ELSIF
x2=y3
THEN
count6:=count6+1;
ELSIF
x2=y4
THEN
count6:=count6+1;
ELSE
NULL;
END
IF;
IF
x3=y3
THEN
count5:=count5+1;
ELSIF
x3=y1
THEN
count6:=count6+1;
ELSIF
x3=y2
THEN
count6:=count6+1;
ELSIF
x3=y4
THEN
count6:=count6+1;
ELSE
NULL;
END
IF;
IF
x4=y4
THEN
count5:=count5+1;
ELSIF
x4=y1
THEN
count6:=count6+1;
ELSIF
x4=y2
THEN
count6:=count6+1;
ELSIF
x4=y3
THEN
count6:=count6+1;
ELSE
NULL;
END
IF;
IF
count5=4
THEN
tf
done
NULL;
END
CASE;
END
IF;
END
PROCESS
p7;
10、
状态指示灯
P8:PROCESS(clk_scan)
BEGIN
IF
clk_scan
event
AND
clk_scan=
1
THEN
CASE
state
IS
WHEN
idle
=>
ld_out
ld_out
ld_out
ld_out
ld_outld_out
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
CASE
led_row
IS
WHEN
“10111111“=>
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
CASE
led_row
IS
WHEN
“10111111“=>
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
CASE
led_row
IS
WHEN
“10111111“=>
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
CASE
led_row
IS
WHEN
“10111111“=>
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
CASE
led_row
IS
WHEN
“10111111“=>
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
CASE
led_row
IS
WHEN
“10111111“=>
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
--led
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row
led_row<=“01111111“;led_col<=“11111111“;
END
CASE;
END
CASE;
END
IF;
led_row_out<=led_row;
led_col_out<=led
篇2:数字PID调节器算法的研究实验报告
数字PID调节器算法的研究实验报告 本文关键词:调节器,算法,实验,数字,报告
数字PID调节器算法的研究实验报告 本文简介:实验四数字PID调节器算法的研究一、实验目的1.学习并熟悉常规的数字PID控制算法的原理;2.学习并熟悉积分分离PID控制算法的原理;3.掌握具有数字PID调节器控制系统的实验和调节器参数的整定方法。二、实验设备1.THTJ-1型计算机控制技术实验箱2.THVLW-1型USB数据采集卡一块(含37芯
数字PID调节器算法的研究实验报告 本文内容:
实验四
数字
PID
调节器算法的研究
一、实验目的
1.学习并熟悉常规的数字PID
控制算法的原理;
2.学习并熟悉积分分离PID
控制算法的原理;
3.掌握具有数字PID
调节器控制系统的实验和调节器参数的整定方法。
二、实验设备
1.THTJ-1
型计算机控制技术实验箱
2.THVLW-1
型USB
数据采集卡一块(含37
芯通信线、USB
电缆线各1
根)
3.PC
机1
台(含上位机软件“THTJ-1”)
三、实验内容
1.利用本实验平台,设计并构成一个用于混合仿真实验的计算机闭环实时控制系统;
2.采用常规的PI
和PID
调节器,构成计算机闭环系统,并对调节器的参数进行整定,
使之具有满意的动态性能;
3.对系统采用积分分离PID
控制,并整定调节器的参数。
四、实验原理
在工业过程控制中,应用最广泛的控制器是
PID
控制器,它是按偏差的比例(P)、积分(I)、微分(D)组合而成的控制规律。而数字PID
控制器则是由模拟PID
控制规律直接变换所得。
在
PID
控制规律中,引入积分的目的是为了消除静差,提高控制精度,但系统中引入了积分,往往使之产生过大的超调量,这对某些生产过程是不允许的。因此在工业生产中常用改进的PID
算法,如积分分离PID
算法,其思想是当被控量与设定值偏差较大时取消积分控制;当控制量接近给定值时才将积分作用投入,以消除静差,提高控制精度。这样,既保持了积分的作用,又减小了超调量。
五、实验步骤
1、实验接线
1.1
按图4-1
和图4-2
连接一个二阶被控对象闭环控制系统的电路;
1.2
该电路的输出与数据采集卡的输入端AD1
相连,电路的输入与数据采集卡的输出端DA1
相连;
1.3
待检查电路接线无误后,打开实验平台的电源总开关,并将锁零单元的锁零按钮处于“不锁零”状态。
2、脚本程序运行
2.1
启动计算机,在桌面双击图标THTJ-1,运行实验软件;
2.2
顺序点击虚拟示波器界面上的“开始采集”按钮和工具栏上的脚本编程器按钮;
2.3
在脚本编辑器窗口的文件菜单下点击“打开”按钮,并在“计算机控制算法VBS/
计算机控制技术基础算法/数字PID
调器算法”文件夹下选中“位置式PID”脚本程序并打开,阅读、理解该程序,然后点击脚本编辑器窗口的调试菜单下“步长设置”,将脚本算法的运行步长设为100ms;
2.4
点击脚本编辑器窗口的调试菜单下“启动”;用虚拟示波器观察图4-2
输出端的响应曲线;
2.5
点击脚本编辑器的调试菜单下“停止”,利用扩充响应曲线法(参考本实验附录4)整定PID控制器的P、I、D及系统采样时间Ts等参数,然后再运行。在整定过程中注意观察参数的变化对系统动态性能的影响;
2.6
参考步骤2.4、2.4和2.5,用同样的方法分别运行增量式PID和积分分离PID脚本程序,并整定PID控制器的P、I、D及系统采样时间Ts等参数,然后观察参数的变化对系统动态性能的影响。另外在积分分离PID程序运行过程中,注意不同的分离阈值tem对系统动态性能的影响;
2.7
实验结束后,关闭脚本编辑器窗口,退出实验软件。
五、实验原理
1.被控对象的模拟与计算机闭环控制系统的构成
图中信号的离散化通过数据采集卡的采样开关来实现。
被控对象的传递函数为:
它的模拟电路图如下图所示
2.常规PID控制算法
常规PID控制位置式算法为
对应的Z传递函数为
其增量形式为
3.积分分离PID控制算法
系统中引入的积分分离算法时,积分分离PID算法要设置分离阈E0:
当
│e(kT)│≤│E0│时,采用PID控制,以保持系统的控制精度。
当
│e(kT)│>│E0│时,采用PD控制,可使δp减小。积分分离PID控制算法为:
式中Ke称为逻辑系数:
当
│e(k)│≤│E0│时,
Ke=1
当│e(k)│>│E0│时,
Ke=0
对应的控制方框图为
图中信号的离散化是由数据采集卡的采样开关来实现。
4.数字PID控制器的参数整定
在模拟控制系统中,参数整定的方法较多,常用的实验整定法有:临界比例度法、阶跃响应曲线法、试凑法等。数字控制器参数的整定也可采用类似的方法,如扩充的临界比例度法、扩充的阶跃响应曲线法、试凑法等。下面简要介绍扩充阶跃响应曲线法。
扩充阶跃响应曲线法只适合于含多个惯性环节的自平衡系统。用扩充阶跃响应曲线法整定PID参数的步骤如下:
①
数字控制器不接入控制系统,让系统处于开环工作状态下,将被调量调节到给定值附近,并使之稳定下来。
②
记录被调量在阶跃输入下的整个变化过程
③
在曲线最大斜率处作切线,求得滞后时间τ和被控对象时间常数Tx,以及它们的比值Tx/τ,然后查课本表确定控制器的KP、Ki、Kd及采样周期T。
扩充阶跃响应曲线法通过测取响应曲线的τ、Tx参数获得一个初步的PID控制参数,然后在此基础上通过部分参数的调节(试凑)使系统获得满意的控制性能。
六、调试过程
去掉积分作用和微分作用,只保留比例作用,逐渐减小比例度,直到系统发生持续等幅振荡,如图所示
图
6-1
由图可得使系统发生振荡的临界比例度为1/2.314
系统的临界振荡周期为1.438
选取控制度为1.05进行参数整定:
根据1.05控制度计算得参数如下:
控制度
T
Kp
Ti
Td
1.05
0.02
0.272
0.705
0.201
a.
采用PID结构,根据参数计算得出参数有如下波形:
图
6-2
b.
对参数进行微调,保持其他值不变,将Ti都值变为2.0,有如下波形,可看出反应响应变慢,但是静差变小。
图
6-3
c.
继续不断微调各参数,得出如下图6-4与图6-5两个波形,最终结构选取了图6-5波形的参数,达到要求的结果,反应快,超调小,无静差。
图
6-4
图
6-5
d.
采用积分分离算法波形如
图6-6所示:
带积分分离的PID算法的特点是:偏差e(k)较大时,取消积分作用;当偏差e(k)较小时才将积分作用投入;其应用场合:当有较大的扰动或大幅度改变给定值采用积分分离措施。
篇3:数字电压表的制作与设计-实习报告
数字电压表的制作与设计-实习报告 本文关键词:电压表,实习报告,数字,制作,设计
数字电压表的制作与设计-实习报告 本文简介:河南工程学院实习报告专业电气自动化技术班级1331班姓名赵庆飞学号2013207091342014年12月1日实习(训)报告评语等级:评阅人:职称:*年*月*日河南工程学院实习(训)报告实习目的(内容):数字电压表的制作与设计实习时间:自12月1日至12月14日共14天。实习地点:实验室3号实验楼实
数字电压表的制作与设计-实习报告 本文内容:
河
南
工
程
学
院
实
习
报
告
专业电气自动化技术
班级
1331班
姓名
赵庆飞
学号
201320709134
2014年
12月1日
实习(训)报告评语
等级:
评阅人:
职称:*年*月*日
河
南
工
程
学
院
实习(训)报告
实习目的(内容):
数字电压表的制作与设计
实习时间:自
12月
1日至12月
14
日共14天
。
实习地点:
实验室3号实验楼
实习单位:
电气信息工程学院
指导老师:
陶春鸣
摘要
随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数电路,这
就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。
数字电压表它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本章重点介绍单片A/D
转换器以及由它们构成的基于单片机的数字电压表的工作原目前,由各种单片A/D
转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力理。AT89C52单片机的一种电压测量电路,该电路采用ADC0832本文介绍一种基于A/D转换电路,测量范围直流
0~5V
的4路输入电压值,并在四位LED数码管上显示或单路选择显示。测量最小分辨率为0.019V,测量误差约为正负0.02V。本次设计就是为了更好地掌握单片机及相关的电子技术,在参阅一些资料的基础上利用ADC0832而设计的数字电压表。
一、设计目的与功能要求
A、
设计目的
利用单片机及ADC0832核心元件制作三位半数字电压表,更好地学习掌握ADC0832的工作原理及A/D的转换编程方法。
B、功能要求
利用ADC0832设计实现数字电压表的测量值为0~5V,用电位器模拟ADC0832的输入电压,用3位数码管显示,实时模拟数字电压表。
二.总体设计
A、系统设计
主要分为两部分:硬件电路及软件程序。硬件电路包括:单片机及外围电路,模拟信号采集电路,A/D转换电路,数码管显示电路,各部分电路的衔接。软件的程序可采用C语言或汇编,这里采用C语言,详细的设计思路在后面介绍。
B、设计方案
数字电压表的设计方案很多,但采用集成电路来设计较流行。其设计主要是由模拟电路和数字电路两大部分组成,模拟部分包括A/D转换器,基准电源等;数字部分包括振荡器,数码显示,计数器等。其中,A/D转换器将输入的模拟量转换成数字量,它是数字电压表的一个核心部件,ADC0832
为
8
位分辨率
A/D
转换芯片,其最高分辨可达
256
级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在
0~5V
之间。芯片转换时间仅为
32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过
DI
数据输入端,可以轻易的实现通道功能的选择。
C、总体设计框图
采集
量程变换处理
数字信号
数码管
单
片
机
A/D
转换器
ADC0832
外界模拟信号
显示出模拟电压
的数值
预先写好的汇编程序
置
入
振荡器、时序脉冲
三.设计原理图
四.硬件电路设计
1、核心元器件介绍
a
、
芯片介绍
1.单片机AT89S52介绍
AT89S52
是一种低功耗、高性能CMOS8位微控制器,具有
8K
在系统可编程AT89S52引脚图
DIP封装Flash存储器。使用Atmel
公司高密度非易失性存储器技术制造,与工业80C51
产品指令和引脚完
全兼容。片上Flash允许程序存储器在系统可编程,亦适于
常规编程器。在单芯片上,拥有灵巧的8
位CPU
和在系统
可编程Flash,使得AT89S52为众多嵌入式控制应用系统提
供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,
32
位I/O
口线,看门狗定时器,2
个数据指针,三个16
位
定时器/计数器,一个6向量2级中断结构,全双工串行口,
片内晶振及时钟电路。另外,AT89S52
可降至0Hz
静态逻
辑操作,支持2种软件可选择节电模式。空闲模式下,CPU
停止工作,允许RAM、定时器/计数器、串口、中断继续工
作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
P0
口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻
辑电平。对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,
P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验
时,需要外部上拉电阻。
P1
口:P1
口是一个具有内部上拉电阻的8
位双向I/O
口,p1
输出缓冲器能驱动4
个
TTL
逻辑电平。
此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2
的触发输入(P1.1/T2EX)。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能:
P1.0
T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
P2
口:P2
口是一个具有内部上拉电阻的8
位双向I/O
口,P2
输出缓冲器能驱动AT89S52引脚图
PLCC封装4
个
TTL
逻辑电平。对P2
端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入
口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX
@DPTR)
时,P2
口送出高八位地址。在这种应用中,P2
口使用很强的内部上拉发送1。在使用
8位地址(如MOVX
@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3
口:P3
口是一个具有内部上拉电阻的8
位双向I/O
口,p3
输出缓冲器能驱动4
个
TTL
逻辑电平。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INTO(外中断0)
P3.3
INT1(外中断1)
P3.4
TO(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
按键复位
上电复位
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
2.A/D转换器ADC0832
·
8位分辨率;
·
双通道A/D转换;
·
输入输出电平与TTL/CMOS相兼容;ADC0832·
5V电源供电时输入电压在0~5V之间;
·
工作频率为250KHZ,转换时间为32μS;
·
一般功耗仅为15mW;
·
8P、14P—DIP(双列直插)、PICC
多种封装;
·
商用级芯片温宽为0°C
to
+70°C,工业级芯片温宽为?40°C
to
+85°C;
芯片接口说明:
·
CS_
片选使能,低电平芯片使能。
·
CH0
模拟输入通道0,或作为IN+/-使用。
·
CH1
模拟输入通道1,或作为IN+/-使用。
·
GND
芯片参考0
电位(地)。
·
DI
数据信号输入,选择通道控制。
·
DO
数据信号输出,转换数据输出。
·
CLK
芯片时钟输入。
·
Vcc/REF
电源输入及参考电压输入(复用)
3、其他硬件
A、排阻的作用
内存芯片下方均匀分布的“芝麻粒”,实排阻际上是位于内存颗粒和金手指之间的“排阻”。排阻,是一排电阻的简称。我们知道,内存在处理、传输数据时会产生大小不一的工作电流。而在内存颗粒走线的必经之处安装一排电阻,则能够帮助内存起到稳压作用,让内存工作更稳定。从而提升内存的稳定性,增强内存使用寿命。内存右边角上的“小绿豆”,我们一般称之为SPD。SPD是一存储体,它存储了厂商对内存的详细配置信息:如内存的工作电压,位宽,操作时序等。每次开机后自检时,系统都会首先读取内存SPD中的相关信息,来自动配置硬件资源,以避免出错。上拉、限流。和普通电阻一样,相比而言简化了PCB的设计、安装,减小空间,保证焊接质量。
排阻的特点
排阻具有方向性,与色环电阻相比具有整齐、少占空间的优点。
排阻引脚说明
1与a
2与b
3与c
4
与d之间的电阻都是10欧,与其它的管脚没有任何关系.就是一排电阻,做在了一个原件上..
有的还有一个公脚,就是为了方便使用,拿万用表量一下就会发现所有脚对公共脚的阻值均是标称值,除公共脚外其它任意两脚阻值是标称值的两倍,很明显任意两脚通过公共脚脚串联的嘛!用在有很多上下拉电阻的场合应用特方便,比如并行通讯线上,还节省空间。(就是老师问这个问题就难住我啦,老师问我排阻的作用,我说保护电路,老师还问我还有什么作用,我竟不知道,我在网上查,其实查到啦,我不知道排阻是上拉电阻也是它的作用,就造成了,最后还是老师给我点出来的)
五、软件(程序)
A、
流程图
开始
系统初始化
启动A/D转换
采集A/D转换值
数据转换
Y
调用显示
三位是否显示完?完?
读电压值
Y
N
END
程序流程图
转换结束?
Y
N
B、程序
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
uint
Chan0Value,Chan1Value;
sbit
RS=P2^0;
//1602各控制脚
sbit
RW=P2^1;
sbit
EN=P2^2;
sbit
Cs0832=
P1^4;
//0832各控制脚
sbit
Clk0832=
P1^5;
sbit
Di0832=
P1^6;
sbit
Do0832=
P1^6;
uchar
table[]={“Chanal
0:
.
V“};
uchar
table1[]={“Chanal
1:
.
V“};
void
delay1ms(unsigned
int
ms)//延时1毫秒(不够精确的)
{
int
i,j;
for(i=0;i>i;
}
for(i=0;i<8;i++)
//从低到高取一次数
{
if(Do0832)
Dat2|=0x01<
Clk0832=1;
//下降沿有效
Clk0832=0;
}
Cs0832=1;
Di0832=1;
Clk0832=1;
//数据读取完成,释放所有数据线
if(Dat1==Dat2)
return
Dat1;
//校验两次数相等,输出
}
/*本程序与其他一般程序最大的不同就是要读两次
一次从最高位到最低位,一次从最低位到最高位,
两次所读值相等即为正常,可以输出*/
/******************************LCD1602**************************************/
/*************************lcd1602程序**************************/
void
wr_com(unsigned
char
com)//写指令//
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void
wr_dat(unsigned
char
dat)//写数据//
{
delay1ms(1);
RS=1;
RW=0;
EN=0;
P0=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void
lcd_init()//初始化设置//
{
delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x80);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}
void
writevalue(uchar
add,uchar
dat)
{
wr_com(0x80+add);
wr_dat(dat);
}
void
zifuchuan(ucharch)
{
while(*ch!=0)
wr_dat(*ch++);
delay1ms(1);
}
void
main(void)
{
uint
a,b;
int
i=0;
lcd_init();
while(1)
{
a=GetValue0832(0);
delay1ms(100);
b=GetValue0832(1);
wr_com(0x80);
for(i=0;i<15;i++)
{
wr_dat(table[i]);
}
Chan0Value=a/255.0*500;
writevalue(10,Chan0Value/100+0x30);
writevalue(12,Chan0Value%100/10+0x30);
writevalue(13,Chan0Value%100%10+0x30);
wr_com(0x80+0x40);
for(i=0;i<15;i++)
{
wr_dat(table1[i]);
}
Chan1Value=b/255.0*500;
writevalue(0x40+10,Chan1Value/100+0x30);
writevalue(0x40+12,Chan1Value%100/10+0x30);
writevalue(0x40+13,Chan1Value%100%10+0x30);
}
}
六、调试仿真
电路在proteus中的仿真图如下:
仿真结果:输入的电压从0~5V变化时,数字电压表能够测量出并利用数码管显示出来。测量的精度与要求的一致,前两位精确,百分位不作精确。要更精确,只需修改相应的源程序代码即可。
七、PCB板制作和焊接
A、PCB制作
利用原理图制作PCB板及利用专门的复写纸张将设计完成的PCB图通过喷墨打印机打印输出,然后将印有电路图的一面与铜板相对压紧,最后放到热交换器上进行热印,通过在高温下将复写纸上的电路图墨迹粘到铜板上。
制板。调制溶液,将硫酸和过氧化氢按3:1进行调制,然后将含有墨迹的铜板放入其中,等三至四分钟左右,等铜板上除墨迹以外的地方全部被腐蚀之后,将铜板取去,然后将清水将溶液冲洗掉。
打孔。利用凿孔机将铜板上需要留孔的地方进行打孔,完成后将各个匹配的元器件从铜板的背面将两个或多个引脚引入,然后利用焊接工具将元器件焊接到铜板上。
B、焊接
按照原理图进行焊接(焊接完好的成品如下)
八、心得
体会
经过两周的努力终于设计成功,LCD的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内。由于仪器误差,LCD显示最大值只能是4.9V,离标准最大值5.0V已经不远,达到预期目的,设计成功。本设计参考了AT89S52与ADC0832转换的接口连线,设计出电路图的连线,从并中理解了许多基本的知识和接线方法,在制作过程中遇到了许多问题,如封装的大小尺寸不同,焊盘的大小需要调整,在PCB封装连线时由于学校只能做单层板,所以不能把线条全部敷出,选择了在背面用导线代替,最后由于电位器的封装在LCD的下面无法调节分辨率,选择了把电位器重新定位,在面板上重新打了三个孔把电位器脚分别用导线连接再接到了焊盘上。还有排阻因为封装的错误使9引脚接到了VCC上。所以在焊接时就把排阻的头和尾进行了对调。通过这次的设计与实验使自己学到了很多的东西,也提高了对科学的自然兴趣。
参考文献
[1]
《单片机微型计算机原理及应用》
鲍小南等编著
浙江大学出版社
[2]
《.单片机课程设计指导》楼然苗、李光飞编著
.电子工业出版社,2007
[3]
《单片机应用技术.》
吴经国等编著
.中国电力出版社,2000
[4]
《8051单片机实践与应用》
吴金戌
沈庆阳
郭庭青
编著
清华大学出版社
[5]
《单片机原理及应用》
余修武
编著
电子科技大学出版社
[
6]
《单片机原理及接口技术》
(C51编程)张毅钢
编著
人民邮电出版社