單片機(jī)課程設(shè)計(jì)報(bào)告(信號(hào)發(fā)生器)_第1頁(yè)
已閱讀1頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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>  系 部: 電子通信工程系 </p><p>  專 業(yè): 電子信息工程 </p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  前言: </b></p

2、><p>  本文以8051f410單片機(jī)為核心設(shè)計(jì)了一個(gè)低頻函數(shù)信號(hào)發(fā)生器。信號(hào)發(fā)生器采用數(shù)字波形合成技術(shù),通過(guò)硬件電路和軟件程序相結(jié)合,可輸出自定義波形,如正弦波、方波、鋸齒、三角波、及其他任意波形,波形的頻率和幅度在一定范圍內(nèi)可任意改變。波形和頻率的改變通過(guò)軟件控制,幅度的改變通過(guò)硬件實(shí)現(xiàn)。介紹了波形的生成原理、硬件電路和軟件部分的設(shè)計(jì)原理。本系統(tǒng)可以產(chǎn)生最高頻率99999HZ的波形。該信號(hào)發(fā)生器具有體積小、價(jià)

3、格低、性能穩(wěn)定、功能齊全的優(yōu)點(diǎn)。</p><p><b>  設(shè)計(jì)報(bào)告:</b></p><p><b>  一、工作原理</b></p><p>  數(shù)字信號(hào)可以通過(guò)數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號(hào),因此可通過(guò)產(chǎn)生數(shù)字信號(hào)再轉(zhuǎn)換成模擬信號(hào)的方法來(lái)獲得所需要的波形。8051f410單片機(jī)本身就是一個(gè)完整的微型計(jì)算機(jī),具有組成微型

4、計(jì)算機(jī)的各部分部件:中央處理器CPU、隨機(jī)存取存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、I/O接口電路、定時(shí)器/計(jì)數(shù)器以及串行通訊接口等,只要將8051f410再配置鍵盤(pán)及、及波形輸出、放大電路等部分,即可構(gòu)成所需的波形發(fā)生器。經(jīng)過(guò)考慮,我們確定方案如下:利用F410單片機(jī)采用程序設(shè)計(jì)方法產(chǎn)生鋸齒波、三角波、正弦波、方波四種波形,再通過(guò)D/A轉(zhuǎn)換器將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),濾波放大,最終由示波器顯示出來(lái),通過(guò)鍵盤(pán)來(lái)控制四種波形的類型選擇、頻率變化

5、,最終輸出顯示其各自的類型以及數(shù)值。</p><p><b>  1.1、設(shè)計(jì)要求</b></p><p>  1)、利用單片機(jī)采用軟件設(shè)計(jì)方法產(chǎn)生四種波形</p><p>  2)、四種波形可通過(guò)鍵盤(pán)選擇</p><p><b>  3)、波形頻率可調(diào)</b></p><p&g

6、t;  4)、需顯示波形的種類及其頻率</p><p><b>  二、主程序思路</b></p><p>  主程序先是進(jìn)行一些初始化的工作,然后根據(jù)波形標(biāo)志代碼的值,使其形成多個(gè)數(shù)組,每個(gè)數(shù)組都是一個(gè)波形代碼。這樣寫(xiě)的好處是輸出的波形頻率也可以有定時(shí)常數(shù)決定,找到定時(shí)常數(shù)和輸出頻率的關(guān)系。在按鍵設(shè)置波形轉(zhuǎn)換狀態(tài)的循環(huán)中,波形的轉(zhuǎn)換狀態(tài)在按鍵上可以一一看出,把四種波

7、形設(shè)置成0、1、2、3、在數(shù)碼管的最高位設(shè)置成循環(huán)顯示,然后把每個(gè)波形的代碼值通過(guò)單片機(jī)自帶的AD轉(zhuǎn)換賦給輸出的數(shù)據(jù)口,確定每個(gè)數(shù)組然后確定數(shù)組的列是否為數(shù)組中最后行的一個(gè)元素,若是則運(yùn)行下一行的元素(另一個(gè)波形),并通過(guò)端口輸出P0.0。同時(shí)還要有按鍵控制頻率,因?yàn)檎业捷敵鲱l率和定時(shí)常數(shù)的關(guān)系,所以頻率的調(diào)節(jié),可以有一個(gè)按鍵控制頻率的個(gè)位、十位、百位、千位,再通過(guò)另一按鍵分別可以在頻率的個(gè)位、十位、百位、千位進(jìn)行加一功能,則實(shí)現(xiàn)了頻率

