LCD1602的電路圖和程序_第1頁(yè)
LCD1602的電路圖和程序_第2頁(yè)
LCD1602的電路圖和程序_第3頁(yè)
LCD1602的電路圖和程序_第4頁(yè)
LCD1602的電路圖和程序_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MS基于1602字符型液晶顯示器的顯示系統(tǒng) 姓名:楊越 班級(jí):電子11-1 學(xué)號(hào):1、 實(shí)習(xí)目的(1)了解飛思卡爾單片機(jī)的基本原理,掌握其基本的工作流程。(2)了解LCD1602的基本原理及用法。(3)能夠熟練使用CodeWarrior軟件編寫C語(yǔ)言程序,使用BDM仿真器下載程序。(4)能夠熟練焊接電路板。二、實(shí)驗(yàn)設(shè)備與器件CodeWarrior軟件,BDM仿真器,萬用電路板,飛思卡爾單片機(jī),LCD1602液晶顯示器,三、實(shí)驗(yàn)內(nèi)容內(nèi)容:利用飛思卡爾單片機(jī)制作基于1602字符液晶顯示器的顯示系統(tǒng)要求:用四個(gè)按鍵控制,按下第一個(gè)按鍵顯示1,按下第二個(gè)按鍵顯示2,以此類推。(1)LCD1602液晶顯

2、示器的原理:1602共16個(gè)管腳,但是編程用到的主要管腳不過三個(gè),分別為:RS(數(shù)據(jù)命令選擇端),R/W(讀寫選擇端),E(使能信號(hào));以后編程便主要圍繞這三個(gè)管腳展開進(jìn)行初始化,寫命令,寫數(shù)據(jù)。以下具體闡述這三個(gè)管腳:RS為寄存器選擇,高電平選擇數(shù)據(jù)寄存器,低電平選擇指令寄存器。R/W為讀寫選擇,高電平進(jìn)行讀操作,低電平進(jìn)行寫操作。E端為使能端,后面和時(shí)序聯(lián)系在一起。 除此外,D0D7分別為8位雙向數(shù)據(jù)線。操作時(shí)序:RSR/W操作說明00寫入指令碼D0D701讀取輸出的D0D7狀態(tài)字10寫入數(shù)據(jù)D0D711從D0D7讀取數(shù)據(jù)注:關(guān)于E=H脈沖開始時(shí)初始化E為0,然后置E為1,再清0.讀取狀態(tài)

3、字時(shí),注意D7位,D7=1,禁止讀寫操作;D7=0,允許讀寫操作;所以對(duì)控制器每次進(jìn)行讀寫操作前,必須進(jìn)行讀寫檢測(cè)。(即后面的讀忙子程序)指令集:LCD_1602 初始化指令小結(jié):0x38 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口0x01 清屏0x0F 開顯示,顯示光標(biāo),光標(biāo)閃爍0x08 只開顯示0x0e 開顯示,顯示光標(biāo),光標(biāo)不閃爍0x0c 開顯示,不顯示光標(biāo)0x06 地址加1,當(dāng)寫入數(shù)據(jù)的時(shí)候光標(biāo)右移0x02 地址計(jì)數(shù)器AC=0;(此時(shí)地址為0x80) 光標(biāo)歸原點(diǎn),但是DDRAM中斷內(nèi)容不變0x18 光標(biāo)和顯示一起向左移動(dòng)(2)飛思卡爾單片機(jī)的功能及特點(diǎn):MC9S12XS128 是 16

4、 位單片機(jī),由 16 位中央處理單元(CPU12X)、128KB 程序、Flash(P-lash)、8KB RAM、8KB 數(shù)據(jù) Flash(D-lash)組成片內(nèi)存儲(chǔ)器。主要功能模塊包括:內(nèi)部存儲(chǔ)器, 內(nèi)部 PLL 鎖相環(huán)模塊 ,2 個(gè)異步串口通訊 SCI ,1個(gè)串行外設(shè)接口 SPI MSCAN 模塊 ,1 個(gè) 8 通道輸入/輸出比較定時(shí)器模塊 TIM ,周期中斷定時(shí)器模塊 PIT ,16 通道 A/D 轉(zhuǎn)換模塊 ADC ,1 個(gè) 8 通道脈沖寬度調(diào)制模塊 PWM ,輸入/輸出數(shù)字 I/O 口。 本次設(shè)計(jì)中主要用到PORTA,PORTB端口:PORTA:PORTA 為通用 I/O 口, 共

5、8 個(gè),作為通用數(shù)字 I/O 口使用,未集成特殊功能.主要配置寄存器有:數(shù)據(jù)寄存器 PORTA、數(shù)據(jù)方向寄存 DDRA、上拉電阻控制寄存器PUCR 和驅(qū)動(dòng)控制寄存器 RDR。a. 數(shù)據(jù)寄存器 PORTA通過寫 1/0 使單片機(jī)對(duì)應(yīng)引腳輸出高低電平,或通過讀取數(shù)據(jù)寄存器獲得對(duì)應(yīng)引腳的高低電平值 。例:PORTA_PB0=1b. 數(shù)據(jù)方向寄存器 DDRADDRA 寄存器配置引腳為輸出口還是輸入口,“0”,輸入口;“1”,輸出口。MCU 復(fù)位后,DDRA 值為 0x00, 引腳默認(rèn)為輸入口。例:DDRA=0xFF /配置 PORTA 口為輸出 PORTB:PORTB 為通用數(shù)字 I/O 口, 共 8

