LCD1602汇编显示程序
1602液晶滚动显示 C语言详细程序

/****************************************************************************** *** 描述: LCD1602 滚动显示** 显示方式:* * 1、从左到右逐字显示,闪动二次,清屏。
* * 2、再从右到左逐字显示,闪动二次,清屏。
* * 3、周期性地重复上述显示方式。
* ******************************************************************************* */#include <reg51.h>#include <intrins.h>typedef unsigned char BYTE;typedef bit BOOL;sbit LCD_RS = P2^6;sbit LCD_RW = P2^5;sbit LCD_EP = P2^7;BYTE code dis1[] = {" WELCOME TO "};BYTE code dis2[] = {" "};BYTE code dis3[] = {" OT EMOCLEW "};BYTE code dis4[] = {" MOC.NIHCERP.WWW "};delay(int ms){ // 延时子程序int i;while(ms--){for(i = 0; i< 250; i++){_nop_();_nop_();_nop_();_nop_();}}}BOOL lcd_bz(){ // 测试LCD忙碌状态BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P0 & 0x80);LCD_EP = 0;return result;}lcd_wcmd(BYTE cmd){ // 写入指令数据到LCD while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}lcd_pos(BYTE pos){ //设定显示位置lcd_wcmd(pos | 0x80);}lcd_wdat(BYTE dat){ //写入字符显示数据到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}lcd_init(){ //LCD初始化设定lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据delay(1);lcd_wcmd(0x0c); //显示开,关光标delay(1);lcd_wcmd(0x06); //移动光标delay(1);lcd_wcmd(0x01); //清除LCD的显示内容delay(1);}main(){BYTE i;lcd_init(); // 初始化LCDdelay(10);while(1){lcd_wcmd(0x06); //向右移动光标lcd_pos(0); //设置显示位置为第一行的第1个字符i = 0;while(dis1[ i ] != '\0'){ //显示字符"WLCOME TO"lcd_wdat(dis1[ i ]);i++;delay(30); //控制两字之间显示速度}lcd_pos(0x40); //设置显示位置为第二行第1个字符i = 0;while(dis2[ i ] != '\0'){lcd_wdat(dis2[ i ]); //显示字符" "i++;delay(30); //控制两字之间显示速度}delay(800); //控制停留时间lcd_wcmd(0x01); //清除LCD的显示内容delay(1);lcd_wcmd(0x04); //向左移动光标lcd_pos(15); //设置显示位置为第一行的第16个字符i = 0;while(dis3[ i ] != '\0'){ //显示字符"WLCOME TO"lcd_wdat(dis3[ i ]);i++;delay(30); //控制两字之间显示速度}lcd_pos(0x4F); //设置显示位置为第二行的第16个字符i = 0;while(dis4[ i ] != '\0'){lcd_wdat(dis4[ i ]); //显示字符" "i++;delay(30); //控制两字之间显示速度}delay(800); //控制停留时间lcd_wcmd(0x01); //清除LCD的显示内容delay(200); //控制两屏转换时间}}。
LCD1602汇编

1602汇编指令程序ORG 0000HAJMP STARTORG 0013HLJMP INT1ZDORG 0030HRS BIT P3.5RW BIT P3.6E BIT P3.4L0 EQU P0START:CLR RS //初始化CLR RWMOV L0,#38HSETB EACALL DELAYCLR ECLR RSCLR RWMOV L0,#06HSETB EACALL DELAYCLR ECLR RSCLR RWMOV L0,#0CH //选中第二行显示SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#' ' //显示空白SETB EACALL DELAYCLR ECLR RSCLR RWMOV L0,#00HSETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'w' //显示字母 WSETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'w' //显示字母 WSETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'w' //显示字母 WSETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'.' //显示 .SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'1' //显示SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'0'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'0'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'8'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'6'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#' 'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'.'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'c'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'o'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'m'SETB EACALL DELAYCLR ECLR RSCLR RWMOV L0,#0C0HSETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'t'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'e'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'l'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'l'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#':'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'0'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'2'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'8'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'-'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'7'ACALL DELAYCLR ESETB RSCLR RWMOV L0,#'8'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'-'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'5'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'7'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'3'SETB EACALL DELAYCLR ESETB RSCLR RWMOV L0,#'6'SETB EACALL DELAYSJMP $DELAY:MOV R5,#10 //延时子程序 D0:MOV R6,#10D1:DJNZ R6,D1DJNZ R5,D0RETEND。
LCD1602-51单片机汇编程序.

