检测控制系统.docx

上传人:b****3 文档编号:27408213 上传时间:2023-06-30 格式:DOCX 页数:23 大小:591.01KB
下载 相关 举报
检测控制系统.docx_第1页
第1页 / 共23页
检测控制系统.docx_第2页
第2页 / 共23页
检测控制系统.docx_第3页
第3页 / 共23页
检测控制系统.docx_第4页
第4页 / 共23页
检测控制系统.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

检测控制系统.docx

《检测控制系统.docx》由会员分享,可在线阅读,更多相关《检测控制系统.docx(23页珍藏版)》请在冰豆网上搜索。

检测控制系统.docx

检测控制系统

学生学号

****

实验课成绩

学生实验报告书

 

实验课程名称

检测控制系统

开课学院

信息工程学院

指导教师姓名

***

学生姓名

***

学生专业班级

***

 

2016

--

2017

学年

2

学期

 

实验课程名称:

检测控制系统

实验项目名称

实验一:

键盘接口电路的设计与实现

实验成绩

实验者

***

专业班级

电信1405

组别

同组者

实验日期

年月日

一部分:

实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)

一、实验目的:

键盘是微机应用系统中必不可少的输入设备,通过本次实验掌握键盘电路硬件和软件的设计技巧,能够设计出满足各种需要、适应各种场合的键盘电路。

通过键盘扫描工作与其它工作的合理安排,熟悉微机系统中键盘监控程序的设计原理。

二、实验内容:

设计4个按键的独立键盘和4×4矩阵键盘的硬件电路和软件,并且在按键识别上分别采用查询法和中断方式,(仿真通过后)在开发板上搭建电路,设计好的程序编译后写入开发板中,检验相应键盘的性能。

三、具体任务

1.依托开发板,设计4或8个按键的独立键盘,软件上分别采用查询方式和中断方式识别是否有键按下。

2.依托开发板,设计4×4矩阵键盘,软件上分别采用空闲查询方式和定时查询方式识别是否有键按下。

3.实验按键消抖。

任选前面一种键盘作为实验对象。

首先取消按键,实验有消抖和没消抖效果上的不同。

建议验证方案采用按一次键计数器加一送LED显示器显示。

将消抖时间由小变大,观察效果上的不同,确定出你的键盘合适的消抖时间。

1.实验总结(研究结论,实验经验,实验收获)

四、探究内容

1键盘设计需要考虑那些问题(按键识别、消抖、键值)

2键盘硬件电路的设计方法

3键盘软件设计方法(软件实现哪些功能)

4比较独立键盘和矩阵键盘的特点

5比较查询法和中断法识别按键性能上的不同

矩阵键盘连线图

整体连线图

第二部分:

实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)

×4键盘扫描方式读取键值主要程序如下:

voidmain(void)

{

while

(1)

{

KeyDown();

GPIO_DIG=~DIG_CODE[KeyValue];

}

}

voidKeyDown(void)

{

chara=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!

=0x0f)0f0F断方式读取键盘值主要程序如下:

voidmain(void)

