监测控制系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验课程名称:监测控制系统应用实验七
实验项目名称:监测控制系统的设计与实现实验成绩:实验者:专业班级:电信130 班同组者:实验日期:周四3~4节一.实验目的
1.通过本次实验形成系统设计的概念
2.掌握单片机应用系统的设计方法和流程
3.学会合理分配资源
4.提高综合运用知识的能力
二.实验要求
1.综合前面的实验,实现一监测控制系统,监测一模拟量(0-5V的交流电)输入并显示。
2.当该模拟量在正常的1-3V范围内时,系统执行正常的顺序控制,这时8个LED 灯依次亮2s并循环(代表正常的工序)。
3.当模拟量超出1-3V范围时,则8个LED灯间隔一个灯依次亮2s并循环(代表特殊的工序)。
4.用一个按键模拟故障,当该按键按一下时,发出报警声,LED全灭(代表工作暂停),当该按键再按一下时,表示故障解除,停报警声,恢复正常工作。
三.探究内容
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
//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
#ifndef ulong
#define ulong unsigned long
#endif
//---定义使用的IO口---//
sbit CLK = P1^0;//时钟
sbit CS = P1^1;//片选
sbit DIN = P1^2;//输入
sbit DOUT = P1^3;//输出
uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);
#endif
/*******************总线初始化及AD/DA转换函数初始化********************/ #include"XPT2046.h"
/***************************************************************************
*函数名:TSPI_Start
*输入:无
*输出:无
*功能:初始化触摸SPI
*************************************************************************** */
void SPI_Start(void)
{
CLK = 0;
CS = 1;
DIN = 1;
CLK = 1;
CS = 0;
}
/*************************************************************************** *
*函数名:SPI_Write
*输入:dat:写入数据
*输出:无
*功能:使用SPI写入数据
*************************************************************************** */
void SPI_Write(uchar dat)
{
uchar i;
CLK = 0;
for(i=0; i<8; i++)
{
DIN = dat >> 7; //放置最高位
dat <<= 1;
CLK = 0;//上升沿放置数据
CLK = 1;
}
}
/***************************************************************************