1602汇编程序, 51单片机汇编程序,仅需修改引脚定义即可。
晶振大小 12M ,程序测试完全正确。
内部包含写数据、写命令(包括读忙和不读忙、初始化等子函数。
调用时先给 LCD_DAT赋值,给出需要写入的数据或命令,然后调用。
; 端口引脚定义区LCD_RS BIT P2.4 ;1602数据命令选择端口LCD_RW BIT P2.5 ;1602读写选择端口LCD_EN BIT P2.6 ;1602使能端口LCD_DATA EQU P0 ;1602数据端口; 变量声明区ALL_FLAG EQU 20H ; 标志位LCD_FLAG EQU ALL_FLAG.7 ;1602读忙标志位LCD_DAT EQU 30H ;1602数据命令字DELAYED EQU 31H ; 延时字/*****************************************1602读命令函数,高位存至 LCD_LAG中*****************************************/LCD_R_DATA:MOV LCD_DATA,#0FFHLCD_BUSY: CLR LCD_RSSETB L CD_RWNOPSETB L CD_ENNOPMOV Acc,LCD_DATAMOV C,Acc.7MOV LCD_FLAG,CCLR LCD_ENNOPJB LCD_FLAG,LCD_BUSYRET/***************************************** 1602写数据函数,数据存在 LCD_DAT*****************************************/ LCD_W_DATA:LCALL LCD_R_DATASETB L CD_RSCLR LCD_RWNOPMOV LCD_DATA,LCD_DATSETB L CD_ENNOPCLR LCD_ENRET/***************************************** 1602写命令函数,命令存在LCD_DAT,检测忙信号 *****************************************/LCD_W_CMD:LCALL LCD_R_DATACLR LCD_RSCLR LCD_RWNOPMOV LCD_DATA,LCD_DAT SETB L CD_ENNOPCLR LCD_ENRET/***************************************** 1602写命令函数,命令存在LCD_DAT,不检测忙信号 *****************************************/ LCD_CMD:CLR LCD_RSCLR LCD_RWNOPMOV LCD_DATA,LCD_DAT SETB L CD_ENNOPCLR LCD_ENRET/***************************************** 1602初始化函数*****************************************/ LCD_INIT: MOV DELAYED,#30LCALL DELAY_MSMOV LCD_DAT,#38HLCALL LCD_CMDMOV DELAYED,#10LCALL DELAY_MSMOV LCD_DAT,#38HLCALL LCD_CMDMOV DELAYED,#10LCALL DELAY_MSMOV LCD_DAT,#38HLCALL LCD_CMDMOV DELAYED,#10LCALL DELAY_MSMOV LCD_DAT,#038HLCALL LCD_W_CMDMOV LCD_DAT,#08HLCALL LCD_W_CMDMOV LCD_DAT,#01HLCALL LCD_W_CMDMOV LCD_DAT,#06HLCALL LCD_W_CMDMOV LCD_DAT,#0CHLCALL LCD_W_CMDRET/*****************************************延时函数,延时时间为 DELAYED*0.5毫秒 0~100毫秒的延时*****************************************/DELAY_MS:MOV R7,DELAYEDD1: MOV R6,#0F8HD2: DJNZ R6,D2DJNZ R7,D1RET/*****************************************延时函数,延时时间为 DELAYED*2微秒 0~500微秒的延时*****************************************/DELAY_US:MOV R7,ADU1:DJNZ R7,DU1RET。
LCD1602显示的程序

WriteOneChar(0xbe);//发温度转换命令
readtemp[0]=ReadOneChar();//读取相应的温度值低位
readtemp[1]=ReadOneChar();//读取相应的温度值高位
sflag[h]=0;
delayy(20);
}
//18B20读一个字节
ReadOneChar(void)
{
unsigned char i="0";
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
}
}
readtemp[1]=readtemp[1]<<4;//将高低温度和为一个字节,本方法避免了*0。0625,很简单,很准确
readtemp[1]=readtemp[1] & 0x70;
xx="readtemp"[0];
{
displaybuf[k+1]= fentemp%10;
fentemp= fentemp/10;
}
displaybuf[k]= fentemp;
k+=2;
xx="xx">>4;
xx="xx"& 0x0f;
readtemp[1]=readtemp[1] | xx;
temp[h]=readtemp[1];
fentempபைடு நூலகம்"temp"[h];//拆分两路温度值送入显示单元
在LCD1602上显示0--99999 源程序

