计算机控制系统课程设计一、课程设计题目温度测量和报警系统二、课程设计内容简介由A/D转换电路测量外部的温度信号,将温度在LCD显示屏上实时显示;判断温度信号是否报警,根据结果驱动指示灯并在LCD上显示输出。
三、基本功能要求及加分项目(1)由实验箱电位器旋钮模拟外部温度传感器(温度的测量范围为0~100摄氏度,输出0~5V电压信号)。
(2)在LCD屏上显示当前系统状态(报警或正常,如报警是何种类型的报警)和当前温度(精确到0.1度)。
(3)要求在测量过程中至少采用一种数字滤波算法。
(4)由发光二极管显示当前系统状态报警正常、如报警是何种类型的报警。
(5)通过键盘完成报警上下限的设定。
(6)在LCD屏上显示温度参数报警上、下限。
(7)使用越线报警方式。
(8)在LCD屏上显示系统累计运行的时间。
(9)使用C51语言进行程序设计。
四、系统功能分析根据课程设计的具体要求和相关细节,对系统的功能进行分析。
(1)由实验箱电位器旋钮模拟外部温度传感器,需要A/D转换,将温度量转换成数字量,便于之后的数据处理操作。
(2)将数字量进行处理,运用滤波的方式处理。
可以采用多种滤波方式,为了使实验效果更佳,采用复合的数字滤波,即算术平均值滤波和中值滤波结合。
这样不仅对周期性的脉动采样值进行平滑的加工,还对于随机的脉动干扰进行了处理。
(3)通过键盘程控扫描的方式,进行报警上、下限的设定,其中包括基本的译码等。
为了便于程序设计,报警上、下限的设定在程序最开始设定。
(4)根据此次课程设计的具体要求和实验器材的限制,采用普通的报警方式,采样值与上、下限相比较,进行报警功能的实现。
(5)采用基本的软件编码、译码对系统运行的时间进行累计,便于最终LCD的显示。
(6)温度数据经过编码和译码以后在LCD屏幕上进行显示,同时系统时间数据和上下限均需要在LCD屏幕上显示。
(7)根据报警设定的要求,通过二极管灯进行输出显示,上下限报警显示不同的灯。
同时报警在LCD屏幕上进行显示。
五、系统的总体设计根据设计的功能分析和具体要求,对整个系统进行如下的设计:(1)考虑到实验器材的相关要求,将实验中的大量数据存放在RAM中,方便调用和充分运用。
在数据存储时,设定高位存在低地址单元。
(2)运用键盘输入报警上下限值,使用按键中的4个键,分别对温度上限的增、上限减,温度下限的增、下限减进行值的输入。
(3)通过电位器旋钮模拟外部温度传感器,将输出的模拟值输入到AD0801,通过查询的方式将模拟量转换成数字量,对模拟量采样10次,存储在制定的存储单元。
(4)数字量经过复合的数字滤波后进行数据的处理,由于温度的范围为0~100摄氏度,数字量滤波的最大值为255,故每级对应的温度累加0.4摄氏度。
即采样的数字量与0.4相乘,变成温度值。
按照设计要求温度显示值精确到0.1度,此次使用浮点数的表达方式。
(5)通过数位分离,将数据量分成四位,分别存储在指定的数据单元中,便于LCD值的调用显示。
(6)以上为温度显示的部分,为了使系统开始运行时进行时钟的计数和显示,通过软件编码译码的方式将时钟显示在LCD屏幕中。
输出的格式为00:00,通过译码将四个值存储在指定的数据单元中,便于LCD值的调用显示。
(7)LCD屏幕显示,结合设计和实验箱LCD的要求,屏幕显示为:第一行最左边显示“上限:上限温度(数字)”;第一行最右边显示运行时间“00:00”;第二行最左边显示“下限:下限温度(数字)”;第二行最右边显示状态,包括“过高”,“过低”,“正常”;两行中间显示当前温度“0.0”。
具体的LCD显示硬件软件设计见之后的内容。
(8)进行报警的设计,当低于低温设定时LED红灯亮,高于高温设定是LED红灯亮,正常时LED绿灯亮。
(9)具体的控制系统课程设计原理图图1 控制系统课程设计的原理图六、系统的硬件组成设计1、EL—MUT—III型实验箱本次设计的实验箱为EL—MUT—III,此型的微机教学实验系统由电源、系统板、可扩展的实验模板、微机串口通讯线、JTAG通讯线及通用连接线组成。
系统板的结构简图见下图。
图2 系统板的结构简图此次设计需要使用的硬件包括微处理器模块80c51、存储器、可编程并行接口8255、键盘8279、ADC0809转换电路、简单I/O口扩展电路锁存器74LS273、8位LED显示、液晶显示屏LCD显示。
此系统板的时钟频率是6MHz。
2、根据设计的相关要求,对硬件部分作出如下部分的具体设计。
(1)硬件系统的选择●根据设计的具体要求,选择微处理器80C51CPU,用C语言进行程序编程。
片选地址的设定:CS0 片选信号,接CS8255 CS1 片选信号,接CS0809PB0接右边红灯(下限),PB1接左边红灯(上限),PB2接中间的绿灯。
●AD转换选用ADC0809,通过查询的方式实现AD转换的功能。
ADC0809是逐次逼近型8位单片A/D转换芯片。
片内有8路模拟开关,可输入八个模拟量。
由一片DAC0832,一片74LS02组成,该电路中,ADC0809的参考电压,数据总线输出,通道控制线均以接好,其它信号线由插孔接入,ADC0809的片选信号为CS0809,转换结束标志输出插孔为VOUT和OUT,模拟量输入通道插孔为IN0-IN7。
●键盘的输入选择8279芯片,直接硬件译码,便于程序调用。
该电路由一片8279,74LS138组成,8279的数据口,地址,读写线,复位,时钟,片选控制线均已接好,显示输出,键盘行列扫描线军有插孔输出。
●选择液晶显示屏LCD显示,作为最后结果的输出。
●选择74LS273作为LED灯显示的驱动芯片,实现灯的亮灭。
(2)硬件系统的连线部分图4 硬件系统的连线部分(3) 硬件部分连线的具体说明1.80C51的P10口连接0809的busy,,P11口连接0809的REQ ,CS0连接8255,CS1连接0809的EOC 。
2.8255的PB0-PB2分别接在LED 灯 的LED0-LED2口。
PA 口分别连接AD0809的DB0-DB7.3.C51的P12口连接开关K1,P14口连接开关K2, P17口连接开关K3, P15口连接开关K4.图5 实际硬件连线图七、 系统的软件功能分析硬件部分的连接直接影响软件的编程,片选的地址等具体方面。
以下为系统具体的软件编程部分。
1、 主程序框架将各个功能进行分块,分别编程调试,最后整合成完整的程序,根据程序设计要求,分为存储器的分配、开关输入、A/D 转换、数字滤波和编译码、运行时间、LCD 显示、报警判断显示。
2.开关输入软件分析(1)开关输入的说明开关输入报警上下限值,使用按键中的4个键,分别对温度上限的增、上限减,温度下限增、下限减进行值的输入,采用的是递增的功能。
开关输入选择8279芯片,直接硬件译码,五个按键译码后的值分别为C0、C1、C2、C3、C4,通过查询的方式判断哪个开关合上或按下,实现不同的功能。
(2)开关输入的程序段void checklimit(void){unsigned int i;if ((UA!=UA0)&&(UA==0)){uplimit++;}UA0 =UA;if((DA!==DA0)&&(DA==0)){downlimit++; }DA0=DAif((UD!=UD0)&&(UD==0)){ uplimit--;}UD0=UD;if((DD!=DD0)&&(DD==0)){downlimit--;}DD0=DD;if(uplimit>=99)uplimit=99;if(downlimit<=0)downlimit=0;}4、A/D转换软件分析(1)A/D转换的说明由实验箱电位器旋钮模拟外部温度传感器,需要A/D转换,将温度量转换成数字量,便于之后的数据处理操作。
将输出的模拟值输入到AD0809,通过查询的方式将模拟量转换成数字量,对模拟量采样10次,存储在制定的存储单元。
(2)A/D转换及数字滤波的程序段unsigned char AD(void){unsigned char AD_result;AD0809=0;while(!EOC);AD_result=AD0809;return AD_result;}void readdata(){unsigned int i;long tem=0;for(i=0;i<10;i++)tem+=AD();tem=tem*10;temperature=(tem/10)*100/255;}(3)主程序调用以及流程图A/D转换流程图如下:图8 A/D转换流程图6、运行时间的软件分析(1)运行时间的说明通过软件编码译码的方式将时钟显示在LCD屏幕中。
输出的格式为00:00,通过译码将四个值存储在指定的数据单元中,便于LCD值的调用显示。
基本的编码译码流程与温度译码大致相同。
(2)运行时间的程序段void timer(void) interrupt 1{TL0=0xB0;TH0=0x3C;tt++;if(tt>=10){tt=0;s++;if(s>=60){ s=0;m++;if(m>=60)m=0;}}}void displaytime(void){unsigned char i;unsigned char lcdtimer[]={0xf9,0x0b,0x00,0x30,0xf9,0x0c,0x00,0x30,0xf9,0x0d,0x00,0x3a,0xf9,0x0e,0x00,0x30,0xf9,0x0f,0x00,0x30};lcdtimer[3]=lcdnumber[m/10];lcdtimer[7]=lcdnumber[m%10];lcdtimer[15]=lcdnumber[s/10];lcdtimer[19]=lcdnumber[s%10];for(i=0;i<20;i++){REQ=0;while(busy==1);PA=lcdtimer[i];REQ=1;while(busy==0);REQ=0;}}(3)流程图图12 计数一次流程图7、LCD显示软件分析(1)LCD显示说明显示的格式为:上限:90 00:0073.3下限:10 正常(2)LCD显示程序段显示时间:void timer(void) interrupt 1{TL0=0xB0;TH0=0x3C;tt++;if(tt>=10){tt=0;s++;if(s>=60){ s=0;m++;if(m>=60)m=0;}}}void displaytime(void){unsigned char i;unsigned char lcdtimer[]={0xf9,0x0b,0x00,0x30,0xf9,0x0c,0x00,0x30,0xf9,0x0d,0x00,0x3a,0xf9,0x0e,0x00,0x30,0xf9,0x0f,0x00,0x30};lcdtimer[3]=lcdnumber[m/10];lcdtimer[7]=lcdnumber[m%10];lcdtimer[15]=lcdnumber[s/10];lcdtimer[19]=lcdnumber[s%10];for(i=0;i<20;i++){REQ=0;while(busy==1);PA=lcdtimer[i];REQ=1;while(busy==0);REQ=0;}}显示上下限:void displaylimit(void){unsigned char i,a,b;unsigned char lcdlimit[]={0xf0,0x00,0x00,41,47,0xf9,0x02,0x00,0x39,0xf9,0x03,0x00,0x30,0xf0,0x00, 0x01,47,34,0xf9,0x02,0x0f,0x31,0xf9,0x03,0x0f,0x30};a=uplimit;b=downlimit;lcdlimit[8]=lcdnumber[a/10];lcdlimit[12]=lcdnumber[a%10];lcdlimit[21]=lcdnumber[b/10];lcdlimit[25]=lcdnumber[b%10];for(i=0;i<26;i++){REQ=0;while(busy==1);PA=lcdlimit[i];REQ=1;while(busy==0);REQ=0;}}显示报警:void displayresult(void){unsigned char t;t=temperature/10;if(t<downlimit){downwarn();PB=0x06;}else if(t>uplimit){upwarn();PB=0x03;}else{normal();PB=0x05;}}void upwarn(void){unsigned char i;unsigned char lcdup[]={0xf0,0x06,0x01,25,93,0xf0,0x07,0x01,24,63};for(i=0;i<10;i++){REQ=0;while(busy==1);PA=lcdup[i];REQ=1;while(busy==0);REQ=0;}}void downwarn(void){unsigned char i;unsigned char lcddown[]={0xf0,0x06,0x01,25,93,0xf0,0x07,0x01,21,45};for(i=0;i<10;i++){REQ=0;while(busy==1);PA=lcddown[i];REQ=1;while(busy==0);REQ=0;}}void normal(void){unsigned char i;unsigned char lcdnormal[]={0xf0,0x06,0x01,53,93,0xf0,0x07,0x01,19,03};for(i=0;i<10;i++){REQ=0;while(busy==1);PA=lcdnormal[i];REQ=1;while(busy==0);REQ=0;}}显示温度:void displaytem(void){unsigned char i,x,y,z;unsigned char lcdtem[]={0xf9,0x06,0x08,0x30,0xf9,0x07,0x08,0x30,0xf9,0x08,0x08,0x2e,0xf9,0x09,0x08,0x30};x=temperature/100;y=(temperature/10)%10;z=temperature%10;lcdtem[3]=lcdnumber[x];lcdtem[7]=lcdnumber[y];lcdtem[15]=lcdnumber[z];if (temperature>=1000){lcdtem[3]=0x39;lcdtem[7]=0x39;lcdtem[15]=0x39;}for(i=0;i<16;i++){REQ=0;while(busy==1);PA=lcdtem[i];REQ=1;while(busy==0);REQ=0;}}3)流程图图13 LCD子程序流程图8、报警判断显示(1)报警判断说明采样值与上、下限相比较,进行报警功能的实现。