{

Delay10ms(100);

描查询模式

main()

{unsignedchari=0;

while

(1)

{Delay1ms(200);

for(i=0;i<8;i++)

{

switch(i)

{

case(0):

LSA=0;LSB=0;LSC=0;break;

case

(1):

LSA=1;LSB=0;LSC=0;break;

……

}

P0=tab[i];

Delay1ms

(2);

}

}

}

中断查询模式:

main()

{

TMOD=0x02;

TH0=0;

何根据系统需要对8155进行初始化编程

3.如何连接单片机和8155,一旦硬件连接后,如何确定8155各端口地址。

4.接口芯片的片选端可通过线选法和译码法接到地址总线的高位地址线上,线选法和译码法各有什么特点?

四、实验过程

1.采用线选法连8155片选端,为四种外设分配I/O口。

2.设计硬件电路图。

3.确定8155各端口的地址。

4.软件设计。

(此应用系统工作不多,可以不用中断,查询方式处理按键,不断循环,则按键和显示都会及时处理。

5.仿真

仿真图以及运行结果

第二部分:

实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)

主要程序如下:

#include<>

#include<>

#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};

握模拟量的输入接口电路的设计。

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;

握单片机片内定时器应用设计技巧,会确定定时器的时间常数,能够进行定时器的初始化编程。

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;

理选择单片机定时器/计数器工作方式、初始值、初始化程序的设计。

2.根据事先设定的工作顺序和时间,用单片机实现开发板上的LED灯(配合继电器)按时间顺序点亮。

三、具体任务

利用单片机控制4个继电器负载,来模拟工业现场的顺序控制。

1、接线要求:

接启动开关K1。

当K1按下时,启动顺序控制过程.

接停止开关K2。

当K2按下时,停止顺序控制过程。

——口,接4个发光二极管,使用一个按键作为控制启动键,另外一个按键作为控制停止键。

2、要求的控制状态

状态1:

P1输出0×05,持续1s;

状态2:

P1输出0×03,持续1s;

状态3:

P1输出0×0F,持续1s;

状态4:

P1输出0×0E,持续1s;

状态5:

P1输出0×00,持续1s;

状态6:

P1输出0×04,持续2s;

再回到状态1,周而复始。

(213-计数初值)×晶振周期×12

或(213-计数初值)×机器周期MC

晶振=6.0MHz时,MC=2us

晶振=12.0MHz时,MC=1us

如:

单片机的晶振=,则在方式0下

最小定时时间为:

[213-(213-1)]×1/6×10-6×2=2×10-6(s)=2(us)

最大定时时间为:

(213-0)×1/6×10-6×12=16384×10-6(s)=16384(us)

如:

单片机的晶振=,则在方式1下

最小定时时间为:

[216-(216-1)]×1/6×10-6×2=2×10-6(s)=2(us)

最大定时时间为:

(216-0)×1/6×10-6×12=131072×10-6(s)=131072(us)

要计100个脉冲的计数初值:

•方式0(13位):

C=(64H)补码=2000H-64H=1F9CH

•方式1(16位):

C=(64H)补码=10000H-64H=FF9CH

13位

1F9CH=0000

TH0TL0

第二部分:

实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)

主要程序代码如下:

intmain()

{

unsignedchari=0;

unsignedchart;

unsignedchark;

TMOD=0x01;

for(;;i++)

{

for(count=0;count

{

TH0=time_h[i%6];

TL0=time_l[i%6];

TR0=1;

while

(1)

{

if(TF0==1)

{

TR0=0;

TF0=0;

break;

}

}

if(p00==0)

{

Delay10ms(10);

for(t=0;t<6;t++)

{

time_c[t]=time_c[t]+20;

}

}

k=KeyDown();

switch(k)

{

case1:

state[0]=state[5];break;

case2:

state[0]=state[4];break;

…………

}

if(p01==0)

{

Delay10ms

(1);

state[0]=0x04;

state[1]=0x00;

……

}

if(p06!

=1)

{

Delay10ms

(2);

while

(1)

{

if(p07==0)

{

break;

}

}

}

}

P1=state[i%6];

}

return0;

}

 

voidDelay10ms(unsignedintc)

过本次实验形成系统设计的概念

2.掌握单片机应用系统的设计方法和流程

3.学会合理分配资源

4.提高综合运用知识的能力

二、实验内容:

综合前面的实验,实现一监测控制系统,监测一模拟量(0-5V的交流电)输入并显示,当该模拟量在正常的1-3V范围内时,系统执行正常的顺序控制,这时8个LED灯依次亮2s并循环(代表正常的工序),当模拟量超出1-3V范围时,则8个LED灯间隔一个灯依次亮2s并循环(代表特殊的工序);用一个按键模拟故障,当该按键按一下时,发出报警声,LED全灭(代表工作暂停),当该按键再按一下时,表示故障解除,停报警声,恢复正常工作。

同学们可以在此基础上增加功能。

1.当系统有较多外设时,如何为外设分配I/O口,是否要扩展I/O口?

2.当系统有较多任务时,分析任务的实时性和所占资源,考虑那些任务放主程序执行,哪些放中断执行?

(中断资源、定时器资源的合理分配)

3.本任务中的定时2s任务是由定时器定时实现还是通过软件延时实现好?

(定时器资源、实时性综合考虑,只要满足要求即可,没有固定的安排模式)

一、具体实现内容

1.首先设计和实现“监测一模拟量输入并显示”,调试,保证测量准确度在3%以内(显示器用3个数码管即可)。

*在1的基础上,增加判断和控制功能

*先设计和实现让8个LED灯依次亮2s并循环

*设计和实现让8个LED灯间隔一个灯依次亮2s并循环

*在1的基础上设置判断,选择执行所有灯依次亮还是偶数灯依次亮。

*再增加故障按键的处理

第二部分:

实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)

部分重点程序代码

#include<>

#include<>

0f4096);