======================================== 作者:Ni的年少W^o轻狂创建时间:2008.06.25========================================//==========程序功能===========// 在LCD1602上显示0--99999//=============================#include<reg51.h>#include"LCD1602.h"voidIntTOStr(uintn,uchar *str);ucharstr[10 ];//存储数据main(){uint count;LCD_init();LCD_write_command(0x01);//清屏显示delay(200);gotoxy(2,1);LCD_display("2008/06/27");gotoxy(3,2);LCD_display("01:56:56");delay1(2000);LCD_write_command(0x01);//清屏显示delay(200);gotoxy(2,1);LCD_display("LCD1602 TEST");gotoxy(4,2);LCD_display("SUCCESS");delay1(2000);LCD_write_command(0x01);//清屏显示delay(200);while(1){IntTOStr(count++,str);gotoxy(4,2);LCD_display(str);delay1(100);}}voidIntTOStr(uintn,uchar *str){uchar a[5];uchari,j;a[0]=(n/10000)%10;a[1]=(n/1000)%10;a[2]=(n/100)%10;a[3]=(n/10)%10;a[4]=(n/1)%10;for(i=0;i<5;i++)a[i]='0'+a[i];for(i=0; a[i]=='0' && i<=3; i++ );for(j=0;j<i;j++){*str=' '; str++;}for(; i<5; i++){*str=a[i];str++;}*str='\0';}========LCD驱动程序========#define LCD_DB P0//定义LCD的数据端口sbit LCD_RS=P2^0;sbit LCD_RW=P2^1;sbit LCD_E=P2^2;#define uchar unsigned char#define uint unsigned int//===========延时子函数======================== void delay(uint x){uinti,j;for(i=x;i>0;i--)for(j=0;j<2;j++);}//==================写指令函数================= voidLCD_write_command(uchar command){LCD_DB=command;LCD_RS=0;//指令LCD_RW=0;//写入LCD_E=1;LCD_E=0;delay(1);//等待执行完毕。
单片机LCD1602显示字符和数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序1,单片机和LCD1602的连线,和程序结果显示如下图:2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。
程序如下:RS EQU P2.4RW EQU P2.5E EQU P2.6ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HMOV 40H,#01HMOV 41H,#02HMOV 42H,#03HMOV 43H,#04HMOV 44H,#05HMOV 45H,#06HMOV 46H,#07HACALL DD1 ;DD1是LCD初始化MOV DPTR,#TABLE1ACALL DD2;DD2是LCD第一行显示TABLE1ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据SJMP $DD1: MOV p0,#01H ;清屏CALL ENABLEMOV p0,#38H ;显示功能CALL ENABLEMOV p0,#0FH ;显示开关控制CALL ENABLEMOV p0,#06H ;显示光标右移加1CALL ENABLERETDD2: MOV p0,#80H;第一行的开始位置cALL ENABLECALL WRITE1;到TABLE1取码?RETENABLE: CLR RS ;送命令CLR RWCLR ECALL DELAYSETB ERETWRITE1: MOV R1,#00H ;显示table中的值A1: MOV A,R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1CJNE A,#00H,A1 ;是否到00hRETWRITE2:MOV p0,A ;显示SETB RSCLR RWCLR ECALL DELAYSETB ERET(动态显示频率、幅度核心程序设计思想:可以利用如下程序)MOV40H,#01HMOV41H,#02HMOV42H,#03H)MOV R1,#40H;显示table中的值MOV A,R1;到table取码MOVC A,@A+DPTRMOV P0,AINC R1LJMP LOOPDELAY: PUSH ACCMOV A,R4MOV R4,#05D1: MOV R5,#0FFHDJNZ R5,$DJNZ R4,D1MOV R4,APOP ACCRETPPP: MOV p0,#0C0H;第二行的位置CALL ENABLEMOV DPTR,#TAB;显示CALL WRITE3;到TABLE2 取码RETWRITE3: MOV R1,#40H ;显示table中的值MOV R7,#07HA2: MOV A,@R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1DJNZ R7,A2 ;是否到00hRETtable1: db"XIAORENGUANG ",00H TAB: DB 30H, 31H, 32H, 33HDB 34H, 35H, 36H, 37HDB 38H, 39HEND。
LCD1602原理与显示程序

