欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機課程設計——電子琴[小編推薦]

      時間:2019-05-15 04:49:56下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關的《單片機課程設計——電子琴[小編推薦]》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《單片機課程設計——電子琴[小編推薦]》。

      第一篇:單片機課程設計——電子琴[小編推薦]

      單片機課程設計————電子琴

      可演奏的電子琴

      摘要:隨著社會的發(fā)展進步,音樂逐漸成為我們生活中很重要的一部分,有人曾說喜歡音樂的人不會向惡。我們都會抽空欣賞世界名曲,作為對精神的洗禮。本論文設計一個基于單片機的簡易電子琴。電子琴是現代電子科技與音樂結合的產物,是一種新型的鍵盤樂器。它在現代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現特性,它已經溶入現代人們的生活中,成為不可替代的一部分。本系統是以51系列單片機AT89C51為主控制器,附有矩陣鍵盤、LED顯示管、揚聲器組成。系統完成顯示輸入信息、播放相應音符等基本功能。本系統運行穩(wěn)定,其優(yōu)點是硬件電路簡單,軟件功能完善,控制系統可靠,性價比較高等,具有一定的實用和參考價值。

      關鍵詞:AT89C51,矩陣鍵盤,LED顯示管,揚聲器。引言

      1.1 目的和意義

      單片微型計算機是大規(guī)模集成電路技術發(fā)展的產物,屬第四代電子計算機,它具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應用廣泛的特點。它的應用必定導致傳統的控制技術從根本上發(fā)生變革。因此,單片機的開發(fā)應用已成為高科技和工程領域的一項重大課題。

      電子琴是現代電子科技與音樂結合的產物,是一種新型的鍵盤樂器。它在現代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現特性,它已經溶入現代人們的生活中,成為不可替代的一部分。本文的主要內容是用AT89S51單片機為核心控制元件,設計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設有16個按鍵和揚聲器。

      本文主要對使用單片機設計簡易電子琴進行了分析,并介紹了基于單片機電子琴統硬件組成。利用單片機產生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調試來詳細闡述。本系統是簡易電子琴的設計,按下鍵盤矩陣中的按鍵會使數碼管顯示當前按鍵,揚聲器播放器對應的音符。通過設計本系統可了解單片機的基本功能。對單片機的了解有一個小的飛躍。

      1.2 本系統主要研究內容

      本系統設計制作一個可演奏的電子琴。綜合應用了兩項設計。(1)鍵盤矩陣識別。即矩陣掃描,顯示當前按鍵。(2)不同頻率音符播放??梢酝ㄟ^按鍵控制16種發(fā)音。

      單片機課程設計————電子琴

      1.3 主要芯片簡介

      AT89S51是一個低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S51可為許多嵌入式控制應用系統提供高性價比的解決方案。

      AT89S51具有如下特點:40個引腳(引腳圖如圖1-2所示),4k Bytes Flash片內程序存儲器,128 bytes的隨機存取數據存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數器,2個全雙工串行通信口,看門狗(WDT)電路,片內時鐘振蕩器。

      此外,AT89S51設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式??臻e模式下,CPU暫停工作,而RAM定時計數器,串行口,外中斷系統可繼續(xù)工作,掉電模式凍結振蕩器而保存RAM的數據,停止芯片其它功能直至外中斷激活或硬件復位。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應不同產品的需求。系統分析

      2.1 系統組成

      本系統只要以51單片機為主控核心,與矩陣鍵盤、揚聲器、LED顯示管模塊一起組合而成。具體如下:

      2.2 系統工作原理

      本系統掃描鍵盤矩陣、顯示按鍵、揚聲器發(fā)出對應音符。4X4行列式鍵盤識別及顯示原理如下:

      單片機課程設計————電子琴

      組成鍵盤的按鍵有機械式、電容式、導電橡膠式、薄膜式多種,但不管什么形式,其作用都是一個使電路接通與斷開的開關。目前微機系統中使用的鍵盤按其功能不同,通常可分為編碼鍵盤和非編碼鍵盤兩種基本類型。

      編碼鍵盤:鍵盤本身帶有實現接口主要功能所需的硬件電路。不僅能自動檢測被按下的鍵,并完成去抖動、防串鍵等功能,而且能提供與被按鍵功能對應的鍵碼(如ASCII碼)送往CPU。所以,編碼鍵盤接口簡單、使用方便。但由于硬件電路較復雜,因而價格較貴。

      非編碼鍵盤:鍵盤只簡單地提供按鍵開關的行列矩陣。有關按鍵的識別、鍵碼的確定與輸入、去抖動等功能均由軟件完成。目前微機系統中,一般為了降低成本大多數采用非編碼鍵盤。

      鍵盤接口必須具有去抖動、防串鍵、按鍵識別和鍵碼產生4個基本功能。

      (1)去抖動:每個按鍵在按下或松開時,都會產生短時間的抖動。抖動的持續(xù)時間與鍵的質量相關,一般為5—20mm。所謂抖動是指在識別被按鍵是必須避開抖動狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開狀態(tài)才能保證識別正確無誤。去抖問

      題可通過軟件延時或硬件電路解決。

      (2)防串鍵:防串鍵是為了解決多個鍵同時按下或者前一按鍵沒有釋放又有新的按鍵按下時產生的問題。常用的方法有雙鍵鎖定和N鍵輪回兩種方法。雙鍵鎖定,是當有兩個或兩個以上的按鍵按下時,只把最后釋放的鍵當作有效鍵并產生相應的鍵碼。N鍵輪回,是當檢測到有多個鍵被按下時,能根據發(fā)現它們的順序依次產生相應鍵的鍵碼。

      (3)被按鍵識別:如何識別被按鍵是接口解決的主要問題,一般可通過軟硬結合的方法完成。常用的方法有行掃描法和線反轉法兩種。行掃描法的基本思想是,由程序對鍵盤逐行掃描,通過檢測到的列輸出狀態(tài)來確定閉合鍵,為此,需要設置入口、輸出口一個,該方法在微機系統中被廣泛使用。線反轉法的基本思想是通過行列顛倒兩次掃描來識別閉合鍵,為此需要提供兩個可編程的雙向輸入/輸出端口。

      (4)鍵碼產生:為了從鍵的行列坐標編碼得到反映鍵功能的鍵碼,一般在內存區(qū)中建立一個鍵盤編碼表,通過查表獲得被按鍵的鍵碼。

      用AT89S51的并行口P1接4×4矩陣鍵盤,以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;在數碼管上顯示每個按鍵的“0-F”序號。

      總體電路具體原理如下:

      單片機課程設計————電子琴 系統硬件設計

      3.1 系統硬件總體設計

      本系統由鍵盤矩陣、LED顯示管、揚聲器這幾個部分組成,LED顯示管顯示當前按鍵,揚聲器發(fā)出對應音符。硬件總體設計圖如下:

      單片機課程設計————電子琴

      3.2子系統(模塊)一

      LED顯示模塊如圖2-2所示,利用AT89S51單片機的P0端口的P0.0-P0.7連接到一個七段數碼管的a-h(huán)的筆段上,數碼管的公共端接電源。

      矩陣掃描顯示當前按鍵模塊如下:

      3.3子系統(模塊)二

      矩陣掃描揚聲器發(fā)出對應音符模塊如下:

      3.4子系統(模塊)三

      矩陣鍵盤模塊圖如下:

      單片機課程設計————電子琴 系統軟件設計

      4.1 系統軟件總體設計

      本系統的軟件流程圖如下:

      4.2 子系統一

      七段LED顯示器內部由七個條形發(fā)光二極管和一個小圓點發(fā)光二極管組成,單片機課程設計————電子琴

      根據各管的極管的接線形式,可分成共陰極型和共陽極型。LED數碼管的g~a七個發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼。

      本系統按鍵顯示模塊軟件流程圖如下:

      4.3子系統二

      一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系正確即可。利用AT89C51的內部定時器使其工作計數器模式(MODE1)下,改變計數值TH0及TL0以產生不同頻率的方法產生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數器計時956μs/1μs=956,每計數956次時將I/O反相,就可得到中音DO(523Hz)。

      計數脈沖值與頻率的關系式(如式2-1所示)是:

      N

      =fi÷2÷fr

      2-1 式中,N是計數值;fi是機器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產生的頻率。其計數初值T的求法如下:

      單片機課程設計————電子琴

      T=65536-N=65536-fi÷2÷fr

      例如:設K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計數值。

      T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr

      低音DO的T=65536-500000/262=63627

      中音DO的T=65536-500000/523=64580

      高音DO的T=65536-500000/1046=65059 本系統按鍵發(fā)出對應音符模塊軟件流程圖如下: 系統使用說明

      5.1 系統安裝及配置說明

      5.1.1 系統運行環(huán)境

      WINDOWS XP

      PROTEUS 7.1 SP2 Keil uv3 2.12

      單片機課程設計————電子琴

      5.1.2 系統安裝及配置

      安裝Protues 和keil uVsision3。

      5.2 系統操作說明

      (1)Keil下編譯,產生目標HEX文件,Proteus下Programme Files選擇產生的HEX文件,點擊運行開始模擬。(2)開啟本系統,數碼管顯示“-”。

      (3)按任意鍵盤,數碼管顯示所按下的鍵盤數,揚聲器發(fā)出相應的音符。結論

      通過這次課程設計,我學到了不少課本上沒有的知識,也鍛煉了自己的動手能力,將以前學過的零散的知識串到一起。經過我長時間的設計及調試,本系統基本能實現按下鍵盤矩陣中的按鍵會使數碼管顯示當前按鍵,揚聲器播放對應的音符。但由于仿真系統原因,本設計音頻效果不是很好。不足之處有:1.可彈奏的音符數較少,只能在一定范圍內滿足用戶需要??赏ㄟ^改進鍵盤識別模塊和發(fā)生模塊來增加其復雜度2.音量不可調。

      我的綜合設計主要涉及硬件和軟件兩方面的內容,通過這些我的硬件和軟件開發(fā)能力都獲得了提高。首先硬件方面,基本了解了電子產品的開發(fā)流程和所要做的工作。基本掌握了Protel99SE原理圖的方法,并設計了一個單片機最小系統。通過開發(fā)板的設計和硬件搭建的過程,使我對51系單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法,如LED數碼管,鍵盤等。并且我學會了分析問題解決問題的能力,加深了對所學理論知識的理解和運用。我的動手能力得到了很大的提高,創(chuàng)新意識得到了鍛煉。

      單片機課程設計————電子琴

      參考文獻

      [1] 彭偉.單片機C語言程序設計實訓100例.電子工業(yè)出版社.2009年 [2] 吳運昌.模擬電子線路基礎.廣州:華南理工大學出版社,2004年 [3] 閻石.數字電子技術基礎.北京:高等教育出版社,1997年 [4] 張曉麗等.數據結構與算法.北京:機械工業(yè)出版社,2002年

      [5] 馬忠梅等. ARM&Linux嵌入式系統教程.北京:北京航空航天大學出版社,2004年

      [6] 李建忠.單片機原理及應用.西安:西安電子科技大學,2002年 [7] 韓志軍等.單片機應用系統設計[M].機械工業(yè)出版社,2004 [8] 周潤景等.Proteus在MCS-51&ARM7系統中的應用百例[M].電子工業(yè)出版社,2006 [9] 馬忠梅等.單片機的C語言應用程序設計[M].北京航空航天大學出版社,2006 [10] 劉樹中,孫書膺,王春平.單片機和液晶顯示驅動器串行接口的實現[J].微計算機信息,2007

      單片機課程設計————電子琴

      附錄

      本系統總體代碼如下: #include #define uchar unsigned char #define uint unsigned int uchar code DSY_Table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};uint code Tone_Delay_Table[]= {64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178};sbit BEEP=P3^0;

      uchar KeyNo;void DelayMS(uchar x){ uchar i;while(x--)for(i=0;i<120;i++);} void Keys_Scan(){ uchar Tmp,k;P1=0x0F;DelayMS(2);Tmp=P1^0x0F;switch(Tmp){

      case 1:k=0;break;

      case 2:k=1;break;

      case 4:k=2;break;

      case 8:k=3;break;

      default:return;} P1=0xF0;DelayMS(2);Tmp=(P1>>4)^0x0F;switch(Tmp){

      case 1:k+=0;break;

      case 2:k+=4;break;

      case 4:k+=8;break;

      單片機課程設計————電子琴

      case 8:k+=12;break;

      default:return;} KeyNo=k;} void play_Tone()interrupt 1 { TH0=Tone_Delay_Table[KeyNo]/256;TL0=Tone_Delay_Table[KeyNo]%256;BEEP=~BEEP;} void main(){ P0=0xBF;TMOD=0x01;IE=0x82;while(1){

      P1=0xF0;

      if(P1!=0xF0)

      {

      Keys_Scan();

      P0=DSY_Table[KeyNo];

      TR0=1;

      }

      else

      {

      TR0=0;

      }

      DelayMS(2);} }

      單片機課程設計————電子琴

      目 錄

      摘要.................................................................................................................................................1 1 引言..............................................................................................................................................1

      1.1 目的和意義.....................................................................................................................1 1.2 本系統主要研究內容...................................................................................................1 1.3 主要芯片簡介.................................................................................................................2 系統分析..................................................................................................................................2

      2.1 系統組成..........................................................................................................................2 2.2 系統工作原理.................................................................................................................2 系統硬件設計........................................................................................................................4

      3.1 系統硬件總體設計........................................................................................................4 3.2子系統(模塊)一.........................................................................................................5 3.3子系統(模塊)二.........................................................................................................5 系統軟件設計........................................................................................................................6

      4.1 系統軟件總體設計........................................................................................................6 4.2 子系統一..........................................................................................................................6 4.3子系統二...........................................................................................................................7 系統使用說明........................................................................................................................8

      5.1 系統安裝及配置說明...................................................................................................8

      5.1.1 系統運行環(huán)境..................................................................................................8 5.1.2 系統安裝及配置.............................................................................................9 5.2 系統操作說明.................................................................................................................9 結論.............................................................................................................................................9 參考文獻......................................................................................................................................10 附錄................................................................................................................................................11 #include #define uchar unsigned char #define uint unsigned int uchar code DSY_Table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};

      單片機課程設計————電子琴

      uint code Tone_Delay_Table[]= {64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178};sbit BEEP=P3^0;

      uchar KeyNo;void DelayMS(uchar x){ uchar i;while(x--)for(i=0;i<120;i++);} void Keys_Scan(){ uchar Tmp,k;P1=0x0F;DelayMS(2);Tmp=P1^0x0F;switch(Tmp){

      case 1:k=0;break;

      case 2:k=1;break;

      case 4:k=2;break;

      case 8:k=3;break;

      default:return;} P1=0xF0;DelayMS(2);Tmp=(P1>>4)^0x0F;switch(Tmp){

      單片機課程設計————電子琴

      }

      } case 1:k+=0;break;case 2:k+=4;break;case 4:k+=8;break;case 8:k+=12;break;default:return;KeyNo=k;void play_Tone()interrupt 1 {

      } void main(){

      P0=0xBF;TMOD=0x01;IE=0x82;while(1){

      P1=0xF0;if(P1!=0xF0){

      } else { TH0=Tone_Delay_Table[KeyNo]/256;TL0=Tone_Delay_Table[KeyNo]%256;BEEP=~BEEP;Keys_Scan();P0=DSY_Table[KeyNo];TR0=1;

      單片機課程設計————電子琴

      }

      } } TR0=0;DelayMS(2);

      第二篇:單片機課程設計

      設計題目: 單片機課程設計

      學生姓名:

      院: 電氣與信息工程學院

      級: 電子111班 指導教師:

      日 期: 2014年9月20日

      一、課程設計目的:

      了解電子元器件的功能與原理,掌握單片機的結構和原理,學會使用單片機應用開發(fā)技術的相關軟件如 keill、STC_ISP_V394等,能夠使用c語言的語言編程簡單的功能。

      二、設計的思想:

      利用所提供的單片機和開發(fā)板的原理圖用keill軟件編程程序以實現一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開發(fā)板上,再調試編譯的程序能否實現其所設計的功能。

      1、對蜂鳴器的了解:

      蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動膜片及外殼組成,接通電源后,振蕩器產生的音頻信號由電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性的振動發(fā)聲。

      2、設計:

      我們所使用的開發(fā)板實物圖如圖一,單片機對右上角蜂鳴器的控制是加入三極管接入vcc,單片機的第22引腳和負極上,以此來控制蜂鳴器工作。單片機我們選擇STC89C52RC+1602液晶來實現對蜂鳴器的控制及顯示所需要的信息。

      圖一 調試說明:

      首先用Keil軟件創(chuàng)建一個工程,將程序源代碼輸入并編譯生成單片可執(zhí)行的.hex文件。其次,打開單片機實踐板的電源,接好串口線,用STC-ISP燒錄軟件,將.hex文件燒錄入單片機中。程序下載完畢后,單片機會自動執(zhí)行程序功能。最后,觀察程序功能的執(zhí)行情況,看是否達到了設計要求。

      如果單片機實踐板硬件電路的執(zhí)行結果與設計結果一致,則說明設計過程及流程沒有問題,完全符合設計要求。否則,先檢查單片機實踐板的硬件電路是否完好,是否有斷點、漏焊、虛焊以及元器件是否完好等情況,排除故障重新連接后重新進行調試。如果仍然無法正

      常實現,則說明程序編寫有誤,需要認真檢查程序流程,然后經過反復的修改與調試排除故障,實現設計要求的各項功能。編譯和燒寫該程序到單片機:

      (1)用Keil編譯上面的代碼,并設置產生16進制代碼文件*.hex.(2)用專用下載線,連接好實驗板和電腦串口(DB9)(2)運行hex文件燒寫軟件STC_ISP_V394.exe

      選單片機的型號,并打開編譯產生好的hex文件

      點擊下載,給開發(fā)板上電。

      3、實現的功能:使用單片機將歌曲《八月桂花》的調子通過蜂鳴器播放出來,用1602液晶將想要表達的信息有步驟地顯示在液晶顯示屏上,并且調子與顯示內容可以任意通過修改的程序燒錄到單片機內,實現設計產品的使用性與靈活性。

      三、實驗程序:

      /************************************************************************

      [主題] C51音樂程序《八月桂花》

      [功能]

      通過單片機演奏音樂,顯示一些內容

      /**********************************************************************/

      #include

      #include

      //本例采用89C52, 晶振為11.0592MHZ

      //關于如何編制音樂代碼, 其實十分簡單,各位可以看以下代碼.//頻率常數即音樂術語中的音調,而節(jié)拍常數即音樂術語中的多少拍;

      //所以拿出譜子, 試探編吧!

      unsigned char i=0;sbit Beep = P2^7;

      unsigned char p,m;

      //m為頻率常數變量

      unsigned char n=0;//n為節(jié)拍常數變量

      unsigned char code music_tab[] ={

      0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數, 節(jié)拍常數, 頻率常數, 節(jié)拍常數,0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00

      };

      void int0()interrupt 1

      //采用中斷0 控制節(jié)拍

      { TH0=0xd8;

      TL0=0xef;

      n--;

      }

      void delay(unsigned char m)

      //控制頻率延時

      {

      unsigned i=3*m;

      while(--i);

      }

      void delayms(unsigned char a)//豪秒延時子程序

      {

      while(--a);

      //采用while(--a)不要采用while(a--);各位可編譯一下看看匯編結果就知道了!

      }

      typedef unsigned char BYTE;typedef bit BOOL;

      sbit LCD_RS = P2^0;

      sbit LCD_RW = P2^1;sbit LCD_EP = P2^2;

      BYTE code dis1[] = {“

      WLCOME TO

      ”};BYTE code dis2[] = {“

      DanPianJi ”};BYTE code dis3[] = {“

      111iZnaiD

      ”};BYTE code dis4[] = {“

      eiXeiX ”};

      delays(int ms){

      // 延時子程序 int i;while(ms--){

      for(i = 0;i< 250;i++)

      {

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      } } }

      BOOL lcd_bz(){

      // 測試LCD忙碌狀態(tài) BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result =(BOOL)(P0 & 0x80);LCD_EP = 0;return result;}

      lcd_wcmd(BYTE cmd){

      while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;

      }

      lcd_pos(BYTE pos){

      lcd_wcmd(pos | 0x80);

      // 寫入指令數據到LCD //設定顯示位置

      }

      lcd_wdat(BYTE dat)

      {

      //寫入字符顯示數據到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}

      lcd_init(){

      lcd_wcmd(0x38);

      delays(1);lcd_wcmd(0x0c);

      delays(1);lcd_wcmd(0x06);

      delays(1);lcd_wcmd(0x01);

      delays(1);}

      void main()

      {

      BYTE j;

      lcd_init();

      delays(10);

      //LCD初始化設定

      //16*2顯示,5*7點陣,8位數據//顯示開,關光標 //移動光標 //清除LCD的顯示內容

      // 初始化LCD

      lcd_wcmd(0x06);

      //向右移動光標

      lcd_pos(0);

      //設置顯示位置為第一行的第1個字符

      j = 0;

      while(dis1[ j ]!= '