6、 個(gè)。其使用與 PORTA 基本一樣。主要配置寄存器有:數(shù)據(jù)寄存器 PORTB、數(shù)據(jù)方向寄存 DDRB。上拉電阻控制寄存器 PUCR 和驅(qū)動(dòng)控制寄存器 RDR 與 PORTA 、PORTB、PORTE、PORTK 共用。a.數(shù)據(jù)寄存器 PORTBb.數(shù)據(jù)方向寄存器 DDRB四、原理圖: 器件說明:LCD1602 (16管腳),2個(gè)排阻,4個(gè)10k電阻,一個(gè)1K電阻,飛思卡爾芯片(64管腳) 管腳連接:VSSGND DB6PB6VCCVCCDB7PB7VEEGNDAVCCRSPA0KGNDRWPA1K1PA4EPA2K2PA5DB0PB0K4PA6DB1PB1K4PA7DB2PB2DB3PB3D

7、B4PB4 DB5PB5五、流程圖開始 鎖相環(huán)設(shè)置 初始化LCD是否有鍵按下 否 是 寫指令 寫數(shù)據(jù) 顯示字符 六、程序設(shè)計(jì)1.void PLL_Init(void):內(nèi)部鎖相環(huán)模塊,單片機(jī)使用PLL功能能夠獲得更高的總線頻率,這對(duì)于需要提高單片機(jī)運(yùn)行速度的應(yīng)用場(chǎng)合非常必要。2. void LCD_init(void):初始化LCD1602液晶顯示屏,3. void LCD_write_command(uchar dat):寫指令4. void LCD_write_data(uchar dat):寫數(shù)據(jù)5. void LCD_disp_char(uchar x,uchar y,uchar da

8、t):顯示字符6. void main(void):主函數(shù)#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */#include MC9S12XS128.h unsigned char a=0; unsigned char b=0; unsigned char c=0; unsigned char d=0; void PLL_Init(void) /PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) /鎖相環(huán)時(shí)鐘=2*16*(2+1)

9、/(1+1)=48MHz REFDV=1; /總線時(shí)鐘=48/2=24MHz SYNR=2; while(!(CRGFLG&0x08); CLKSEL=0x80; /選定鎖相環(huán)時(shí)鐘 # define LCD_DB PORTB# define LCD_RS PORTA_PA0# define LCD_RW PORTA_PA1# define LCD_E PORTA_PA2void LCD_init(void);/初始化函數(shù)void LCD_write_command(uchar command);/寫指令函數(shù)void LCD_write_data(uchar dat);/寫數(shù)據(jù)函數(shù)void LC

10、D_disp_char(uchar x,uchar y,uchar dat);/在某個(gè)屏幕位置上顯示一個(gè)字符,X(0-16),y(1-2)/void LCD_check_busy(void);/檢查忙函數(shù)。我沒用到此函數(shù),因?yàn)橥ㄟ^率極低。void delay_n25us(uint n);/延時(shí)函數(shù)/*/*初始化函數(shù)*void LCD_init(void)LCD_write_command(0x38);/設(shè)置8位格式,2行,5x7LCD_write_command(0x0c);/整體顯示,關(guān)光標(biāo),不閃爍LCD_write_command(0x06);/設(shè)定輸入方式,增量不移位LCD_write_

11、command(0x01);/清除屏幕顯示delay_n25us(10);/實(shí)踐證明,我的LCD1602上,用for循環(huán)200次就能可靠完成清屏指令。/LCD_write_command(0x06);/LCD_write_command(0x0c);/*/*寫指令函數(shù)*void LCD_write_command(uchar dat)LCD_DB=dat;delay_n25us(1);LCD_RS=0;delay_n25us(1);/指令LCD_RW=0;delay_n25us(1);/寫入LCD_E=1;delay_n25us(1);/允許LCD_E=0;delay_n25us(1);/實(shí)踐

12、證明,我的LCD1602上,用for循環(huán)1次就能完成普通寫指令。 /*/*寫數(shù)據(jù)函數(shù)*void LCD_write_data(uchar dat)LCD_DB=dat;delay_n25us(1);LCD_RS=1;delay_n25us(1);/數(shù)據(jù)LCD_RW=0;delay_n25us(1);/寫入LCD_E=1;delay_n25us(1);/允許LCD_E=0;delay_n25us(1);delay_n25us(1);/*/*顯示一個(gè)字符函數(shù)*void LCD_disp_char(uchar x,uchar y,uchar dat)uchar address;if(y=1) add

