課程設計--智能儀器設計_第1頁
已閱讀1頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  不要刪除行尾的分節(jié)符,此行不會被打印</p><p><b>  目錄</b></p><p><b>  第1章 緒論1</b></p><p>  1.1 課程設計題目與要求1</p><p>  第2章 總體方案設計2</p><p>  2

2、.1 工作原理2</p><p>  2.2 系統(tǒng)組成2</p><p>  2.3 波形發(fā)生2</p><p>  2.4 顯示部分2</p><p>  2.5 按鍵部分2</p><p>  第3章 硬件電路設計3</p><p>  3.1 顯示及鍵盤接口電路3</p

3、><p>  3.2 D/A轉換電路4</p><p>  3.3 復位電路5</p><p>  3.4 8路LED6</p><p>  3.5 本章小結6</p><p>  第4章 軟件設計7</p><p>  第5章 PCB板設計、安裝與調試8</p><

4、p><b>  5.18</b></p><p><b>  5.28</b></p><p><b>  5.38</b></p><p>  5.4 本章小結8</p><p>  第6章 系統(tǒng)標定、測試與精度分析9</p><p>

5、<b>  6.19</b></p><p><b>  6.29</b></p><p><b>  6.39</b></p><p>  6.4 本章小結9</p><p><b>  結論10</b></p><p>

6、;<b>  致謝11</b></p><p><b>  參考文獻12</b></p><p><b>  心得體會13</b></p><p><b>  附錄14</b></p><p>  千萬不要刪除行尾的分節(jié)符,此行不會被打印。在目錄上

7、點右鍵“更新域”,然后“更新整個目錄”。打印前,不要忘記把上面“Abstract”這一行后加一空行</p><p><b>  緒論</b></p><p><b>  課程設計題目與要求</b></p><p>  設計任務:設計制作一個波形發(fā)生器,該波形發(fā)生器能產生三角波,梯形波等由用戶編輯的特定形狀波形。</p

8、><p><b>  示意圖如下:</b></p><p><b>  圖1 設計要求圖</b></p><p><b>  設計要求:</b></p><p>  1.具有產生三角波、正弦波兩種種周期性波形的功能;</p><p>  2.頻率可調節(jié),并顯

9、示在數(shù)碼管上。</p><p>  3.LED在運行過程中按要求亮。</p><p><b>  總體方案設計</b></p><p><b>  工作原理</b></p><p>  根據(jù)題目的要求,制定了整體方案:以STC90C51單片機為控制核心,P2^0、P2^1口接pcf8591p信號輸入

10、并進行數(shù)模轉換,P3口接8路獨立按鍵,P1口接8路LED ,P0口接數(shù)碼管顯示,由程序控制P2口產生波形(分別是正弦波、方波),再由按鍵及按鍵次數(shù)控制產生波形的種類及頻率在一定范圍內可調。在LED上實時的顯示波形的頻率和種類,波形在示波器上產生。正弦波波形的發(fā)生:在產生正弦波時,每周期只取80個點,在波形盡量不失真的前提下,使其頻率達到的值盡量大,以便示波器顯示。</p><p><b>  系統(tǒng)組成&

11、lt;/b></p><p>  系統(tǒng)組成總體框圖如下:</p><p><b>  波形發(fā)生</b></p><p>  采用單片機和數(shù)模轉換pcf8591p實現(xiàn)波形的產生。通過STC90C51執(zhí)行三角正弦波程序,向D/A轉換器的輸入端按I2C總線方式發(fā)送數(shù)據(jù),從而在D/A轉換電路輸出端得到相應的電壓波形。在STC90C51的P2.4—

12、P2.7口接獨立按鍵,通過軟件編程來選擇波形、頻率,每種波形對應一個按鍵,頻率增加、減少對應一個按鍵。</p><p><b>  顯示部分</b></p><p>  8段LED共陰極數(shù)碼管,P1口進行位選,P0口輸出段選信號。</p><p><b>  按鍵部分</b></p><p>  采

13、用獨立按鍵,它相比較矩陣鍵盤,按鍵的數(shù)目比少,結構簡單,方便操作,執(zhí)行效率高。</p><p><b>  硬件電路設計</b></p><p><b>  硬件電路原理圖</b></p><p><b>  顯示及鍵盤接口電路</b></p><p>  功能:led顯示,按

14、鍵掃描。</p><p>  由LED數(shù)碼管顯示器和獨立按鍵組成。當某一按鍵按下一次時,掃描程序掃描到之后,通過P0口將信號發(fā)送到LED。掃描及顯示利用程序實現(xiàn),不斷掃描獨立按鍵,當某一按鍵按下時,隨即執(zhí)行程序段,完成相應的功能。</p><p><b>  共陰極數(shù)碼管</b></p><p><b>  6路獨立按鍵</b&

