监测控制系统的设计与实现.docx

上传人:b****5 文档编号:8335372 上传时间:2023-01-30 格式:DOCX 页数:14 大小:1.34MB
下载 相关 举报
监测控制系统的设计与实现.docx_第1页
第1页 / 共14页
监测控制系统的设计与实现.docx_第2页
第2页 / 共14页
监测控制系统的设计与实现.docx_第3页
第3页 / 共14页
监测控制系统的设计与实现.docx_第4页
第4页 / 共14页
监测控制系统的设计与实现.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

监测控制系统的设计与实现.docx

《监测控制系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《监测控制系统的设计与实现.docx(14页珍藏版)》请在冰豆网上搜索。

监测控制系统的设计与实现.docx

监测控制系统的设计与实现

实验课程名称:

监测控制系统应用实验七

实验项目名称:

监测控制系统的设计与实现实验成绩:

实验者:

专业班级:

电信130班

同组者:

实验日期:

周四3~4节

一.实验目的

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

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

3.学会合理分配资源

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

二.实验要求

1.综合前面的实验,实现一监测控制系统,监测一模拟量(0-5V的交流电)输入并显示。

2.当该模拟量在正常的1-3V范围内时,系统执行正常的顺序控制,这时8个LED灯依次亮2s并循环(代表正常的工序)。

3.当模拟量超出1-3V范围时,则8个LED灯间隔一个灯依次亮2s并循环(代表特殊的工序)。

4.用一个按键模拟故障,当该按键按一下时,发出报警声,LED全灭(代表工作暂停),当该按键再按一下时,表示故障解除,停报警声,恢复正常工作。

3.探究内容

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

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

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

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

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

 

四.流程图

系统流程图定时中断流程图

 

外部中断流程图

五.实验连线图

PCF芯片的CLK接P1.0;CS接P1.1;D1接P1.2;D0接P1.3;

蜂鸣器接在P3.6接一个开关在P3.2(外部中断),P1.5接整数位显示数码管的位选,P1.6接第一位显示数码管的位选,P1.7接第二位数码管的位选。

查看LED灯状态时,LED灯接P2口;

查看数码管状态时,数码管段选接在P0口。

 

六.实验结果及分析

1.实验结果

2.结果分析:

有实验知,输入电压在1~3V之间时,LED依次滚动显示,相邻显示间隔2s,电压小于1V或者大于3V时,LED灯隔一个显示,每次显示2s。

有外部中断触发时,蜂鸣器响,LED灯全灭,外部中断再次触发时,根据外部输入电压值正常显示。

 

七.附录

实验程序

/*******************************初始化*******************************/

#ifndef__XPT2046_H_

#define__XPT2046_H_

//---包含头文件---//

#include

#include

//---重定义关键词---//

#ifndefuchar

#defineucharunsignedchar

#endif

#ifndefuint

#defineuintunsignedint

#endif

#ifndefulong

#defineulongunsignedlong

#endif

//---定义使用的IO口---//

sbitCLK=P1^0;//时钟

sbitCS=P1^1;//片选

sbitDIN=P1^2;//输入

sbitDOUT=P1^3;//输出

uintRead_AD_Data(ucharcmd);

uintSPI_Read(void);

voidSPI_Write(uchardat);

#endif

/*******************总线初始化及AD/DA转换函数初始化********************/

#include"XPT2046.h"

/****************************************************************************

*函数名:

TSPI_Start

*输入:

*输出:

*功能:

初始化触摸SPI

****************************************************************************/

voidSPI_Start(void)

{

CLK=0;

CS=1;

DIN=1;

CLK=1;

CS=0;

}

/****************************************************************************

*函数名:

SPI_Write

*输入:

dat:

写入数据

*输出:

*功能:

使用SPI写入数据

****************************************************************************/

voidSPI_Write(uchardat)

{

uchari;

CLK=0;

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

{

DIN=dat>>7;//放置最高位

dat<<=1;

CLK=0;//上升沿放置数据

CLK=1;

}

}

/****************************************************************************

*函数名:

SPI_Read

*输入:

*输出:

dat:

读取到的数据

*功能:

使用SPI读取数据

***************************************************************************/

uintSPI_Read(void)