LCD1602原理与显示程序LCD1602的原理是基于液晶显示技术。
液晶是一种特殊的物质,具有双折射性质,即能将入射的光线分成两束,通过改变液晶分子的排列方式,可以改变其双折射的性质,从而使得光线透过液晶时会发生偏转。
LCD1602利用这一原理,在液晶显示面板上设置了16列和2行的像素点阵,通过控制每个像素点的液晶分子的排列方式,来实现字符的显示。
初始化是指在使用LCD1602之前,需要对其进行一系列的初始化操作,以确保其正常工作。
具体的初始化步骤如下:1.设置通信协议:LCD1602可以通过并行接口和串行接口进行通信,根据具体的接口方式,选择相应的通信协议。
2.设置工作模式:LCD1602有两种工作模式,分别是4位模式和8位模式。
选择适合的工作模式,并设置相应的控制寄存器。
3.设置显示模式:LCD1602可以显示不同的字符集,如英文字符、数字、特殊符号等。
选择合适的字符集,并设置显示模式。
4.清除显示:设置清除显示寄存器,将显示区域清空。
5.光标设置:设置光标位置和显示方式,如光标是否闪烁、光标位置等。
完成初始化后,就可以将要显示的数据写入LCD1602数据写入是指将要显示的字符或数字写入到LCD1602的显示区域。
具体的数据写入步骤如下:1.设置光标位置:根据需要显示的字符位置,设置光标的位置。
2.数据写入:通过通信接口,将要显示的数据写入到LCD1602的数据寄存器。
3.延时:由于LCD1602的刷新速度较慢,需要等待一定的时间,使得数据能够稳定显示在液晶屏上。
4.更新光标位置:根据数据的长度和显示方式,更新光标的位置。
通过以上的步骤,就可以实现LCD1602的显示功能。
总结起来,LCD1602的原理是基于液晶显示技术,通过控制液晶分子排列方式来实现字符的显示。
其显示程序包括初始化和数据写入两个方面的内容,通过设置通信协议、工作模式、显示模式等参数,并将要显示的数据写入到LCD1602的显示区域,来实现字符的显示。
LCD1602 显示程序

