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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  單片機課程設計報告</b></p><p><b>  題目:數(shù)字溫度計</b></p><p>  摘要:本數(shù)字溫度計是以STC89C52單片機為主控器,溫度傳感器DS18b20以及語音芯片ISD1760為輔,來實現(xiàn)數(shù)字溫度顯示以及報數(shù)的功能。溫度傳感器DS18b20是12位高分辨率,精度可達0.5攝氏度的傳感器,

2、它能夠全數(shù)字溫度轉換及輸出。輸出的溫度則在數(shù)碼管LED上顯示。而語音芯片ISD1760可以用SPI的通訊方式與單片機進行通訊,這樣實現(xiàn)定點錄音以及定點播放。把所需的聲音錄進,當需要讀溫度則可將所錄音按溫度值組合在一起,從而實現(xiàn)語音報數(shù)。</p><p>  關鍵詞:STC89C52 溫度傳感器DS18b20 語音芯片1760 語音報數(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)設計………………………………………………………3</p><p>  2.1 總體設計………………………………………………3</p><p>  2.

7、2 單元電路設計…………………………………………4</p><p>  2.2.1 MCU電路設計…………………………………4</p><p>  2.2.2 LED顯示電路…………………………………4</p><p>  2.2.3 語音錄放芯片電路……………………………5</p><p>  3 軟件設計………………………………

8、………………………6</p><p>  4 結論與感想……………………………………………………7</p><p>  5 附加代碼………………………………………………………8</p><p><b>  方案論證</b></p><p><b>  溫度傳感器選擇方案</b></p>

9、;<p>  本系統(tǒng)只需把溫度轉化為數(shù)字信號然后顯示在LED上即可,因此選擇溫度傳感器DS18b20。它的測溫范圍是-55攝氏度~+125攝氏度,固有測溫分辨率0.5攝氏度,滿足了題目的要求。而且它工作電壓小,僅有三個引出引腳:VCC,GND以及數(shù)字信號輸入輸出引腳。</p><p><b>  語音芯片方案論證</b></p><p>  按照題目所需

10、,要實現(xiàn)隨機溫度報數(shù)的功能,因而不用選擇具有語音處理功能的語音芯片,而選擇可以定點錄音和定點播放的芯片。在這里選擇ISD1760。ISD1760語音錄放芯片是Winbond推出的單片優(yōu)質語音錄放芯片,可以錄放音達十萬次,其中錄音可以通過在線錄音以及MIC錄音。主控單片機可以通過四線(SCLK,MOSI,MISO,SS)SPI協(xié)議對ISD1760進行串行通信。這樣可以通過MCU來控制ISD1760的定點錄音和定點播放。</p>

11、<p><b>  MCU方案論證</b></p><p>  方案一、用STM8系列的單片機,資源豐富,包括集成的SPI等外設以及豐富的IO口,而且主控晶振頻率高。但容易造成資源浪費現(xiàn)象。</p><p>  方案二、用51單片機來作為主控芯片,僅需提供一個引腳來采集溫度傳感器的數(shù)據(jù),還可用IO引腳來模擬SPI引腳與ISD1760進行通訊,還有足夠的I

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

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

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

15、;/b></p><p>  語音錄放芯片電路參考的是其官方手冊的電路進行些許修改得到。其中引腳4~5可以通過MCU控制語音錄放芯片的錄音,播放等功能。另外22~27引腳以及19~20可以直接用按鍵來實現(xiàn)芯片的各種功能。AL—in引腳可以支持線錄,MIC利用咪頭錄音。這里就用MIC的方式進行錄音,然后利用SP-和SP+所接的喇叭(最好選擇1~8歐,1~4瓦)放音。另外,ROSC引腳是語音錄放芯片的晶振電阻引

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

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

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

19、有知識在細節(jié)上的問題。在剩下的大學時光,我會花更多的時間把理論與實際操作結合到一起,來使我的知識更加充實。</p><p><b>  附加代碼</b></p><p>  一、主程序(報溫系統(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;//定義讀時間標志</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)//檢測溫度的正負</p><p><b>  {</b></p><p>  TempData[0]=0xBF;//負號標志</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ù)點</p><p>  TempData[3]=HEYAO_DuanMa[TempL];</p><p><b>  }</b></p><p>  /*************語音報實時溫度******

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)//檢測溫度的正負</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)//檢測溫度的正負</p><p><b>  {</b></p><p>  TempData[0]=0xBF;//負號標志</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ù)點</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; //定時器開關打開</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ā)</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); // 調用數(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; //讀標志位置1</p><p><b>  }</b></p><p><b>  }</b></p><p>  二、語音

58、錄放芯片源程序(ISD1760.c):</p><p>  /*使用獨立按鍵錄音,根據(jù)所錄秒數(shù)得到地址,使用放音函數(shù)進行放音*/ </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個十進制地址,即十六進制0x08,后一段聲音越界</p><p>  //就只會播前段聲音的后面的一部分,遇到“EOM”停止,所根據(jù)錄得</p><p>  //秒上述乘以8,轉化成十六進制數(shù),得到大概地址,后面進行微調</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,點</p><p>  0x0010+0x60,0x0010+0x68,0x0010+0x68,0x0010+0x70, //百,負</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>  *初始化:包括了復位、上電、讀狀態(tài)、清除中斷、設置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; //拉低準備</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>  *設置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自動結束?;蛘咴谶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>  *復位函數(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>  *停止當前操作 </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,應該相當于片選什么的??</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>  *取當前語音的首末地址</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>  *定點播放 </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結束地址 </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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論