課程設計---簡易電子琴設計與制作_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計實訓報告</b></p><p>  設計題目:簡易電子琴設計與制作</p><p><b>  目 錄</b></p><p>  1.實訓課題…………………………………3</p><p>  2.設計目的…………………………………3</p>&

2、lt;p>  3.設計原理…………………………………3</p><p>  4.硬件電路…………………………………4</p><p>  5.軟件流程…………………………………8</p><p>  6.Proteus 仿真……………………………14</p><p>  7.C 語言源程序…………………………18</p>

3、<p>  8.元件清單…………………………………25</p><p>  9.心得體會…………………………………26</p><p><b>  一.設計的課題:</b></p><p>  簡易電子琴的設計與制作</p><p>  二.課程設計的目的:</p><p>  培養(yǎng)和鍛

4、煉在校學生綜合應用所學理論知識解決實際問題能力。為了鞏固和運用所學課程,理論聯(lián)系實際,提高分析、解決實際問題以及團隊的合作能力,旨培養(yǎng)在培養(yǎng)大學生理論聯(lián)系實際、敢于動手、善于動手和獨立自主解決設計實踐中遇到的各種問題能力的一種較好方法。</p><p>  電子琴能夠彈奏出美妙的音符,對我們充滿了吸引同時也讓我們充滿了好奇,通過此次的課程設計讓我們親手來揭開電子琴神秘的面紗。讓我們知道我們也是有能力來制作出一個簡

5、易的電子琴的。</p><p><b>  三、課程設計原理:</b></p><p>  電子琴是由4*4個組成16個按鈕矩陣,設計成16個音。然后利用三極管放大的原理使聲音變大,可通過16個按鈕組成16種不同的音節(jié)。本文的主要內容是用AT89S51單片機為核心控制元件,設計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設有1

6、6個按鍵和揚聲器。</p><p>  聲音的產生方法:一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。</p><p><b>  四、硬件電路&l

7、t;/b></p><p> ?。ㄒ唬?、系統(tǒng)板硬件連線 </p><p>  系統(tǒng)板硬件連線如圖1-1所示,發(fā)生模塊,鍵盤模塊,及電源模塊連接如下:1.把“單片機系統(tǒng)”區(qū)域中的P2.0端口用導線連接到“音頻放大模塊”區(qū)域中的SPK IN端口上;2.把“單片機系統(tǒng)”區(qū)域中的P1.0-P1.7端口用8芯排線連接到“4X4行列式鍵盤”區(qū)域中的C1-C4 R1-R4端口上;3.把電源電

8、路與揚聲器連接,直接對揚聲器供電。</p><p> ?。ǘ⒅饕酒喗?、AT89S51簡介</p><p>  AT89S51是一個低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統(tǒng)及8

9、0C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S51可為許多嵌入式控制應用系統(tǒng)提供高性價比的解決方案。    AT89S51具有如下特點:40個引腳(如圖1-2所示),4k Bytes Flash片內程序存儲器,128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編

10、程定時計數(shù)器,2個全雙工串行通信口,看門狗(WDT)電路,片內時鐘振蕩器。 </p><p>  此外,AT89S51設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式??臻e模式下,CPU暫停工作,而RAM定時計數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復位。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以

11、適應不同產品的需求。</p><p><b>  主要功能特性</b></p><p>  ·兼容MCS-51指令系統(tǒng)      </p><p>  · 32個雙向I/O口</p><p>  · 2個16位可編程定時/計數(shù)

12、 器  </p><p>  · 全雙工UART串行中斷口線</p><p>  · 2個外部中斷源      </p><p>  · 中斷喚醒省電模式</p><p>  圖1-2 引腳圖 </p>&l

13、t;p>  · 看門狗(WDT)電路   </p><p>  · 靈活的ISP字節(jié)和分頁編程</p><p>  · 4k可反復擦寫ISP Flash ROM</p><p>  · 4.5-5.5V工作電壓 </p><p>  · 時鐘頻率0-33MHz