8、的要求調(diào)節(jié),然后再把頻率通過(guò)數(shù)碼管的低四位一一顯示出來(lái),即構(gòu)成四位的頻率。</p><p><b>  主程序流程圖</b></p><p><b>  三、軟件流程程序:</b></p><p>  本程序中兩個(gè)外部中斷分別起到了控制波形和頻率的作用。在程序中還加入了消抖部分。</p><p>&

9、lt;b>  軟件流程圖</b></p><p><b>  電路板圖:</b></p><p><b>  程序六</b></p><p>  #include <C8051F410.h></p><p>  sbit CH452_SCL = P1^3;</p&

10、gt;<p>  sbit CH452_SDA = P1^4; </p><p>  sbit CH452_KEY = P1^5; </p><p>  unsigned char second0,second1,minute0,minute1,f,j;//四個(gè)參數(shù)</p><p>  unsigned char tc,sta=0

11、x08,stb=0x01;//軟件延時(shí)單元,狀態(tài)標(biāo)志 </p><p>  code unsigned char ds=0x14; //軟件延時(shí)系數(shù)__20</p><p>  bit flag1=0;</p><p>  unsigned char k,dispbuff[] = {0,0,0,0,0,0,0,0}; //顯示緩沖,初始顯示全0<

12、;/p><p>  unsigned int CMD,DAT,DAT1;</p><p>  unsigned char buffer[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};</p><p>  code unsigned char font[32] = {0xFC,0

13、x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0, //01234567</p><p>  0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E, //89ABCDEF</p><p>  0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1, //0.1.2.3.4.5.6.7.</p><p&g

14、t;  0xFF,0xF7,0x00,0x62,0x02,0x12,0x7C,0x1C};//8.9.滅 + — = U L</p><p>  code unsigned char key[16] = {0xC6,0xB6,0x86,0xD6,0x96,0xA6,0xF6,0xE6,</p><p>  0xC4,0xB4,0x84,0xD4,0x94,0xA4,0xF4,0xE4}

15、;//鍵盤(pán)位置碼 </p><p>  code unsigned int table1[4][32]={</p><p>  4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

16、, 0, 0, 0, 0,</p><p>  0, 256,512,768,1024,1280,1536,1792,2048,2304,2560,2816,3072,3328,3584,3840,4095,3840,3584,3328,3072,2816,2560,2304,2048,1792,1536,1280,1024,768,512,256,</p><p>  2048

17、,2447,2831,3185,3496,3750,3940,4056,4095,4057,3941,3752,3498,3188,2834,2451,2051,1652,1268,913, 603, 348, 158, 40, 0, 38, 154, 342, 596,905,1259,1642,</p><p>  0, 132, 264,396, 528,660, 792,924, 10

18、56,1188,1320,1452,1584,1716,1848,1980,2112,2244,2376,2508,2640,2772,2904,3036,3168,3300,3432,3564,3696,3828,3960,4092};//二維數(shù)組(方波,鋸齒波,正弦波 ,三角波) </p><p>  /* mS延時(shí) */</p><p>  void dela

19、yms(unsigned int i)</p><p>  {unsigned intj;</p><p>  do{for(j=0;j!=1000;j++)</p><p><b>  {;}</b></p><p>  }while(--i);</p><p><b>  }&

20、lt;/b></p><p>  /////////////////////////////////////////////////////////////////////////////////////</p><p>  /* uS延時(shí) */</p><p>  void delayus(void)</p><p>  { un

21、signed int k;</p><p>  for (k=0;k<8;k++)</p><p><b>  {;}</b></p><p><b>  } </b></p><p>  unsigned char rdch452(void)</p><p><

22、;b>  {</b></p><p>  unsigned char j,key;</p><p>  CH452_SDA = 0;</p><p>  delayus();</p><p>  CH452_SCL = 0;</p><p>  delayus();</p><p&

23、gt;  CH452_SCL = 1;</p><p>  delayus();</p><p>  CH452_SCL = 0;</p><p>  key = 0x9F;</p><p>  for (j=0;j<8;j++)</p><p><b>  {</b></p>

24、<p>  if(key>=0x80 ) </p><p>  CH452_SDA = 1;</p><p><b>  else</b></p><p>  CH452_SDA = 0;</p><p>  CH452_SCL = 1;</p><p>  delayus(

25、);</p><p>  CH452_SCL = 0;</p><p>  key = key << 1 ;</p><p><b>  };</b></p><p>  delayus();</p><p><b>  key = 0;</b></p>

26、;<p>  for (j=0;j<8;j++)</p><p><b>  { </b></p><p>  CH452_SCL = 1;</p><p>  if (CH452_SDA == 1)</p><p><b>  key ++;</b></p>&l

27、t;p>  key = key << 1;</p><p>  CH452_SCL = 0;</p><p>  delayus();</p><p><b>  }</b></p><p>  CH452_SDA = 1;</p><p>  delayus();</p&

28、gt;<p>  CH452_SCL = 1;</p><p>  return key;</p><p><b>  }</b></p><p>  //////////////////////////////////////////////////////////////////////////////////////////

