版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)課程設(shè)計(jì)報(bào)告書</p><p> 2014年12月26日</p><p> 1602LCD電話撥號(hào)按鍵系統(tǒng)</p><p> 1設(shè)計(jì)目的本方案設(shè)計(jì)一個(gè)電話撥號(hào)鍵盤系統(tǒng):</p><p> 要求以AT89C51單片機(jī)作為微控制器;</p><p> 通過1602LCD顯示屏顯示撥號(hào)
2、屏幕;</p><p> LED顯示屏輪流顯示數(shù)字;</p><p> 數(shù)字顯示為逐個(gè)顯示方式,最多保留10位。</p><p> 2功能要求及技術(shù)指標(biāo)</p><p> 在鍵盤上點(diǎn)擊數(shù)字時(shí),102LCD顯示屏?xí)@示出相應(yīng)的數(shù)字,并且在點(diǎn)擊的同時(shí),LS1會(huì)發(fā)出“滴”的聲音。3 總體設(shè)計(jì)方案</p><p>
3、 圖3.1 總體設(shè)計(jì)框圖</p><p><b> 4 硬件電路的設(shè)計(jì)</b></p><p> 4.1 單片機(jī)最小系統(tǒng)</p><p> 單片機(jī)最小系統(tǒng)主要由電源、復(fù)位、震蕩電路以及擴(kuò)展部分等部分組成。</p><p> 圖4.1.1 單片機(jī)的最小系統(tǒng)</p><p> 4.2 輸入按
4、鍵系統(tǒng)</p><p> 獨(dú)立的鍵盤與單片機(jī)相連時(shí),每個(gè)按鍵都需要單片機(jī)的一個(gè)I/O口,若按鍵較多時(shí),占用的I/O口資源就會(huì)過多,為此就引入了矩陣鍵盤。本次設(shè)計(jì)共有0~9、#、*共12個(gè)按鍵,因此引入3*4的矩陣鍵盤,共需要7個(gè)I/O口,7條線分別與單片機(jī)P3口相連。</p><p> 圖4.2.1 按鍵鍵盤</p><p> 1602LCD顯示系統(tǒng)</
5、p><p> 1. LCD1602元件引腳圖:</p><p> 圖4.3.1 1602LCD元件圖</p><p> 2. 1602LCD顯示器的引腳功能</p><p> 第1腳:VSS為地電源;</p><p> 第2腳:VDD接+5V電源;</p><p> 第3腳:VL為液晶顯
6、示器對(duì)比度調(diào)度端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高會(huì)產(chǎn)生“鬼影”,必要時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。</p><p> 第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS低電平R/W為高電平
7、時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W低電平時(shí)可以寫入數(shù)據(jù)。</p><p> 第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15腳:背光源正極。</p><p> 第16腳:背光源負(fù)極。</p><p>
8、 3.1602LCD內(nèi)部的控制器指令介紹</p><p> 表4.3.1 1602LCD內(nèi)部控制及其指令</p><p><b> 指令說明:</b></p><p> 指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置;</p><p> 指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H;</p>&
9、lt;p> 指令3:光標(biāo)和顯示位置設(shè)置I/D,光標(biāo)移動(dòng)方向,高電平向右移,低電平向左移,S:屏幕上所有文字是否左移或右移,高電平表示有效,低電平表示無效;</p><p> 指令4: 顯示開關(guān)控制。D:控制整體的顯示開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo)。B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍;</p><p>
10、; 指令5:光標(biāo)或顯示移位S/C,高電平時(shí)顯示移動(dòng)的文字,低電平時(shí)顯示移動(dòng)的光標(biāo);</p><p> 指令6:功能設(shè)置命令DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線。N:低電平時(shí)為單位行顯示,高電平時(shí)為雙行顯示。F:低電平時(shí)顯示5*7的點(diǎn)陣字符,高電平時(shí)顯示5*10的顯示字符。</p><p> 指令7:字符發(fā)生器RAM地址設(shè)置;</p><p> 指令8
11、:DDRAM地址設(shè)置;</p><p> 指令9:讀忙信號(hào)和光標(biāo)地址。BF:忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或數(shù)據(jù),如果為低電平表示不忙。</p><p><b> 4.?dāng)?shù)字代碼</b></p><p> 1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,其中阿拉伯?dāng)?shù)字的代碼為:</
12、p><p> 代碼 數(shù)字</p><p> 00110000 0</p><p> 00110001 1</p><p> 00110010 2</p><p> 00110011
13、 3</p><p> 00110100 4</p><p> 00110101 5</p><p> 00110110 6</p><p> 00110111 7</p><p> 0
14、0111000 8</p><p> 00111001 9</p><p> 4.4系統(tǒng)的整體電路圖</p><p> 圖4.4.1 1602LCD電話撥號(hào)按鍵系統(tǒng)的硬件電路原理圖</p><p> 注意事項(xiàng):AT89C51單片機(jī),P0口輸出時(shí),必須使用上拉電阻,提高電壓,否則無
15、法得到輸出結(jié)果。</p><p><b> 5 軟件設(shè)計(jì)</b></p><p><b> 5.1程序總流程圖</b></p><p> 圖5.1.1為系統(tǒng)總流程圖。首先系統(tǒng)進(jìn)入初始化,系統(tǒng)開始運(yùn)行,當(dāng)檢測(cè)鍵盤沒有按下時(shí),則返回繼續(xù)檢測(cè)直至有鍵盤按下;當(dāng)掃描到鍵盤按下時(shí),讀取按鍵值,并檢測(cè)是否超過10位,若沒有超過則
16、送入液晶顯示;若超過10位則系統(tǒng)重新初始化。</p><p> 圖5.1.1 系統(tǒng)總流程圖</p><p> 5.2 LCD顯示程序流程圖</p><p> 顯示程序流程圖如圖5.2.1。流程圖分析:首先對(duì)1602顯示屏進(jìn)行初始化,然后檢查忙信號(hào),若BF=0,則獲得顯示RAM的地址,寫入相應(yīng)的數(shù)據(jù)顯示;若BF=1,則代表模塊正在進(jìn)行內(nèi)部操作,不接受人和外部指令
17、和數(shù)據(jù),知道BF=0為止。</p><p> 圖5.2.1 LCD顯示程序流程圖</p><p><b> 5.3系統(tǒng)運(yùn)行程序</b></p><p> #include<reg51.h></p><p> #include<intrins.h></p><p>
18、 #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define DelayNOP() {_nop_();_nop_();_nop_();_nop_();} </p><p> sbit BEEP=P1^0;</p><p> sbit
19、LCD_RS=P2^0;</p><p> sbit LCD_RW=P2^1;</p><p> sbit LCD_EN=P2^2;</p><p> void DelayMS(uint ms);</p><p> bit LCD_Busy_Check();</p><p> void LCD_Set_Pos
20、ition(uchar Position);</p><p> void Write_LCD_command(uchar cmd);</p><p> void Write_LCD_data(uchar dat);</p><p><b> //--標(biāo)題字符串</b></p><p> char code Tit
21、le_Text[]={"-- phone Code --"};</p><p> //--鍵盤拔號(hào)與鍵盤符號(hào)映射表</p><p> uchar code key_Table[]={'1','2','3','4','5','6','7','8
22、9;,'9','*','0','#'};</p><p> //--鍵盤拔號(hào)數(shù)字緩沖</p><p> uchar Dial_Code_Str[]={" "}; //此處空格太少,會(huì)在屏幕上顯示一個(gè)字符出來</p><p> uchar keyNo=
23、0xff;</p><p> int tCount=0;</p><p> //------------------------------------</p><p><b> //延時(shí)</b></p><p> //------------------------------------</p>
24、<p> void DelayMS(uint x)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> while(x--)</p><p> for(i=0;i<120;i++)</p><p&
25、gt;<b> ; </b></p><p><b> }</b></p><p> //--------------------------------</p><p> //在LCD指定的行上顯示字符串</p><p> //------------------------------
26、--</p><p> void Display_String(uchar *str,uchar LineNo)</p><p><b> {</b></p><p><b> uchar k;</b></p><p> LCD_Set_Position(LineNo);</p>
27、<p> for(k=0;k<16;k++)</p><p> Write_LCD_data(str[k]);</p><p><b> }</b></p><p> //----------------------------------------------</p><p><b&
28、gt; //忙檢查</b></p><p> //---------------------------------------------</p><p> bit LCD_Busy_Check()</p><p><b> {</b></p><p> bit LCD_Status;</p
29、><p> LCD_RS=0;//寄存器選擇</p><p> LCD_RW=1;//讀狀態(tài)寄存器</p><p> LCD_EN=1;//開始讀</p><p> DelayMS(1);</p><p> LCD_Status=(bit)(P0&0x80) ;</p><p>&
30、lt;b> LCD_EN=0;</b></p><p> return LCD_Status;</p><p><b> }</b></p><p> //---------------------------------------------------</p><p><b>
31、 //寫LCD命令</b></p><p> //----------------------------------------------------</p><p> void Write_LCD_Command(uchar cmd)</p><p><b> {</b></p><p> wh
32、ile((LCD_Busy_Check()&0x80)==0x80);//忙等待</p><p> LCD_RS=0;//選取擇命令寄存器</p><p> LCD_RW=0;//寫</p><p><b> LCD_EN=0;</b></p><p><b> _nop_();</b&g
33、t;</p><p><b> _nop_();</b></p><p><b> P0=cmd;</b></p><p> DelayNOP();</p><p><b> LCD_EN=1;</b></p><p> DelayNOP();
34、</p><p><b> LCD_EN=0;</b></p><p><b> }</b></p><p> //-----------------------------------------</p><p><b> //發(fā)送數(shù)據(jù)</b></p>
35、<p> //----------------------------------------</p><p> void Write_LCD_Data(uchar Str)</p><p><b> {</b></p><p> while((LCD_Busy_Check()&0x80)==0x80);//忙等待&l
36、t;/p><p><b> LCD_RS=1;</b></p><p><b> LCD_RW=0;</b></p><p><b> LCD_EN=0;</b></p><p><b> P0=Str;</b></p><p>
37、; DelayNOP();</p><p><b> LCD_EN=1;</b></p><p> DelayMS(1);</p><p><b> LCD_EN=0;</b></p><p><b> }</b></p><p> //--
38、-----------------------------------------------</p><p><b> //LCD初始化</b></p><p> //-------------------------------------------------</p><p> void Initialize_LCD()</
39、p><p><b> {</b></p><p> Write_LCD_Command(0x38);</p><p> DelayMS(5);</p><p> Write_LCD_Command(0x0C);//清屏</p><p> DelayMS(5);</p><
40、p> Write_LCD_Command(0x06);//字符進(jìn)入模式,屏幕不動(dòng),字符后移。</p><p> DelayMS(5);</p><p> Write_LCD_Command(0x01);//顯示開,關(guān)光標(biāo)。</p><p> DelayMS(5);</p><p><b> }</b>&l
41、t;/p><p> //--------------------------------------</p><p><b> //設(shè)置顯示位置</b></p><p> //--------------------------------------</p><p> void LCD_Set_Position(u
42、char Position)</p><p><b> {</b></p><p> Write_LCD_Command(Position | 0x80);</p><p><b> }</b></p><p> //-------------------------------------
43、----------</p><p> //t0控制按鍵聲音</p><p> //-----------------------------------------------</p><p> void T0_INT() interrupt 1</p><p><b> {</b></p>&l
44、t;p> TH0=-600/256;</p><p> TL0=-600%256;</p><p> BEEP=~BEEP;</p><p> if(++tCount==200)</p><p><b> {</b></p><p><b> tCount=0;<
45、/b></p><p><b> TR0=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> //-------------------------</p><p><b>
46、 //鍵盤掃描</b></p><p> //------------------------</p><p> //=============================================================</p><p> uchar Getkey()</p><p><b>
47、 {</b></p><p> uchar i,j,k=0;</p><p> uchar keyScanCode[]={0xef,0xdf,0xbf,0x7f};//鍵盤掃描碼</p><p> uchar keyCodeTable[]={0xee,0xed,0xeb,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,0x7
48、d,0x7b};</p><p><b> P3=0x0f;</b></p><p> //掃描鍵盤獲取按鍵序號(hào)</p><p> if(P3!=0X0F)</p><p><b> {</b></p><p> for(i=0;i<4;i++)</p&
49、gt;<p><b> {</b></p><p> P3=keyScanCode[i];</p><p> for(j=0;j<3;j++)</p><p><b> {</b></p><p><b> k=i*3+j;</b></p&g
50、t;<p> if(P3==keyCodeTable[k])</p><p><b> return k;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>&l
51、t;/p><p> else return 0xff;</p><p><b> } </b></p><p> //-------------------------------</p><p><b> //main</b></p><p> //---------
52、-----------------------</p><p> void main()</p><p><b> {</b></p><p> uchar i=0,j;</p><p> P0=P2=P1=0XFF;</p><p><b> IE=0X82;</b&g
53、t;</p><p> TMOD=0X01;</p><p> Initialize_LCD(); //LCD初始化</p><p> Display_String(Title_Text,0x00);//在第一行顯示標(biāo)題</p><p><b> while(1)</b></p>
54、<p><b> {</b></p><p> keyNo=Getkey();//獲取按鍵值</p><p> if(keyNo==0xff)</p><p> continue;//無按鍵時(shí)繼續(xù)掃描</p><p> if(++i==12)//超過11位時(shí)清空</p><p&g
55、t;<b> {</b></p><p> for(j=0;j<16;j++)</p><p> Dial_Code_Str[j]=' ';</p><p><b> i=0;</b></p><p><b> }</b></p>
56、<p> Dial_Code_Str[i]=key_Table[keyNo];//將待顯示字符放入待顯示的拔號(hào)串中</p><p> Display_String(Dial_Code_Str,0x40);//在第二行顯示號(hào)碼</p><p> TR0=1;//T0中斷控制按鍵聲音</p><p> while(Getkey()!=0xff);//等
57、待按鍵釋放</p><p><b> }</b></p><p><b> } </b></p><p><b> 6 系統(tǒng)仿真</b></p><p> 當(dāng)鍵盤輸入依次輸入數(shù)字“1”、“8”、“7”、“7”、“3”、“7”、“0”、“2”、“2”、“6”、“1”后,
58、1602LCD顯示屏依次顯示出輸入的數(shù)字。</p><p> 圖6.1.1系統(tǒng)仿真圖</p><p><b> 7設(shè)計(jì)總結(jié)</b></p><p> 經(jīng)過一段時(shí)間的努力,1602LCD電話撥號(hào)按鍵系統(tǒng)基本完成。但設(shè)計(jì)中的不足之處仍然存在。這次設(shè)計(jì)是我第一次設(shè)計(jì)電路,并用Proteus實(shí)現(xiàn)了仿真。在這過程中,我對(duì)電路設(shè)計(jì),單片機(jī)的使用等都有
59、了新的認(rèn)識(shí)。通過這次設(shè)計(jì)學(xué)會(huì)了Proteus和Keil軟件的使用方法,掌握了從系統(tǒng)的需要、方案的設(shè)計(jì)、功能模塊的劃分、原理圖的設(shè)計(jì)和電路圖的仿真的設(shè)計(jì)流程,積累了不少經(jīng)驗(yàn)。</p><p> 通過本次設(shè)計(jì),我對(duì)單片機(jī)這門課有了進(jìn)一步的了解。無論是在硬件連接方面還是在軟件編程方面。本次設(shè)計(jì)采用了AT89C51單片機(jī)芯片,與以往的單片機(jī)相比增加了許多新的功能,使其功能更為完善,應(yīng)用領(lǐng)域也更為廣泛。設(shè)計(jì)中還用到了16
60、02LCD顯示模塊,以前在學(xué)單片機(jī)課程時(shí)只是對(duì)其理論知識(shí)有了初步的理解。通過這次設(shè)計(jì),對(duì)它的工作原理有了更深的理解。在調(diào)試過程中遇到很多問題,硬件上的理論知識(shí)學(xué)得不夠扎實(shí),對(duì)電路的仿真方面也不夠熟練。</p><p> 總之,這次電路的設(shè)計(jì)和仿真,基本上達(dá)到了設(shè)計(jì)的功能要求。在以后的實(shí)踐中,我將繼續(xù)努力學(xué)習(xí)電路設(shè)計(jì)方面的理論知識(shí),并理論聯(lián)系實(shí)際,爭(zhēng)取在電路設(shè)計(jì)方面能有所提升。</p><p&
61、gt;<b> 8參考文獻(xiàn)</b></p><p> [1]余發(fā)山.單片機(jī)原理及應(yīng)用技術(shù).徐州:中國(guó)礦業(yè)大學(xué)出版社,2003.</p><p> [2]佟云峰,等.單片機(jī)原理及其應(yīng)用.重慶:重慶大學(xué)出版社,2004,1.</p><p> [3]吳金戌,等.8051單片機(jī)實(shí)踐與應(yīng)用.北京:清華大學(xué)出版社,2001,8.</p>
62、;<p> [4]劉瑞新.單片機(jī)原理及應(yīng)用教程.北京:機(jī)械工業(yè)出版社,2005.</p><p> [5]林立,等.單片機(jī)原理及應(yīng)用.北京:電子工業(yè)出版社,2009.</p><p> [6]周航慈.單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù). 北京:北京航空航天大學(xué)出版社,2002.</p><p> [7]劉衛(wèi)國(guó).C語言程序設(shè)計(jì). 北京:中國(guó)鐵道出版社,200
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)報(bào)告-仿手機(jī)鍵盤
- 單片機(jī)手機(jī)鍵盤-單片機(jī)原理及應(yīng)用課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---鍵盤接口課程設(shè)計(jì)
- lcd1602 與單片機(jī)
- lcd單片機(jī)原理課程設(shè)計(jì)
- lcd顯示設(shè)計(jì)單片機(jī)課程設(shè)計(jì)
- 1602lcd可調(diào) 時(shí)鐘
- 單片機(jī)鍵盤輸入課程設(shè)計(jì)
- 單片機(jī)lcd系統(tǒng)顯示課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---定時(shí)鬧鈴lcd
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)44矩陣式鍵盤
- 1602lcd顯示的秒表
- 單片機(jī)課程設(shè)計(jì)--矩陣鍵盤 led顯示
- 單片機(jī)課程設(shè)計(jì)lcd顯示屏設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---- lcd電子定時(shí)鬧鐘設(shè)計(jì)
- 1602LCD顯示的秒表.doc
- 單片機(jī)課程設(shè)計(jì)—帶有l(wèi)cd的定時(shí)鬧鐘
- 課程設(shè)計(jì)---基于單片機(jī)的lcd顯示系統(tǒng)設(shè)計(jì)
- 【設(shè)計(jì)+論文】1602lcd顯示的秒表)lcd顯示的秒表
- 1602lcd顯示的秒表報(bào)告
評(píng)論
0/150
提交評(píng)論