14、60;</p><p>  · 128*8bit內部RAM</p><p>  · 低功耗空閑和省電模式  </p><p><b>  · 3級加密位</b></p><p>  · 軟件設置空閑和省電功能 </p><p>

15、  · 雙數(shù)據(jù)寄存器指針</p><p>  2、7805簡介:   </p><p>  電子產品中,常見的三端穩(wěn)壓集成電路有正電壓輸出的78 ×× 系列和負電壓輸出的79××系列。顧名思義,三端IC是指這種穩(wěn)壓用的集成電路,只有三條引腳輸出,分別是輸入端、接地端和輸出端。它的樣子象是普通的三極管,TO- 220 的標準封裝,也有9013

16、樣子的TO-92封裝。 </p><p>  用78/79系列三端穩(wěn)壓IC來組成穩(wěn)壓電源所需的外圍元件極少,電路內部還有過流、過熱及調整管的保護電路,使用起來可靠、方便,而且價格便宜。該系列集成穩(wěn)壓IC型號中的78或79后面的數(shù)字代表該三端集成穩(wěn)壓電路的輸出電壓,如7806表示輸出電壓為正6V,7909表示輸出電壓為負9V。 </p><p>  因為三端固定集成穩(wěn)壓電路的使用方便,電子制

17、作中經(jīng)常采用。</p><p><b>  五、軟件流程</b></p><p> ?。ㄒ唬?X4行列式鍵盤識別及顯示</p><p>  組成鍵盤的按鍵有機械式、電容式、導電橡膠式、薄膜式多種,但不管什么形式,其作用都是一個使電路接通與斷開的開關。目前微機系統(tǒng)中使用的鍵盤按其功能不同,通??煞譃榫幋a鍵盤和非編碼鍵盤兩種基本類型。 編

18、碼鍵盤:鍵盤本身帶有實現(xiàn)接口主要功能所需的硬件電路。不僅能自動檢測被按下的鍵,并完成去抖動、防串鍵等功能,而且能提供與被按鍵功能對應的鍵碼(如ASCII碼)送往CPU。所以,編碼鍵盤接口簡單、使用方便。但由于硬件電路較復雜,因而價格較貴。 非編碼鍵盤:鍵盤只簡單地提供按鍵開關的行列矩陣。有關按鍵的識別、鍵碼的確定與輸入、去抖動等功能均由軟件完成。目前微機系統(tǒng)中,一般為了降低成本大多數(shù)采用非編碼鍵盤。 鍵盤接口必須具有去抖

19、動、防串鍵、按鍵識別和鍵碼產生4個基本功能: (1)去抖動:每個按鍵在按下或松開時,都會產生短時間的抖動。抖動的持續(xù)時間與鍵的質量相關,一般為5—20mm。所謂抖動是指在識別被按鍵是必須避開抖動狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開狀態(tài)才能保證識別正確無誤。去抖問</p><p>  題可通過軟件延時或硬件電路解決。 (2)防串鍵:防串鍵是為了解決多個鍵同時按下或者前一按鍵沒有釋放又有新的按鍵按下時產生

20、的問題。常用的方法有雙鍵鎖定和N鍵輪回兩種方法。雙鍵鎖定,是當有兩個或兩個以上的按鍵按下時,只把最后釋放的鍵當作有效鍵并產生相應的鍵碼。N鍵輪回,是當檢測到有多個鍵被按下時,能根據(jù)發(fā)現(xiàn)它們的順序依次產生相應鍵的鍵碼。 (3)被按鍵識別:如何識別被按鍵是接口解決的主要問題,一般可通過軟硬結合的方法完成。常用的方法有行掃描法和線反轉法兩種。行掃描法的基本思想是,由程序對鍵盤逐行掃描,通過檢測到的列輸出狀態(tài)來確定閉合鍵,為此,需要設置

