多路监控报警系统单片机课程设计 精品推荐.docx

上传人:b****6 文档编号:6957176 上传时间:2023-01-13 格式:DOCX 页数:39 大小:354.96KB
下载 相关 举报
多路监控报警系统单片机课程设计 精品推荐.docx_第1页
第1页 / 共39页
多路监控报警系统单片机课程设计 精品推荐.docx_第2页
第2页 / 共39页
多路监控报警系统单片机课程设计 精品推荐.docx_第3页
第3页 / 共39页
多路监控报警系统单片机课程设计 精品推荐.docx_第4页
第4页 / 共39页
多路监控报警系统单片机课程设计 精品推荐.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

多路监控报警系统单片机课程设计 精品推荐.docx

《多路监控报警系统单片机课程设计 精品推荐.docx》由会员分享,可在线阅读,更多相关《多路监控报警系统单片机课程设计 精品推荐.docx(39页珍藏版)》请在冰豆网上搜索。

多路监控报警系统单片机课程设计 精品推荐.docx

多路监控报警系统单片机课程设计精品推荐

 

单片机课程设计

——多路监控报警系统

 

 

多路监控报警系统

一、实验目的

1.了解A/D芯片TLC0809转换性能及编程方法。

2.掌握A/D转换器与单片机的接口方法

3.学会使用A/D转换器进行电压信号采集。

二、设计任务及要求

利用串行模/数转换芯片TLC0809、SST89E58及液晶显示器,设计完成一个数字电压多路监控报警系统。

要求:

数字电压多路监控报警系统可测量0~5V输入电压,电压值通过液晶轮流显示,并根据设置的限定值对输入超出额度的路端警报提示。

三、工作原理及设计思路

多路监控报警系统的设计由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端为高电平时,才可以从三态输出锁存器取走转换完的数据。

IN0-IN7:

8条模拟量输入通道ADC0809对输入模拟量要求:

信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:

4条ALE为地址锁存允许输入线,高电平有效。

当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。

A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。

数字量输出及控制线:

11条ST为转换启动信号。

当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。

EOC为转换结束信号。

当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。

OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。

OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。

D7-D0为数字量输出线。

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端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15脚:

BLA背光电源正极(+5V)输入引脚。

第16脚:

BLK背光电源负极,接GND。

序号

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清显示

0

0

0

0

0

0

0

0

0

1

2

光标返回

0

0

0

0

0

0

0

0

1

*

3

置输入模式

0

0

0

0

0

0

0

1

I/D

S

4

显示开/关控制

0

0

0

0

0

0

1

D

C

B

5

光标或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功能

0

0

0

0

1

DL

N

F

*

*

7

置字符发生存贮器地址

0

0

0

1

字符发生存贮器地址

8

置数据存贮器地址

0

0

1

显示数据存贮器地址

9

读忙标志或地址

0

1

BF

计数器地址

10

写数到CGRAM或DDRAM)

1

0

要写的数据内容

11

从CGRAM或DDRAM读数

1

1

读出的数据内容

指令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

输出

D0—D7=状态字

写指令

输入

RS=L,R/W=L,D0—D7=指令码,E=高脉冲

输出

读数据

输入

RS=H,R/W=H,E=H

输出

D0—D7=数据

写数据

输入

RS=H,R/W=L,D0—D7=数据,E=高脉冲

输出

五、软件设计

主程序设计:

1)A/D转换程序

每次5组电压值构成一个数组,数组中的值为AD进入值50次的平均值。

2)数据处理程序:

可以说是整个程序设计的最难点,数据处理显示的电压值计算公式:

V=(A*500)/255,(其中A为经0809转换后所得的数字量)这样使得计算出来的数值为整型,避免了浮点数计算复杂的缺点,在之后的显示中加入小数点即可。

子程序设计:

由于C语言的子程序功能比较强大,所以本程序调用相关子程序,减少了很多编程的繁琐,相关子程序功能如下所示:

函数功能:

400ms延时延时函数功能:

5ms延时函数功能:

1602A按指定位置显示一个字符

函数功能:

1602A初始化函数功能:

1602A读状态函数功能:

1602A写指令

函数功能:

1602A读数据函数功能:

1602A写数据作用:

AD0809通道选择采样值

流程图:

六、系统C程序

根据上述软/硬件的设计,编写好的源程序如下:

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

**ADC0809的多路电压监视器

**ADC0809+1602LCD+单片机

**作者:

于萱格

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

#include

#include

#include

#include

#include

#defineSYSTEM_OSC12000000//定义晶振频率12000000HZ

#defineSOUND_SPACE4/5//定义普通音符演奏的长度分率,//每4分音符间隔

#defineucharunsignedchar

#defineuintunsignedint

#defineLCM_DataP2//数据接口

sbitST=P0^0;//file:

//片选端

sbitEOC=P0^1;//file:

//时钟端

sbitOE=P0^2;//file:

//数据输入输出复用

sbitA=P0^3;

sbitb=P0^5;

sbitC=P0^6;

sbitLCM_E=P3^5;//定义接口

sbitLCM_RW=P3^6;

sbitLCM_RS=P3^7;

sbitLED_GREEN=P3^1;//定义绿灯的口

sbitLED_RED=P3^0;//定义红灯的口

sbitBeepIO=P3^4;//定义输出管脚

sbitEX_0=P3^2;//外部中断INTO

sbitEX_1=P3^3;//外部中断INT1

sbitB_UP=P0^7;//定义外部按键1

sbitB_DOWN=P0^4;//定义外部按键2

voidLCM_WriteData(ucharWDLCM);

voidLCM_WriteCommand(ucharWCLCM,BuysC);

ucharLCM_ReadData(void);

ucharLCM_ReadStatus(void);

voidLCM_Init(void);

voidDisplayOneChar(ucharX,ucharY,ucharDData);

voidDisplayListChar(ucharX,ucharY,ucharcode*DData);

voidDelay5Ms(void);

voidDelay400Ms(void);

voidinit(void);//AD0809初始化

voidAD(uintM);//选择通道来显示

voidDelay(uintm);//AD0809专用延时

charB_UP_CHECK(void);//向上按键去抖

charB_DOWN_CHECK(void);//向下按键去抖

voidInitialSound(void);

voidDelay1ms(unsignedintcount);

voidPlay(unsignedchar*Sound,unsignedcharSignature,unsignedOctachord,unsignedintSpeed);

ucharcodeuctech[10]={'0','1','2','3','4','5','6','7','8','9'};

unsignedintcodeFreTab[12]={262,277,294,311,330,349,369,392,415,440,466,494};//原始频率表

unsignedcharcodeSignTab[7]={0,2,4,5,7,9,11};//1~7在频率表中的位置

unsignedcharcodeLengthTab[7]={1,2,4,8,16,32,64};

unsignedcharSound_Temp_TH0,Sound_Temp_TL0;//音符定时器初值暂存

unsignedcharSound_Temp_TH1,Sound_Temp_TL1;//音长定时器初值暂存

//intfunc=0,func_ok=0,max_value=130,min_value=50;

intAD_DATA;

ucharcodenet[]={"Running"};//7

ucharcodenet1[]={"Set_Max_Value"};//13

ucharcodenet2[]={"Set_Min_Value"};//13

ucharcodenet3[]={"HelloWorld!

"};//7

ucharcodenet4[]={"Now_Value:

"};//9

ucharcodenet5[]={"WARNNING!

"};//9

ucharcodenet6[]={"CH"};//9

intfunc=0,func_ok=0;

uintmax_value[5]={200,200,200,200,200};

uintmin_value[5]={0,0,0,0,0};

//*****************************Music******************************************************

//挥着翅膀的女孩

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

//同一首歌

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

//两只蝴蝶

unsignedcharcodeMusic_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

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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