29、///////////</p><p>  /* 命令、數(shù)據(jù)送CH452 */</p><p>  void toch452(unsigned int cmda) </p><p><b>  {</b></p><p>  unsigned char j;</p><p>  CH452_SD

30、A = 0;</p><p>  delayus();</p><p>  CH452_SCL = 0;</p><p>  delayus();</p><p>  CH452_SCL = 1;</p><p>  delayus();</p><p>  CH452_SCL = 0;<

31、/p><p>  for (j=0;j<16;j++)</p><p><b>  {</b></p><p>  if(cmda>=0x8000 ) </p><p>  CH452_SDA = 1;</p><p><b>  else</b></p&g

32、t;<p>  CH452_SDA = 0;</p><p>  CH452_SCL = 1;</p><p>  delayus();</p><p>  CH452_SCL = 0;</p><p>  cmda = cmda << 1 ;</p><p><b>  };<

33、;/b></p><p>  CH452_SDA = 1;</p><p>  delayus();</p><p>  CH452_SCL = 1;</p><p><b>  }</b></p><p>  ////////////////////////////////////////

34、/////////////////////////////////////////////</p><p><b>  /* 讀鍵盤(pán) */</b></p><p>  ////////////////////////////////////////////////////////////////////////////////////</p><p

35、>  void display(void)</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  DAT1 = 0xA100;//8個(gè)數(shù)碼管逐一送顯示</p><p>  for (i=0;i<8;i++)</p><p&g

36、t;<b>  {</b></p><p>  DAT = DAT1 + font[dispbuff [i]];</p><p>  toch452(DAT);</p><p>  DAT1 = DAT1 + 0x0400;</p><p><b>  }</b></p><p&

37、gt;<b>  }</b></p><p>  void sx (void)//送顯示函數(shù)</p><p><b>  {</b></p><p>  dispbuff[0]=second0;//頻率個(gè)位</p><p>  dispbuff[1]=second1;//頻

38、率十位</p><p>  dispbuff[2]=minute0;//頻率 百位 //"-"</p><p>  dispbuff[3]=minute1;//頻率千位</p><p>  dispbuff[4]=29; //等號(hào)</p><p>  dispbuff[5]=15;

39、 //"f"</p><p>  dispbuff[6]=26;//不顯示</p><p>  dispbuff[7]=j%10;//轉(zhuǎn)換波形狀態(tài)</p><p><b>  }</b></p><p>  unsigned int key1(void)</p>&