21、入口、輸出口一個,該方法在微機系統(tǒng)中被廣泛使用。線反轉法的基本思想是通過行列顛倒兩次掃描來識別閉合鍵,為此需要提供兩個可編程的雙向輸入/輸出端口。 (4)鍵碼產生:為了從鍵的行列坐標編碼得到反映鍵功能的鍵碼,一般在內存區(qū)中建立一個鍵盤編碼表,通過查表獲得被按鍵的鍵碼。</p><p>  用AT89S51的并行口P1接4×4矩陣鍵盤,以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線。&

22、lt;/p><p> ?。ǘ?、系統(tǒng)板上硬件連線設計</p><p>  1、把“單片機系統(tǒng)”區(qū)域中的P1.0-P1.7端口用8芯排線連接到“4X4行列式鍵盤”區(qū)域中的C1-C4 R1-R4端口上;2、把揚聲器的基極輸出接單片機的P2.0端口;</p><p>  3、在單片機31腳和9腳接復位電路;</p><p>  4、在單片機19腳和1

23、8腳接12MHZ的晶體振蕩電路。</p><p> ?。ㄈ?、程序設計內容</p><p>  1、4×4矩陣鍵盤識別處理,每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。</p>

24、<p>  2、鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。電路圖如下</p><p> ?。ㄋ模⒁魳樊a生的方法</p><p>  一首音樂是許多不同的音階組成的,

25、而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來產生這</p><p>  樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系正確即可。</p><p>  若要產生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時間。利用定時器計時

26、半周期時間,每當計時終止后就將P1.0反相,然后重復計時再反相。就可在P1.0引腳上得到此頻率的脈沖。</p><p>  利用AT89S51的內部定時器使其工作計數(shù)器模式(MODE1)下,改變計數(shù)值TH0及TL0以產生不同頻率的方法產生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數(shù)器計時956μs/1μs=956,每計數(shù)956次時將I/O反相,就可得到中音DO(523Hz)

27、。</p><p>  計數(shù)脈沖值與頻率的關系式(如式2-1所示)是:</p><p>  N=fi÷2÷fr                      

28、;   2-1</p><p>  式中,N是計數(shù)值;fi是機器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產生的頻率。</p><p>  其計數(shù)初值T的求法如下:</p><p>  T=65536-N=65536-fi÷2÷fr</p><p>  T=65536-N=65536

29、-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr</p><p>  低音DO的T=65536-500000/262=63627</p><p>  中音DO的T=65536-500000/523=64580</p><p>  高音DO的T=65536-500000/1046=65059

30、</p><p>  單片機12MHZ晶振,高中低音符與計數(shù)T0相關的計數(shù)值如表2-2所示</p><p>  表2-2 音符頻率表</p><p>  Table 2-2 notes the frequency table</p><p>  我們要為這個音符建立一個表格,單片機通過查表的方式來獲得相應的數(shù)據(jù)  

31、60; 低音0-19之間,中音在20-39之間,高音在40-59之間TABLE: DW 0, 63628, 63835, 64021, 64103, 64260, 64400, 64524, 0, 0</p><p>  DW 0, 63731, 63928, 0, 64185, 64331, 64463, 0, 0, 0</p><p>  DW 0, 64580, 64684, 64

32、777, 64820, 64898, 64968, 65030, 0, 0</p><p>  DW 0, 64633, 64732, 0, 64860, 64934, 64994, 0, 0, 0</p><p>  DW 0, 65058, 65110,65157, 65178, 65217, 65252, 65283, 0, 0</p><p>  DW 0,

33、 65085, 65134, 0, 65198, 65235, 65268, 0, 0, 0</p><p><b>  DW 0    </b></p><p>  音樂的音拍,一個節(jié)拍為單位(C調)(如表2-3所示)</p><p><b>  表2-3 曲調值表</b><

34、/p><p>  Table 2-3 Tune the value of the table</p><p>  對于不同的曲調我們也可以用單片機的另外一個定時/計數(shù)器來完成。琴鍵處理程序,根據(jù)檢測到得按鍵值,查詢音律表,給計時器賦值,發(fā)出相應頻率的聲音。對音調的控制:根據(jù)不同的按鍵,對定時器T1送入不同的初值,調節(jié)T1的溢出時間,這樣就可以輸出不同音調頻率的方波。不同音調下各個音階的定時器。