15、gt;</p><p><b>  D/A轉換電路</b></p><p>  功能:將波形樣值編碼轉換成模擬值,輸出波形。</p><p>  由一片PCF8591組成。PCF8591是具有I2C總線接口的8位A/D及D/A轉換器。有四路A/D轉換輸入,1路D/A模擬輸出,也就是既可以作D/A轉換也可以作A/D轉換。</p>&

16、lt;p>  PCF8591靠數(shù)據(jù)線SDA和時鐘線SCL和90C51聯(lián)系。單片機以I2C協(xié)議向PCF8591發(fā)送數(shù)字編碼,產生不同的輸出。先利用采樣定理對各種波形進行抽樣,然后把各種采樣值進行編碼,收到的數(shù)字量存入各個波形表,執(zhí)行程序時通過查表的方法依次取出,經過D/A轉換后輸出就可以得到波形。如N個點構成波形的一個周期,則PCF8591輸出N個樣點值后,樣值點形成運動軌跡,即一個周期。利用單片機的中斷時間控制輸出周期的速度,也就

17、是控制輸出的波形的頻率。</p><p><b>  D/A轉換電路圖</b></p><p><b>  復位電路</b></p><p>  單片機的復位電路在剛接通電時,剛開始電容是沒有電的,電容內的電阻很低,通電后,5V的電通過電阻給電容進行充電,電容兩端的電會由0V慢慢的升到4V左右(此時間很短一般小于0.3秒)

18、,RC構成的微分電路在上電瞬間產生一個微分脈沖,其寬度大于兩個機器周期,90C51復位。因此,復位腳的電由低電位升到高電位,引起了內部電路的復位工作,RST端電壓慢慢下降,降到一定電壓值以后,即為低電平,單片機開始正常工作(即上電復位,也叫初始化復位);當按下復位鍵時,電容兩端放電,電容又回到0V了,于是又進行了一次復位工作(即手動復位)。</p><p><b>  復位電路</b><

19、;/p><p><b>  8路LED</b></p><p>  發(fā)光二極管用于按鍵檢測,檢查按鍵掃描是否成功,以驗證程序的有效性。</p><p><b>  8路LED</b></p><p><b>  本章小結</b></p><p><b&

20、gt;  軟件設計</b></p><p>  主程序和子程序都存放在PCF8591單片機中。主程序的功能是:開機做鍵盤掃描及顯示工作,然后根據(jù)用戶所按的鍵轉到相應的子程序進行處理。子程序的功能有:延時子程序、中斷程序、顯示子程序、按鍵子程序,按鍵子程序中有頻率的加和減鍵、波形的轉換鍵等共4個鍵。</p><p><b>  軟硬件調試</b></p

21、><p>  在單片機編程中主要出現(xiàn)了以下問題:</p><p>  鍵盤掃描時,多次掃描的問題,最終加入循環(huán)語句,是按鍵松開時執(zhí)行,解決。</p><p>  共256個樣值點的正弦波輸出時,不能完整顯示的問題,采用每隔3個樣值點輸出一個的方案,減少樣值數(shù)量從而增大輸出頻率。</p><p>  中斷時間問題,因為定時器中斷時間過短引起的波形不

22、能正常顯示問題。最終考慮了D/A轉換時間,以及程序段的執(zhí)行時間,使一次中斷時間不小于100毫秒,得以解決。</p><p>  數(shù)碼管顯示的閃動問題,加大了對動態(tài)顯示數(shù)碼管的掃描頻率,更改了由浮點數(shù)構成的頻率計算公式,解決了計算引起的程序執(zhí)行時間過長問題。</p><p>  正弦波頻率范圍問題,通過計算子程序段執(zhí)行時間,定時器中斷時間,DA轉換時間,最終確定頻率輸出范圍10hz—800h

23、z。</p><p><b>  本章小結</b></p><p>  千萬不要刪除行尾的分節(jié)符,此行不會被打印。“結論”以前的所有正文內容都要編寫在此行之前。</p><p><b>  心得體會</b></p><p>  通過這次課程設計,我重新學習了以前的知識,學習了Altium desig

24、ner這個軟件,學習硬件電路的設計,以及PCB的繪制。實驗過程中遇到了很多問題,例如DA轉換不能正常工作,還有就是數(shù)碼管顯示的問題,由于數(shù)碼管顯示的時間太長,然后DA轉換的時候,導致DA不能正常工作,只能通過一小段延時來實現(xiàn)的數(shù)碼管的顯示,還有就是DA輸出波形時,數(shù)碼管不能顯示其輸出頻率,因為動態(tài)數(shù)碼管刷新的時間太快,以至于在 轉換過程中不能顯示其頻率,通過按鍵調整其頻率效果不是很好,通過示波器顯示的波形不能很好的反映其真實頻率。通過這

