版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、MS基于1602字符型液晶顯示器的顯示系統(tǒng) 姓名:楊越 班級:電子11-1 學(xué)號:1104001041、 實(shí)習(xí)目的(1)了解飛思卡爾單片機(jī)的基本原理,掌握其基本的工作流程。(2)了解LCD1602的基本原理及用法。(3)能夠熟練使用CodeWarrior軟件編寫C語言程序,使用BDM仿真器下載程序。(4)能夠熟練焊接電路板。二、實(shí)驗(yàn)設(shè)備與器件CodeWarrior軟件,BDM仿真器,萬用電路板,飛思卡爾單片機(jī),LCD1602液晶顯示器,三、實(shí)驗(yàn)內(nèi)容內(nèi)容:利用飛思卡爾單片機(jī)制作基于1602字符液晶顯示器的顯示系統(tǒng)要求:用四個按鍵控制,按下第一個按鍵顯示1,按下第二個按鍵顯示2,以此類推。(1)L
2、CD1602液晶顯示器的原理:1602共16個管腳,但是編程用到的主要管腳不過三個,分別為:RS(數(shù)據(jù)命令選擇端),R/W(讀寫選擇端),E(使能信號);以后編程便主要圍繞這三個管腳展開進(jìn)行初始化,寫命令,寫數(shù)據(jù)。以下具體闡述這三個管腳:RS為寄存器選擇,高電平選擇數(shù)據(jù)寄存器,低電平選擇指令寄存器。R/W為讀寫選擇,高電平進(jìn)行讀操作,低電平進(jìn)行寫操作。E端為使能端,后面和時序聯(lián)系在一起。 除此外,D0D7分別為8位雙向數(shù)據(jù)線。操作時序: RSR/W操作說明00寫入指令碼D0D701讀取輸出的D0D7狀態(tài)字10寫入數(shù)據(jù)D0D711從D0D
3、7讀取數(shù)據(jù)注:關(guān)于E=H脈沖開始時初始化E為0,然后置E為1,再清0.讀取狀態(tài)字時,注意D7位,D7=1,禁止讀寫操作;D7=0,允許讀寫操作;所以對控制器每次進(jìn)行讀寫操作前,必須進(jìn)行讀寫檢測。(即后面的讀忙子程序)指令集: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
4、160; 地址加1,當(dāng)寫入數(shù)據(jù)的時候光標(biāo)右移0x02 地址計(jì)數(shù)器AC=0;(此時地址為0x80) 光標(biāo)歸原點(diǎn),但是DDRAM中斷內(nèi)容不變0x18 光標(biāo)和顯示一起向左移動(2)飛思卡爾單片機(jī)的功能及特點(diǎn):MC9S12XS128 是 16 位單片機(jī),由 16 位中央處理單元(CPU12X)、128KB 程序、Flash(P-lash)、8KB RAM、8KB 數(shù)據(jù) Flash(D-lash)組成片內(nèi)存儲器。主要功能模塊包括:內(nèi)部存儲器, 內(nèi)部 PLL 鎖相環(huán)模塊 ,2 個異步串口通訊 SCI ,1個串行外設(shè)接口 SPI MSCAN 模塊
5、,1 個 8 通道輸入/輸出比較定時器模塊 TIM ,周期中斷定時器模塊 PIT ,16 通道 A/D 轉(zhuǎn)換模塊 ADC ,1 個 8 通道脈沖寬度調(diào)制模塊 PWM ,輸入/輸出數(shù)字 I/O 口。 本次設(shè)計(jì)中主要用到PORTA,PORTB端口:PORTA:PORTA 為通用 I/O 口, 共 8 個,作為通用數(shù)字 I/O 口使用,未集成特殊功能.主要配置寄存器有:數(shù)據(jù)寄存器 PORTA、數(shù)據(jù)方向寄存 DDRA、上拉電阻控制寄存器PUCR 和驅(qū)動控制寄存器 RDR。a. 數(shù)據(jù)寄存器 PORTA通過寫 1/0 使單片機(jī)對應(yīng)引腳輸出高低電平,或通過讀取數(shù)據(jù)寄存器獲得對應(yīng)引腳的高低電平值 。例:POR
6、TA_PB0=1b. 數(shù)據(jù)方向寄存器 DDRADDRA 寄存器配置引腳為輸出口還是輸入口,“0”,輸入口;“1”,輸出口。MCU 復(fù)位后,DDRA 值為 0x00, 引腳默認(rèn)為輸入口。例:DDRA=0xFF /配置 PORTA 口為輸出 PORTB:PORTB 為通用數(shù)字 I/O 口, 共 8 個。其使用與 PORTA 基本一樣。主要配置寄存器有:數(shù)據(jù)寄存器 PORTB、數(shù)據(jù)方向寄存 DDRB。上拉電阻控制寄存器 PUCR 和驅(qū)動控制寄存器 RDR 與 PORTA 、PORTB、PORTE、PORTK 共用。a.數(shù)據(jù)寄存器 PORTBb.數(shù)據(jù)方向寄存器 DDRB四、原理圖: 器件說明:LCD1
7、602 (16管腳),2個排阻,4個10k電阻,一個1K電阻,飛思卡爾芯片(64管腳) 管腳連接:VSSGND DB6PB6VCCVCCDB7PB7VEEGNDAVCCRSPA0KGNDRWPA1K1PA4EPA2K2PA5DB0PB0K4PA6DB1PB1K4PA7DB2PB2DB3PB3DB4PB4 DB5PB5五、流程圖開始 鎖相環(huán)設(shè)置 初始化LCD是否有鍵按下 否 是 寫指令 寫數(shù)據(jù) 顯示字符 六、程序設(shè)計(jì)1.void PLL_Init(void):內(nèi)部鎖相環(huán)模塊,單片機(jī)使用PLL功能能夠獲得更高的總線頻率,這對于需要提高單片機(jī)運(yùn)行速度的應(yīng)用場合非常必要。2. void LCD_ini
8、t(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 dat):顯示字符6. void main(void):主函數(shù)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions
9、 */#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)時鐘=2*16*(2+1)/(1+1)=48MHz REFDV=1; /總線時鐘=48/2=24MHz SYNR=2; while(!(CRGFLG&0x08); CLKSEL=0x80; /選定鎖相環(huán)時鐘 # define LCD_DB PO
10、RTB# 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 LCD_disp_char(uchar x,uchar y,uchar dat);/在某個屏幕位置上顯示一個字符,X(0-16),y(1-2)/void LCD_check_busy(void);/檢查忙函數(shù)。我沒用到此函
11、數(shù),因?yàn)橥ㄟ^率極低。void delay_n25us(uint n);/延時函數(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_command(0x01);/清除屏幕顯示delay_n25us(10);/實(shí)踐證明,我的LCD1602上,用for循環(huán)200次就能可靠完成清屏指令。/LCD_write_command(0x06);/LCD_writ
12、e_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í)踐證明,我的LCD1602上,用for循環(huán)1次就能完成普通寫指令。 /*/*寫數(shù)據(jù)函數(shù)*void LCD_write_data(uchar dat)LCD_DB=dat;delay_n25us(1);LCD_RS=1;d
13、elay_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);/*/*顯示一個字符函數(shù)*void LCD_disp_char(uchar x,uchar y,uchar dat)uchar address;if(y=1) address=0x80+x;else address=0xc0+x;LCD_write_command(address);LCD_write_data(dat);/*/*檢查忙函數(shù)*void LCD_check_busy(
14、) /實(shí)踐證明,在我的LCD1602上,檢查忙指令通過率極低,以 /至于不能正常使用LCD。因此我沒有再用檢查忙函數(shù)。而使do /用了延時的方法,延時還是非常好用的。我試了一下,用 LCD_E=0; /for循環(huán)作延時,普通指令只要1次循就可完成。清屏指令 LCD_RS=0; /要用200次循環(huán)便能完成。 LCD_RW=1; LCD_DB=0xff; LCD_E=1; while(LCD_DB7=1);*/*延時函數(shù)*void delay_n25us(uint n) uint i=0; uchar j=0; for(i=n;i>0;i-) for(j=0;j<2;j+); /在這個
15、延時循環(huán)函數(shù)中我只做了2次循環(huán), /實(shí)踐證明我的LCD1602上普通的指令只需1次循環(huán)就能可靠完成。/*void check_key(void) /判斷按鍵是否可以控制單片機(jī)(如果鍵入正常,則單片機(jī)上的LED會亮 if(!PORTAB_PA4) PORTE_PE5 = 0; a=1; else if(!PORTAB_PA5) PORTE_PE5 = 0; a=2; else if(!PORTAB_PA6) PORTE_PE5 = 0; a=3; else if(!PORTAB_PA7) PORTE_PE5 = 0; a=4; else PORTE_PE5 = 1;/*主函數(shù)*void port
16、_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;*/ DDRA_DDRA4 = 0; /SET PORTA I/O INPUT DDRA_DDRA5 = 0; DDRA_DDRA6 = 0; DDRA_DDRA7 = 0; PORTAB_PA4 = 1; P
17、ORTAB_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);*/ /延時去抖 if(a=1) LCD_disp_char(0,2,'1'); /在LCD第二行第一位輸出1 /*else if (a=2) delay(10);*/ /延時去抖 else if(a=2) LCD_disp_char(1,2,
18、39;2'); /在LCD第二行第二位輸出2 /*else if (a=3) delay(10);*/ /延時去抖 else if(a=3) LCD_disp_char(2,2,'3'); /在LCD第二行第3位輸出3 /*else if (a=4)/延時去抖 delay(10);*/ else if(a=4) LCD_disp_char(3,2,'4'); /在LCD第二行第4位輸出4 / else LCD_disp_char(12,1,'0'); / / LCD_disp_char(2,1,'2'); /* loop
19、forever */ /* please make sure that you never leave main */七、調(diào)試過程(1)使用Altium畫出電路圖:在電路圖設(shè)計(jì)過程中,注明所用器件名稱,規(guī)格,注意管腳的連接,盡可能讓電路原理圖規(guī)范,正確,方便看圖焊接的工作。(2)測量電路焊接是否正常:焊接好電路板后,首先用萬用表測試是否連通,將表筆兩端分別置于連接的兩管腳,將萬用表開關(guān)置于分貝檔,若有響聲,則電路已經(jīng)聯(lián)通,分別測試該設(shè)計(jì)所用的所有管腳。(3)檢驗(yàn)輸入I0:用萬用表分別檢測4個按鍵,看按鍵是否起到輸入作用。將萬用表開關(guān)置于電壓檔,分別測試按鍵按下前后的單片機(jī)電壓。若按鍵前電壓為5v,按鍵后為0,則說明按鍵起到了輸入的作用。(4)輸出IO端口:輸出口主要檢驗(yàn)lcd1602的顯示情況,首先用萬用表測試,檢查LCD1602管腳鏈接是否有問題。注:LCD1602的VEE串聯(lián)一個電位器后接地,通過調(diào)節(jié)電位器,調(diào)節(jié)顯示對比度,否則即使初始化程序正確,字符也可能顯示不出來。(5)程序:程序中主要注意Lcd1602顯示部分,因?yàn)長CD1602相對于單片機(jī)速度比較慢,所以在編寫程序時應(yīng)注意加延時。八、遇到的問題及解決辦法 (1)初次焊接LCD1602后,屏幕不亮首先檢
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國紅外線燃燒器數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國天然珍珠柔和卸妝露數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國雙耳健康節(jié)能復(fù)合鐵鍋數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年中國鈣生化試劑市場調(diào)查研究報(bào)告
- 2025至2031年中國電腦儲存全鎖頻道發(fā)生器行業(yè)投資前景及策略咨詢研究報(bào)告
- 從評價(jià)附加語看英語的主客分離特質(zhì)和漢語的主客融合特質(zhì)
- 二零二五年度醫(yī)療器械出口合同執(zhí)行與質(zhì)量監(jiān)管協(xié)議3篇
- 年薪制勞動合同2025版:高科技企業(yè)人才激勵范本4篇
- 專用會議接待:2024酒店住宿與餐飲服務(wù)合同2
- 二零二五年度出軌男方離婚財(cái)產(chǎn)分割及子女未來職業(yè)規(guī)劃合同4篇
- 江蘇省蘇州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 銷售與銷售目標(biāo)管理制度
- 人教版(2025新版)七年級下冊英語:寒假課內(nèi)預(yù)習(xí)重點(diǎn)知識默寫練習(xí)
- 2024年食品行業(yè)員工勞動合同標(biāo)準(zhǔn)文本
- 2025年第一次工地開工會議主要議程開工大吉模板
- 全屋整裝售后保修合同模板
- 高中生物學(xué)科學(xué)推理能力測試
- GB/T 44423-2024近紅外腦功能康復(fù)評估設(shè)備通用要求
- 2024-2030年中國減肥行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資研究報(bào)告
- 運(yùn)動技能學(xué)習(xí)
- 單側(cè)雙通道內(nèi)鏡下腰椎間盤摘除術(shù)手術(shù)護(hù)理配合1
評論
0/150
提交評論