要求:
语音播报温度计以STC12C5A60S2单片机为核心,
采用DS18B20单总线温度传感器,测量水箱的温度,
用语音芯片ISD1420P播报温度,同时用LCD1602显示温度值。
应用所学专业知识,设计硬件电路,C语言编写相应的程序
原理
系统上电,单片机MCU开始运行,首先对lcd1602进行初始化,
之后对温度传感器DS18B20进行初始化,读取温度数据,然后判断按键是否按下,
若是按键按下则开始操作语音芯片ISD1420,根据单片机读取到的温度数据控制ISD1420
语音芯片的地址线播报ISD1420语音的内容,播报完成之后,将温度数据在1602显示,
显示完成后再次读取温度数据,以及循环。
单片机源程序如下:
- #include "main.h"
- #include "LCD1602.h"
- #include "clock.h"
- #include "key.h"
- #include "DS18B20.h"
- #include "temp.h"
- #include "BEEP.h"
- #include "ISD1420.h"
- #include "speakTEMP.h"
- #include "UART.h"
- //unsigned char code str0[]={"--- : : -----"};
- //unsigned char code str1[]={"temp: . oC-----"};
- char uart;
- /*********延时K*1ms,12.000mhz**********/
- void delayMs(unsigned int ms)
- {
- unsigned char j;
- while(ms--)
- {
- for(j=0; j<=125; j++);
- }
- }
- /***************初始化*******************/
- void init()
- {
- P1=0xff; //初始化p1口,全设为1 语音芯片播放的地址
- P3=0xff; //1602控制端 以及温度播报按键
- top_temp = 30; //最高温度
- bottom_temp = 1; ///最低温度
- initLCM( ); //1602初始化
- initClock(); //定时器初始化
- initTemp(); // 温度传感器初始化
- // initSpeakTemp();
- BEEP = 1; //蜂鸣器?
- }
- /***************the main funtion****************/
- void main(void)
- {
- init( ); //lcd1602初始化
- Uart1Init(); //串口1初始化
- while (1)
- {
- scan_key(); //按键扫描子函数
- ReadTemperature( ); // 读取温度子函数
- displayTemp(); //显示温度子函数
-
-
-
- }
- }
- void Uart1() interrupt 4 //串口中断函数
- {
- if (RI)
- {
- RI = 0; //清除RI位
- }
- if (TI)
- {
- TI = 0; //清除TI位
- }
- }
复制代码
所有资料51hei提供下载:
温度播报1420.7z
(10.58 MB, 下载次数: 125)
|