1602液晶初始化程序(汇编)
51单片机驱动1602液晶汇编语言程序
RET LCMSET: MOV A,#38H LCALL LCMWR0 MOV A,#08H LCALL LCMWR0 MOV A,#01H LCALL LCMWR0 MOV A,#06H LCALL LCMWR0 MOV A,#0CH LCALL LCMWR0 RET LCMCLR: MOV A,#01H LCALL LCMWR0 RET DELAY: MOV R6,#5 D1: ;2.7MS 延时子程序(作用尚不知) ;清屏 ;程序初始化
TAB0: DB "I AM YUAN MING",00H TAB1: DB "NICE TO MEET YOU",00H LCMLAY: PUSH ACC LOOP: CLR LCMEN CLR LCMRS SETB LCMRW SETB LCMEN MOV A,LCMDATA CLR LCMEN JB ACC.7,LOOP POP ACC LCALL DELAY RET LCMWR0: ;写入指令 ;读忙程序,用于判断 d7 是否为 0
51 单片机驱动 1602 液晶汇编语言程序
LCMRS EQU P2.4 LCMRW EQU P2.5 LCMEN EQU P2.6 LCMDATA EQU P0 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#60H LCALL LCMSET LCALL LCMCLR MOV A,#80H LCALL LCMWR0 MOV DPTR,#TAB0 LCALL LCMWR2 MOV A,#0C0H LCALL LCMWR0 MOV DPTR,#TAB1 LCALL LCMWR2 SJMP $
LCALL LCMLAY CLR LCMEN CLR LCMRS CLR LCMRW SETB LCMEN MOV LCMDATA,A
LCD1602汇编程序
;******************************************* ********************* ;本程序用来驱动LCD1602 *;****************************************************************RS BIT P2.0 ;RS引脚RW BIT P2.1 ;RW引脚E BIT P2.2 ;使能信号引脚DA T_X EQU 08H ;存放DDRAM的列序号DA T_Y EQU 09H ;存放DDRAM的行序号DA T_C EQU 10H ;存放待显示的数据;**************************************************************** ORG 0000HAJMP STARTORG 0030H;**************************************************************** ;对LCD进行初始化*;**************************************************************** START: MOV SP, #5FH;LCALL DL_1640U ;延时大约(不小于)1.64msMOV A, #38H ;初始化LCD,数据总线为8位;显示2行,57点阵/字符LCALL CMD_LC ;调用指令发送程序MOV A, #0FH ;开显示,有光标闪烁LCALL CMD_LC ;调用指令发送程序MOV A, #06H ;写入新数据后光标右移,;写入新数据后,屏幕不移动LCALL CMD_LC ;调用指令发送程序MOV A, #01H ;清楚屏幕显示LCALL CMD_LC ;调用指令发送程序LCALL DL_1640U ;延时1.64ms,因为清屏指令;的执行时间是1.64ms;**************************************************************** ;主程序*;**************************************************************** MAIN: MOV DAT_C, #41H ;把A的ASCII码存入DA T_C中MOV DAT_X, #06 ;把列的序号存入DAT_X中MOV DAT_Y, #0 ;把行的序号存入DAT_Y中LCALL DAT_DISP ;调用显示程序AJMP $ ;主程序到此结束;**************************************************************** ;指令发送程序*;**************************************************************** CMD_LC: CLR R SCLR R WMOV P0, ASETB ECLR ELCALL DL_40U ;延时40us,我们知道大部分;的指令执行的时间都是40usRET;**************************************************************** ;数据发送程序*;**************************************************************** DA T_LC: SETB RSCLR R WMOV P0, ASETB E ;下降沿执行指令,;所以要先高后低CLR ELCALL DL_40U ;延时40usRET;**************************************************************** ;数据显示程序;**************************************************************** DA T_DISP: MOV R0, DAT_Y ;把行序号送到R0中CJNE R0, #1, DAT_1 ;判断行的序号是0;还是1如果是0,则;把列序号加上#80H;如果是01,则把列;序号加上#0C0HMOV A, DAT_XADD A, #0C0HLCALL CMD_LCMOV A, DAT_CLCALL DAT_LCRETDA T_1: MOV A, DAT_XADD A, #80HLCALL CMD_LCMOV A, DAT_CLCALL DAT_LCRET;**************************************************************** ;本程序用来延时大约(不小于)40us *;**************************************************************** DL_40U: MOV R7, #20 ;晶振频率是12M的情况下DJNZ R7, $RET;**************************************************************** ;本程序用来延时大约(不小于)1.64ms *;**************************************************************** DL_1640U: MOV R7, #20 ;晶振频率是12M的情况下DL_1640: MOV R6, #40DJNZ R6, $DJNZ R7, DL_1640RET;**************************************************************** END。
LCD1602初始化流程图及程序的两种方法
LCD1602初始化流程图及程序的两种方法
用户所编的显示程序,开始必须进行初始化,否则模块无法正常显示,下面介绍两种初始化方法:
1. 利用内部复位电路进行初始化
下面指令是在初始化过程中执行的。
清屏(DISPLAY CLEAR);
功能设置(FUNCTION SET);
DL = 1: 8Bit 接口数据;
N = 0: 1行显示;
F = 0:5&TImes;7dot字形;
显示开/关控制(DISPLAY ON/OFF CONTROL)
D = 0: 显示关; C = 0: 光标关; B = 0: 消隐关
输入方式设置(ENTRY MODE SET )
I/D = 1:(增量): S = 0: 无移位:
2. 软件复位
如果电路电源不能满足复位电路的要求的话,那么初始化就要用软件来实现,过程如下:
八位接口初始化流程图。
1602液晶程序
#include <reg52.h> //52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit lcden=P1^0; //液晶使能端sbit lcdrs=P1^1; //液晶数据命令选择端uchar code table[]="Channel";uchar code table1[]="0123456789ABCDEF";uchar code table2[]="Trad";uchar code table3[]="A123456789XXXXXX";uchar code out[]={0xe0,0xf0,0xe8,0xf8,0xe4,0xf4,0xec,0xfc,0xe2,0xf2,0xea,0xfa,0xe6,0xf6,0xee,0xfe};void delayms(uint xms) //延时函数{uint i,j;for(i=xms;i>0;i--) //i=xms即延时约xms毫秒for(j=110;j>0;j--);}void write_com(uchar com) //对IO口赋状态值{lcdrs=0;P0=com;delayms(5);lcden=1;delayms(5);lcden=0;}void write_data(uchar date) //输入数据{lcdrs=1;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;}void init() //设置显示状态{lcden=0;write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口write_com(0x0c);//设置开显示,不显示光标write_com(0x06);//写一个字符后地址指针加1write_com(0x01);//显示清零,数据指针清零}void display(uchar num) //显示函数{uint n;P2=out[num];init();write_com(0x80);for(n=0;n<7;n++){write_data(table[n]);delayms(5);}write_com(0x89);write_data(table1[num]);delayms(5);write_com(0x80+0x40);for(n=0;n<4;n++){write_data(table2[n]);delayms(5);}write_com(0x80+0x49);write_data(table3[num]);delayms(5);}void matrixkeyscan() //键盘扫描程序{uchar temp,key;P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10;break;case 0x7b:key=11;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key=12;break;case 0xd7:key=13;break;case 0xb7:key=14;break;case 0x77:key=15;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}}void main(){while(1){matrixkeyscan();//不停调用键盘扫描程序}}。
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。
1602液晶初始化程序(汇编)
〔原创〕1602液晶初始化程序(2007-12-22 18:10:40)标签:1602液晶it/科技汇编语言液晶初始化,显示数字,按秒计数RS EQU P2.0RW EQU P2.1E EQU P2.2IN_0 EQU P0SECL EQU 40H ;秒低位SECH EQU 41H ;秒高位MH1 EQU 42H ;冒号MINL EQU 43H ;分低位MINH EQU 44H ;分高位MH2 EQU 45H ;冒号HOURL EQU 46H ;时低位HOURH EQU 47H ;时高位;*********************************ORG 0000HAJMP STARTORG 000BHAJMP INTT_0START:MOV SP,#70HMOV R2,#20ACALL INIT_LCD ;初始化液晶MOV R5,#00HMOV IN_0,#84H ;写入显示起始地址(第一行第五个位置ACALL ENABLEMOV TH0,#3fH ;50MSMOV TL0,#0b0HMOV TMOD,#01HACALL SJCZSTART1:SETB EASETB ET0SETB TR0LCALL WDATAAJMP START1;*****时间初值*******SJCZ: MOV 40H,#8 ;显示初值是 08:08:08MOV 41H,#0MOV 42H,#10MOV 43H,#8MOV 44H,#0MOV 45H,#10MOV 46H,#8MOV 47H,#0RET;****T0定时器中断****INTT_0: PUSH ACCMOV TL0,#0b0H ;送定时初值MOV TH0,#3fHDJNZ R2,TTMOV R2,#20INC SECL ;秒记数,到60S就清0MOV A,SECLCJNE A,#0AH,TTINC SECHMOV SECL,#0MOV A,SECHCJNE A,#06H,TTMOV SECH,#0INC MINL ;分记数,到60分请0MOV A,MINLCJNE A,#0AH,TTMOV MINL,#0INC MINHMOV A,MINHCJNE A,#06H,TTMOV MINH,#0INC HOURL ;时记数,到24时清0MOV A,HOURLCJNE A,#04H,TT2MOV A,HOURHCJNE A,#02H,TT1MOV HOURL,#0MOV HOURH,#0AJMP TTTT2: CJNE A,#0AH,TTMOV HOURL ,#0INC HOURHAJMP TTTT1: MOV A,HOURLCJNE A,#0AH,TTMOV HOURL ,#0INC HOURHAJMP TTTT: POP ACCRETI;*******液晶初始化*****INIT_LCD:CALL DELAYL ;延时20ms,等待LCD完成电源的启动MOV IN_0,#01H ;清屏并光标复位ACALL ENABLEMOV IN_0,#38H ;设置显示模式:8位2行5x7点阵ACALL ENABLEMOV IN_0,#0FH ;显示器开、光标开、光标允许闪烁ACALL ENABLEMOV IN_0,#06H ;文字不动,光标自动右移ACALL ENABLEMOV IN_0,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLERET;******写数据程序***WDATA: MOV IN_0,#84H ;写入显示起始地址(第一行第五个位置ACALL ENABLEMOV R1,#8MOV R0,#47HWDATA1: MOV A,@R0MOV DPTR,#TABLEMOVC A,@A+DPTRMOV IN_0,A ;写入数据SETB RSCLR RWCLR EACALL CHECKBUSYSETB E ; 忙检测DEC R0DJNZ R1,WDATA1MOV R1,#8RET;*******显示字母表********TABLE: DB 30H,31H,32H,33H,34H,35H ;0 1 2 3 4 5DB 36H,37H,38H,39H,3AH,80H,2EH ;6 7 8 9 : 空格 .;*********写指令*****ENABLE: CLR RS ;写入控制命令的子程序CLR RWCLR EACALL CHECKBUSYSETB ERET;*******程序忙检测***CHECKBUSY:MOV IN_0,#0FFH ;判断液晶显示器是否忙的子程序CLR RSSETB RWCLR ENOPSETB EJB P0.7,CHECKBUSY ;如果P1.7为高电平表示忙就循环等待RET;******延时程序****DELAY: MOV R6,#50DEL: MOV R7,#48DJNZ R7,$DJNZ R6,DELRETDELAYL: MOV R7,#100 ;长延时20msD1: MOV R6,#98DJNZ R6,$DJNZ R7,D1RETEND51单片机的1602没做过,只做过其他的控制。
LCD1602中文资料(程序和使用说明)
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
1602液晶滚动显示汇编程序
djnz 30h,ms1
ret
dely_us:mov 30h,#30
us:djnz 30h,us
ret
dely:mov 30h,#5
y1:mov 31h,#200
y2:mov 32h,#200
y3:djnz 32h,y3
djnz 31h,y2
djnz 30h,y1
ret
tab1:db "Baby I love you for life! "
db 00
end
sz7:clr rs
clr rw
mov p0,#90h
setb ep
nop
nop
clr ep
lcall dely_us
ret
//写入数据
xr: lcall sz4
setb rs //数据标志位
clr rw //写入标志位
mov a,r1
movc a,@a+dptr //查表
jz gret //检测是否显示完全//零为标志位
mov p0,a //并行输出数据
setb ep
nop
nop
clr ep
lcall dely
inc r1 //读下一个字符
lcall sz1 //清屏初始化设置
lcall sz7 //设置第一行显示坐标
mov dptr,#tab1 //设置段码表地址一行显示段码表
lcall xr
ys:lcall dely
ljmp main
//清屏指令写入
sz1:clr rs //写指令标志
我的51单片机之 液晶1602 的C语言和汇编编程
//三次显示模式设置,不检测忙信号
//显示模式设置,开始要求每次检测忙信号 //关闭显示 //显示清屏 // 显示光标移动设置 // 显示开及光标设置
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
#include<reg51.h>
#include<intrins.h>
#define DBPort P1 //液晶数据口
sbit RW=P0^1; //寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器
sbit RS=P0^0; //读写信号线,高电平时进行读操作,低电平时进行写操作。
sbit E=P0^2;
void main(void) {
Delay400Ms(); Init(); //LCM 初始化 DisplayListChar(0, 1, uctech); DisplayListChar(0, 0, net); while(1); }
//第二行第一列开始 //第一行第一列开始
//写数据 void WriteData(unsigned char WD) {
ReadStatus(); //检测忙 DBPort = WD; RS = 1; RW = 0; E = 0; //可加小延时 delay(); E = 1; }
//写指令 void WriteCommand(unsigned char WC,BuysC) {
if (BuysC) ReadStatus(); DBPort = WC; RS = 0; RW = 0; E = 0; E = 1; }
1602初始化
C语言:#include<reg51.h> //包含头文件,这个嘛,就不用多说了~~#define uint unsigned int //预定义一下#define uchar unsigned charsbit rs=P3^0; //1602的数据/指令选择控制线sbit rw=P3^1; //1602的读写控制线sbit en=P3^2; //1602的使能控制线/*P2口接1602的D0~D7,注意不要接错了顺序,我以前可在这上面吃过亏~*/ //uchar code table[]="LCD1602 check ok"; //要显示的内容1放入数组tablel//uchar code table1[]="study up"; //要显示的内容2放入数组table1 void delay(uint n) //延时函数{uint x,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}void lcd_wcom(uchar com) //1602写命令函数{rs=0; //选择指令寄存器rw=0; //选择写P2=com; //把命令字送入P2delay(5); //延时一小会儿,让1602准备接收数据en=1; //使能线电平变化,命令送入1602的8位数据口en=0;void lcd_wdat(uchar dat) //1602写数据函数{rs=1; //选择数据寄存器rw=0; //选择写P2=dat; //把要显示的数据送入P2delay(5); //延时一小会儿,让1602准备接收数据en=1; //使能线电平变化,数据送入1602的8位数据口en=0;}void lcd_init() //1602初始化函数{lcd_wcom(0x38); //8位数据,双列,5*7字形lcd_wcom(0x0f); //开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位lcd_wcom(0x01); //清屏}void main() //主函数{lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位while(1); //动态停机}汇编语言:RS EQU P3.0RW EQU P3.1E EQU P3.2ORG 0000HMAIN:MOV P2,#01HLCALL ENABLEMOV P2,#38HLCALL ENABLEMOV P2,#0FHLCALL ENABLEMOV P2,#06HLCALL ENABLEMOV P2,#80HLCALL ENABLEMOV A,#30HMOV P2,AlCALL DISP1 LCALL ENABLE ENABLE:CLR RSCLR RWCLR ELCALL DELAY SETB ERETDISP1:MOV P2,A SETB RSCLR RWCLR ELCALL DELAY SETB ERETDELAY:MOV R7,#255D1:MOV R6,#255 D2:DJNZ R6,D2 DJNZ R7,D1 RETEND。
LCD1602液晶显示实验实验报告及程序
LCD1602液晶显示实验实验报告及程序一、实验目的本次实验的主要目的是熟悉并掌握 LCD1602 液晶显示屏的工作原理和编程方法,能够成功实现字符在液晶屏幕上的显示和控制。
二、实验原理LCD1602 是一种工业字符型液晶,能够显示 16x2 个字符,即每行16 个字符,共 2 行。
它的工作原理是通过控制液晶分子的偏转来实现字符的显示。
LCD1602 有 16 个引脚,主要引脚功能如下:1、 VSS:接地。
2、 VDD:接电源(通常为+5V)。
3、 V0:对比度调整引脚,通过外接电位器来调节屏幕显示的对比度。
4、 RS:寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器。
5、 RW:读写选择引脚,高电平时进行读操作,低电平时进行写操作。
6、 E:使能引脚,下降沿触发。
7、 D0 D7:数据引脚,用于传输数据和指令。
LCD1602 的指令集包括清屏、归位、输入方式设置、显示开关控制、光标或显示移位、功能设置、CGRAM 和 DDRAM 地址设置以及读忙标志和地址等。
三、实验设备与材料1、单片机开发板2、 LCD1602 液晶显示屏3、杜邦线若干4、电脑四、实验步骤1、硬件连接将 LCD1602 的 VSS 引脚接地。
将 VDD 引脚接+5V 电源。
将 V0 引脚通过一个 10K 的电位器接地,用于调节对比度。
将 RS、RW、E 引脚分别连接到单片机的三个 I/O 口。
将 D0 D7 引脚连接到单片机的 8 个 I/O 口。
2、软件编程包含必要的头文件。
定义与 LCD1602 连接的 I/O 口。
编写初始化函数,包括设置显示模式、清屏、输入方式等。
编写写指令函数和写数据函数,用于向LCD1602 发送指令和数据。
编写显示字符串函数,实现字符在屏幕上的显示。
3、编译下载程序使用编译软件对编写的程序进行编译,生成可执行文件。
将可执行文件下载到单片机开发板中。
4、观察实验结果给开发板上电,观察 LCD1602 液晶显示屏上是否正确显示预设的字符。
1602程序
1602程序
简介
1602程序是一种用于控制1602液晶屏幕的程序。
1602
液晶屏幕是一种常见的单色液晶显示屏,广泛应用于各种电子设备中。
这个程序能够实现在1602液晶屏幕上显示文本、数字和特殊字符等功能。
功能
1602程序具有以下功能:
1.文本显示:程序可以在1602液晶屏幕上显示自定
义的文本信息,可以显示多行文本,并且支持中英文字符。
2.数字显示:程序可以在1602液晶屏幕上显示数字,
并支持数字的滚动显示功能。
3.特殊字符显示:程序支持在1602液晶屏幕上显示
特殊字符,比如箭头、心形等。
使用方法
用户可以按照以下步骤来使用1602程序:
1.连接1602液晶屏幕:首先,将1602液晶屏幕与
单片机或其他控制器正确连接。
确保数据线和控制线的接口连接正确。
2.导入1602程序:将1602程序的代码导入到单片
机或其他控制器中,例如Arduino等。
3.设置程序参数:根据实际需求,在程序中设置相应
参数,例如要显示的文本内容、数字等。
4.运行程序:将控制器与电源连接,运行程序,即可
在1602液晶屏幕上看到相应的显示效果。
示例代码
下面是一个示例代码,演示了如何使用1602程序显示文本和数字:
```markdown #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() { lcd.begin(16, 2); lcd.print(。
LCD1602中文资料程序和使用说明
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形.在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器.发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点.因此,液晶显示器画质高且不会闪烁.数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便.体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多.功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多.10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域.②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
51单片机LCD1602液晶显示程序
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/******************************************************************************
*
*函数名 * 函数功能
: 初始化 LCD 屏 :无 :无
*******************************************************************************
/
#ifndef
LCD1602_4PINS
void LcdInit()
//LCD 初始化子程序
{ LcdWriteCom(0x38); //开显示
//以下程序都是在 VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是 STC89C52RC,但是在所有的 51 52 单片机上都是通用的。51 只是一个学习的基础 平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111 代表第一个程序。//2222222222222222222222222 代表第二个程序, 以此类推
for(a=1;a>0;a--); } }
//误差 0us
}
/******************************************************************************
*
*函数名 * 函数功能
: LcdWriteCom : 向 LCD 写入一个字节的命令
LCD1602_E = 0;
1602液晶显示屏welcome主程序
while(!(IFG1&WDTIFG));
IFG1&=~WDTIFG;
}
LcdWriteCommand(0x07,1);
for(i=24;i>0;i--)
{
LcdWriteData(0x20);
IFG1&=~WDTIFG;
while(!(IFG1 & WDTIFG));
IFG1 &=~ WDTIFG;
}
while (1)
{
LcdWriteCommand(0x05,1); //0x05表示n=0,s=1整屏右移。
for(i=24;i>0;i--)
{
LcdWriteData(0x20);
#define SET_RS P2OUT|=BIT0;
#define CLR_RW P2OUT&=~BIT1;
#define SET_RW P2OUT|=BIT1;
#define CLR_EN P2OUT&=~BIT2;
#define SET_EN P2OUT|=BIT2;
//void DispStr(uchar x,uchar y,uchar *ptr);
* 让液晶从某个位置起连续显示N个字符
****************************/
void DispNChar(uchar x,uchar y,uchar n,uchar *ptr)
{
uchar i;
for(i=0;i<n;i++)
{
Disp1Char(x++,y,ptr[i]);
(整理)LCD1602汇编程序.
(整理)LCD1602汇编程序.LCD1602汇编程序;* 描述: LCD1602 滚动显示*;* 显示方式:*;* 1、从左到右逐字显示,闪动二次,清屏。
*;* 2、再从右到左逐字显示,闪动二次,清屏。
*;* 3、周期性地重复上述显示方式。
*;************************************************************** ***** LCD_RS EQU P2.0LCD_RW EQU P2.1LCD_EN EQU P2.2;************************************************************** ***** ORG 0000HAJMP MAINORG 0030H;************************************************************** ***** MAIN:MOV SP,#60HMOV R4,#02H ;设置闪烁次数ACALL LCD_INITMAIN1:ACALL LCDSET1MOV DPTR,#CHAR1ACALL WRITE1 ;MOV A,#0C0H ;显示第二行左边第一位位置ACALL LCD_CMDMOV DPTR,#CHAR2 ;显示ACALL WRITE1ACALL DELAY4 ;延时ACALL DELAY4ACALL SHAN ;闪烁两次ACALL LCDSET2MOV DPTR,#CHAR3 ;ACALL WRITE1MOV A,#0C0H ;显示第二行右边第一位位置ACALL LCD_CMDMOV DPTR,#CHAR4 ;显示ACALL WRITE1ACALL DELAY4 ;延时ACALL DELAY4ACALL SHAN ;闪烁两次ACALL MAIN1;************************************************************** *;LCD初始化设定子程序;************************************************************** * LCD_INIT:ACALL DELAY5MS ;延时15MSACALL DELAY5MS ;等待LCD 电源稳定ACALL DELAY5MSMOV A,#38H ;16*2 显示,5*7 点阵,8 位数据ACALL LCD_CMD_NC ;不进行LCD 忙检测ACALL DELAY5MSMOV A,#38H ;16*2 显示,5*7 点阵,8 位数据ACALL LCD_CMD_NC ;不进行LCD 忙检测ACALL DELAY5MSMOV A,#38H ;16*2 显示,5*7 点阵,8 位数据ACALL LCD_CMD_NC ;不进行LCD 忙检测ACALL DELAY5MSMOV A,#08H ;显示关ACALL LCD_CMD ;进行LCD 忙检测MOV A,#01H ;清除屏幕ACALL LCD_CMD ;进行LCD忙检测MOV A,#06H ;移动光标ACALL LCD_CMD ;进行LCD 忙检测MOV A,#0CH ;显示开,关光标ACALL LCD_CMD ;进行LCD 忙检测RET;************************************************************** * ;显示位置与移动光标设定;************************************************************** * LCDSET1:MOV A,#01H ;清除屏幕ACALL LCD_CMDACALL DELAY5MSMOV A,#06H ;移动光标(光标加1)ACALL LCD_CMDACALL DELAY5MSMOV A,#80H ;显示第一行左边第一位位置ACALL LCD_CMDACALL DELAY5MSRETLCDSET2:MOV A,#01H ;清除屏幕ACALL LCD_CMDACALL DELAY5MSMOV A,#06H ;移动光标(光标减1)ACALL LCD_CMDACALL DELAY5MSMOV A,#80H ;显示第一行右边第一位位置ACALL LCD_CMDACALL DELAY5MSRET;************************************************************** * ;写指令数据到LCD;RS=L,RW=L,D0-D7=指令码,E=高脉冲;************************************************************** * LCD_CMD:ACALL CHECKBUSYLCD_CMD_NC:CLR LCD_RSCLR LCD_RWMOV P0,ASETB LCD_ENNOPNOPNOPNOPCLR LCD_ENRET;************************************************************** * ; 发送字符串子程序;************************************************************** * WRITE1:MOV R0,#16WRITE0:CLR AMOVC A,@A+DPTRINC DPTRACALL LCD_WDATACALL DELAY ;加延时形成滚动效果DJNZ R0,WRITE0RET;************************************************************** * ;写显示数据到LCD;RS=H,RW=L,D0-D7=数据,E=高脉冲;************************************************************** * LCD_WDATA:ACALL CHECKBUSYSETB LCD_RSCLR LCD_RWMOV P0,ASETB LCD_ENNOPNOPNOPNOPCLR LCD_ENRET;************************************************************** * ;检测LCD 控制器忙状态;读数据;RS=L,RW=H,E=H,输出:D0-D7=数据;************************************************************** * CHECKBUSY:PUSH ACCMOV P0,#0FFHCLR LCD_RSSETB LCD_RWSETB LCD_ENBUSYLOOP:NOPJB P0.7,BUSYLOOPCLR LCD_ENPOP ACCRET;************************************************************** * ;闪烁子程序;************************************************************** * SHAN:MOV A,#08H ;关闭显示ACALL LCD_CMDACALL DELAY4MOV A,#0CH ;开显示,关闭光标ACALL LCD_CMDACALL DELAY4DJNZ R4,SHANMOV R4,#02H ;设置闪烁次数RET;************************************************************** * ;延时120MS 子程序;发送字符串时使用;************************************************************** * DELAY:MOV R7,#240DL1: MOV R6,#250DL2: DJNZ R6,DL2DJNZ R7,DL1RET;************************************************************** * ;延时800MS 子程序;闪烁时使用;************************************************************** * DELAY4:MOV R0,#40DL3: MOV R1,#100DL4: MOV R2,#100DL5: DJNZ R2,DL5DJNZ R1,DL4DJNZ R0,DL3RET;************************************************************** * ;延时5MS子程序;LCD初始化使用;************************************************************** * DELAY5MS:MOV R1,#10DL6: MOV R2,#249DL7: DJNZ R2,DL7DJNZ R1,DL6RET;************************************************************** * ;延时1MS子程序;************************************************************** * DELAY1MS:MOV R6,#14H ;20DL8: MOV R7,#19H ;25DL9: DJNZ R7,DL9DJNZ R6,DL8RET;************************************************************** * CHAR1:DB "Welcome to Cras-"CHAR2:DB " yBoye WorkGroup"CHAR3:DB " QQ: 15910380 "CHAR4:DB "TEL: 139********";************************************************************** *END12864汇编程序X EQU 26H ;LCD 地址变量RS EQU P2.0RW EQU P2.1EN EQU P2.2PSB EQU P2.3RST EQU P2.5ORG 0000HJMP MAINORG 0003H ;外部中断INT0入口地址MAIN:MOV SP,#40HMOV A,#00HMOV R0,#20HLOOP0: MOV @R0,A ;20H-26H清零INC R0CJNE R0,#27H,LOOP0MOV IE,#81H ;允许总中断中断,使能INT0 外部中断MOV TCON,#01H ;触发方式为脉冲负边沿触发SETB RSTNOPSETB PSB ;8位数据,并口CALL SET_LCD ;初始化TS12864mCALL MENU1CALL MENU2CALL MENU3CALL MENU4LOOP1:MOV A,22HCJNE A,#40H,LOOP2LOOP2: CJNE A,#04H,LOOP3LOOP3: JMP LOOP1;====================================== =======; LCD 初始化设置;====================================== =======-SET_LCD:CLR ENMOV A,#34H ;34H--扩充指令操作CALL WCOMMOV A,#30H ;30H--基本指令操作CALL WCOMMOV A,#0CH ;开显示,关光标,CALL WCOMMOV A,#01H ;清除LCM 显示屏CALL WCOMRET;====================================== ============= ;在LCM 各行显示信息字符;====================================== ============= LCD_SHOW:CJNE A,#1,LINE2 ;判断是否为第一行LINE1: MOV A,#80H ;设置LCD 的第一行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#80H ;设置LCD 的第一行地址CALL WCOM ;写入命令JMP FILLLINE2: CJNE A,#2,LINE3 ;判断是否为第三行MOV A,#090H ;设置LCD 的第三行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#090H ;设置LCD 的第三行地址CALL WCOMJMP FILLLINE3: CJNE A,#3,LINE4 ;判断是否为第三行MOV A,#088H ;设置LCD 的第三行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#088H ;设置LCD 的第三行地址CALL WCOMJMP FILLLINE4: CJNE A,#4,LINE5 ;判断是否为第三行MOV A,#098H ;设置LCD 的第三行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#098H ;设置LCD 的第三行地址CALL WCOMFILL: CLR A ;填入字符MOVC A,@A+DPTR ;由消息区取出字符CJNE A,#0,LC1 ;判断是否为结束码LINE5: RETLC1: CALL WDA TA ;写入数据INC DPTR ;指针加1JMP FILL ;继续填入字符RET;====================================== =========== ;清除该行LCM 的字符;====================================== =========== CLR_LINE:MOV R0,#16CL1: MOV A,#' 'CALL WDATADJNZ R0,CL1RET;====================================== ============ ;LCM 显示工作菜单信息;====================================== ============ MENU1:MOV DPTR,#MENU1AMOV A,#1 ;在第一行显示信息CALL LCD_SHOWRETMENU1A: DB "MUC 控制GPRS模块",0MENU2:MOV DPTR,#MENU2AMOV A,#2 ;在第二行显示信息CALL LCD_SHOWRETMENU2A: DB "TEL:139********",0MENU3:MOV DPTR,#MENU3AMOV A,#3 ;在第三行显示信息CALL LCD_SHOWRETMENU3A: DB "方案设计: 龚伟",0MENU4:MOV DPTR,#MENU4AMOV A,#4 ;在第四行显示信息CALL LCD_SHOWRETMENU4A: DB "程序编写: 靳鹏",0;====================================== ======== ; 写指令使能子程序;RS=L,RW=L,D0-D7=指令码,E=高脉冲;====================================== ======== WCOM:MOV P0,ACLR RSCLR RWSETB ENCALL DELAY0CLR ENRET;====================================== ======= ;写数据使能子程序;RS=H,RW=L,D0-D7=数据,E=高脉冲;=============================================WDATA:MOV P0,ASETB RSCLR RWSETB ENCALL DELAY0CLR ENRETDELAY0: MOV R7,#250 ;延时500微秒DJNZ R7,$RET END。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
〔原创〕1602液晶初始化程序(2007-12-22 18:10:40)
标签:1602液晶it/科技汇编语言
液晶初始化,显示数字,按秒计数
RS EQU P2.0
RW EQU P2.1
E EQU P2.2
IN_0 EQU P0
SECL EQU 40H ;秒低位
SECH EQU 41H ;秒高位
MH1 EQU 42H ;冒号
MINL EQU 43H ;分低位
MINH EQU 44H ;分高位
MH2 EQU 45H ;冒号
HOURL EQU 46H ;时低位
HOURH EQU 47H ;时高位
;*********************************
ORG 0000H
AJMP START
ORG 000BH
AJMP INTT_0
START:MOV SP,#70H
MOV R2,#20
ACALL INIT_LCD ;初始化液晶
MOV R5,#00H
MOV IN_0,#84H ;写入显示起始地址(第一行第五个位置 ACALL ENABLE
MOV TH0,#3fH ;50MS
MOV TL0,#0b0H
MOV TMOD,#01H
ACALL SJCZ
START1:SETB EA
SETB ET0
SETB TR0
LCALL WDATA
AJMP START1
;*****时间初值*******
SJCZ: MOV 40H,#8 ;显示初值是 08:08:08
MOV 41H,#0
MOV 42H,#10
MOV 43H,#8
MOV 44H,#0
MOV 45H,#10
MOV 46H,#8
MOV 47H,#0
RET
;****T0定时器中断****
INTT_0: PUSH ACC
MOV TL0,#0b0H ;送定时初值
MOV TH0,#3fH
DJNZ R2,TT
MOV R2,#20
INC SECL ;秒记数,到60S就清0 MOV A,SECL
CJNE A,#0AH,TT
INC SECH
MOV SECL,#0
MOV A,SECH
CJNE A,#06H,TT
MOV SECH,#0
INC MINL ;分记数,到60分请0 MOV A,MINL
CJNE A,#0AH,TT
MOV MINL,#0
INC MINH
MOV A,MINH
CJNE A,#06H,TT
MOV MINH,#0
INC HOURL ;时记数,到24时清0 MOV A,HOURL
CJNE A,#04H,TT2
MOV A,HOURH
CJNE A,#02H,TT1
MOV HOURL,#0
MOV HOURH,#0
AJMP TT
TT2: CJNE A,#0AH,TT
MOV HOURL ,#0
INC HOURH
AJMP TT
TT1: MOV A,HOURL
CJNE A,#0AH,TT
MOV HOURL ,#0
INC HOURH
AJMP TT
TT: POP ACC
RETI
;*******液晶初始化*****
INIT_LCD:
CALL DELAYL ;延时20ms,等待LCD完成电源的启动
MOV IN_0,#01H ;清屏并光标复位
ACALL ENABLE
MOV IN_0,#38H ;设置显示模式:8位2行5x7点阵
ACALL ENABLE
MOV IN_0,#0FH ;显示器开、光标开、光标允许闪烁
ACALL ENABLE
MOV IN_0,#06H ;文字不动,光标自动右移
ACALL ENABLE
MOV IN_0,#0C0H ;写入显示起始地址(第二行第一个位置) ACALL ENABLE
RET
;******写数据程序***
WDATA: MOV IN_0,#84H ;写入显示起始地址(第一行第五个位置
ACALL ENABLE
MOV R1,#8
MOV R0,#47H
WDATA1: MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV IN_0,A ;写入数据
SETB RS
CLR RW
CLR E
ACALL CHECKBUSY
SETB E ; 忙检测
DEC R0
DJNZ R1,WDATA1
MOV R1,#8
RET
;*******显示字母表********
TABLE: DB 30H,31H,32H,33H,34H,35H ;0 1 2 3 4 5
DB 36H,37H,38H,39H,3AH,80H,2EH ;6 7 8 9 : 空格 .
;*********写指令*****
ENABLE: CLR RS ;写入控制命令的子程序
CLR RW
CLR E
ACALL CHECKBUSY
SETB E
RET
;*******程序忙检测***
CHECKBUSY:
MOV IN_0,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P0.7,CHECKBUSY ;如果P1.7为高电平表示忙就循环等待 RET
;******延时程序****
DELAY: MOV R6,#50
DEL: MOV R7,#48
DJNZ R7,$
DJNZ R6,DEL
RET
DELAYL: MOV R7,#100 ;长延时20ms
D1: MOV R6,#98
DJNZ R6,$
DJNZ R7,D1
RET END。