{

uinti,dat=0;

CLK=0;

for(i=0;i<12;i++)//接收12位数据

{

dat<<=1;

CLK=1;

CLK=0;

dat|=DOUT;

}

returndat;

}

/****************************************************************************

*函数名:

Read_AD_Data

*输入:

cmd:

读取的X或者Y

*输出:

endValue:

最终信号处理后返回的值

*功能:

读取触摸数据

***************************************************************************/

uintRead_AD_Data(ucharcmd)

{

uchari;

uintAD_Value;

CLK=0;

CS=0;

SPI_Write(cmd);

for(i=6;i>0;i--);//延时等待转换结果

CLK=1;//发送一个时钟周期,清除BUSY

_nop_();

_nop_();

CLK=0;

_nop_();

_nop_();

AD_Value=SPI_Read();

CS=1;

returnAD_Value;

}

/************************AD转换函数初始化结束*********************/

#include"reg51.h"

#include"XPT2046.h"

//--定义使用的IO--//

voiddelay(unsignedinti)

{

charj;

for(i;i>0;i--)

for(j=100;j>0;j--);

}

sbitbeep=P3^6;

sbitint0=P3^2;

sbitbb=P3^0;

sbitS1=P1^4;

sbitS2=P1^5;

sbitS3=P1^6;

sbitS4=P1^7;

intlzc;

uinttemp,count;

unsignedcharcontrol=0;

unsignedchart=0;

unsignedcharflag=0;

unsignedcharDisplayData[8];//用来存放要显示的8位数的值

bitflag_error=0;

unsignedchartable[16]={0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

//此表为LED的字模,共阴数码管0-9-

unsignedcharcodetable2[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

voidDigDisplay(void);

voidm_error()interrupt0{

EX0=0;

delay(5);

if(int0==0){

flag_error=~flag_error;

bb=flag_error;

while(int0==0);

EX0=1;

}

EX0=1;

}

voidtime_2s()interrupt1using3{

ET0=0;

TH0=0x3c,TL0=0xb0;

t++;

if(t==40){

t=0;

control++;

if(control==8)

control=0;

}

ET0=1;

}

voidshunxu(){

flag=1;

if(control==0)

P2=0x01;

if(control==1)

P2=0x02;

if(control==2)

P2=0x04;

if(control==3)

P2=0x08;

if(control==4)

P2=0x10;

if(control==5)

P2=0x20;

if(control==6)

P2=0x40;

if(control==7)

P2=0x80;

}

voidteshu(){

flag=2;

if(control==0||control==4)

P2=0x01;

if(control==1||control==5)

P2=0x04;

if(control==2||control==6)

P2=0x10;

if(control==3||control==7)

P2=0x40;

}

voiddelay1(unsignedcharm)//指定控制频率

{

unsignedi=3*m;

while(--i);

}

voiddisplay(){

inti,j;

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

{

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

DisplayData[1]=table2[temp%1000/100];

DisplayData[2]=table2[temp%100/10];

DisplayData[3]=0;

switch(i)

{

case0:

S1=0;S2=1;S3=1;S4=1;

case1:

S1=1;S2=0;S3=1;S4=1;

case2:

S1=1;S2=1;S3=0;S4=1;

case3:

S1=1;S2=1;S3=1;S4=0;

}

P0=DisplayData[i];

j=100;

while(j--);//扫描间隔时间

}

P0=0;

}

voidalarm_beep(){

inti;

for(i=0;i<=5;i++){

beep=~beep;

delay1(0x10);

}

}

voidmain(void)

{

P2=0xff;

TMOD=0x01;

TH0=0x3c,TL0=0xb0;

EA=1,ET0=1;

EX0=1;

TR0=1;

while

(1)

{

if(count==50)

{

count=0;

temp=Read_AD_Data(0x94)*1.22;//AIN0电位器

}

count++;

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

DisplayData[1]=table2[temp%1000/100];

DisplayData[2]=table2[temp%100/10];

DisplayData[3]=table2[temp%10/1];

if(flag_error==0){

if(lzc>=1&&lzc<3){

if(flag!

=1)control=0;

shunxu();

}

else{

if(flag!

=2)control=0;

teshu();

}

}

else{

P2=0x00;

alarm_beep();

}

display();

}

}

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

当前位置:首页 > 初中教育

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

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