課程設(shè)計(jì)---數(shù)字溫度計(jì)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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ù)字信號然后顯示在LED上即可,因此選擇溫度傳感器DS18b20。它的測溫范圍是-55攝氏度~+125攝氏度,固有測溫分辨率0.5攝氏度,滿足了題目的要求。而且它工作電壓小,僅有三個引出引腳:VCC,GND以及數(shù)字信號輸入輸出引腳。</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é)議對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ī)來作為主控芯片,僅需提供一個引腳來采集溫度傳感器的數(shù)據(jù),還可用IO引腳來模擬SPI引腳與ISD1760進(jìn)行通訊,還有足夠的I

12、O引腳。因此選擇這個方案。</p><p><b>  系統(tǒng)設(shè)計(jì)</b></p><p><b>  總體設(shè)計(jì)</b></p><p>  通過51單片機(jī)對溫度傳感器的數(shù)據(jù)進(jìn)行采集,然后通過數(shù)碼管LED進(jìn)行顯示。同時51單片機(jī)還控制ISD1760的定點(diǎn)播放(提前把所需的語音錄進(jìn)去),通過按鍵來進(jìn)行語音播放功能。當(dāng)選擇語音播

13、放功能后會讀出LED上所顯示的溫度。</p><p><b>  單元電路設(shè)計(jì)</b></p><p><b>  MCU電路設(shè)計(jì)</b></p><p>  參考官方手冊的最小系統(tǒng)電路即可。</p><p><b>  LED顯示電路</b></p><p

14、>  這里僅采用四位共陽的數(shù)碼管作為顯示各個段選信號分別通過51單片機(jī)的P0.0~P0.7來控制,而位選信號則通過三極管S9013和51單片機(jī)的P1端口控制。S9013作為位選原理是:三極管集電極接+5V電源,發(fā)射極分別接各個數(shù)碼管的片選端,基極接單片機(jī)引腳。這樣當(dāng)上電時給單片機(jī)P1^X一個低電平信號時就可以選通某位數(shù)碼管,從而實(shí)現(xiàn)數(shù)碼管的位選。</p><p><b>  語音錄放芯片電路<

15、;/b></p><p>  語音錄放芯片電路參考的是其官方手冊的電路進(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ù)官方手冊當(dāng)該引腳接不通的阻值電阻時錄放的時間是不同的。這里提供兩種選擇:一是60K的60秒錄放時間,而是80K的75秒的錄放時間。用戶可以根據(jù)自己的情況來選擇。</p><p><b>  軟件設(shè)計(jì)</b></p><p>  對于溫度傳感器的讀數(shù)利用定時器來不斷的更新讀取,報(bào)數(shù)則利用按鍵實(shí)現(xiàn)。其軟件流程圖如下(不太會用軟件畫圖,有點(diǎn)丑陋,望見諒)</p

17、><p><b>  結(jié)論和感想</b></p><p>  通過這次課程設(shè)計(jì)在此讓我意識到學(xué)生的動手能力是多么重要。雖然之間花了還是花了不少時間調(diào)試硬件,但經(jīng)過自己的努力還是把整個作品完成了。現(xiàn)在想起來今年年頭時參加校賽時那種無助的我花了四五十天都沒辦法完成作品,但現(xiàn)在的課程設(shè)計(jì)花了不到一個星期的時間就把硬件和軟件都搞好了。雖然感覺課程設(shè)計(jì)沒什么難度,但我覺得我還是有了

18、很明顯的進(jìn)步。</p><p>  同時在這次課程設(shè)計(jì)中,我又知道在一個項(xiàng)目中有很多東西要注意的以及學(xué)習(xí)到很多新的知識。比如這次學(xué)習(xí)了溫度傳感器和語音錄放芯片。還有很多細(xì)節(jié)性的東西,就比如這次課程設(shè)計(jì)中為什么會花那么多時間做硬件調(diào)試?就是因?yàn)槲业拇中拇笠鉀]有注意到細(xì)節(jié)上的問題而導(dǎo)致電路短路自己卻全然不知。通過此次的課程設(shè)計(jì)我也深深意識到,原來學(xué)到的理論知識沒有拿出來用到實(shí)際的應(yīng)用中,就永遠(yuǎn)不會知道一些知識的用法還

19、有知識在細(xì)節(jié)上的問題。在剩下的大學(xué)時光,我會花更多的時間把理論與實(shí)際操作結(jié)合到一起,來使我的知識更加充實(shí)。</p><p><b>  附加代碼</b></p><p>  一、主程序(報(bào)溫系統(tǒng).c):</p><p>  #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義<

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;//定義讀時間標(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}; //存儲顯示值的全局變量</p><p>  void Display(unsigned char FirstBit,unsigned char Num);//數(shù)碼管顯示函數(shù)</p><p>  void Init_Timer0(v

24、oid);//定時器初始化</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)//檢測溫度的正負(fù)</p><p><b>  {</b></p><p>  TempData[0]=0xBF;//負(fù)號標(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; //個位溫度,帶小數(shù)點(diǎn)</p><p>  TempData[3]=HEYAO_DuanMa[TempL];</p><p><b>  }</b></p><p>  /*************語音報(bào)實(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)//檢測溫度的正負(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>  用于動態(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)//檢測溫度的正負(fù)</p><p><b>  {</b></p><p>  TempData[0]=0xBF;//負(fù)號標(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; //個位溫度,帶小數(shù)點(diǎn)</p><p>  TempData[3]=HEYAO_DuanMa[TempL];</p><p><b>  }*/</b></p><p>  /*----------------------------------

50、--------------</p><p><b>  定時器初始化子程序</b></p><p>  ------------------------------------------------*/</p><p>  void Init_Timer0(void)</p><p><b>  {<

51、/b></p><p>  TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響 </p><p>  // TH0=0x00; //給定初值</p><p>  // TL0=0x00;</p><p>  EA=1;

52、 //總中斷打開</p><p>  ET0=1; //定時器中斷打開</p><p>  TR0=1; //定時器開關(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>  定時器中斷子程序</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個十進(jìn)制地址,即十六進(jìn)制0x08,后一段聲音越界</p><p>  //就只會播前段聲音的后面的一部分,遇到“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級延時函數(shù)</b></p><p>  //--------------------------------------------------------

67、--------</p><p>  //----------------------------------------------------------------</p><p><b>  //MS級延時函數(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);//延時10MS </p><p><b>  //SS=0;</b></p><p>  //Delay(10);</p><p>  SR0_L =SPISendData

85、(RD_STATUS);//存儲狀態(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去掉了錄音時的監(jiān)聽</p><p>  //SPISendData(0x0c); //D11=1,在SETPLAY模式下,執(zhí)行到EOM自動結(jié)束?;蛘咴谶B續(xù)兩個</p><p>  //SET_PLAY命令后,執(zhí)行到第一個EOM自動跳到第二段開始</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、);//同樣用來存儲所讀到的數(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>  *空間檢測:檢查環(huán)狀存儲體系</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);//延時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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論