25、次課程設計進一步加深對數(shù)碼管,按鍵的使用,以及常見波形的產生。</p><p>  這次的實踐主要掌握了一些編程技巧,學會了用軟件技術解決了按鍵抖動的問題,學會了中斷定時的使用,運用動態(tài)掃描顯示節(jié)省了I/O口的使用。數(shù)碼管顯示的延時時間影響數(shù)碼管的亮度及是否產生閃爍的現(xiàn)象。</p><p><b>  附 錄</b></p><p>  #in

26、clude<reg52.h></p><p>  #include <intrins.h></p><p>  #define NOP() _nop_() </p><p>  #define _Nop() _nop_()</p><p><b>  bit ack;</b><

27、/p><p>  sbit SCL=P2^1; </p><p>  sbit SDA=P2^0;</p><p>  sbit k1=P2^2;</p><p>  sbit k2=P2^3;</p><p>  sbit k3=P2^4;</p><

28、;p>  sbit k4=P2^5;</p><p>  sbit k5=P2^6;</p><p>  sbit k6=P2^7;</p><p>  unsigned int wave=0,i=0;</p><p>  unsigned int sum=0,n=0,f=1;</p><p&

29、gt;<b>  int g=0;</b></p><p>  unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數(shù)</p><p>  unsigned char code dispbit[6]={0xfe,0xfd,0xfb,0xf7

30、,0xef,0xdf}; //位選控制 查表的方法控制</p><p>  char sanjiao;</p><p>  char code sin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,</p><p>  0xa5,0xa8,0xab,0xae,0xb1,

31、0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,</p><p>  0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,</p><p>  0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,</p><p&g

32、t;  0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,</p><p>  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,</p><p>  0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,

33、0xf2,0xf1,</p><p>  0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xdd,0xde,0xda,</p><p>  0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,</p><p>  0xba,0xb7,0xb4,0xb1,0

34、xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,</p><p>  0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,</p><p>  0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,</p><

35、;p>  0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,</p><p>  0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,</p><p>  0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0

36、x08,0x07,0x06,</p><p>  0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,</p><p>  0x06,0x07,0x08,0x

37、09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,</p><p>  0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,</p><p>  0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,</p>

38、<p>  0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,</p><p>  0x76,0x79,0x7c,0x80};</p><p>  void start_i2c()</p><p><b>  {</b></p><p>&

39、lt;b>  SDA=1;</b></p><p><b>  _Nop();</b></p><p><b>  SCL=1;</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b>

40、;</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  SDA=0;</b></p><p><

41、;b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b>

42、;</p><p><b>  SCL=0;</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  } </b></p><p>  void

43、 SendByte(unsigned char c)</p><p><b>  {</b></p><p>  unsigned char BitCnt;</p><p>  for(BitCnt=0;BitCnt<8;BitCnt++) /*要傳送的數(shù)據(jù)長度為8位*/</p><p><b> 

44、 {</b></p><p>  if((c<<BitCnt)&0x80)SDA=1; /*判斷發(fā)送位*/</p><p>  else SDA=0; </p><p><b>  _Nop();</b></p><p>  SCL=1;

45、 /*置時鐘線為高,通知被控器開始接收數(shù)據(jù)位*/</p><p><b>  _Nop(); </b></p><p>  _Nop(); /*保證時鐘高電平周期大于4μs*/</p><p><b>  _Nop();</b></p><p><b>

46、  _Nop();</b></p><p>  _Nop(); </p><p><b>  SCL=0; </b></p><p><b>  }</b></p><p><b>  _Nop();</b></p><p>

47、<b>  _Nop();</b></p><p>  SDA=1; /*8位發(fā)送完后釋放數(shù)據(jù)線,準備接收應答位*/</p><p><b>  _Nop();</b></p><p>  _Nop(); </p><p><b>  SCL=1;<

48、/b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  if(SDA==1)ack=0; </p><p>  

49、else ack=1; /*判斷是否接收到應答信號*/</p><p><b>  SCL=0;</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  }</b&

