版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p><b> 題目:數(shù)字溫度計(jì)</b></p><p> 摘要:本數(shù)字溫度計(jì)是以STC89C52單片機(jī)為主控器,溫度傳感器DS18b20以及語音芯片ISD1760為輔,來實(shí)現(xiàn)數(shù)字溫度顯示以及報(bào)數(shù)的功能。溫度傳感器DS18b20是12位高分辨率,精度可達(dá)0.5攝氏度的傳感器,
2、它能夠全數(shù)字溫度轉(zhuǎn)換及輸出。輸出的溫度則在數(shù)碼管LED上顯示。而語音芯片ISD1760可以用SPI的通訊方式與單片機(jī)進(jìn)行通訊,這樣實(shí)現(xiàn)定點(diǎn)錄音以及定點(diǎn)播放。把所需的聲音錄進(jìn),當(dāng)需要讀溫度則可將所錄音按溫度值組合在一起,從而實(shí)現(xiàn)語音報(bào)數(shù)。</p><p> 關(guān)鍵詞:STC89C52 溫度傳感器DS18b20 語音芯片1760 語音報(bào)數(shù)</p><p> Abstract: the
3、digital thermometer is STC89C52 single-chip microcomputer as the main controller, temperature DS18b20 and speech chip ISD1760 is complementary, to realize the digital temperature display and the function of the number of
4、f. The temperature sensor and b20 is 12 high resolution, the accuracy can reach 0.5 degrees Celsius sensor, it can fully digital temperature conversion and output. The output of the temperature in the digital tube LED di
5、splay. And the speech chip ISD1760 can use SPI</p><p> Keywords: STC89C52 DS18b20 ISD1760 count of</p><p> 1 方案論證………………………………………………………3</p><p> 溫度傳感器方案論證……………………………………3<
6、;/p><p> 語音芯片方案論證………………………………………3</p><p> MCU方案論證……………………………………………3</p><p> 2 系統(tǒng)設(shè)計(jì)………………………………………………………3</p><p> 2.1 總體設(shè)計(jì)………………………………………………3</p><p> 2.
7、2 單元電路設(shè)計(jì)…………………………………………4</p><p> 2.2.1 MCU電路設(shè)計(jì)…………………………………4</p><p> 2.2.2 LED顯示電路…………………………………4</p><p> 2.2.3 語音錄放芯片電路……………………………5</p><p> 3 軟件設(shè)計(jì)………………………………
8、………………………6</p><p> 4 結(jié)論與感想……………………………………………………7</p><p> 5 附加代碼………………………………………………………8</p><p><b> 方案論證</b></p><p><b> 溫度傳感器選擇方案</b></p>
9、;<p> 本系統(tǒng)只需把溫度轉(zhuǎn)化為數(shù)字信號(hào)然后顯示在LED上即可,因此選擇溫度傳感器DS18b20。它的測(cè)溫范圍是-55攝氏度~+125攝氏度,固有測(cè)溫分辨率0.5攝氏度,滿足了題目的要求。而且它工作電壓小,僅有三個(gè)引出引腳:VCC,GND以及數(shù)字信號(hào)輸入輸出引腳。</p><p><b> 語音芯片方案論證</b></p><p> 按照題目所需
10、,要實(shí)現(xiàn)隨機(jī)溫度報(bào)數(shù)的功能,因而不用選擇具有語音處理功能的語音芯片,而選擇可以定點(diǎn)錄音和定點(diǎn)播放的芯片。在這里選擇ISD1760。ISD1760語音錄放芯片是Winbond推出的單片優(yōu)質(zhì)語音錄放芯片,可以錄放音達(dá)十萬次,其中錄音可以通過在線錄音以及MIC錄音。主控單片機(jī)可以通過四線(SCLK,MOSI,MISO,SS)SPI協(xié)議對(duì)ISD1760進(jìn)行串行通信。這樣可以通過MCU來控制ISD1760的定點(diǎn)錄音和定點(diǎn)播放。</p>
11、<p><b> MCU方案論證</b></p><p> 方案一、用STM8系列的單片機(jī),資源豐富,包括集成的SPI等外設(shè)以及豐富的IO口,而且主控晶振頻率高。但容易造成資源浪費(fèi)現(xiàn)象。</p><p> 方案二、用51單片機(jī)來作為主控芯片,僅需提供一個(gè)引腳來采集溫度傳感器的數(shù)據(jù),還可用IO引腳來模擬SPI引腳與ISD1760進(jìn)行通訊,還有足夠的I
12、O引腳。因此選擇這個(gè)方案。</p><p><b> 系統(tǒng)設(shè)計(jì)</b></p><p><b> 總體設(shè)計(jì)</b></p><p> 通過51單片機(jī)對(duì)溫度傳感器的數(shù)據(jù)進(jìn)行采集,然后通過數(shù)碼管LED進(jìn)行顯示。同時(shí)51單片機(jī)還控制ISD1760的定點(diǎn)播放(提前把所需的語音錄進(jìn)去),通過按鍵來進(jìn)行語音播放功能。當(dāng)選擇語音播
13、放功能后會(huì)讀出LED上所顯示的溫度。</p><p><b> 單元電路設(shè)計(jì)</b></p><p><b> MCU電路設(shè)計(jì)</b></p><p> 參考官方手冊(cè)的最小系統(tǒng)電路即可。</p><p><b> LED顯示電路</b></p><p
14、> 這里僅采用四位共陽的數(shù)碼管作為顯示各個(gè)段選信號(hào)分別通過51單片機(jī)的P0.0~P0.7來控制,而位選信號(hào)則通過三極管S9013和51單片機(jī)的P1端口控制。S9013作為位選原理是:三極管集電極接+5V電源,發(fā)射極分別接各個(gè)數(shù)碼管的片選端,基極接單片機(jī)引腳。這樣當(dāng)上電時(shí)給單片機(jī)P1^X一個(gè)低電平信號(hào)時(shí)就可以選通某位數(shù)碼管,從而實(shí)現(xiàn)數(shù)碼管的位選。</p><p><b> 語音錄放芯片電路<
15、;/b></p><p> 語音錄放芯片電路參考的是其官方手冊(cè)的電路進(jìn)行些許修改得到。其中引腳4~5可以通過MCU控制語音錄放芯片的錄音,播放等功能。另外22~27引腳以及19~20可以直接用按鍵來實(shí)現(xiàn)芯片的各種功能。AL—in引腳可以支持線錄,MIC利用咪頭錄音。這里就用MIC的方式進(jìn)行錄音,然后利用SP-和SP+所接的喇叭(最好選擇1~8歐,1~4瓦)放音。另外,ROSC引腳是語音錄放芯片的晶振電阻引
16、腳,根據(jù)官方手冊(cè)當(dāng)該引腳接不通的阻值電阻時(shí)錄放的時(shí)間是不同的。這里提供兩種選擇:一是60K的60秒錄放時(shí)間,而是80K的75秒的錄放時(shí)間。用戶可以根據(jù)自己的情況來選擇。</p><p><b> 軟件設(shè)計(jì)</b></p><p> 對(duì)于溫度傳感器的讀數(shù)利用定時(shí)器來不斷的更新讀取,報(bào)數(shù)則利用按鍵實(shí)現(xiàn)。其軟件流程圖如下(不太會(huì)用軟件畫圖,有點(diǎn)丑陋,望見諒)</p
17、><p><b> 結(jié)論和感想</b></p><p> 通過這次課程設(shè)計(jì)在此讓我意識(shí)到學(xué)生的動(dòng)手能力是多么重要。雖然之間花了還是花了不少時(shí)間調(diào)試硬件,但經(jīng)過自己的努力還是把整個(gè)作品完成了。現(xiàn)在想起來今年年頭時(shí)參加校賽時(shí)那種無助的我花了四五十天都沒辦法完成作品,但現(xiàn)在的課程設(shè)計(jì)花了不到一個(gè)星期的時(shí)間就把硬件和軟件都搞好了。雖然感覺課程設(shè)計(jì)沒什么難度,但我覺得我還是有了
18、很明顯的進(jìn)步。</p><p> 同時(shí)在這次課程設(shè)計(jì)中,我又知道在一個(gè)項(xiàng)目中有很多東西要注意的以及學(xué)習(xí)到很多新的知識(shí)。比如這次學(xué)習(xí)了溫度傳感器和語音錄放芯片。還有很多細(xì)節(jié)性的東西,就比如這次課程設(shè)計(jì)中為什么會(huì)花那么多時(shí)間做硬件調(diào)試?就是因?yàn)槲业拇中拇笠鉀]有注意到細(xì)節(jié)上的問題而導(dǎo)致電路短路自己卻全然不知。通過此次的課程設(shè)計(jì)我也深深意識(shí)到,原來學(xué)到的理論知識(shí)沒有拿出來用到實(shí)際的應(yīng)用中,就永遠(yuǎn)不會(huì)知道一些知識(shí)的用法還
19、有知識(shí)在細(xì)節(jié)上的問題。在剩下的大學(xué)時(shí)光,我會(huì)花更多的時(shí)間把理論與實(shí)際操作結(jié)合到一起,來使我的知識(shí)更加充實(shí)。</p><p><b> 附加代碼</b></p><p> 一、主程序(報(bào)溫系統(tǒng).c):</p><p> #include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義<
20、/p><p> #include <18b20.h></p><p> #include <intrins.h></p><p> #include <ISD1760.h></p><p> #define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P1 替換</p
21、><p> sbit LATCH1=P2^0;//定義鎖存使能端口 段鎖存</p><p> sbit LATCH2=P2^1;//位鎖存</p><p> sbit SOUND=P3^2;</p><p> unsigned int TempH,TempL,temp,Shi,Ge;</p><p> bit R
22、eadTempFlag;//定義讀時(shí)間標(biāo)志</p><p> unsigned char code HEYAO_DuanMa[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};</p><p> unsigned char code HEYAO_WeiMa[]={0x0e,0x0d,0x0b,0x07};</p>
23、<p> unsigned char TempData[8]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF}; //存儲(chǔ)顯示值的全局變量</p><p> void Display(unsigned char FirstBit,unsigned char Num);//數(shù)碼管顯示函數(shù)</p><p> void Init_Timer0(v
24、oid);//定時(shí)器初始化</p><p> //void DisTemp();</p><p> //void luyin();</p><p> /*------------------------------------------------</p><p><b> 主函數(shù)</b></p>
25、<p> ------------------------------------------------*/</p><p> void main (void)</p><p> { </p><p> Init_Timer0();</p><p> ISD_Init();</p
26、><p><b> SOUND=1;</b></p><p> while (1) //主循環(huán)</p><p><b> {</b></p><p> if(ReadTempFlag==1)</p><p><b> {</b>&l
27、t;/p><p> ReadTempFlag=0;</p><p> temp=ReadTemperature();</p><p> TempH=temp>>4;</p><p> TempL=temp&0x0F;</p><p> TempL=TempL*6/10;//小數(shù)近似處理<
28、/p><p> if(temp&0x8000)//檢測(cè)溫度的正負(fù)</p><p><b> {</b></p><p> TempData[0]=0xBF;//負(fù)號(hào)標(biāo)志</p><p> temp=~temp; // 取反加1</p><p><b> temp +=1;
29、</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> TempData[0]=0xff;</p><p> if(TempH/100==0
30、)</p><p> TempData[1]=0XFF;</p><p><b> else</b></p><p> TempData[1]=HEYAO_DuanMa[TempH/100]; //百位溫度</p><p><b> }</b></p><p> i
31、f((TempH/100==0)&&((TempH%100)/10==0))//消隱</p><p> TempData[1]=0XFF;</p><p><b> else</b></p><p> TempData[1]=HEYAO_DuanMa[(TempH%100)/10]; //十位溫度</p>&
32、lt;p> TempData[2]=HEYAO_DuanMa[(TempH%100)%10]&0x7F; //個(gè)位溫度,帶小數(shù)點(diǎn)</p><p> TempData[3]=HEYAO_DuanMa[TempL];</p><p><b> }</b></p><p> /*************語音報(bào)實(shí)時(shí)溫度******
33、*******/</p><p> Shi=(TempH%100)/10;</p><p> Ge=(TempH%100)%10;</p><p> if(SOUND==0)</p><p><b> {</b></p><p> Delay(10);</p><p&
34、gt; if(SOUND==0)</p><p><b> {</b></p><p> while(!SOUND);</p><p> if(temp&0x8000)//檢測(cè)溫度的正負(fù)</p><p><b> {</b></p><p> SetPLA
35、Y(13);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(TempH/100!=0)</p><p><b> {</b>
36、</p><p> SetPLAY(1);</p><p> SetPLAY(12);</p><p><b> }</b></p><p><b> }</b></p><p> SetPLAY(Shi);</p><p> SetPLA
37、Y(10);</p><p> SetPLAY(Ge);</p><p> SetPLAY(11);</p><p> SetPLAY(TempL);</p><p> SetPLAY(14);</p><p><b> }</b></p><p><b&g
38、t; }</b></p><p><b> }</b></p><p><b> }</b></p><p> /****************************************************************</p><p><b>
39、 用于錄音</b></p><p> ****************************************************************</p><p> void luyin()</p><p><b> {</b></p><p> //SetREC(14);<
40、/p><p><b> ISD_PD();</b></p><p><b> }</b></p><p> /*------------------------------------------------</p><p><b> 用于動(dòng)態(tài)掃描數(shù)碼管</b></p
41、><p> --------------------------------------------*/</p><p> void Display(unsigned char FirstBit,unsigned char Num)</p><p><b> {</b></p><p> static unsigne
42、d char i=0;</p><p> DataPort=0xff; //清空數(shù)據(jù),防止有交替重影</p><p> P2=HEYAO_WeiMa[i+FirstBit]; //取位碼 </p><p> DataPort=TempData[i]; //取顯示數(shù)據(jù),段碼</p><p><b> i++;</b&
43、gt;</p><p> if(i==Num)</p><p><b> i=0;</b></p><p><b> }</b></p><p> /*void DisTemp()</p><p><b> {</b></p>&
44、lt;p> ReadTempFlag=0;</p><p> temp=ReadTemperature();</p><p> TempH=temp>>4;</p><p> TempL=temp&0x0F;</p><p> TempL=TempL*6/10;//小數(shù)近似處理</p><
45、;p> if(temp&0x8000)//檢測(cè)溫度的正負(fù)</p><p><b> {</b></p><p> TempData[0]=0xBF;//負(fù)號(hào)標(biāo)志</p><p> temp=~temp; // 取反加1</p><p><b> temp +=1;</b>&
46、lt;/p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> TempData[0]=0xff;</p><p> if(TempH/100==0)</p>
47、<p> TempData[0]=0XFF;</p><p><b> else</b></p><p> TempData[0]=HEYAO_DuanMa[TempH/100]; //百位溫度</p><p><b> }</b></p><p> if((TempH/10
48、0==0)&&((TempH%100)/10==0))//消隱</p><p> TempData[1]=0XFF;</p><p><b> else</b></p><p> TempData[1]=HEYAO_DuanMa[(TempH%100)/10]; //十位溫度</p><p> T
49、empData[2]=HEYAO_DuanMa[(TempH%100)%10]&0x7F; //個(gè)位溫度,帶小數(shù)點(diǎn)</p><p> TempData[3]=HEYAO_DuanMa[TempL];</p><p><b> }*/</b></p><p> /*----------------------------------
50、--------------</p><p><b> 定時(shí)器初始化子程序</b></p><p> ------------------------------------------------*/</p><p> void Init_Timer0(void)</p><p><b> {<
51、/b></p><p> TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 </p><p> // TH0=0x00; //給定初值</p><p> // TL0=0x00;</p><p> EA=1;
52、 //總中斷打開</p><p> ET0=1; //定時(shí)器中斷打開</p><p> TR0=1; //定時(shí)器開關(guān)打開</p><p><b> }</b></p><p> /*void Outside_Init(void)//開外部中斷0</p>&l
53、t;p><b> {</b></p><p> EX0 = 1; //開外部中斷0</p><p> //EX1 = 1;</p><p> IT0 = 1; //負(fù)邊沿觸發(fā)</p><p> //IT1 =1; </p><p> EA = 1; //開總中斷</p&
54、gt;<p><b> }*/</b></p><p> /*------------------------------------------------</p><p><b> 定時(shí)器中斷子程序</b></p><p> ------------------------------------
55、------------*/</p><p> void Timer0_isr(void) interrupt 1 </p><p><b> {</b></p><p> static unsigned int num;</p><p> TH0=(65536-2000)/256; //重新賦值 2ms&
56、lt;/p><p> TL0=(65536-2000)%256;</p><p> Display(0,4); // 調(diào)用數(shù)碼管掃描</p><p><b> num++;</b></p><p> if(num==300) //</p><p><b>
57、 {</b></p><p><b> num=0;</b></p><p> ReadTempFlag=1; //讀標(biāo)志位置1</p><p><b> }</b></p><p><b> }</b></p><p> 二、語音
58、錄放芯片源程序(ISD1760.c):</p><p> /*使用獨(dú)立按鍵錄音,根據(jù)所錄秒數(shù)得到地址,使用放音函數(shù)進(jìn)行放音*/ </p><p> #include <intrins.h></p><p> #include <reg52.h></p><p> #include <ISD1760.h&g
59、t;</p><p> sbit SS = P1^3;</p><p> sbit SCLK = P1^2 ; </p><p> sbit MOSI = P1^1 ; </p><p> sbit MISO = P1^0 ;</p><p> uchar SR0_L; //存放讀到的寄存器數(shù)據(jù),下同&
60、lt;/p><p> uchar SR0_H; </p><p> uchar SR1; </p><p> uchar ID,APCL=0,APCH=0;</p><p> //-------------------------------------------------------------</p><p
61、> //每2秒大約是8個(gè)十進(jìn)制地址,即十六進(jìn)制0x08,后一段聲音越界</p><p> //就只會(huì)播前段聲音的后面的一部分,遇到“EOM”停止,所根據(jù)錄得</p><p> //秒上述乘以8,轉(zhuǎn)化成十六進(jìn)制數(shù),得到大概地址,后面進(jìn)行微調(diào)</p><p> //----------------------------------------------
62、---------------</p><p> uint caToneAdd[]={0x0010 ,0x0010+0x08 ,0x0010+0x08,0x0010+0x10, //0,1</p><p> 0x0010+0x10,0x0010+0x18,0x0010+0x18,0x0010+0x20, //2,3</p><p> 0x0010+0
63、x20,0x0010+0x28,0x0010+0x28,0x0010+0x30, //4,5</p><p> 0x0010+0x30,0x0010+0x38,0x0010+0x38,0x0010+0x40, //6,7</p><p> 0x0010+0x40,0x0010+0x48,0x0010+0x48,0x0010+0x50, //8,9</p><p
64、> 0x0010+0x50,0x0010+0x58,0x0010+0x58,0x0010+0x60, //10,點(diǎn)</p><p> 0x0010+0x60,0x0010+0x68,0x0010+0x68,0x0010+0x70, //百,負(fù)</p><p> 0x0010+0x70,0x0010+0x78};//攝氏度 </p><p> voi
65、d I_delay(void)</p><p><b> {</b></p><p> NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;</p><p> NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;</p><p><b> }</b>&
66、lt;/p><p> //----------------------------------------------------------------</p><p><b> //MS級(jí)延時(shí)函數(shù)</b></p><p> //--------------------------------------------------------
67、--------</p><p> //----------------------------------------------------------------</p><p><b> //MS級(jí)延時(shí)函數(shù)</b></p><p> //-----------------------------------------------
68、-----------------</p><p> void Delay( uint z )</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for ( x = z; x > 0; x-- )</p><
69、;p><b> {</b></p><p> for ( y = 110; y > 0; y-- );</p><p><b> }</b></p><p><b> }</b></p><p> /****************************
70、********************************************** </p><p> *函數(shù)名: void ISD_Init(void); </p><p> *初始化:包括了復(fù)位、上電、讀狀態(tài)、清除中斷、設(shè)置APC2、讀APC等子函數(shù)</p><p> ***************************************
71、***********************************/ </p><p> void ISD_Init(void)</p><p><b> { </b></p><p> ISD_Reset(); </p><p><b> do</b></p><p
72、><b> { </b></p><p> ISD_PU(); </p><p> RdStatus();</p><p> }while((SR0_L&0x01)||(!(SR1&0x01)));//if(SR0_L^0==1){system Err}<CMD_Err==1> </p>
73、<p><b> ClrInt();</b></p><p> RD_DevID();</p><p> ISD_WR_APC2( ); </p><p><b> RdAPC(); </b></p><p><b> }</b></p>
74、<p> //----------------------------------------------------------------</p><p> // 函數(shù)名: SPISendData( )</p><p> // SPI傳輸數(shù)據(jù)(發(fā)送數(shù)據(jù))子程序</p><p> //-------------------------------
75、---------------------------------</p><p> uchar SPISendData(uchar BUF_ISD)</p><p><b> { </b></p><p> uchar i,dat=BUF_ISD; </p><p><b> SCLK=1; <
76、/b></p><p> SS=0; //拉低準(zhǔn)備</p><p> //Delay(5);</p><p> for(i=0;i<8;i++)</p><p><b> { </b></p><p><b> SCLK=0; </b></p>
77、;<p> I_delay(); </p><p> if(dat&0x01)</p><p><b> { </b></p><p><b> MOSI=1; </b></p><p><b> } </b></p><p&
78、gt;<b> else//發(fā)送</b></p><p><b> { </b></p><p><b> MOSI=0; </b></p><p><b> } </b></p><p><b> dat>>=1; <
79、;/b></p><p><b> if(MISO)</b></p><p><b> { </b></p><p> dat|=0x80; </p><p><b> } </b></p><p><b> SCLK=1; &
80、lt;/b></p><p> I_delay(); </p><p><b> } </b></p><p><b> MOSI=0; </b></p><p><b> // SS=1; </b></p><p> return(da
81、t); </p><p><b> } </b></p><p> /************************************************************************** </p><p> * 函數(shù)名: void RdStatus(void); </p><p>&
82、lt;b> * 讀狀態(tài)</b></p><p> **************************************************************************/ </p><p> void RdStatus(void)</p><p><b> { </b></p>
83、<p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(RD_STATUS); //向ISD1760發(fā)送命令讀寄存器狀態(tài)</p><p> SPISendData(0x00);//數(shù)據(jù)字節(jié)1</p><p> SPISendD
84、ata(0x00);//起始地址字節(jié)1</p><p> SS=1;//發(fā)送數(shù)據(jù)</p><p> Delay(10);//延時(shí)10MS </p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SR0_L =SPISendData
85、(RD_STATUS);//存儲(chǔ)狀態(tài)寄存器的數(shù)據(jù)</p><p> SR0_H =SPISendData(0x00); </p><p> SR1 =SPISendData(0x00); </p><p><b> SS=1; </b></p><p> Delay(10); </p><p
86、><b> } </b></p><p> /************************************************************************** </p><p> * 函數(shù)名: void ClrInt(void); </p><p><b> * 清除中斷</b&
87、gt;</p><p> **************************************************************************/ </p><p> void ClrInt(void)</p><p><b> { </b></p><p><b> //
88、SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(CLI_INT);//原理同上</p><p> SPISendData(0x00); </p><p><b> SS=1; </b></p><p> Delay(1
89、0); </p><p><b> } </b></p><p> /************************************************************************** </p><p> * 函數(shù)名: void ISD_WR_NVCFG(void); </p><p
90、><b> * 永久寫入寄存器</b></p><p> **************************************************************************/ </p><p> void ISD_WR_NVCFG(void)</p><p><b> { </b&
91、gt;</p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(WR_NVCFG); </p><p> SPISendData(0x00); </p><p><b> SS=1; </b&
92、gt;</p><p> Delay(10); </p><p><b> } </b></p><p> /************************************************************************** </p><p> *函數(shù)名: void ISD_W
93、R_APC2(uchar voiceValue); </p><p><b> *設(shè)置APC2</b></p><p> **************************************************************************/ </p><p> void ISD_WR_APC2(void)&
94、lt;/p><p><b> { </b></p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(WR_APC2); </p><p> //SPISendData(0xa8); //
95、0XA8聲音最大,0xaf聲音最小,0xa0去掉了錄音時(shí)的監(jiān)聽</p><p> //SPISendData(0x0c); //D11=1,在SETPLAY模式下,執(zhí)行到EOM自動(dòng)結(jié)束?;蛘咴谶B續(xù)兩個(gè)</p><p> //SET_PLAY命令后,執(zhí)行到第一個(gè)EOM自動(dòng)跳到第二段開始</p><p> SPISendData(0x40); //同上,數(shù)據(jù)字
96、節(jié)1《D7:D0》,MIC錄音</p><p> SPISendData(0x08); //數(shù)據(jù)字節(jié)2<D11:D8> </p><p><b> SS=1; </b></p><p> Delay(10); </p><p> ISD_WR_NVCFG(); //永久寫入寄存器</p&g
97、t;<p><b> } </b></p><p> /************************************************************************** </p><p> *函數(shù)名: void RD_APC(void); </p><p><b> *讀取AP
98、C</b></p><p> **************************************************************************/ </p><p> void RdAPC(void)</p><p><b> { </b></p><p><b&
99、gt; //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(RD_APC); </p><p> SPISendData(0x00); </p><p> SPISendData(0x00); </p><p> SPISendData(
100、0x00); </p><p><b> SS=1; </b></p><p> Delay(10);</p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SR0_L =SPISendData(RD_APC
101、);//同樣用來存儲(chǔ)所讀到的數(shù)據(jù)</p><p> SR0_H =SPISendData(0x00); </p><p> APCL =SPISendData(0x00); </p><p> APCH =SPISendData(0x00); </p><p><b> SS=1; </b></p>
102、<p> Delay(10); </p><p><b> } </b></p><p> /************************************************************************** </p><p> *函數(shù)名: void ISD_CHK_MEM(void);
103、</p><p> *空間檢測(cè):檢查環(huán)狀存儲(chǔ)體系</p><p> ************************************************************************** </p><p> void ISD_CHK_MEM(void)</p><p><b> { </b
104、></p><p><b> SS=0;</b></p><p> Delay(10);</p><p> SPISendData(CHK_MEM); </p><p> SPISendData(0x00); </p><p><b> SS=1; </b>&
105、lt;/p><p> Delay(10); </p><p><b> } </b></p><p> ************************************************************************** </p><p> *函數(shù)名: void ISD_Reset(v
106、oid); </p><p><b> *復(fù)位函數(shù)</b></p><p> **************************************************************************/ </p><p> void ISD_Reset(void)</p><p><
107、b> { </b></p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(RESET); </p><p> SPISendData(0x00); </p><p><b>
108、; SS=1;</b></p><p> Delay(50);//延時(shí)50ms</p><p><b> } </b></p><p> /************************************************************************** </p><p&
109、gt; *函數(shù)名: void ISD_Stop(void); </p><p><b> *停止當(dāng)前操作 </b></p><p> ************************************************************************** </p><p> void ISD_Stop(vo
110、id)</p><p><b> { </b></p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(STOP); </p><p> SPISendData(0x00); <
111、;/p><p><b> SS=1; </b></p><p> Delay(50); </p><p><b> } </b></p><p> /************************************************************************
112、** </p><p> *函數(shù)名: void ISD_PU(void); </p><p><b> *上電</b></p><p> **************************************************************************/ </p><p> vo
113、id ISD_PU(void)</p><p><b> { </b></p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(PU); </p><p> SPISendData(0
114、x00); </p><p><b> SS=1; </b></p><p> Delay(50); </p><p><b> } </b></p><p> /****************************************************************
115、********** </p><p> *函數(shù)名: void ISD_PD(void); </p><p><b> *掉電 </b></p><p> **************************************************************************</p><p&
116、gt; void ISD_PD(void)</p><p><b> { </b></p><p> SPISendData(PD); </p><p> SPISendData(0x00); </p><p><b> SS=1; </b></p><p> D
117、elay(10); </p><p><b> } </b></p><p> /************************************************************************** </p><p> *函數(shù)名: void RdStatus(void); </p><
118、p> *讀取ID,應(yīng)該相當(dāng)于片選什么的??</p><p> **************************************************************************/ </p><p> uchar RD_DevID(void)</p><p><b> { </b></p>
119、;<p><b> //SS=0;</b></p><p> //Delay(10);</p><p> SPISendData(RD_DEVID); </p><p> SPISendData(0x00); </p><p> SPISendData(0x00); </p><
120、;p><b> SS=1; </b></p><p> Delay(10); </p><p><b> //SS=0;</b></p><p> //Delay(10); </p><p> SR0_L =SPISendData(RD_DEVID); </p>&l
121、t;p> SR0_H =SPISendData(0x00); </p><p> ID =SPISendData(0x00); </p><p><b> SS=1; </b></p><p> Delay(10); </p><p> return(ID); </p><p>&
122、lt;b> } </b></p><p> /************************************************************************** </p><p> *函數(shù)名: void GetToneAdd(uchar cNum, Uint * ipStartAdd, Uint * ipEndAdd); </
123、p><p> *取當(dāng)前語音的首末地址</p><p> **************************************************************************/ </p><p> void GetToneAdd(uchar cNum, uint * ipStartAdd, uint * ipEndAdd)</p
124、><p><b> { </b></p><p> *ipStartAdd=caToneAdd[cNum*2]; </p><p> *ipEndAdd=caToneAdd[cNum*2+1]; </p><p><b> } </b></p><p> /******
125、******************************************************************** </p><p> *函數(shù)名: void SetPLAY(uchar cNum); </p><p><b> *定點(diǎn)播放 </b></p><p> *************************
126、*************************************************/</p><p> void SetPLAY(uchar cNum)</p><p><b> { </b></p><p> uint Add_ST, Add_ED; </p><p> uchar Add_ST
127、_H, Add_ST_L, Add_ED_H, Add_ED_L; </p><p><b> do</b></p><p><b> { </b></p><p> RdStatus(); </p><p> }while((SR0_L&0x01)||(!(SR1&0x01
128、))); //if(SR0_L^0==1){system Err}<CMD_Err==1> </p><p><b> ClrInt();</b></p><p><b> //SS=0;</b></p><p> //Delay(10);</p><p> GetToneAdd
129、(cNum, &Add_ST, &Add_ED); </p><p> Add_ST_L=(uchar)(Add_ST&0x00ff); </p><p> Add_ST_H=(uchar)((Add_ST>>8)&0x00ff); </p><p> Add_ED_L=(uchar)(Add_ED&0x00
130、ff); </p><p> Add_ED_H=(uchar)((Add_ED>>8)&0x00ff); </p><p> SPISendData(SET_PLAY); </p><p> SPISendData(0x00); </p><p> SPISendData(Add_ST_L);
131、//S7:S0開始地址</p><p> SPISendData(Add_ST_H); //S10:S8 </p><p> SPISendData(Add_ED_L); //E7:E0結(jié)束地址 </p><p> SPISendData(Add_ED_H); //E10:E8 </p>
132、<p> SPISendData(0x00); </p><p><b> SS=1; </b></p><p> Delay(10); </p><p><b> do</b></p><p><b> { </b></p><p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 課程設(shè)計(jì)---數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (3)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)之?dāng)?shù)字溫度計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論