35、</p><p>  在這個程序中用到了兩個定時/計數(shù)器來完成的。其中T0用來產生音符頻率,T1用來產生音拍。</p><p>  六、proteus仿真</p><p><b>  七、程序</b></p><p>  #include<reg51.h> //包含51單片機寄存器定義的頭文件</p

36、><p>  sbit P14=P1^4; //將P14位定義為P1.4引腳</p><p>  sbit P15=P1^5; //將P15位定義為P1.5引腳</p><p>  sbit P16=P1^6; //將P16位定義為P1.6引腳</p><p>  sbit P17=P1^7; //將P17

37、位定義為P1.7引腳</p><p>  unsigned char keyval; //定義變量儲存按鍵值</p><p>  sbit sound=P2^0; //將sound位定義為P3.7</p><p>  unsigned int C; //全局變量,儲存定時器的定時常數(shù)</p><p>  unsigned

38、int f; //全局變量,儲存音階的頻率</p><p>  //以下是C調低音的音頻宏定義</p><p>  #define l_dao 262 //將“l(fā)_dao”宏定義為低音“1”的頻率262Hz</p><p>  #define l_re 286 //將“l(fā)_re”宏定義為低音“2”的頻率286Hz</p><p&

39、gt;  #define l_mi 311 //將“l(fā)_mi”宏定義為低音“3”的頻率311Hz</p><p>  #define l_fa 349 //將“l(fā)_fa”宏定義為低音“4”的頻率349Hz</p><p>  #define l_sao 392 //將“l(fā)_sao”宏定義為低音“5”的頻率392Hz</p><p>  #define

40、 l_la 440 //將“l(fā)_a”宏定義為低音“6”的頻率440Hz</p><p>  #define l_xi 494 //將“l(fā)_xi”宏定義為低音“7”的頻率494Hz</p><p>  //以下是C調中音的音頻宏定義</p><p>  #define dao 523 //將“dao”宏定義為中音“1”的頻率523Hz</p&

41、gt;<p>  #define re 587 //將“re”宏定義為中音“2”的頻率587Hz</p><p>  #define mi 659 //將“mi”宏定義為中音“3”的頻率659Hz</p><p>  #define fa 698 //將“fa”宏定義為中音“4”的頻率698Hz</p><p>  #de

42、fine sao 784 //將“sao”宏定義為中音“5”的頻率784Hz</p><p>  #define la 880 //將“l(fā)a”宏定義為中音“6”的頻率880Hz</p><p>  #define xi 987 //將“xi”宏定義為中音“7”的頻率53</p><p>  //以下是C調高音的音頻宏定義</p>

43、;<p>  #define h_dao 1046 //將“h_dao”宏定義為高音“1”的頻率1046Hz</p><p>  #define h_re 1174 //將“h_re”宏定義為高音“2”的頻率1174Hz</p><p>  #define h_mi 1318 //將“h_mi”宏定義為高音“3”的頻率1318Hz</p>

44、;<p>  #define h_fa 1396 //將“h_fa”宏定義為高音“4”的頻率1396Hz</p><p>  #define h_sao 1567 //將“h_sao”宏定義為高音“5”的頻率1567Hz</p><p>  #define h_la 1760 //將“h_la”宏定義為高音“6”的頻率1760Hz</p>

45、<p>  #define h_xi 1975 //將“h_xi”宏定義為高音“7”的頻率1975Hz</p><p>  /**************************************************************</p><p>  函數(shù)功能:軟件延時子程序</p><p>  ****************

