LCD1602A的显示实验文档格式.docx
《LCD1602A的显示实验文档格式.docx》由会员分享,可在线阅读,更多相关《LCD1602A的显示实验文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
/*
/*延时子程序
voiddelay(intms)
{
inti;
while(ms--)
{
for(i=0;
i<
250;
i++)
_nop_();
}
}
/*检查LCD忙状态
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
bitlcd_busy()
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
result=(bit)(P0&
0x80);
LCD_EN=0;
returnresult;
/*写指令数据到LCD
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
voidlcd_wcmd(ucharcmd)
while(lcd_busy());
LCD_RW=0;
P0=cmd;
/*写显示数据到LCD
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
voidlcd_wdat(uchardat)
LCD_RS=1;
P0=dat;
/*设定显示位置
voidlcd_pos(ucharpos)
lcd_wcmd(pos|0x80);
//数据指针=80+地址变量
/*LCD初始化设定
voidlcd_init()
delay(15);
//等待LCD电源稳定
lcd_wcmd(0x38);
//16*2显示,5*7点阵,8位数据
delay(5);
lcd_wcmd(0x0c);
//显示开,关光标
lcd_wcmd(0x06);
//移动光标
lcd_wcmd(0x01);
//清除LCD的显示内容
/*清屏子程序
voidlcd_clr()
/*闪动子程序
voidflash()
delay(600);
//控制停留时间
lcd_wcmd(0x08);
//关闭显示
delay(200);
//延时
//开显示
/*主程序
main()
uchari,j;
delay(10);
lcd_init();
//初始化LCD
while
(1)
lcd_clr();
lcd_pos(0x10);
//设置显示位置为第一行第17列
i=0;
while(dis1[i]!
='
\0'
)
{//显示字符"
"
lcd_wdat(dis1[i]);
i++;
lcd_pos(0x50);
//设置显示位置为第二行第17列
while(dis2[i]!
lcd_wdat(dis2[i]);
//显示字符"
for(j=0;
j<
16;
j++)//向左移动16格
lcd_wcmd(0x18);
//字符同时左移一格
delay(100);
//控制移动时间
flash();
//闪动二次
汇编程序:
LCD_RSEQUP2.6
LCD_RWEQUP2.5
LCD_ENEQUP2.7
;
*******************************************************************
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H
ACALLLCD_INIT;
LCD初始化
MAIN1:
ACALLCLR_LCD;
清LCD
MOVA,#90H;
在第一行第17列的位置
ACALLLCD_CMD
MOVDPTR,#LINE1;
第一行字符串的起始地址送入DPTR。
ACALLWRITE
MOVA,#0D0H;
在第二行第17列的位置
MOVDPTR,#LINE2;
第二行字符串的起始地址送入DPTR。
MOVR3,#10H;
向左移动16格
LOOPA:
MOVA,#18H;
字符同时左移一格
MOVR5,#03H;
延时375MS
ACALLDELAY125MS
DJNZR3,LOOPA
ACALLDELAY4;
延时1.6s
ACALLDELAY4
MOVR4,#02H;
设置闪烁次数
ACALLFLASH;
开始闪烁
AJMPMAIN1
LINE1:
DB"
BIGBIGWORLD"
00H
LINE2:
ILOVEPUZHONG"
***************************************************************
LCD初始化设定子程序
LCD_INIT:
ACALLDELAY5MS;
延时15MS
等待LCD电源稳定
ACALLDELAY5MS
MOVA,#38H;
16*2显示,5*7点阵,8位数据
ACALLLCD_CMD_NC;
不进行LCD忙检测
MOVA,#08H;
显示关
ACALLLCD_CMD;
进行LCD忙检测
MOVA,#01H;
清除屏幕
MOVA,#0CH;
显示开,关光标
RET
清LCD子程序
CLR_LCD:
写指令数据到LCD
RS=L,RW=L,D0-D7=指令码,E=高脉冲
LCD_CMD:
CALLCHECKBUSY
LCD_CMD_NC:
CLRLCD_RS
CLRLCD_RW
MOVP0,A
SETBLCD_EN
NOP
CLRLCD_EN
写显示数据到LCD
RS=H,RW=L,D0-D7=数据,E=高脉冲
LCD_WDATA:
ACALLCHECKBUSY
SETBLCD_RS
检测LCD控制器忙状态
读数据
RS=L,RW=H,E=H,输出:
D0-D7=数据
P0.7=1,LCD忙,等待。
P0.7=0,LCD闲,可以进行读写操作。
CHECKBUSY:
PUSHACC
MOVP0,#0FFH
SETBLCD_RW
BUSYLOOP:
JBP0.7,BUSYLOOP
POPACC
发送字符串子程序
WRITE:
WRITE1:
CLRA
MOVCA,@A+DPTR
JZWRITE2
INCDPTR
ACALLLCD_WDATA
JMPWRITE1
WRITE2:
闪烁子程序
FLASH:
关闭显示
开显示,关闭光标
DJNZR4,FLASH
延时5MS子程序
LCD初始化使用
DELAY5MS:
MOVR6,#10
DL1:
MOVR7,#249
DL2:
DJNZR7,DL2
DJNZR6,DL1
延时125MS子程序
字符串移动时使用
DELAY125MS:
DL3:
MOVR6,#250
DL4:
DL5:
DJNZR7,DL5
DJNZR6,DL4
DJNZR5,DL3
延时800MS子程序
闪烁时使用
DELAY4:
MOVR5,#40
DL6:
MOVR6,#100
DL7:
MOVR7,#100
DL8:
DJNZR7,DL8
DJNZR6,DL7
DJNZR5,DL6
END