多路监控报警系统单片机课程设计1.doc_第1页
多路监控报警系统单片机课程设计1.doc_第2页
多路监控报警系统单片机课程设计1.doc_第3页
多路监控报警系统单片机课程设计1.doc_第4页
多路监控报警系统单片机课程设计1.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计 多路监控报警系统 多路监控报警系统一、 实验目的1 了解a/d芯片tlc0809转换性能及编程方法。2 掌握a/d转换器与单片机的接口方法3 学会使用a/d转换器进行电压信号采集。二、 设计任务及要求 利用串行模/数转换芯片tlc0809、sst89e58及液晶显示器,设计完成一个数字电压多路监控报警系统。要求: 数字电压多路监控报警系统可测量05v输入电压,电压值通过液晶轮流显示,并根据设置的限定值对输入超出额度的路端警报提示。三、 工作原理及设计思路多路监控报警系统的设计由a/d转换、数据处理及显示控制等组成。a/d转换由集成电路tlc0809完成,利用tlc0809将模拟电压转换为数字量,经单片机将数字量转换成对应的电压值,并通过液晶显示输出。四、 系统特点本系统可以每一路独立设置最高最低的电压值,并对每一路电压进行监控报警,对超出范围内的电路显示对应路值,并用led灯和蜂鸣器表示不同的路值。五、 硬件电路设计及原理1、adc0809(1)、adc0809管脚图及时序图: 该adc0809数据采集部分是单片cmos器件,它具有8位模拟数字转换器,8通道多路复用器和微处理器兼容控制逻辑。8位a / d转换器采用逐次逼近作为转换技术。根据时序电路的分析,可以完成单片机编程。该系统在工作时,单片机将产生串行时钟,并按时序发送和接受数据位。由上图可知,adc0809由一个8路模拟开关、一个地址锁存与译码器、一个a/d转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用a/d转换器进行转换。三态输出锁器用于锁存a/d转换完的数字量,当oe端为高电平时,才可以从三态输出锁存器取走转换完的数据。in0in7:8条模拟量输入通道 adc0809对输入模拟量要求:信号单极性,电压范围是05v,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ale为地址锁存允许输入线,高电平有效。当ale线为高电平时,地址锁存与译码器将a,b,c三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。a,b和c为地址输入线,用于选通in0in7上的一路模拟量输入。数字量输出及控制线:11条 st为转换启动信号。当st上跳沿时,所有内部寄存器清零;下跳沿时,开始进行a/d转换;在转换期间,st应保持低电平。eoc为转换结束信号。当eoc为高电平时,表明转换结束;否则,表明正在进行a/d转换。oe为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。oe1,输出转换得到的数据;oe0,输出数据线呈高阻状态。d7d0为数字量输出线。 clk为时钟输入信号线。因adc0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500khz, vref(),vref()为参考电压输入。 (2)、adc0809应用说明 adc0809内部带有输出锁存器,可以与at89s51单片机直接相连,初始化时,使st和oe信号全为低电平,送要转换的哪一通道的地址到a,b,c端口上,在st端给出一个至少有100ns宽的正脉冲信号,是否转换完毕,我们根据eoc信号来判断,当eoc变为高电平时,这时给oe为高电平,转换的数据就输出给单片机了。 2、sst89e58rd(1)、sst89e58rd管脚图:3、1602液晶引脚功能说明第1脚:vss为电源地,接gnd。 第2脚:vdd接5v正电源。 第3脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。 第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:rw为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和rw共同为低电平时可以写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。 第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:d0d7为8位双向数据线。 第15脚:bla背光电源正极(+5v)输入引脚。 第16脚:blk背光电源负极,接gnd。序号指令rsr/wd7d6d5d4d3d2d1d01清显示00000000012光标返回000000001*3置输入模式00000001i/ds4显示开/关控制0000001dcb5光标或字符移位000001s/cr/l*6置功能00001dlnf*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01bf计数器地址10写数到cgram或ddram)10要写的数据内容11从cgram或ddram读数11读出的数据内容指令1:清显示,指令码01h,光标复位到地址00h位置 指令2:光标复位,光标返回到地址00h 指令3:光标和显示模式设置 i/d:光标移动方向,高电平右移,低电平左移 s:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 d:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 c:控制光标的开与关,高电平表示有光标,低电平表示无光标 b:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 s/c:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 指令7:字符发生器ram地址设置 指令8:ddram地址设置 指令9:读忙信号和光标地址 bf:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据 指令11:读数据。读状态输入rs=l,r/w=h,e=h输出d0d7=状态字写指令输入rs=l,r/w=l,d0d7=指令码,e=高脉冲输出无读数据输入rs=h,r/w=h,e=h输出d0d7=数据写数据输入rs=h,r/w=l,d0d7=数据,e=高脉冲输出无五、软件设计主程序设计:1) a/d转换程序每次5组电压值构成一个数组,数组中的值为ad进入值50次的平均值。2) 数据处理程序:可以说是整个程序设计的最难点,数据处理显示的电压值计算公式:v=(a*500)/255,(其中a为经0809转换后所得的数字量)这样使得计算出来的数值为整型,避免了浮点数计算复杂的缺点,在之后的显示中加入小数点即可。子程序设计:由于c语言的子程序功能比较强大,所以本程序调用相关子程序,减少了很多编程的繁琐,相关子程序功能如下所示:函数功能:400ms延时延时 函数功能:5ms延时 函数功能:1602a按指定位置显示一个字符函数功能:1602a初始化 函数功能:1602a读状态 函数功能:1602a写指令函数功能:1602a读数据 函数功能:1602a写数据 作用:ad0809通道选择采样值流程图:初始化液晶初始化adc0809显示第i路电压for i=0;i5;i+显示warning同时蜂鸣器响、红灯亮显示warning 同时蜂鸣器响、红灯亮采集一路电压下溢出?上溢出上溢出?下溢出?开始是否有进入设置按键否 是进入设置限定值界面设置各个通道的高低值设置最高警戒值设置最低警戒值是否有back键按下各路设置后进入主程序进显示各路电压值六、 系统c程序根据上述软/硬件的设计,编写好的源程序如下:/* adc0809的多路电压监视器* adc0809+1602lcd+单片机* 作者:于萱格*/#include#include#include#include #include#define system_osc 12000000/定义晶振频率12000000hz#define sound_space 4/5 /定义普通音符演奏的长度分率,/每4分音符间隔#define uchar unsigned char#define uint unsigned int#define lcm_data p2/数据接口sbit st = p00; /file:/片选端sbit eoc = p01; / file:/时钟端sbit oe = p02; /file:/数据输入输出复用sbit a = p03;sbit b = p05;sbit c = p06; sbit lcm_e=p35;/定义接口sbit lcm_rw=p36;sbit lcm_rs=p37;sbit led_green=p31; /定义绿灯的口sbit led_red=p30; /定义红灯的口sbit beepio=p34; /定义输出管脚sbit ex_0=p32; /外部中断intosbit ex_1=p33; /外部中断int1sbit b_up=p07; /定义外部按键1sbit b_down=p04; /定义外部按键2void lcm_writedata(uchar wdlcm);void lcm_writecommand(uchar wclcm,buysc);uchar lcm_readdata(void);uchar lcm_readstatus(void);void lcm_init(void);void displayonechar(uchar x, uchar y, uchar ddata);void displaylistchar(uchar x, uchar y, uchar code *ddata);void delay5ms(void);void delay400ms(void);void init(void); /ad0809初始化void ad(uint m); /选择通道来显示void delay(uint m); /ad0809专用延时char b_up_check(void); /向上按键去抖char b_down_check(void);/向下按键去抖 void initialsound(void);void delay1ms(unsigned int count);void play(unsigned char *sound,unsigned char signature,unsigned octachord,unsigned int speed);uchar code uctech10 = 0,1,2,3,4,5,6,7,8,9;unsigned int code fretab12 = 262,277,294,311,330,349,369,392,415,440,466,494 ; /原始频率表unsigned char code signtab7 = 0,2,4,5,7,9,11 ; /17在频率表中的位置unsigned char code lengthtab7= 1,2,4,8,16,32,64 ;unsigned char sound_temp_th0,sound_temp_tl0;/音符定时器初值暂存 unsigned char sound_temp_th1,sound_temp_tl1;/音长定时器初值暂存/int func=0,func_ok=0,max_value=130,min_value=50;int ad_data;uchar code net = running; /7uchar code net1 = set_max_value; /13uchar code net2 = set_min_value; /13uchar code net3 = hello world!; /7uchar code net4 = now_value:; /9uchar code net5 = warnning!; /9uchar code net6 = ch; /9int func=0,func_ok=0;uint max_value5=200,200,200,200,200;uint min_value5=0,0,0,0,0;/*music*/挥着翅膀的女孩unsigned char code music_girl= 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03, 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1a,0x03, 0x1b,0x03, 0x1f,0x03, 0x1f,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x1f,0x03, 0x1f,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x1f,0x03, 0x1b,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1a,0x66, 0x1a,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x1f,0x03, 0x1b,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1a,0x66, 0x1a,0x03, 0x19,0x03, 0x19,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x00, 0x1a,0x03, 0x1a,0x03, 0x1a,0x03, 0x1b,0x03, 0x1b,0x03, 0x1a,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0e, 0x18,0x03, 0x17,0x04, 0x18,0x0e, 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x1f,0x04, 0x1b,0x0e, 0x1b,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1a,0x66, 0x1a,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x66, 0x1f,0x03, 0x1b,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1a,0x66, 0x1a,0x03, 0x19,0x03, 0x19,0x03, 0x1f,0x03, 0x1b,0x03, 0x1f,0x00, 0x18,0x02, 0x18,0x03, 0x1a,0x03, 0x19,0x0d, 0x15,0x03, 0x15,0x02, 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00;/同一首歌unsigned char code music_same= 0x0f,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0f,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02, 0x1b,0x02, 0x1b,0x70, 0x1a,0x03, 0x1a,0x01, 0x19,0x02, 0x19,0x03, 0x1a,0x03, 0x1b,0x02, 0x1a,0x0d, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1a,0x02, 0x19,0x0c, 0x18,0x0d, 0x17,0x03, 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0f,0x0c, 0x10,0x02, 0x15,0x00, 0x1f,0x01, 0x1a,0x01, 0x18,0x66, 0x19,0x03, 0x1a,0x01, 0x1b,0x02, 0x1b,0x03, 0x1b,0x03, 0x1b,0x0c, 0x1a,0x0d, 0x19,0x03, 0x17,0x00, 0x1f,0x01, 0x1a,0x01, 0x18,0x66, 0x19,0x03, 0x1a,0x01, 0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1a,0x0c, 0x18,0x0d, 0x17,0x03, 0x16,0x00, 0x0f,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0f,0x0c, 0x1a,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00, 0x00,0x00 ;/两只蝴蝶 unsigned char code music_two = 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0d, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0e, 0x15,0x04, 0x0f,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0d, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0d, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0e, 0x15,0x04, 0x0f,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1a,0x03, 0x19,0x03, 0x17,0x01, 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0d, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0d, 0x15,0x00, 0x19,0x03, 0x19,0x03, 0x1a,0x03, 0x1f,0x03, 0x1b,0x03, 0x1b,0x03, 0x1a,0x03, 0x17,0x0d, 0x16,0x03, 0x16,0x03, 0x16,0x0d, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1a,0x02, 0x1a,0x02, 0x10,0x03, 0x17,0x0d, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x02, 0x1f,0x02, 0x1b,0x03, 0x1a,0x03, 0x1a,0x0e, 0x1b,0x04, 0x17,0x02, 0x1a,0x03, 0x1a,0x03, 0x1a,0x0e, 0x1b,0x04, 0x1a,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x17,0x0d, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03, 0x1a,0x03, 0x1f,0x03, 0x1b,0x03, 0x1b,0x03, 0x1a,0x03, 0x17,0x0d, 0x16,0x03, 0x16,0x03, 0x16,0x03, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1a,0x02, 0x1a,0x02, 0x10,0x03, 0x17,0x0d, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03, 0x1f,0x02, 0x1b,0x03, 0x1a,0x03, 0x1a,0x0e, 0x1b,0x04, 0x17,0x02, 0x1a,0x03, 0x1a,0x03, 0x1a,0x0e, 0x1b,0x04, 0x17,0x16, 0x1a,0x03, 0x1a,0x03, 0x1a,0x0e, 0x1b,0x04, 0x1a,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0f,0x02, 0x10,0x03, 0x15,0x00, 0x00,0x00 ;void delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j); delay5ms(); for(j=0;j); delay5ms(); initialsound(); ex0=1; /开外部中断0 ex1=1; /开外部中断1 ea=1; /开总中断 lcm_writecommand(0x01,1); /显示清屏 delay400ms(); displaylistchar(4, 0, net);/显示runing /以下为主循环 while(1) led_green=0; /绿灯灭 led_red=0; /红灯灭 beepio=1; for(y=0;y5;y+) /5路扫描显示 for(x=0;x5;x+) /五路电压扫描 for(j=0;j(max_valuex) ) lcm_writecommand(0x01,1); /显示清屏 delay5ms(); delay5ms(); displaylistchar(3, 0, net5);/显示warnning! displaylistchar(0, 1, net6);/显示ch displayonechar(2, 1, :); displayonechar(3, 1, uctechx+1); delay400ms(); if(x=0) led_green=0; led_red=1; play(music_girl,0,3,360); if(x=1) led_green=1; led_red=0; play(music_same,0,3,360); if(x=2) led_green=1; led_red=1; play(music_two,0,3,360); for(j=0;j50;j+)/继续扫描本路电压 ad(x); i+=ad_data; i/=50; m=i*500/256; nx=(unsigned int)m; if( nx(max_valuex) ) lcm_writecommand(0x01,1); /显示清屏 delay5ms(); delay5ms(); displaylistchar(4, 0, net);/显示runing /displaylistchar(0, 1, net4);/显示now_value: break; /*以下为判断电压有没有下溢出*/ while( nx(min_valuex) ) lcm_writecommand(0x01,1); /显示清屏 delay5ms(); delay5ms(); displaylistchar(3, 0, net5);/显示warnning! displaylistchar(0, 1, net6);/显示ch displayonechar(2, 1, :); displayonechar(3, 1, uctechx+1); delay400ms(); if(x=0) led_green=0; led_red=1; play(music_girl,0,3,360); if(x=1) led_green=1; led_red=0; play(music_same,0,3,360); if(x=2) led_green=1; led_red=1; play(music_two,0,3,360); for(j=0;j(min

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论