if(temp>1000&&temp<3000)

{

LedFlag=0;

}

else

{

LedFlag=1;

}

}

count++;

DisplayData[0]=DIG_CODE[temp%10000/1000];

DisplayData[1]='.';

DisplayData[2]=DIG_CODE[temp%1000/100];

DisplayData[3]=DIG_CODE[temp%100/10];

for(i=4;i<16;i++)

{

DisplayData[i]='';

}

LcdWriteCom(0x80);

for(i=0;i<16;i++)

{

LcdWriteData(DisplayData[i]);

}

}

}

voidTimerInti()

{

TMOD=0x11;//T0工作方式1

TH0=0x3c;//定时50ms

TL0=0xb0;

TH1=0xfc;//定时50ms

TL1=0x18;

IP=0x09;

IE=0x8b;//开中断

IT0=1;

}

timer0()interrupt1

{

TH0=0x3c;//重载定时初值

TL0=0xb0;

n++;

if(n==40)

{

n=0;

if(IntFlag==0)

{

if(LedFlag==0)

{

led=_crol_(led,1);

}

else

{

led=_crol_(led,2);

}

}

GPIO_LED1=GPIO_LED1&0xf0|led;//选择点亮的数码管

GPIO_LED2=GPIO_LED2&0x0f|led;

}

}

timer1()interrupt3

{

TH1=0xfc;//重载定时初值

TL1=0x18;

Beep=!

Beep;

}

int0()interrupt0

{

IntFlag=!

IntFlag;

TR1=!

TR1;

if(IntFlag==0)

{

led=0x01;

}

else

{

led=0x00;

}

}

 

教师签字__________

第三部分结果与讨论(可加页)

一、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)

二、小结、建议及体会

三、思考题

一、实验结果分析

总体来说最后一次实验算是比较简单的,因为不管是LED灯状态的变化,还是AD采样,前面都做过了,很多程序代码可以直接调用之前的

在本次实验中,需要配置一个中断来进行紧急故障处理,并且中断配置成最高优先级,这样在按下KEY时,CPU检测到下降沿,蜂鸣器就会立即响起,实现故障的最优先处理

AD采样使用的是前面AD转换实验的代码,在这儿就不复述了

LED的闪烁时间也是通过定时器实现的,这样方便得到精准的时间2S,因为51单片机定时器最大定时时间是(2的16次方-1)微秒,可以让定时器定时50ms,再用一个计数器计数40次后才LED灯移位亮。

对LED两种状态的显示转换,是通过IF判断实现的,如果判断到电压值在1-3伏,LED遍依次亮2S,如果判断到采集的电压值在1-3V之外,则隔一颗显示LED灯

I/0口不够用时不一定需要拓展,本例可以增加3-8译码器或者使用时分复用的方式来实现。

中断程序中应放置需要紧急并且实时处理的程序代码,主程序中放置对实时性以及紧急性要求不高的程序

二、小结

*******************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1