40、lt;p><b>  {</b></p><p>  unsigned char i,keycode,keyn;</p><p>  if (CH452_KEY == 0 ) //查詢鍵盤(pán)</p><p><b>  {</b></p><p>  keycode = rdch452

41、(); //將鍵值賦給變量keycode</p><p><b>  keyn = 0;</b></p><p>  for (i=0;i<16;i++) //鍵譯碼</p><p><b>  {</b></p><p>  if (key[i] == keycode)</p>

42、<p>  keyn = i ;</p><p><b>  }</b></p><p>  switch (keyn)</p><p><b>  {</b></p><p>  case 0://轉(zhuǎn)換波形,有二維數(shù)組4行,32列,</p><p><

43、;b>  {</b></p><p>  for(i=0;i<32;i++)</p><p><b>  {</b></p><p>  buffer[i]=table1[j][i];//把數(shù)組中的單行數(shù)組,一次送到數(shù)組buffer中</p><p><b>  }</b>&

44、lt;/p><p><b>  j=j+1;//行</b></p><p>  if(j==4) j=0;</p><p><b>  }break;</b></p><p>  case 1://轉(zhuǎn)換狀態(tài) </p><p><b>  {</b>&l

45、t;/p><p>  sta=sta+sta;</p><p>  if(sta==0x10) sta=0x01;</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 2://校頻率位</p>

46、<p><b>  {</b></p><p>  switch (sta)</p><p><b>  {</b></p><p>  case 0x01://校頻率個(gè)位</p><p><b>  {</b></p><p>  se

47、cond0++;</p><p>  if(second0==10) </p><p><b>  {</b></p><p>  //second1++;</p><p>  second0=1;</p><p><b>  }</b></p><p&g

48、t;<b>  }</b></p><p><b>  break;</b></p><p>  case 0x02://校十位</p><p><b>  {</b></p><p>  second1++;</p><p>  if(second

49、1==10) </p><p><b>  {</b></p><p>  second1=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b><

50、;/p><p>  case 0x04://校百位</p><p><b>  {</b></p><p>  minute0++;</p><p>  if(minute0==10)</p><p><b>  {</b></p><p>  min

51、ute0=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x08: //千位</p><p><b>  {

52、</b></p><p>  minute1++;</p><p>  if(minute1==10)</p><p><b>  {</b></p><p>  minute1=0;</p><p><b>  }</b></p><p>

53、;<b>  }</b></p><p><b>  }</b></p><p><b>  };</b></p><p>  f=second0+second1*10+minute0*100+minute1*1000;</p><p><b>  }</b&g

54、t;</p><p>  sx();//送顯</p><p>  display();//顯示</p><p><b>  }</b></p><p>  return(f);</p><p><b>  }</b></p><p> 

55、 void Init_Device(void)</p><p><b>  {</b></p><p>  PCA0MD &= ~0x40; //PCA_Init()禁止看門(mén)狗</p><p>  PCA0MD = 0x00; </p><p>  IDA0CN = 0xF5;

56、 //DAC_Init()</p><p>  P1MDOUT = 0x00;</p><p>  P0MDIN = 0xFE; //Port_IO_Init()</p><p>  P0SKIP = 0x01;</p><p>  IDA0CN = 0xF2;//使能IDA0轉(zhuǎn)換器</p><

57、p>  REF0CN = 0x08;//選擇電源電壓為IDA0的參考電壓</p><p>  P0MDIN = 0xFE;//使能交叉開(kāi)關(guān)</p><p><b>  }</b></p><p>  void main(void)</p><p><b>  {</b></p

58、><p>  unsigned char i;</p><p>  Init_Device();</p><p>  XBR1 = 0x40;</p><p>  PCA0MD = 0x00;</p><p>  OSCICN = 0x86;//選擇系統(tǒng)時(shí)鐘位24.5MHZ</p>&l

59、t;p>  TMOD=0x10;//定時(shí)器1初始化</p><p>  TH1=65536-1000000/(384*f); //輸出頻率和定時(shí)常數(shù)</p><p>  TL1=65536-1000000%(384*f); </p><p><b>  EA=1;</b>&l

60、t;/p><p>  ET0=1; //開(kāi)放定時(shí)器1中斷</p><p>  tc=ds;//軟件延時(shí)初值</p><p><b>  TR0=1;</b></p><p>  delayms(100);</p><p> 

61、 CMD = 0x9103;//設(shè)置CH452系統(tǒng)參數(shù) 1001 0001 0000 0011--> 0100 0000 0011 ---> 403 (低電平按鍵中斷,1HZ閃爍,共陰管,開(kāi)鍵盤(pán),開(kāi)顯示)</p><p>  // ===> 413 (低電平按鍵中斷,2HZ閃爍,共陰管,開(kāi)鍵盤(pán),開(kāi)顯示)</p><p>

62、  toch452(CMD);</p><p>  CMD = 0x9500; //設(shè)置CH452顯示參數(shù) 1001 0101 0100 0000--> 0101 0100 0000 ---> 540 (不譯碼,四位數(shù)碼管掃描)</p><p>  // ===> 500 (不譯碼,8位數(shù)碼管掃描)</p>

63、<p>  toch452(CMD);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  key1(); //鍵處理</p><p>  if(flag1==1)//有標(biāo)志位<

64、;/p><p><b>  {</b></p><p><b>  flag1=0;</b></p><p>  IDA0H=buffer[i]; //輸出波形</p><p>  if(i<32)i++;</p><p><b>  e

65、lse i=0;</b></p><p><b>  }</b></p><p>  sx();//送顯</p><p>  display();</p><p><b>  }</b></p><p><b>  }</b>

66、</p><p>  void timer0(void) interrupt 1//定時(shí)器1中斷服務(wù)函數(shù)</p><p><b>  {</b></p><p><b>  flag1=1;</b></p><p>  TH1=65536-1000000/(384*f);</p>

67、<p>  TL1=65536-1000000%(384*f); </p><p><b>  }</b></p><p><b>  七、心得體會(huì)</b></p><p>  通過(guò)這次畢業(yè)設(shè)計(jì),使我深刻地認(rèn)識(shí)到學(xué)好專業(yè)知識(shí)的重要性,也理解了理論聯(lián)系實(shí)際的含義,并且檢驗(yàn)了大學(xué)三年的學(xué)習(xí)成果,進(jìn)一步加深了我對(duì)專

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論