第一篇:?jiǎn)纹瑱C(jī)實(shí)習(xí)報(bào)告
ORG0000H
AJMPMAIN
ORG001BH
LJMPTIME
MAIN:MOVR1,#0H
MOVR7,#1H
MOVTMOD,#10H
MOVTH1,#4CHMOVTL1,#00HSETB
SETB
SETB
ONE:CJNE
MOV
TWO:CJNE
MOV
THREE:CJNE
MOV
FOUR:CJNE
MOV
FIVE:CJNE
MOV
SIX:CJNE
MOV
SEVEN:CJNE
MOV
EIGHT:CJNE
MOV
ONEN:CJNE
MOV
ONEF:CJNE
MOV
ONEQ:CJNE
MOV
AJMP
TIME:MOV
MOV
INC
CJNE
MOV
INC
CJNE
MOVTR1 ET1 EAR7,#1H,TWOP1,#7EHR7,#2H,THREEP1,#3CHR7,#3H,FOURP1,#18HR7,#4H,FIVEP1,#00H R7,#5H,SIXP1,#18H R7,#6H,SEVENP1,#3CHR7,#7H,EIGHTP1,#7EH R7,#8H,ONENP1,#00H R7,#9H,ONEFP1,#01H R7,#0AH,ONEQP1,#06H R7,#0BH,ONEP1,#3CH ONETH1,#4CHTL1,#00H R1 R1,#20H,LASTR1,#0H R7 R7,#0DH,LASTR7,#1H
LAST:RETI
第二篇:?jiǎn)纹瑱C(jī)實(shí)習(xí)報(bào)告
1602液晶顯示設(shè)計(jì)
一、實(shí)驗(yàn)簡(jiǎn)介:
通過(guò)學(xué)習(xí)本門(mén)課程,能夠掌握利用51單片機(jī)完成簡(jiǎn)單項(xiàng)目的應(yīng)用系統(tǒng)設(shè)計(jì)和調(diào)試,掌握單片機(jī)應(yīng)用程序的編寫(xiě)和調(diào)試過(guò)程。本次實(shí)習(xí),我的題目是用51單片機(jī)控制1602液晶顯示指定字符的設(shè)計(jì),需要分別設(shè)計(jì)系統(tǒng)的硬件電路及調(diào)試軟件程序,并能夠正確演示調(diào)試結(jié)果。
二、實(shí)驗(yàn)要求:
1、查找資料學(xué)習(xí)單片機(jī)的LCD點(diǎn)陣顯示原理;
2、理解KST-51的LCD點(diǎn)陣顯示電路圖;
3、編制程序在點(diǎn)陣LCD上實(shí)現(xiàn)字母:我愛(ài)單片機(jī)繪制原理圖;
4、完成實(shí)驗(yàn)報(bào)告的撰寫(xiě)。
三、硬件電路:
(一)89C52系列單片機(jī)
89C52是INTEL公司MCS-51系列單片機(jī)中基本的產(chǎn)品,它內(nèi)置8位中央處理單元、512字節(jié)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM、8k片內(nèi)程序存儲(chǔ)器(ROM)32個(gè)雙向輸入/輸出(I/O)口、3個(gè)16位定時(shí)/計(jì)數(shù)器和5個(gè)兩級(jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)時(shí)鐘振蕩電路。此外,89C52還可工作于低功耗模式,可通過(guò)兩種軟件選擇空閑和掉電模式。在空閑模式下凍結(jié)CPU而RAM定時(shí)器、串行口和中斷系統(tǒng)維持其功能。掉電模式下,保存RAM數(shù)據(jù),時(shí)鐘振蕩停止,同時(shí)停止芯片內(nèi)其它功能。89C52有PDIP(40pin)和PLCC(44pin)兩種封裝形式。
1、單片機(jī)最小系統(tǒng)
KST-51單片機(jī)開(kāi)發(fā)板
最小系統(tǒng)是指單片機(jī)正常工作的最基本的外圍配置,主要包括時(shí)鐘電路、復(fù)位電路等。
51單片機(jī)最小系統(tǒng)是利用XTAL1和XTAL2兩個(gè)引腳外接晶體振蕩器的內(nèi)部時(shí)鐘方式,C1和C2的作用是穩(wěn)定頻率和快速起振,典型值為30pf,晶體振蕩器的振蕩頻率典型值為6 MHZ、12 MHZ或者11.0592 MHZ,系統(tǒng)與PC通信時(shí)常采用11.0592MHZ。
復(fù)位電路設(shè)計(jì)形式包括:上電復(fù)位、按鍵復(fù)位、和利用專(zhuān)業(yè)的復(fù)位芯片進(jìn)行管理,本次設(shè)計(jì)采用按鍵復(fù)位方式。
51單片機(jī)最小系統(tǒng)
2、單片機(jī)引腳功能
51系列單片機(jī)有40個(gè)引腳,包括2個(gè) 電源引腳,2個(gè)外界晶振引腳,4個(gè)控制或 其他電源復(fù)用引腳,32個(gè)I/O引腳。1)主電源引腳(2根)VCC(Pin40):電源輸入,接+5V電源 GND(Pin20):接地線(xiàn) 2)外接晶振引腳(2根)
XTAL1(Pin19)、XTAL2(Pin18)主要用來(lái)構(gòu)成單片機(jī)的時(shí)鐘電路。時(shí)鐘電路用來(lái)產(chǎn)生單片機(jī)工作所需的時(shí)鐘信號(hào)。時(shí)鐘信號(hào)分為內(nèi)部時(shí)鐘方式和外部時(shí)鐘方式。3)控制引腳(4根)
RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。
ALE/PROG(Pin30):地址鎖存允許信號(hào) PSEN(Pin29):外部存儲(chǔ)器讀選通信號(hào)
EA/VPP(Pin31):程序存儲(chǔ)器的內(nèi)外部選通,接低電平從外部程序存儲(chǔ)器讀指令,如果接高電平則從內(nèi)部程序存儲(chǔ)器讀指令。4)輸入/輸出引腳(32根)
P0口是一個(gè)雙功能的8位并行口,可以用做地址/數(shù)據(jù)總線(xiàn),另外P0口還可以作為通用I/O口使用,此時(shí)為準(zhǔn)雙向口,且內(nèi)部無(wú)上拉電阻。
P1口是單功能的I/O口,只能作為通用的I/O口使用,為準(zhǔn)雙向口,但內(nèi)部有上拉電阻。
P2口是一個(gè)雙功能口,為準(zhǔn)雙向口,但內(nèi)部有上拉電阻,P2口功能主要有一下兩個(gè)方面:一是作為高8位地址輸出線(xiàn)使用時(shí),P2口可以輸出外部存儲(chǔ)器的高8位地址,與P0口輸出的低8位地址一起構(gòu)成16位地址,可以尋址64位的地址空間;二是作為通用I/O口使用時(shí),與P1口使用方法一樣。
P3口作為通用I/O口時(shí)使用方法與P1一樣。另外,P3口主要作為第二功能使用。
(二)1602字符液晶
P3口第二功能表
字符型液晶顯示模塊是一種專(zhuān)門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個(gè)字符。字符液晶絕大多數(shù)是基于HD44780液晶芯片的。
1602實(shí)物圖 1、1602LCD的特性
? +5V電壓,對(duì)比度可調(diào) ? 內(nèi)含復(fù)位電路
? 提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能
? 有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAM ? 內(nèi)建有160個(gè)5X7點(diǎn)陣的字型的字符發(fā)生器CGROM ? 8個(gè)可由用戶(hù)自定義的5X7的字符發(fā)生器CGRAM
2、字符型LCD1602接口 引腳2、1為1602的電源和地,引腳15、16 為背光電源,引腳4、5、6為控制端口,引腳7-14為 數(shù)據(jù)端口,以下為各個(gè)端口的詳細(xì)介紹。3、1602存儲(chǔ)器
HD44780內(nèi)置了DDRAM(顯示數(shù)據(jù)存儲(chǔ)RAM)、CGROM(字符存儲(chǔ)ROM)和CGRAM(用戶(hù)自定義RAM)。
DDRAM就是顯示數(shù)據(jù)RAM,用來(lái)寄存待顯示的字符代碼。共80個(gè)字節(jié),其地址和屏幕的對(duì)應(yīng)關(guān)系如下表:
在DDRAM的00H地址處顯示數(shù)據(jù),則必須將00H加上80H,即0X80+0x00,若要在DDRAM的01H處顯示數(shù)據(jù),則必須將01H加上80H即 0X80+0x01。以此類(lèi)推。
字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如下表所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常 用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼。4、1602指令表
對(duì)DDRAM的內(nèi)容和地址操作,HD44780的指令集及其設(shè)置說(shuō)明,共有11條指令: 1)清屏指令
功能:<1> 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入“空白”的字符碼20H;<2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;<3> 將地址計(jì)數(shù)器(AC)的值設(shè)為0。
2)光標(biāo)歸位指令
功能:<1> 把光標(biāo)撤回到顯示器的左上方;<2> 把地址計(jì)數(shù)器(AC)的值設(shè)置為0;<3> 保持DDRAM的內(nèi)容不變 3)輸入模式設(shè)置指令
功能:設(shè)定每次寫(xiě)入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫(xiě)入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示: 位名 設(shè)置
I/D 0=寫(xiě)入新數(shù)據(jù)后光標(biāo)左移 1=寫(xiě)入新數(shù)據(jù)后光標(biāo)右移
S 0=寫(xiě)入新數(shù)據(jù)后顯示屏不移動(dòng) 1=寫(xiě)入新數(shù)據(jù)后顯示屏整體右移1個(gè)字 4)顯示開(kāi)關(guān)控制指令
功能:控制顯示器開(kāi)/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下:
位名 設(shè)置 D 0=顯示功能關(guān) 1=顯示功能開(kāi) C 0=無(wú)光標(biāo) 1=有光標(biāo) B 0=光標(biāo)不閃爍 1=光標(biāo)閃爍 5)設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令
功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下: S/C R/L 設(shè)定情況
0 0 光標(biāo)左移1格,且AC值減1 0 1 光標(biāo)右移1格,且AC值加1 1 0 顯示器上字符全部左移一格,但光標(biāo)不動(dòng) 1 1 顯示器上字符全部右移一格,但光標(biāo)不動(dòng) 6)功能設(shè)定指令
功能:設(shè)定數(shù)據(jù)總線(xiàn)位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下: 位名 設(shè)置
DL 0=數(shù)據(jù)總線(xiàn)為4位 1=數(shù)據(jù)總線(xiàn)為8位 N 0=顯示1行 1=顯示2行 F 0=5×7點(diǎn)陣/每字符 1=5×10點(diǎn)陣/每字符 7)設(shè)定CGRAM地址指令
功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。8)設(shè)定DDRAM地址指令
功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。9)讀取忙信號(hào)或AC地址指令
功能:<1> 讀取忙碌信號(hào)BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時(shí)無(wú)法接收單片機(jī)送來(lái)的數(shù)據(jù)或指令;當(dāng)BF=0時(shí),液晶顯示器可以接收單片機(jī)送來(lái)的數(shù)據(jù)或指令;<2> 讀取地址計(jì)數(shù)器(AC)的內(nèi)容。10)數(shù)據(jù)寫(xiě)入DDRAM或CGRAM指令
功能:<1> 將字符碼寫(xiě)入DDRAM,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符;<2> 將用戶(hù)自己設(shè)計(jì)的圖形存入CGRAM。11)從CGRAM或DDRAM讀出數(shù)據(jù)的指令
功能:讀取DDRAM或CGRAM中的內(nèi)容。
5、時(shí)序圖
(1)讀狀態(tài) 輸入:RS=0,RW=1,E=1 讀數(shù)據(jù) 輸入:RS=1,RW=1,E=1(2)寫(xiě)指令 輸入:RS=0,RW=0,E=下降沿脈沖,DB0~DB7=指令碼 寫(xiě)數(shù)據(jù) 輸入:RS=1,RW=0,E=下降沿脈沖,DB0~DB7=數(shù)據(jù)
四、實(shí)習(xí)結(jié)果與討論:
通過(guò)程序的編輯在1602型LCD上實(shí)現(xiàn)了顯示英文字符,通過(guò)本次實(shí)驗(yàn)的學(xué)習(xí)進(jìn)一步熟悉了1602型LCD,對(duì)其操作有了更多的心得體會(huì),在本次實(shí)驗(yàn)中獲益匪淺。
五、實(shí)驗(yàn)程序: #include
sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;
uchar code dis1[] = {“woai danpianji”};uchar code dis2[] = {“huizhi yuanlitu”};uchar code dis3[] = {“chen jian”};uchar code dis4[] = {“ dianzihua 1101 ”};
void delay(int ms){ int i;while(ms--){ for(i = 0;i< 250;i++){ _nop_();_nop_();_nop_();_nop_();} } }
bit lcd_busy(){ bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();result =(bit)(P0&0x80);LCD_EN = 0;return result;} void lcd_wcmd(uchar cmd){ while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;}
void lcd_wdat(uchar dat){ while(lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;}
void lcd_pos(uchar pos){ lcd_wcmd(pos|0x80);//數(shù)據(jù)指針=80+地址變量 }
void lcd_init(){ lcd_wcmd(0x38);//16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù) delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x0c);//顯示開(kāi),關(guān)光標(biāo) delay(5);lcd_wcmd(0x06);//移動(dòng)光標(biāo) delay(5);lcd_wcmd(0x01);//清除LCD的顯示內(nèi)容 delay(5);}
void flash(){ delay(600);//控制停留時(shí)間 lcd_wcmd(0x08);//關(guān)閉顯示 delay(200);//延時(shí) lcd_wcmd(0x0c);//開(kāi)顯示 delay(200);//延時(shí) lcd_wcmd(0x08);//關(guān)閉顯示 delay(200);//延時(shí) lcd_wcmd(0x0c);//開(kāi)顯示 delay(200);} main(){ uchar i;delay(10);lcd_init();// 初始化LCD
while(1){ lcd_wcmd(0x06);//向右移動(dòng)光標(biāo)
lcd_pos(0);//設(shè)置顯示位置為第一行的第1個(gè)字符 i = 0;while(dis1[i]!= '