检测控制系统资料Word格式文档下载.docx
《检测控制系统资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《检测控制系统资料Word格式文档下载.docx(38页珍藏版)》请在冰点文库上搜索。
设计4个按键的独立键盘和4×
4矩阵键盘的硬件电路和软件,并且在按键识别上分别采用查询法和中断方式,(仿真通过后)在开发板上搭建电路,设计好的程序编译后写入开发板中,检验相应键盘的性能。
三、具体任务
1.依托开发板,设计4或8个按键的独立键盘,软件上分别采用查询方式和中断方式识别是否有键按下。
2.依托开发板,设计4×
4矩阵键盘,软件上分别采用空闲查询方式和定时查询方式识别是否有键按下。
3.实验按键消抖。
任选前面一种键盘作为实验对象。
首先取消按键,实验有消抖和没消抖效果上的不同。
建议验证方案采用按一次键计数器加一送LED显示器显示。
将消抖时间由小变大,观察效果上的不同,确定出你的键盘合适的消抖时间。
1.实验总结(研究结论,实验经验,实验收获)
四、探究内容
1键盘设计需要考虑那些问题(按键识别、消抖、键值)
2键盘硬件电路的设计方法
3键盘软件设计方法(软件实现哪些功能)
4比较独立键盘和矩阵键盘的特点
5比较查询法和中断法识别按键性能上的不同
矩阵键盘连线图
整体连线图
第二部分:
实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)
1.4×
4键盘扫描方式读取键值主要程序如下:
voidmain(void)
{
while
(1)
{
KeyDown();
GPIO_DIG=~DIG_CODE[KeyValue];
}
}
voidKeyDown(void)
chara=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!
=0x0f)//读取按键是否按下
Delay10ms(10);
//延时10ms进行消抖
if(GPIO_KEY!
=0x0f)//再次检测键盘是否按下
{
//测试行
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07):
KeyValue=0;
break;
case(0X0b):
KeyValue=4;
case(0X0d):
KeyValue=8;
case(0X0e):
KeyValue=12;
}
//测试行
GPIO_KEY=0XF0;
{
case(0X70):
KeyValue=KeyValue+3;
case(0Xb0):
KeyValue=KeyValue+2;
case(0Xd0):
KeyValue=KeyValue+1;
case(0Xe0):
KeyValue=KeyValue;
while((a<
50)&
&
(GPIO_KEY!
=0xf0))//检测按键松手检测
Delay10ms
(1);
a++;
}
}
2.中断方式读取键盘值主要程序如下:
voidmain(void)
{
Delay10ms(100);
//IT0=0;
//低电平触发
IT0=1;
//下降沿触发
EA=1;
EX0=1;
{
P0=Disp_Tab[LedNumVal%10];
voidcounter(void)interrupt0
{Delay10ms(0);
EX0=0;
LedNumVal++;
教师签字__________
第三部分结果与讨论(可加页)
一、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)
二、小结、建议及体会
三、思考题
一实验结果分析:
通过多次按键测试,矩阵键盘扫描的最佳消抖时间为40ms。
在大于60ms后开始严重延迟,而小于20ms时灵敏度过高,导致数值跳变过快。
在独立按键识别时,若采用查询方式,则消抖情况同上。
若采用低电平触发中断模式,则不会出现延迟情况,但是会出现灵敏度过高的情况;
若采用下降沿触发,消抖效果最好!
键盘的硬件电路设计是根据按下不同的键,则相应I/O口的电平发生改变,从而被CPU检测进行判别的原理
独立按键和矩阵键盘有很大的不同,独立按键只接一个I/O,从而只需对一个I/O的电平进行判断即可进行操作。
但是矩阵键盘不同,不仅需要更复杂的外部电路,也需要对一组I/O的值进行检测,从而定位出按了什么键。
并且独立按键由于不需要轮询,所以响应速度更快
二小结、建议及体会
******************8
实验二:
显示器接口电路的设计与实现
一、实验目的
1显示器是微机应用系统中必不可少的输出设备,通过本次实验掌握显示器接口电路硬件和软件的设计技巧,能够设计出满足各种需要、适应各种场合的显示电路。
2通过显示器接口电路的设计,懂得如何节省I/O口资源,理解CPU如何合理安排并行工作。
1七段LED显示器接口实验
设计4个(或4个以上)的七段LED显示器的接口,包括硬件电路和软件,试验静态显示和动态显示的特点。
2LCD显示器接口实验(选做)
掌握LCD显示器接口芯片的结构和编程方法,设计LCD显示器的软件,实验LCD显示器的特点。
三、探究内容
对于七段LED显示器接口实验
需要显示的数字值如何转化成数码管的显示码?
(硬件译码和软件译码两种方式)
为什么LED显示器多采用动态显示方式?
动态显示和静态显示的特点。
动态显示时,多短时间重复点亮LED(重复调用显示程序),LED显示器的亮度才稳定?
LED显示器是否需要驱动
动态显示的LED显示器实验
依托开发板设计动态显示的LED显示器的硬件电路。
如果开发板允许,译码方式用硬件译码和软件译码两种方式实验。
设计动态显示的软件,再加上代表其它工作的延时程序形成系统的程序
加大延时时间,观察显示器的亮度是否改变。
通过实验确定,动态显示方式下,多短时间内LED被重复点亮才能保证显示器稳定地亮。
当代表其它工作的延时加大到显示器不亮时,采取什么措施让显示稳定地亮,实施并验证。
LED接入电路图原理
LED段码选
实验效果图
主要程序如下:
1.扫描查询模式
main()
{unsignedchari=0;
{Delay1ms(200);
for(i=0;
i<
8;
i++)
{
switch(i)
case(0):
LSA=0;
LSB=0;
LSC=0;
break;
case
(1):
LSA=1;
……
P0=tab[i];
Delay1ms
(2);
}
中断查询模式:
TMOD=0x02;
TH0=0;
//250US
TL0=0;
EA=1;
ET0=1;
TR0=1;
Delay1ms(2000);
voidbegain()interrupt1
unsignedchari=0;
for(i=0;
switch(i)
case(0):
LSA=0;
case
(1):
…………
P0=tab[i];
Delay1ms
(2);
}
一、实验结果分析
在本次实验中,LED显示的最大技术难度在于如何让LED灯一次被选中并且显示相应的值,这也是本实验精彩的地方所在。
利用人眼的迟钝效应,可以让LED灯转换的频率增加,以此人眼就会感觉LED灯像是静止不动的。
我们的任务就是找出这个最佳转换频率
实验中,驱动LED是使用高电平驱动,比如输入0xff则LED灯的每段将会全部亮起,通过改变输出的高低电平控制数码管的段选,从而实现显示不同的数值
实验测得当段选的时间间隔不超过20ms时,可以获得很好的显示效果,如果超过40ms,将会产生严重的闪烁。
但是也不能不设置扫描间隔,不然会产生数码管来不及转换而暗淡不清的现象
现实生活中,我们需要显示的数据大多数都是动态而不是静止不动的,并且动态便于实时观察监测结果,所以动态显示是很重要的
另外,可以用中断进行扫描控制,也很方便,而且定时精准
二、小结、建议及体会
***********
实验三:
基于8155的外设扩展
1掌握在进行监测控制系统或单片机应用系统设计时,如何分配外设地址,如何为外设设计地址译码电路。
2掌握常用接口芯片8155的应用,利用8155芯片进行外设扩展设计。
1现要求用8个按键开关分别控制8个LED灯,按一下开关键,则灯的状态改变(原来亮则灭,原来灭则亮),4×
4键盘则用来向8个LED灯输入要显示的数字。
用8155作外设的扩展接口,设计出硬件和软件。
2.8155的片选端分别通过线选法和译码法接到地址总线,实现1的要求。
开发板上有8155的,在开发板上实现,没8155的,则用proteus仿真实现即可。
一、学习和探究内容
1.熟悉8155的资源和引脚
2.如何根据系统需要对8155进行初始化编程
3.如何连接单片机和8155,一旦硬件连接后,如何确定8155各端口地址。
4.接口芯片的片选端可通过线选法和译码法接到地址总线的高位地址线上,线选法和译码法各有什么特点?
四、实验过程
1.采用线选法连8155片选端,为四种外设分配I/O口。
2.设计硬件电路图。
3.确定8155各端口的地址。
4.软件设计。
(此应用系统工作不多,可以不用中断,查询方式处理按键,不断循环,则按键和显示都会及时处理。
)
5.仿真
仿真图以及运行结果
#include<
absacc.h>
reg51.h>
#defineCOM8155XBYTE[0x7ff0]
#definePA8155XBYTE[0x7ff1]
#definePB8155XBYTE[0x7ff2]
#definePC8155XBYTE[0x7ff3]
#defineGPIO_KEYP1
unsignedcharcodeDIG_CODE[16]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0123456789101112131415
//abcdef
//unsignedinti,j;
unsignedcharKeyValue;
voidKeyDown(void);
voidDelay10ms(unsignedintc);
main(){
COM8155=0x0e;
while
(1){
PB8155=~DIG_CODE[KeyValue];
//PB8155=~PA8155;
switch(PA8155){
case0xfe:
PC8155=0X07;
//11111110000
case0xfd:
PC8155=0X06;
//11111101001
………………
一实验结果分析
经过一个多星期的调试与找错,我终于完成了这个实验。
实验最终运行效果完全满足要求,由于接口过多,不得不采取一些“聪明”的措施,比如增加38译码器以及使用分时使用等方式。
8155在与单片机进行交互时,有一点必须注意,就是地址要计算正确,其他的不过是在前两次实验上的衍生而已。
其中8155的PA口接独立键盘实现对PC口LED的控制,按下按键则相应的灯亮起来。
PB口接数码管实现对矩阵键盘的读取,经过测试,仿真和程序都运行完美!
线选法,就是直接以系统的地址线作为存储器芯片的片选信号,为此只需把用到的地址线与存储器芯片的片选端直接相连即可。
译码法又分全译码法和部分译码法。
全译码法是指将地址总线中除片内地址以外的全部高位地址接到译码器的输入端参与译码。
部分译码法是将高位地址线中的一部分(而不是全部)进行译码,产生片选信号。
线选法不存在地址重叠问题,连线简单方便,便于实现,但是当连接的芯片较多时不便使用。
片选法连线复杂,地址空间也可能重叠,但是可以通过译码的方式连接更多的外设
本题只需要连接一片外设,本着简单的原则选择线选法。
实验结果见预习页
二、小结、建议和体会
************8
实验四信号采集输入电路的设计与实现
1.掌握模拟量的输入接口电路的设计。
2.熟悉市面上常用的AD转换芯片的性能及特点
3.掌握AD转换芯片硬件连接方法和基本编程方法。
4.掌握模拟量采集的软件编程技巧
1.用信号发生器产生各种输出电压信号,设计一信号采集系统实时测量该信号发生器的输出并显示出来。
2.信号发生器分别输出直流、方波、正弦波信号供系统采集,研究信号采集系统如何保证准确性、精度、实时性。
二、实验具体方案
1模拟量采集系统的设计
开发板有AD转换芯片的,依托开发板设计模拟量采集系统的硬件和软件,实验时用实验室的信号发生器产生模拟量。
开发板上没有AD转换芯片的,自由设计模拟量采集系统的硬件和软件,实验时,在proteus环境下,用信号发生器产生模拟量,仿真实验。
2.采集系统准确性实验
让信号发生器分别输出1V、3V、5V、7V、9V、11V、13V的直流电压,记录采集系统的采集值。
观察测量值与实际值的差距,从硬件和软件两方面分析原因,改进系统,直至达到满意的测量结果,记录相应的测量结果。
思考采集系统的精度如何提高,给出答案。
(选做:
对于用proteus仿真实验的同学,调整系统设计,使测量精度提高一个档次,记录实验结果)
ADC0809原理图以及仿真和实验结果
实验中通过AD芯片读写程序,也是主要的程序,显示程序很简单,在此就不添加了
sbitST=P3^0;
//A/D启动转换信号
sbitOE=P3^1;
//数据输出允许信号
sbitEOC=P3^2;
//A/D转换结束信号
sbitCLK=P3^3;
//时钟脉冲
uintz,x,c,v,AD0809,date;
//定义数据类型
voidmain()
………………
while
(1)//无限循环
ST=0;
//使采集信号为低
ST=1;
//开始数据转换
//停止数据转换
while(!
EOC);
//等待数据转换完毕
OE=1;
//允许数据输出信号
AD0809=P1;
//读取数据
OE=0;
//关闭数据输出允许信号
if(AD0809>
=251)//电压显示不能超过5V
AD0809=250;
date=AD0809*20;
//数码管显示的数据值,其中20为采集数据的毫安值
xianshi();
//数码管显示函数
}
一、实验结果分析
在AD采集与转换实验中,一共有三种数据采集方式:
1)定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。
由于现在的芯片转换时间短,可以启动转换后,延时一段转换时间后,即读取转换结果。
2)查询方式
A/D转换芯片有表示转换结束的状态信号,例如ADC0809的EOC端。
3)中断方式
如果把表示转换结束的状态信号(EOC)作为中断请求信号,那么,便可以中断方式进行数据传送。
在本次实验中采用的是查询方式,当ADC0809采集一帧数据并完成转换时,其完成转换状态(ENDOFCONVERT)会被置位,使用while(!
EOC)循环,当完成转换时,!
EOC=0,退出循环,CPU采集到一帧数据。
实验中,经过测试误差在0.2V,这个精度不是很理想,但由于ADC0809本身采集数据的位数显示,很难进行改善。
另外ADC0809与CPU的连接使用到了前面一章学到的单片机接口拓展
二、小结、建议及体会
我在试验中用到前面学习的知识有:
数码管的动态显示、I\O口的拓展以及定时器的应用。
通过这次试验,对以前学习到的知识有了很好的巩固,同时也学会了外部模拟数据的采集和显示,学会了使用拓展芯片,对单片机和嵌入式有了更深的理解
三、思考
通过本次实验我们可以发现,使用中断方式是更好的,因为当完成一帧转换后,立马触发中断对数据进行采集,没有延迟。
而使用查询方式有一定的延迟,不能充分使用CPU的资源
实验五音乐发生器的设计与实现
1.掌握单片机片内定时器应用设计技巧,会确定定时器的时间常数,能够进行定时器的初始化编程。
2.掌握利用微处理器设计音乐发生器的方法
1.利用定时器产生特定的频率信号,设计一个音乐发生器,可以循环播放音乐,候选乐曲3首。
用按键选择播放哪一首音乐。
有音乐播放的启停键。
用8个LED灯随节拍闪烁(选做)
2.扩展内容(选做),用7个按键分别产生音阶1、2、3、4、5、6、7,按一下键,即产生一个节拍的相应音符,也就是设计电子琴。
三、设计过程
1基于开发板设计音乐发生器的硬件电路(包括单片机、喇叭、按键)
2研究产生音阶1、2、3、4、5、6、7的方法,计算7个音阶对应的时间常数
3设计产生单首乐曲循环的软件,调试后下载到开发板
4观察7个音阶是否准,不准,则进行调整
5调整节拍的时间,直到达到满意效果
6设计产生3首乐曲的音乐发生器,用按键选择循环的单曲,调试后下载到开发板,运行。
voidmain()
unsignedcharp,m;
//m:
constantoffrequency
unsignedchari=0;
unsignedcharcode*addr=music_tab1;
TMOD=0X01;
TH0=0xd8;
TL0=0xef;
IE=0x83;
IT0=1;
play:
while
(1)
while
(1)
if(p1==0)
addr=music_tab1;
break;
elseif(p2==0)
addr=music_tab2;
if(p1==1&
p2==1)
if((*addr)==0x00&
addr<
&
music_tab2[0])
{
addr=&
music_tab1[0];
}
elseif((*addr)==0x00&
addr>
=&
music_tab2[0])
music_tab2[0];
while(pause!
=0);
a: