要求:
語(yǔ)音播報(bào)溫度計(jì)以STC12C5A60S2單片機(jī)為核心,
采用DS18B20單總線溫度傳感器,測(cè)量水箱的溫度,
用語(yǔ)音芯片ISD1420P播報(bào)溫度,同時(shí)用LCD1602顯示溫度值。
應(yīng)用所學(xué)專(zhuān)業(yè)知識(shí),設(shè)計(jì)硬件電路,C語(yǔ)言編寫(xiě)相應(yīng)的程序
原理
系統(tǒng)上電,單片機(jī)MCU開(kāi)始運(yùn)行,首先對(duì)lcd1602進(jìn)行初始化,
之后對(duì)溫度傳感器DS18B20進(jìn)行初始化,讀取溫度數(shù)據(jù),然后判斷按鍵是否按下,
若是按鍵按下則開(kāi)始操作語(yǔ)音芯片ISD1420,根據(jù)單片機(jī)讀取到的溫度數(shù)據(jù)控制ISD1420
語(yǔ)音芯片的地址線播報(bào)ISD1420語(yǔ)音的內(nèi)容,播報(bào)完成之后,將溫度數(shù)據(jù)在1602顯示,
顯示完成后再次讀取溫度數(shù)據(jù),以及循環(huán)。
單片機(jī)源程序如下:
- #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;
- /*********延時(shí)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口,全設(shè)為1 語(yǔ)音芯片播放的地址
- P3=0xff; //1602控制端 以及溫度播報(bào)按鍵
- top_temp = 30; //最高溫度
- bottom_temp = 1; ///最低溫度
- initLCM( ); //1602初始化
- initClock(); //定時(shí)器初始化
- initTemp(); // 溫度傳感器初始化
- // initSpeakTemp();
- BEEP = 1; //蜂鳴器?
- }
- /***************the main funtion****************/
- void main(void)
- {
- init( ); //lcd1602初始化
- Uart1Init(); //串口1初始化
- while (1)
- {
- scan_key(); //按鍵掃描子函數(shù)
- ReadTemperature( ); // 讀取溫度子函數(shù)
- displayTemp(); //顯示溫度子函數(shù)
-
-
-
- }
- }
- void Uart1() interrupt 4 //串口中斷函數(shù)
- {
- if (RI)
- {
- RI = 0; //清除RI位
- }
- if (TI)
- {
- TI = 0; //清除TI位
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
溫度播報(bào)1420.7z
(10.58 MB, 下載次數(shù): 125)
2020-2-24 16:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|