TMOD=0x00; //设定定时器
TR0=1;//定时器0开
set_lcd1602(); //初始化LCD1602
view_lcd1602(0x8f,table);
cgram_set_lcd1602(0x40,tt1);
cgram_set_lcd1602(0x48,tt2);
w_comd(0xca); w_data(0x00); w_data(0x01); //自定义字符显示
{ int j;
w_comd(addr); //写入地址
while(*i>0)
{ w_data(*i); //写入数据
i++;
for(j=0;jdelay(0x15,0xa0);
w_comd(0x18); //左移指令
}
}
/////////////////////////////////////// cgram写入程序段
ucharcode tt2[]={0x0E,0x0E,0x00,0x1F,0x1F,0x0C,0x19,0x1F}; //云
///////////////////////////////////////
void delay(uchar H,uchar L) //定时器延时程序段
{ TF0=0;TH0=H;TL0=L;
w_comd(0x02); //地址指针归位
delay(0xf9,0x98);
w_comd(0x06); //
w_comd(0x0c); //开显示屏
w_comd(0x38); //8位传送数据2行显示
}
///////////////////////////////////显示程序段
void view_lcd1602(ucharaddr,uchar *i) //*i为所传字符串指针
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RS BIT P2.0 ;定义RS为P2.0 RW BIT P2.1 ;定义RW为P2.1 E BIT P2.2 ;定义E为P2.2 ORG 0000H
SJMP START
ORG 0030H
START:
LCALL LCDINIT
MAIN:
MOV A,#80H ;显示开及光标设置
LCALL BUSY
LCALL WRTC
MOV R2,#04H
MOV DPTR,#TAB1
LCALL DELAY
LCALL WRTD
MOV A,#0C0H ;显示开及光标设置
LCALL BUSY
LCALL WRTC
MOV R2,#04H
MOV DPTR,#TAB2
LCALL DELAY
LCALL WRTD
LCALL DELAY1
LCALL DELAY1
MOV A,#01H ;清屏
LCALL BUSY
LCALL WRTC
MOV A,#80H ;显示开及光标设置
LCALL BUSY
LCALL WRTC
MOV R2,#0FH
MOV DPTR,#TAB4
LCALL DELAY
LCALL WRTD
LCALL DELAY1
LCALL DELAY1
MOV A,#01H ;清屏
LCALL BUSY
LCALL WRTC
LJMP MAIN
;***************初始化*****************
LCDINIT:
LCALL DELAY ;延时15ms
LCALL DELAY
LCALL DELAY
MOV A,#38H ;显示模式设置(8位数据线,16*2 5*7点阵)
LCALL WRTC
LCALL DELAY ;延时5ms
MOV A,#38H
LCALL WRTC
LCALL DELAY ;延时5ms
MOV A,#38H
LCALL WRTC
LCALL DELAY ;延时5ms
MOV A,#38H
LCALL BUSY
LCALL WRTC
MOV A,#08H
LCALL BUSY
LCALL WRTC
MOV A,#01H ;清屏
LCALL BUSY
LCALL WRTC
MOV A,#06H ;显示光标移动设置
LCALL BUSY
LCALL WRTC
MOV A,#0CH ;示开关控制,显示开,无光标,不闪烁。
LCALL BUSY
LCALL WRTC
MOV A,#40H ;写CGRAM地址.
LCALL BUSY
LCALL WRTC
MOV R2,#40H
MOV DPTR,#TAB3;写CGRAM字模.
LCALL BUSY
LCALL WRTD
RET
;***************写命令子程序***************** WRTC:
CLR RS
CLR RW
CLR E
MOV P0,A
LCALL DELAY ;延时5ms
SETB E
LCALL DELAY ;延时5ms
CLR E
RET
;*****************写数据子程序*************** WRTD: MOV R1,#00H
AGAIN: MOV A,R1
MOVC A,@A+DPTR
SETB RS
CLR RW
CLR E
MOV P0,A
LCALL DELAY
SETB E
LCALL DELAY
CLR E
INC R1
MOV A,R1
MOV B,R2 ; 数据写完没有.
CJNE A,B,AGAIN
RET
;*****************判忙子程序****************** BUSY:
PUSH ACC
CLR RS
SETB RW
TT0: SETB E
MOV A,P0
CLR E
ANL A,#80H
JNZ TT0
POP ACC
RET
TAB1:
DB 00H,01H,02H,03H
TAB2:
DB 04H,05H,06H,07H
TAB3:
DB 03H,07H,0fH,1FH,1FH,1FH,1FH,1FH
DB 18H,1EH,1FH,1FH,1FH,1FH,1FH,1FH
DB 07H,1FH,1FH,1FH,1FH,1FH,1FH,1FH
DB 10H,18H,1cH,1EH,1EH,1EH,1EH,1EH
DB 0FH,07H,03H,01H,00H,00H,00H,00H
DB 1fH,1FH,1FH,1FH,1FH,0FH,07H,01H
DB 1fH,1FH,1FH,1FH,1FH,1CH,18H,00H
DB 1CH,18H,10H,00H,00H,00H,00H,00H TAB4: DB "I LOVE YOU BABY"
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
DELAY1: MOV R3,#1000
D2: MOV R4,#1000
DJNZ R4,$
DJNZ R3,D2
RET
END。