50、gt;</p><p>  void delay(unsigned int i)</p><p><b>  {char j;</b></p><p>  for(i; i > 0; i--)</p><p>  for(j = 200; j > 0; j--);</p><p>&l

51、t;b>  }</b></p><p>  void ledshow(unsigned int f,unsigned int i)</p><p>  {unsigned int LedOut[6];</p><p>  LedOut[3]=Disp_Tab[f%10000/1000];</p><p>  LedOut[2

52、]=Disp_Tab[f%1000/100];</p><p>  LedOut[1]=Disp_Tab[f%100/10];</p><p>  LedOut[0]=Disp_Tab[f%10];</p><p>  LedOut[4]=Disp_Tab[f%100000/10000];</p><p>  LedOut[5]=Disp_T

53、ab[wave%2];</p><p>  P0 = LedOut[i];</p><p>  P1 = dispbit[i]; </p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p>

54、<p>  unsigned int ge,shi,bai,qian,wan;</p><p><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p><b>  ET1=1;</b></p><p>  TMOD=0x11

55、;</p><p>  TR0=1;TR1=1;</p><p><b>  TH0=0xfc;</b></p><p><b>  TL0=0x17;</b></p><p><b>  TH0=0xfc;</b></p><p>  TL0=0x17

56、; </p><p><b>  TH1=0xff;</b></p><p><b>  Tl1=0xf5;</b></p><p>  start_i2c();</p><p>  SendByte(0x90);</p><p>  SendByte(0x40);<

57、/p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  if(k1==0)</b></p><p><b>  {</b></p><p>  delay(50);<

58、/p><p><b>  if(k1==1)</b></p><p><b>  wave++;</b></p><p><b>  }</b></p><p><b>  if(k2==0)</b></p><p>  { delay

59、(50);</p><p><b>  if(k2==1)</b></p><p><b>  { ge++;</b></p><p><b>  if(ge<=9)</b></p><p><b>  f=f+1;</b></p>&

60、lt;p>  else if((ge>9)&(ge<=18))</p><p><b>  f=f-1;</b></p><p>  else ge=0;</p><p><b>  }</b></p><p><b>  }</b></p>

61、;<p><b>  if(k3==0)</b></p><p>  { delay(50);</p><p><b>  if(k3==1)</b></p><p><b>  { shi++;</b></p><p>  if(shi<=9)</p

62、><p><b>  f=f+10;</b></p><p>  else if((shi>9)&(shi<=18))</p><p><b>  f=f-10;</b></p><p>  else shi=0;</p><p><b>  }&l

63、t;/b></p><p><b>  }</b></p><p><b>  if(k4==0)</b></p><p>  { delay(50);</p><p><b>  if(k4==1)</b></p><p><b>  

64、{ bai++;</b></p><p>  if(bai<=9)</p><p><b>  f=f+100;</b></p><p>  else if((bai>9)&(bai<=18))</p><p><b>  f=f-100;</b></p&

65、gt;<p>  else bai=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(k5==0)</b></p><p>  { delay(50);</p><p>

66、<b>  if(k5==1)</b></p><p><b>  { qian++;</b></p><p>  if(qian<=9)</p><p><b>  f=f+1000;</b></p><p>  else if((qian>9)&(qia

67、n<=18))</p><p><b>  f=f-1000;</b></p><p>  else qian=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(k6=

68、=0)</b></p><p>  { delay(50);</p><p><b>  if(k6==1)</b></p><p><b>  { wan++;</b></p><p>  if(wan<=9)</p><p>  f=f+10000;&

69、lt;/p><p>  else if((wan>9)&(wan<=18))</p><p>  f=f-10000;</p><p>  else wan=0;</p><p><b>  }</b></p><p><b>  }</b></p>

70、;<p><b>  }</b></p><p><b>  }</b></p><p>  void intime1()interrupt 1</p><p><b>  {</b></p><p><b>  TR0=0;</b><

71、/p><p>  ledshow(f,sum);</p><p><b>  sum++;</b></p><p><b>  if(sum>5)</b></p><p><b>  sum=0;</b></p><p><b>  TH0=

72、0xfc;</b></p><p>  TL0=0x17; </p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p>  void intime2()interrupt 3</p><p>  { TH1=0xf

73、f;</p><p>  TH1=0xf5; </p><p><b>  n++;</b></p><p>  if(n>=(100000/(255*f)))</p><p><b>  { n=0;</b></p><p>  if((wave%2)==0)<

74、/p><p><b>  {</b></p><p>  SendByte(sin[i]);</p><p><b>  i++;</b></p><p>  if(i==256)</p><p><b>  i=0;</b></p><

75、p><b>  }</b></p><p><b>  else</b></p><p><b>  {if(g==0)</b></p><p>  {SendByte(sanjiao);</p><p>  sanjiao=sanjiao+2;</p>&

76、lt;p>  if(sanjiao>=256)</p><p><b>  g=1;</b></p><p><b>  }</b></p><p><b>  if(g==1)</b></p><p>  {sanjiao=sanjiao-2;</p>

77、<p>  SendByte(sanjiao);</p><p>  if(sanjiao==0)</p><p><b>  g=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論