13、ress=0x80+x;else address=0xc0+x;LCD_write_command(address);LCD_write_data(dat);/*/*檢查忙函數(shù)*void LCD_check_busy() /實(shí)踐證明,在我的LCD1602上,檢查忙指令通過率極低,以 /至于不能正常使用LCD。因此我沒有再用檢查忙函數(shù)。而使do /用了延時(shí)的方法,延時(shí)還是非常好用的。我試了一下,用 LCD_E=0; /for循環(huán)作延時(shí),普通指令只要1次循就可完成。清屏指令 LCD_RS=0; /要用200次循環(huán)便能完成。 LCD_RW=1; LCD_DB=0xff; LCD_E=1; while

14、(LCD_DB7=1);*/*延時(shí)函數(shù)*void delay_n25us(uint n) uint i=0; uchar j=0; for(i=n;i0;i-) for(j=0;j2;j+); /在這個(gè)延時(shí)循環(huán)函數(shù)中我只做了2次循環(huán), /實(shí)踐證明我的LCD1602上普通的指令只需1次循環(huán)就能可靠完成。/*void check_key(void) /判斷按鍵是否可以控制單片機(jī)(如果鍵入正常,則單片機(jī)上的LED會(huì)亮 if(!PORTAB_PA4) PORTE_PE5 = 0; a=1; else if(!PORTAB_PA5) PORTE_PE5 = 0; a=2; else if(!PORTAB

15、_PA6) PORTE_PE5 = 0; a=3; else if(!PORTAB_PA7) PORTE_PE5 = 0; a=4; else PORTE_PE5 = 1;/*主函數(shù)*void port_init() DDRB=0XFF; DDRA=0XFF; PORTB=0XFF;void main(void) /PLL_Init(); port_init(); LCD_init(); DDRE_DDRE5 = 1; PORTE_PE5 = 1; /不亮 /*DDRA_DDRA0 = 1; DDRA_DDRA1 = 1; DDRA_DDRA2 = 1; DDRA_DDRA3 = 1;*/ D

16、DRA_DDRA4 = 0; /SET PORTA I/O INPUT DDRA_DDRA5 = 0; DDRA_DDRA6 = 0; DDRA_DDRA7 = 0; PORTAB_PA4 = 1; PORTAB_PA5 = 1; PORTAB_PA6 = 1; PORTAB_PA7 = 1;/LCD_disp_char(4,2,1); for(;) _FEED_COP(); /* feeds the dog */ check_key(); /檢查按鍵 while(1) /*if (a=1) delay(10);*/ /延時(shí)去抖 if(a=1) LCD_disp_char(0,2,1); /在

17、LCD第二行第一位輸出1 /*else if (a=2) delay(10);*/ /延時(shí)去抖 else if(a=2) LCD_disp_char(1,2,2); /在LCD第二行第二位輸出2 /*else if (a=3) delay(10);*/ /延時(shí)去抖 else if(a=3) LCD_disp_char(2,2,3); /在LCD第二行第3位輸出3 /*else if (a=4)/延時(shí)去抖 delay(10);*/ else if(a=4) LCD_disp_char(3,2,4); /在LCD第二行第4位輸出4 / else LCD_disp_char(12,1,0); / /

18、 LCD_disp_char(2,1,2); /* loop forever */ /* please make sure that you never leave main */七、調(diào)試過程(1)使用Altium畫出電路圖:在電路圖設(shè)計(jì)過程中,注明所用器件名稱,規(guī)格,注意管腳的連接,盡可能讓電路原理圖規(guī)范,正確,方便看圖焊接的工作。(2)測(cè)量電路焊接是否正常:焊接好電路板后,首先用萬用表測(cè)試是否連通,將表筆兩端分別置于連接的兩管腳,將萬用表開關(guān)置于分貝檔,若有響聲,則電路已經(jīng)聯(lián)通,分別測(cè)試該設(shè)計(jì)所用的所有管腳。(3)檢驗(yàn)輸入I0:用萬用表分別檢測(cè)4個(gè)按鍵,看按鍵是否起到輸入作用。將萬用表開關(guān)置于電壓檔,分別測(cè)試按鍵按下前后的單片機(jī)電壓。若按鍵前電壓為5v,按鍵后為0,則說明按鍵起到了輸入的作用。(4)輸出IO端口:輸出口主要檢驗(yàn)lcd1602的顯示情況,首先用萬用表測(cè)試,檢查L(zhǎng)CD1602管腳鏈接是否有問題。注:LCD1602的VEE串聯(lián)一個(gè)電位器后接地,通過調(diào)節(jié)電位器,調(diào)節(jié)顯示對(duì)比度,否則即使初始化程序正確,字符也可能顯示不出來。(5)程序:程序中主要注意Lcd1602顯示部分,因?yàn)長(zhǎng)CD1602相對(duì)于單片機(jī)速度比較慢,所以在編寫程序時(shí)應(yīng)注意加延時(shí)。八、遇到的問題及解決辦法 (1)初次焊接LCD1602后,屏幕不亮首先檢查了電路板的焊接,及查閱了LCD1602的數(shù)據(jù)手冊(cè),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論