温度控制语音播报.docx
《温度控制语音播报.docx》由会员分享,可在线阅读,更多相关《温度控制语音播报.docx(27页珍藏版)》请在冰豆网上搜索。
温度控制语音播报
课程设计
课程名称
单片机课程设计
题目名称
温度控制语音播报
专业班级
11电信
(2)班
学生
学号
指导教师
罗少轩黄迎辉章宝
二○一四年三月三十一
概述
1系统介绍
在无人值守的情况下实现对温度实时监测,并在温度超过设定围时及时通知相关人员,设计了基于STC89C52单片机的智能语音报警系统,本设计采用了STC89C52单片机作为控制核心,对数字温度传感器DS18b20控制,读取温度信号并进行计算处理,当测量温度超过设定的温度围时,控制语音芯片WT588D自动报警。
整个设计系统分为部分:
单片机控制、温度传感器、液晶显示、语音播报以及独立按键控制等模块。
2硬件设计
2.1MCS-51单片机
MCS-51单片机,8K字节在系统可编程Flash存储器、 1000次擦写周期、全静态操作:
0Hz~33Hz 、三级加密程序存储器 、 32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针、掉电标识符 。
●P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有部上拉电阻。
●P1口:
P1口是一个具有部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
引脚号第二功能P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在线系统编程用)P1.6MISO(在线系统编程用)P1.7SCK(在线系统编程用)。
●P2口:
P2口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVXDPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的部上拉发送1。
在使用8位地址(如MOVXRI)访问外部数据存储器时,P2口输出P2锁存器的容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
●P3口:
P3口是一个具有部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
P3口亦作为STC89C52特殊功能(第二功能)使用,如下表所示。
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INTO(外中断0)
P3.3INT1(外中断1)
P3.4TO(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
●RST——复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
●ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
●PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
●EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为
0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行部程序存储器的指令。
●VCC:
电源
●GND:
地
2.2复位电路的设计
复位使单片机处于起始状态,并从该起始状态开始运行。
AT89C52的RST引脚为复位端,该引脚连续保持2个机器周期(24个时钟振动周期)以上高电平,则可使单片机复位。
部复位电路在每一个机器周期的S5P2期间采样斯密特触发器的输出端,该触发器可抑制RST引脚的噪声干扰,并在复位期间不产生ALE信号,部RAM处于不断电状态。
其中的数据信息不会丢失,也即复位后,只影响SFR中的容,部RAM中的数据不受影响。
外部复位有上电复位和按键电平复位。
由于单片机运行过程中,其本身的干扰或外界干扰会导致出错,此时我们可按复位键重新开始运行。
为了便于本设计运行调试,复位电路采用按键复位方式。
2.3时钟电路设计
时钟电路是单片机的心脏,它控制着单片机的工作节奏。
MCS-51单片机允许的时钟频率是因型号而异的,其典型值为12MHZ。
AT89C51部有一个反相振荡放大器,XTAL1 和 XTAL2分别是该反向振荡放大器的输入端和输出端。
该反向放大器可配置为片振荡器,石晶振荡和瓷振荡均可采用。
本设计采用的晶振频率为12MHZ。
其时钟电路如图3.4所示。
51系列单片机还可使用外部时钟。
在使用外部时钟时,外部时钟必须从XTAL1输入,而XTAL2悬空。
2.4电源电路设计
此设计采用5V直流电直接给整个模块供电,并连接D3,用来检测系统是否已经供电。
C8为滤波电容,可使总的供电电源更稳定,以保护单片机正常工作。
2.5串口通信电路
串口通信采用的是MAX232。
由于单片机所使用是TTL电平,高低电平为0~5V,而上位机使用的二RS232电平,高低电平围为-12V~+12V。
所以要使用MAX232实现电平转换,其中C3、C5、C6、C7四个电容和MAX232共同组成电荷泵,实现改变电压的目的。
J11为串行接口,2号为接收串口,3号为发射串口,5号接地,与MAX232和外围器件共同组成串口通信。
实现上位机与单片机之间的数据传输。
2.6独立按键
设计独立按键使用杜邦线与单片机相连,用于实现各种功能的控制。
2.7显示模块
采用LCD1602显示屏进行显示。
LCD显示屏是一种低压、微功耗的显示器件,可以显示大量信息,除数字外,还可以显示字母,比传统的LED数码显示器的画面有了质的提高。
虽然LCD显示器的价格比传统的LED数码管要贵些,但它的显示效果更好,是当今显示器的主流,所以采用LCD作为显示器。
采用LCD,更容易实现题目的要求,对后续的功能兼容性高,只需将软件修改即可,可操作性强,易于度数,采用1602两行十六字符的显示,能同时显示时间,温度。
同时,R5为电位器,可以用来调节LCD1602的屏幕显示亮度。
2.8语音播报模块
在本次设计中采用了DS18B20作为数据采集器,它的精度最少可以精确到0.0625,完全可以用来进行环境温度的测量。
DS18B20是美国DALLAS 公司生产的单总线数字温度传感器,可把温度信号直接转换成串行数字信号供微处理器处理,而且可以在一条总线上挂接任意多个DS18B20芯片,构成多点温度检测系统无需任何外加硬件。
DS18B20 数字温度传感器可提供9~12 位温度读数,读取或写入DS18B20 的信息仅需一根总线,总线本身可以向所有挂接的DS18B20 芯片提电源,而不需额外的电源。
由DS18B20 这一特点,非常适合于多点温度检测系统,硬件结构简单,方便联网,在仓储管理、工农业生产制造、气象观测、科学研究以及日常生活中被广泛应用。
语音芯片采用的是WT588D,WT588D是一款具有单片机核的语音芯片,因此,可以冠名为WT588D系列语音单片机。
WT588D系列语音单片机是唯创科技联合华邦共同研发出来的集单片机和语音电路于一体的可编辑语音芯片。
功能多音质好应用围广性能稳定是WT588D系列语音单片机的特长,弥补了以往各类语音芯片应用领域狭小的缺陷,MP3控制模式、按键控制模式、按键组合控制模式、并口控制模式、一线串口控制模式、三线串口控制模式以及三线串口控制控制端口扩展输出模式。
作为一款以语音为基础的芯片,完全支持6K~22KHz采样率的音频加载,芯片的独到之处便是将加载的音频音质几乎完整无损的展现出来。
WT588D系列语音单片机能通过配套软件WT588DvoiceChip轻而易举的做到语音组合播放、插入完美的冶静音。
可控制的语音地址位能达到220个!
每个地址位里能加载可组合语音为128段语音!
WT588D系列语音单片机模块置SPI-FLASH存储器,WT588D系列语音单片机芯片可根据实际用法外置SPI-FLASH存储器,众多的控制模式、语音组合只需更换SPI-FLASH的容,即可完全实现操作方式的切换。
3软件设计
3.1 开发工具介绍
单片的使用除了硬件,同样也要软件的使用,我们写汇编程序编程CPU可执行的机器码有两种方法,一种是手工汇编,一种是机器汇编。
机器汇编通过汇编软件变为机器码,用于MSC-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从使用普通汇编语言到高级语言的不断发展,Keil是目前最流行开发MCS-51系列单片机的软件。
Keil c51汇编,PLM语言和C语言的程序设计,界面友好。
Keil是美国keil software公司出品的52系列兼容单片机c语言开发系统。
用过汇编语言后再使用C语言来开发,体会更加深刻。
Keil C51软件提供丰富的库,与汇编相比,C语言在功能上,结构上,可读性,可维护性上有明显的优势,因而易学易用函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生产的汇编代码,就能体会到KeilC51DE 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解,在开发大型软件时更能体现高级语言的优势。
3.2程序设计
整个系统的功能实现是由硬件配合软件来实现的,当硬件基本确定后,软件的功能也就基本确定下来了。
从软件的功能不同可分为两大类:
一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行程序(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。
每一个执行软件是一个小的执行模块。
各执行模块规划好后,就可以规划监控程序了。
首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实质行的要求,合理的安排监控软件和各执行模块之间的调度关系。
主程序需要以下几个模块:
(1)1602液晶显示模块:
向1602的显示送数,控制系统的显示部分。
(2)温度测试及处理模块:
对芯片送过来的数据进行处理。
(3)语音播报模块:
进行对当时的温度进行播报。
(4)温度采集模块:
用于环境温度的采集,传给单片机,进行数据处理。
主程序流程图如下:
3.3代码程序
(1)主程序及显示模块
显示部分使用1602液晶显示,主函数实现对其他子函数的调用,从而实现温度控制播报。
sbitrs=P2^0;
sbitwr=P2^1;
sbitlcden=P2^2;
sbitDC=P0^5;//电动机控制
bitflag0;
uchardisplay[2];
ucharbai,shi,ge;
ucharnum=0;
voiddelayus(uints)
{
uinti;
for(i=0;i
for(i=0;i
}
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_(uchar)//液晶写指令
{
rs=0;
P1=;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)//液晶写数据
{
rs=1;
P1=date;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()//液晶初始化
{
wr=0;
write_(0x38);
write_(0x0c);
write_(0x06);
write_(0x01);
write_(0x80);
}
voiddistwo(ucharadd,uchartemp)//液晶显示两位数字
{
ucharshi,ge;
shi=temp/10;
ge=temp%10;
write_(0x80+add);
write_data(shi|0x30);
write_data(ge|0x30);
}
voiddiszifu(ucharadd,uchar*temp)
{
uchari;
write_(0x80+add);
for(i=0;temp[i]!
='\0';i++)
{
write_data(temp[i]);
delay(5);
}
}
voiddistemp(ucharadd,uinttemp)
{
bai=temp/100;
shi=temp%100/10;
ge=temp%100%10;
write_(0x80+0x40+add);
write_data(bai|0x30);
write_data(shi|0x30);
write_data(0x2e);
write_data(ge|0x30);
write_data(0x43);
display[2]=(bai<<4)|(shi);
display[1]=ge;
display[0]=0x22;
}
voidsound_temp()//温度播报函数
{
send_oneline(bai);
delay(500);
send_oneline(10);
delay(500);
if(shi!
=0)
{
send_oneline(shi);
delay(500);
}
if(ge!
=0)
{
send_oneline(11);
delay(500);
send_oneline(ge);
delay(500);
}
send_oneline(12);
delay(1200);
}
voidmain()//主函数
{
init();
diszifu(0x40+4,"temp:
");
while
(1)
{
tmpchange();
distemp(9,tmp());
if(temp>=300)//当温度大于30度时,电动机工作,语音播报
{
DC=0;
send_oneline(13);
delay(1500);
sound_temp();
}
if(temp<300)//温度小于30度,电动机停转
{
DC=1;
}
num++;
if(num==100)//温度间隔播报
{
num=0;
sound_temp();
}
}
}
(2)温度采集模块
温度采集使用DS18b20传感器,其具体端口设置如下:
sbitDS=P0^0;
uinttemp;
uintstemp=220;
uintxtemp=180;//上下限温度值
//延时函数
voiddelay1(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddsreset(void)//sendresetandinitializationcommand
{
uinti;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bittmpreadbit(void)//readabit
{
uinti;
bitdat;
DS=0;i++;//i++fordelay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
uchartmpread(void)//readabytedate
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
voidtmpwritebyte(uchardat)//writeabytetods18b20
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)//write1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;//write0
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
voidtmpchange(void)//DS18B20beginchange
{
dsreset();
delay1
(1);
tmpwritebyte(0xcc);//addressalldriversonbus
tmpwritebyte(0x44);//initiatesasingletemperatureconversion
}
uinttmp()//getthetemperature
{
floattt;uchara,b;
dsreset();
delay1
(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();b=tmpread();
temp=b;
temp<<=8;//twobytecomposeaintvariable
temp=temp|a;
tt=temp*0.0625;
temp=tt*10+0.5;
returntemp;
}
(3)语音播报模块
sbitrst=P3^4;
sbitsda=P3^5;
sbitkey=P2^0;
voiddelaym(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddelayu(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
voidsend_oneline(ucharadd)
{
uchari;
rst=0;
delaym
(1);
rst=1;
delaym(17);/*复位延时17MS*/
rst=1;
delaym(6);/*delay6ms*/
sda=0;
delaym(5);/*delay5ms*/
for(i=0;i<8;i++)
{
sda=1;
if(add&1)
{delayu(4);/*400us*/
sda=0;
delayu
(2);/*200us*/
}
else
{
delayu
(2);/*200us*/
sda=0;
delayu(4);/*400us*/
}
add>>=1;
}
sda=1;
}
五.总结
近年来,随着集成电路的飞速发展,单片语音集成电路领域出现重大变革,产生了许多新的技术和产品,开拓了更广泛的应用领域,并朝着更大容量、更优音质、更高智能、更具灵活性的发展。
通信设备机、智能仪器仪表、治安报警系统、语音报站/报数/报价器、语音讲解系统、便携式语音记录装置、语音复读机、教学仪器、智能玩具和高档电子礼品等语音产品飞进了我们的生活里。
语音技术的发展使得许多系统更加友好,更方便我们对他们的控制。
几乎在各个方面都可以充分发挥它的优势,比如本文中的具有语音播报功能的水温控制系统,当然在其他方面也可以有很好的应用,比如说具有语音功能的键盘、有语音功能的计算机控制系统、语音功能的家电、玩具等等。
语音功能的实现,可以减少事故的发生,更可以节省资源的利用。
所以说,语音功能的实现有助于生活的改善。
有着良好的市场前景。
然而,此设计毕竟有它的局限性。
它并不能随时修改语音芯片中的存储信息,根据个人的喜好来放音。
因为其语音地址对于普通人来说是不可知的和不可操作的。
在手机应用中,已经可以用自己的或者是下载的铃声来作为来电声。
因此,语音系统必将朝着有操作系统的嵌入式方向发展,来满足人们日益增长的需求。
新的时代已经来临,嵌入式系统同语音系统的有机结合将越来越方便人类的利用,个人个性的需求也将得到很好的满足!
附录一:
BillofMaterials
BillofMaterialsForProject[主系统.PrjPCB](NoPCBDocumentSelected)
SourceDataFrom:
主系统.PrjPCB
Project:
主系统.PrjPCB
Footprint
Comment
LibRef
Designator
Description
Quantity
0805
0.1uF
Cap
C3,C4,C5,C6,C7,C8
Capacitor
6
0805
22P
Cap
C9,C10
Capacitor
2
0805
10uF
Cap
C11
C