46、**********************************************/</p><p>  void delay20ms(void) </p><p><b>  {</b></p><p>  unsigned char i,j;</p><p>  for(i=0;i<100;i++

47、)</p><p>  for(j=0;j<60;j++)</p><p><b>  ;</b></p><p><b>  }</b></p><p>  /*******************************************</p><p>  

48、函數(shù)功能:節(jié)拍的延時的基本單位,延時250ms</p><p>  ******************************************/</p><p>  void delay() </p><p><b>  {</b></p><p>  unsigned char i

49、,j;</p><p>  for(i=0;i<250;i++)</p><p>  for(j=0;j<250;j++)</p><p><b>  ;</b></p><p><b>  }</b></p><p>  /*******************

50、************************</p><p><b>  函數(shù)功能:輸出音頻</b></p><p><b>  入口參數(shù):F</b></p><p>  ******************************************/</p><p>  void Out

51、put_Sound(void)</p><p><b>  {</b></p><p>  C=(46083/f)*10; //計算定時常數(shù)</p><p>  TH0=(8192-C)/32; //可證明這是13位計數(shù)器TH0高8位的賦初值方法</p><p>  TL0=(8192-C)%32;

52、 //可證明這是13位計數(shù)器TL0低5位的賦初值方法</p><p>  TR0=1; //開定時T0</p><p>  delay(); //延時200ms,播放音頻</p><p>  TR0=0; //關閉定時器</p><p>  sound=1;

53、 //關閉蜂鳴器</p><p>  keyval=0xff; //播放按鍵音頻后,將按鍵值更改,停止播放</p><p><b>  }</b></p><p>  /*******************************************</p><p><b>  函數(shù)功能:

54、主函數(shù)</b></p><p>  ******************************************/</p><p>  void main(void)</p><p><b>  { </b></p><p>  EA=1; //開總中斷</p>&l

55、t;p>  ET0=1; //定時器T0中斷允許</p><p>  ET1=1; //定時器T1中斷允許</p><p>  TR1=1; //定時器T1啟動,開始鍵盤掃描</p><p>  TMOD=0x10; //分別使用定時器T1的模式1,T0的模式0</p><p>  TH

56、1=(65536-500)/256; //定時器T1的高8位賦初值</p><p>  TL1=(65536-500)%256; //定時器T1的高8位賦初值 </p><p>  while(1) //無限循環(huán)</p><p><b>  {</b></p><p>  

57、switch(keyval)</p><p><b>  {</b></p><p>  case 1:f=dao; //如果第1個鍵按下,將中音1的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p&

58、gt;<p>  case 2:f=l_xi;//如果第2個鍵按下,將低音7的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  case 3:f=l_la; //如果第3個鍵按下,將低音6的頻率賦給Output_Sou

59、nd(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  case 4:f=l_sao; //如果第4個鍵按下,將低音5的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;<

60、;/b></p><p>  case 5:f=sao; //如果第5個鍵按下,將中音5的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  case 6:f=fa; //如果第6個鍵按下,將中音4的頻率

61、賦給f</p><p>  Output_Sound();//轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  case 7:f=mi; //如果第7個鍵按下,將中音3的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p>

62、<p><b>  break; </b></p><p>  case 8:f=re; //如果第8個鍵按下,將中音2的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  

63、case 9:f=h_re; //如果第9個鍵按下,將高音2的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  case 10:f=h_dao; //如果第10個鍵按下將高音1的頻率賦給f</p><p> 

64、 Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  case 11:f=xi; //如果第11個鍵按下,將中音7的頻率賦給f</p><p>  Output_Sound();//轉去計算定時常數(shù) </p><p><b>  bre

65、ak;</b></p><p>  case 12:f=la; //如果第12個鍵按下,將中音6的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break; </b></p><p>  case 13:f=h_la; //如果第13

66、個鍵按下,將高音6的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p><p>  case 14:f=h_sao;//如果第14個鍵按下,將高音5的頻率賦給f</p><p>  Output_Sound();//轉去計

67、算定時常數(shù) </p><p><b>  break;</b></p><p>  case 15:f=h_fa; //如果第15個鍵按下,將高音4的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break;</b></p&

68、gt;<p>  case 16:f=h_mi; //如果第16個鍵按下,將高音3的頻率賦給f</p><p>  Output_Sound(); //轉去計算定時常數(shù) </p><p><b>  break; </b></p><p><b>  } </b></p><p>

69、<b>  }</b></p><p><b>  } </b></p><p>  /**************************************************************</p><p>  函數(shù)功能:定時器T0的中斷服務子程序,使P2.0引腳輸出音頻方波</p>

70、<p>  **************************************************************/ </p><p>  void Time0_serve(void ) interrupt 1 using 1 </p><p><b>  {</b></p><p>  TH0=(8192-C

71、)/32; //可證明這是13位計數(shù)器TH0高8位的賦初值方法</p><p>  TL0=(8192-C)%32; //可證明這是13位計數(shù)器TL0低5位的賦初值方法 </p><p>  sound=!sound; //將P2.0引腳取反,輸出音頻方波</p><p><b>  }</b></p><p>  /*

72、*************************************************************</p><p>  函數(shù)功能:定時器T1的中斷服務子程序,進行鍵盤掃描,判斷鍵位</p><p>  **************************************************************/ </p><p&g

73、t;  void time1_serve(void) interrupt 3 using 2 //定時器T1的中斷編號為3,使用第2組寄存器</p><p><b>  {</b></p><p>  TR1=0; //關閉定時器T0</p><p>  P1=0xf0; //所有行線置為低電平“0”,所有列線置為高電平“1”</p

74、><p>  if((P1&0xf0)!=0xf0) //列線中有一位為低電平“0”,說明有鍵按下</p><p><b>  {</b></p><p>  delay20ms();//延時一段時間、軟件消抖</p><p>  if((P1&0xf0)!=0xf0) //確實有鍵按下</p>

75、<p><b>  {</b></p><p>  P1=0xfe; //第一行置為低電平“0”(P1.0輸出低電平“0”)</p><p>  if(P14==0) //如果檢測到接P1.4引腳的列線為低電平“0”</p><p>  keyval=1; //可判斷是S1鍵被按下</p><p>  if

76、(P15==0) //如果檢測到接P1.5引腳的列線為低電平“0”</p><p>  keyval=2; //可判斷是S2鍵被按下</p><p>  if(P16==0) //如果檢測到接P1.6引腳的列線為低電平“0”</p><p>  keyval=3; //可判斷是S3鍵被按下</p><p>  if(P17==0) //如果檢

77、測到接P1.7引腳的列線為低電平“0”</p><p>  keyval=4; //可判斷是S4鍵被按下</p><p>  P1=0xfd; //第二行置為低電平“0”(P1.1輸出低電平“0”)</p><p>  if(P14==0) //如果檢測到接P1.4引腳的列線為低電平“0”</p><p>  keyval=5; //可判

78、斷是S5鍵被按下</p><p>  if(P15==0) //如果檢測到接P1.5引腳的列線為低電平“0”</p><p>  keyval=6; //可判斷是S6鍵被按下</p><p>  if(P16==0) //如果檢測到接P1.6引腳的列線為低電平“0”</p><p>  keyval=7; //可判斷是S7鍵被按下</

79、p><p>  if(P17==0) //如果檢測到接P1.7引腳的列線為低電平“0”</p><p>  keyval=8; //可判斷是S8鍵被按下</p><p>  P1=0xfb; //第三行置為低電平“0”(P1.2輸出低電平“0”)</p><p>  if(P14==0) //如果檢測到接P1.4引腳的列線為低電平“0”<

80、/p><p>  keyval=9; //可判斷是S9鍵被按下</p><p>  if(P15==0) //如果檢測到接P1.5引腳的列線為低電平“0”</p><p>  keyval=10; //可判斷是S10鍵被按下</p><p>  if(P16==0) //如果檢測到接P1.6引腳的列線為低電平“0”</p><

81、p>  keyval=11; //可判斷是S11鍵被按下</p><p>  if(P17==0) //如果檢測到接P1.7引腳的列線為低電平“0”</p><p>  keyval=12; //可判斷是S12鍵被按下</p><p>  P1=0xf7; //第四行置為低電平“0”(P1.3輸出低電平“0”)</p><p>  if

82、(P14==0) //如果檢測到接P1.4引腳的列線為低電平“0”</p><p>  keyval=13; //可判斷是S13鍵被按下</p><p>  if(P15==0) //如果檢測到接P1.5引腳的列線為低電平“0”</p><p>  keyval=14; //可判斷是S14鍵被按下</p><p>  if(P16==0) /

83、/如果檢測到接P1.6引腳的列線為低電平“0”</p><p>  keyval=15; //可判斷是S15鍵被按下</p><p>  if(P17==0) //如果檢測到接P1.7引腳的列線為低電平“0”</p><p>  keyval=16; //可判斷是S16鍵被按下</p><p><b>  }</b>&l

84、t;/p><p><b>  }</b></p><p>  TR1=1; //開啟定時器T1</p><p>  TH1=(65536-500)/256; //定時器T1的高8位賦初值</p><p>  TL1=(65536-500)%256; //定時器T1的高8位賦初值

85、</p><p><b>  }</b></p><p><b>  八、元件清單</b></p><p>  1、220V變12V變壓器 一個</p><p>  2、電源插頭,連線 一套 </p><p>  3、二極管

86、 四個</p><p>  4、極性電容470UF/10UF 兩個/一個</p><p>  5、電阻1K、4.7K 一個/一個</p><p>  6、電容104/30PF 兩個/兩個</p><p>  7、 7805 一個</p&

87、gt;<p>  8、三極管 一個</p><p>  9、揚聲器 一個</p><p>  10、開關按鈕 十七個</p><p>  11、AT89S51單片機 一個</p><p><b>  九、心得體會:&l

88、t;/b></p><p>  先要謝謝指導我們以及一周來一直陪伴我們的毛建東老師和周春燕老師,其次感謝我們組的成員李寶明,韓康康,白楠,楊松良,鄭茂宇。</p><p>  經(jīng)過一段時間的查找資料,原理設計,畫原理圖,再到做pcd版,焊接元件,直到最后的調試成功。讓我深有體會。</p><p>  一開始的工作是我們的李保民組長動作的比較多,作為組員的我雖然

89、一直關心著我們的課程設計,但還是沒在其中參與多少,只是一直辛苦組長在忙,我們的組長很負責任,時時刻刻在告訴我們課程設計的進展,讓我們也慢慢的放下了心中的一塊石頭。在最后做版子以及實物的時候,我們一起開始了我們最后的課程設計的部分。因為組長的知識豐富,所以我們大部分的工作都交給了組長,但是我們的組員也沒有偷懶,當出現(xiàn)困難的時候我們集思廣益,查找資料,認真檢查。同時做到了分工明確。韓康康主要負責焊電路板,我和鄭茂宇負責查找資料,柏南則負責查

90、找問題。制作的過程中出現(xiàn)的種種問題,讓我們焦頭爛額,但是我們沒有就此灰心,經(jīng)過我們的共同努力之下,終于我們的課程設計是班里面第一個完成的。</p><p>  這次的課程設計讓我感觸很大</p><p>  首先,讓我知道了動手能力的重要性,即使我們能把專業(yè)知識學的非常的透徹,但是面對實物的時候,很多時候就會束手無策了,由于操作的原因會出現(xiàn)各種各樣的問題。比如說,不細心就會用交流電去測直流

91、電,焊接技術不熟練就會造成短路現(xiàn)象,操作順序不當就會燒壞版子。</p><p>  其次,讓我知道了團隊精神的重要性,如果把這個事情讓一個人來完成,是不可能的事情,因為設計電路板的時候會出現(xiàn)很多意想不到的問題與困難,這些問題和困難都是需要一個團隊共同來解決與克服的。沒有團隊就沒有課程設計的成功。同時這次課程設計也增進了與同學間的友誼。</p><p>  老師對我們說,我們完成了這次課程設

溫馨提示

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

評論

0/150

提交評論