1602显示汉字51程序

1602显示汉字51程序
1602显示汉字51程序

#include

#include

#define uchar unsigned char #define uint unsigned int sbit e=P2^7;

sbit rs=P2^6;

sbit rw=P2^5;

sbit LCD7=P0^7;

sbit LCD6=P0^6;

sbit LCD5=P0^5;

sbit LCD4=P0^4;

uchar bdata lcdbuff;

uint loop,x=30;

sbit lcdbuff0=lcdbuff^0; sbit lcdbuff1=lcdbuff^1; sbit lcdbuff2=lcdbuff^2; sbit lcdbuff3=lcdbuff^3; sbit lcdbuff4=lcdbuff^4; sbit lcdbuff5=lcdbuff^5; sbit lcdbuff6=lcdbuff^6; sbit lcdbuff7=lcdbuff^7;

/**************字模*****************/

unsigned char code tab[]={

/*-- 文字: 中--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x01,0x01,0x21,0x3F,0x21,0x21,0x21,0x21,0x21,0x3F,0x21,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x08,0xFC,0x08,0x08,0x08,0x08,0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: 国--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x7F,0x40,0x5F,0x41,0x41,0x41,0x4F,0x41,0x41,0x41,0x5F,0x40,0x40,0x7F,0x40, 0x00,0xFC,0x04,0xF4,0x04,0x04,0x04,0xE4,0x44,0x24,0x24,0xF4,0x04,0x04,0xFC,0x04,

/*-- 文字: 电--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x01,0x01,0x01,0x3F,0x21,0x21,0x3F,0x21,0x21,0x21,0x3F,0x21,0x01,0x01,0x00,0x00, 0x00,0x00,0x00,0xF8,0x08,0x08,0xF8,0x08,0x08,0x08,0xF8,0x08,0x02,0x02,0xFE,0x00,

/*-- 文字: 子--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x3F,0x00,0x00,0x00,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x05,0x02, 0x00,0xF0,0x20,0x40,0x80,0x00,0x00,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: 网--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x7F,0x40,0x41,0x51,0x4A,0x44,0x44,0x4A,0x4A,0x51,0x61,0x40,0x40,0x40,0x00, 0x00,0xFC,0x04,0x04,0x14,0x9C,0x54,0x24,0x24,0x54,0x94,0x04,0x04,0x1C,0x08,0x00,

};

/************函数声明***************/

void r_BF();

void w_cdata(void);

void w_com(uchar com);

void w_sting(uchar string);

void init_lcd();

void cg_w();

void w_word(uchar word);

void delay(uint xms);

/************主函数*************/

void main()

{

init_lcd();

while(1)

{

w_com(0x01); //清屏

loop=0;

cg_w();

w_com(0x80);

w_word(0x00);

w_word(0x00+2);

w_word(0x00+4);

w_com(0x80+0x40);

w_word(0x00+1);

w_word(0x00+3);

w_word(0x00+5);

delay(x);

//**************************************

w_com(0x01); //清屏

loop=32;

cg_w();

w_com(0x80+0x03);

w_word(0x00);

w_word(0x00+2);

w_word(0x00+4);

w_com(0x80+0x43);

w_word(0x00+1);

w_word(0x00+3);

w_word(0x00+5);

delay(x);

//***************************************** w_com(0x01); //清屏

loop=64;

cg_w();

w_com(0x80+0x06);

w_word(0x00);

w_word(0x00+2);

w_word(0x00+4);

w_com(0x80+0x46);

w_word(0x00+1);

w_word(0x00+3);

w_word(0x00+5);

delay(x);

//****************************************** w_com(0x01); //清屏

loop=96;

cg_w();

w_com(0x80+0x09);

w_word(0x00);

w_word(0x00+2);

w_word(0x00+4);

w_com(0x80+0x49);

w_word(0x00+1);

w_word(0x00+3);

w_word(0x00+5);

delay(x);

//******************************************* w_com(0x01); //清屏

loop=128;

cg_w();

w_com(0x80+0x0c);

w_word(0x00);

w_word(0x00+2);

w_word(0x00+4);

w_com(0x80+0x4c);

w_word(0x00+1);

w_word(0x00+3);

w_word(0x00+5);

delay(x);

}

}

//**********************************

void delay(uint xms)

{

uint i,j;

for(i=0;i

for(j=0;j<124;j++);

}

/************初始化函数*************/

void init_lcd()

{

w_com(0x2c); //功能设置为四位数据总线

w_com(0x01); //清屏

w_com(0x06); //设置显示输入模式(AC指针自加1显示不移位)

w_com(0x0c); //显示开/关设置(设置显示、光标和闪烁开关)

}

/************读忙标志BF*************/

void r_BF()

{

LCD7=1; //BF端口在DB7

rs=0;

rw=1;

e=1; //RS=0;RW=1;E=1表示读忙标志BF

while(LCD7); //若内部操作位BF忙CPU就等待BF不忙才能操作e=0;

}

/*********写命令的公共部分**********

**************函数说明**************

**因为我们定义为四位数据总线所以每**

**发送一字节要做两次发送先发送高四**

**位再发送低四位**

***********************************/

void w_cdata(void)

{

LCD7=lcdbuff7;

LCD6=lcdbuff6;

LCD5=lcdbuff5;

LCD4=lcdbuff4;

e=1;

_nop_();

e=0;

LCD7=lcdbuff3;

LCD6=lcdbuff2;

LCD5=lcdbuff1;

LCD4=lcdbuff0;

e=1;

_nop_();

e=0;

}

/*************写命令**********************/

/************函数说明*********************

**主要用来初始化一些设置显示、输入模式、**

**显示开关、光标、移位、功能、地址**

******************************************/

void w_com(uchar com)

{

r_BF();

lcdbuff=com;

rs=0;

rw=0;

w_cdata();

}

/*************写字符***************/

/************函数说明*********************

**用来把自己所创造的字符写入CGROM*********

******************************************/

void w_sting(uchar string)

{

r_BF();

rs=1;

rw=0;

lcdbuff=string;

w_cdata();

}

/*************把字模写入LCD*********************/ void cg_w(void)

{

uchar i,temp;

w_com(0x40);

for(i=0;i<64;i++)

{

if(i<16)

{

temp=tab[i+loop]>>3;

w_sting(temp);

}

else if((i>=16)&&(i<32))

{

temp=(tab[i+loop-16]<<3)|(tab[i+loop]>>6);

w_sting(temp);

}

else if((i>=32)&&(i<48))

{

temp=(tab[i+loop-16])>>1;

w_sting(temp);

}

else

w_sting(tab[i+loop]);

}

}

/***************显示写入******************/

/************函数说明*********************

**把自己想要写入LCD屏幕的字符写入LCD显示**

******************************************/

void w_word(uchar word)

{

r_BF();

lcdbuff=word;

rs=1;

rw=0;

w_cdata();

}

LCD1602汇编显示程序

;1602显示ABC LCD_RS EQU P2.5 LCD_RW EQU P2.6 LCD_EN EQU P2.7 LCD_DATA EQU P3 ;----------------- ORG0000H JMP START ORG0030H ;----------------- LCD: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD_WDATA MOV A, #'B' CALL LCD_WDATA MOV A, #'C' CALL LCD_WDATA AJMP$ ;---------------- DELAY5MS: MOV R6, #10 DL1:DJNZ R7, $ DJNZ R6, DL1 RET ;---------------- LCD_INIT: CALL DELAY5MS MOV A, #38H CALL LCD_WCMD CALL DELAY5MS

CALL DELAY5MS MOV A, #06H CALL LCD_WCMD MOV A, #01H CALL LCD_WCMD MOV A, #0CH CALL LCD_WCMD RET ;===================================== LCD_WCMD: CALL CHECKBUSY CLR LCD_RS JMP W_LCD ;---------------- LCD_WDATA: CALL CHECKBUSY SETB LCD_RS W_LCD: CLR LCD_RW MOV LCD_DATA, A SETB LCD_EN NOP CLR LCD_EN RET ;---------------- CHECKBUSY: PUSH ACC MOV LCD_DATA, #255 CLR LCD_RS SETB LCD_RW BUSYLOOP: SETB LCD_EN NOP MOV A, LCD_DATA CLR LCD_EN JB ACC.7, BUSYLOOP POP ACC RET

1602字符液晶显示原理+实例详解

1602详细资料和实例 1602字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采 用的1602液晶进行显示的。而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。 所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多 数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 1602液晶的正面(绿色背光,黑色字体) 1602液晶背面(绿色背光,黑色字体)

另一种1602液晶模块,显示屏是蓝色背光白色字体 字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:

HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:

也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码(指A的字模代码,0x20~0x7F为标准的ASCII码,通过这个代码,在CGROM中查找到相应的字符显示)就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:DDRAM地址与显示位置的对应关系。 (事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H 地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H 加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了),1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(无汉字),如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H)(其实是1个地址),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

1602液晶字符显示

1.基本简介 LCD1602工业字符型液晶,能够同时显示16x02即32个字符。(16列2行) 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。2.管脚功能 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 ⑶特性 3.3V或5V工作电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM

LCD1602自定义显示字符

LCD1602自定义显示字符 从CGROM表中可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个, 实际只有8个字节可用。它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000x111,x为无效位,最后三位为000-111共8个。 如果我们要想显示这8个用户自定义的字符,操作方法和显示CGROM一样,先设置DDRAM位置,再向DDRAM写入字符码,例如“A”就是41H。现在我们要显示CGRAM的第一个自定义字符,就向DDRAM写入00000000B(00H),如果要显示第8个就写入00000111(08H)。 从这个指令可以看出指令数据的高2位已固定是01,只有后面的6位是地址数据,而这6位中的高3位就表示这八个自定义字符,最后的3位就是字模数据的八个地址了。例如第一个自定义字符的字模地址为01000000-01000111八个地址。 我们向这8个字节写入字模数据,让它能显示出“℃” 地址:01000000数据:00010000图示:○○○■○○○○ 0100000100000110○○○○○■■○ 0100001000001001○○○○■○○■ 0100001100001000○○○○■○○○ 0100010000001000○○○○■○○○ 0100010100001001○○○○■○○■ 0100011000000110○○○○○■■○ 0100011100000000○○○○○○○○ 字定义字符地址 0x40————0x00 0x48————0x01 0x50————0x02 0x58————0x03 0x60————0x04 0x68————0x05 0x70————0x06 0x78————0x07 程序操作: 1.定义字符数组 uchar code Word1[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};//自定义字符数组 2.写数据到CGRAM中 uchar j; WriteCommandLCD(0x40); for(j=0;j<8;j++) { WriteDataLCD(Word1[j]); } 3.读取数据并显示 WriteCommandLCD(0xC8);//显示在第一行 WriteDataLCD(0x00);//地址

LCD1602汉字显示讲解

LCD1602显示汉字研究与程序设计 1602是一款最常用也是最便宜的液晶显示屏。最多可以显示两行标准字符,每行最多可以显示16个字符。 1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。 一、显示常用字符。 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 十进制十六进制ASCII字符十进制十六进制ASCII 字符十进制十六进制ASCII字符 00 00 自定义字符1 56 38 8 96 60 ` 01 01 自定义字符2 57 39 9 97 61 a 02 02 自定义字符3 58 3A : 98 62 b 03 03 自定义字符4 59 3B ; 99 63 c 04 04 自定义字符5 60 3C < 100 64 d 05 05 自定义字符6 61 3D = 101 65 e 06 06 自定义字符7 62 3E > 102 66 f 07 07 自定义字符8 63 3F ? 103 67 g 08 08 自定义字符1 64 40 @ 104 68 h 09 09 自定义字符2 65 41 A 105 69 i 10 0A 自定义字符3 66 42 B 106 6A j 11 0B 自定义字符4 67 43 C 107 6B k 12 0C 自定义字符5 68 44 D 108 6C l 13 0D 自定义字符6 69 45 E 109 6D m 14 0E 自定义字符7 70 46 F 110 6E n 15 0F 自定义字符8 71 47 G 111 6F o 32 20 空格72 48 H 112 70 p 33 21 ! 73 49 I 113 71 q 34 22 " 74 4A J 114 72 r 35 23 # 75 4B K 115 73 s 36 24 $ 76 4C L 116 74 t 37 25 % 77 4D M 117 75 u 38 26 & 78 4E N 118 76 v 39 27 ' 79 4F O 119 77 w 40 28 ( 80 50 P 120 78 x 41 29 ) 81 51 Q 121 79 y 42 2A * 82 52 R 122 7A z 43 2B + 83 53 S 123 7B { 44 2C , 84 54 T 124 7C | 45 2D - 85 55 U 125 7D }

lcd1602显示程序

lcd1602显示程序 液晶显示简介①液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 ②液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(StaTIc)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(AcTIve Matrix)三种。 ③液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为1,其它的为0,为1的点亮,为0的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显

lcd1602按键显示程序

#include<> #include<> //包含_nop_()函数定义的头文件 typedef unsigned int uint ; typedef unsigned char uchar ; sbit RS=P2^0; //寄存器选择位,将RS位定义为引脚 sbit RW=P2^1; //读写选择位,将RW位定义为引脚 sbit E=P2^2; //使能信号位,将E位定义为引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为引脚 " uchar keyscan(); void delay1ms(); void delay(unsigned char n); unsigned char BusyTest(void); void WriteInstruction (unsigned char dictate); void WriteAddress(unsigned char x); … void WriteData(unsigned char y); void LcdInitiate(void); void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } ! void delay(unsigned char n) { unsigned char i; for(i=0;i

1602液晶字符显示

1602液晶字符显示屏的原理 管脚功能/1602字符液晶编辑 1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中: 引脚符号功能说明 1VSS一般接地 2VDD接电源(+5V) 3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 6E E(或EN)端为使能(enable)端,写操作时,下降沿使能。 读操作时,E高电平有效 7DB0低4位三态、双向数据总线0位(最低位)8DB1低4位三态、双向数据总线1位 9DB2低4位三态、双向数据总线2位 10DB3低4位三态、双向数据总线3位 11DB4高4位三态、双向数据总线4位 12DB5高4位三态、双向数据总线5位

13DB6高4位三态、双向数据总线6位 14DB7高4位三态、双向数据总线7位(最高位)(也是busy flag) 15BLA背光电源正极 16BLK背光电源负极 寄存器选择控制表 RS R/W操作说明 00写入指令寄存器(清除屏等) 01读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 10写入数据寄存器(显示各字型等) 11从数据寄存器读取数据 注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0. busy flag(DB7):在此位为1时,LCD忙,将无法再处理其他的指令要求。 字符集/1602字符液晶编辑 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。 因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。 以下是1602的16进制ASCII码表: (图片打开是大图) 读的时候,先读上面那列,再读左边那行,如:感叹号!的ASCII为0x21,字母B的ASCII 为0x42(前面加0x表示十六进制)。 显示地址/1602字符液晶编辑 1602字符液晶显示可分为上下两部分各16位进行显示,处于不同行时的字符显示地址如下

1602原理 汉字显示 原理理解

主要是看懂它CGROM CGRAM的存储空间图,和工作原理 用户直接操作DDRAM,DDRAM有80个字节,其位置与1602的显示位置有对应关系,基本思想是向指定的DDRAM地址中写入字符对应的ASCII码,其实是指针,DDRAM通过这个指针在CGROM中找到它对应的字模数组,然后显示在屏幕上。用户看起来是对DDRAM的操作,实则是通过DDRAM调用了CGROM中的字模数组,显示在LCD上。 图1 其奥妙在于它的ASCII码、字符点阵地址、行地址的对应关系上

图2(没有复制完整) DDRAM的地址对应LCD上的一个位,其内容是一个指针,指向了点阵中的数组。 以00H为例,(写地址的时候要写成0X80,因为指令规定了高位要为1 ,见DDRAM地址设置指令)向00H中写一个01100010则LCD的处理器会视01100010为指针,然后通过CGROM找到它对应的一组字模代码,如下图,这个指针对应的是一个存储空间,这个存储空间就是8行5列,对应下面的行地址0000到0111.这就是行地址的意思,也就是字模码的行。,第8行对应的是光标,就是我们在LCD上看到一最后一行,如果是光标闪烁的话,那一闪闪的就是第8行的位在不断的置0置1的结果。如下图3示 行、列描述的是存储空间,字模码的行列就是8行5列的;还有个行地址批的是CGROM 的行,CGROM中的低4位就是行,共16行16列,如图2 示 图3 下面提用户自定的的解释 CGRAM其实是CGROM中的一部分,这部分是没有被写进字模码的存储空间。前8位没有用到,可以让用户自己写字模码。用户最多写8个,CGROM中对应行0000行到0111行,当然对就的是第0列。第个CGRAM对应一个8行5列的存储空间,如下图4示 因此写自定义字模时要先设定好这个CGRAM的地址,如00000000,然后要在这个地址中写入8行的数据,如图4示,第一个地址代表字符标号,也就是行DDRAM中写的指针,下面的字符码的低3位,现时也是CGRAM的高3位,位5 4 3。自定义进就是这样写的 程序也是按这个思想写的。

已经采用过-LCD1602显示字符和(RAM)数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序(无聊原创) 1,单片机和LCD1602的连线,和程序结果显示如下图: 2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。程序如下: ORG 0000H AJMP MAIN RS EQU P2.4 RW EQU P2.5 E EQU P2.6 MAIN: MOV SP,#60H MOV 40H,#01H MOV 41H,#02H MOV 42H,#03H MOV 43H,#04H MOV 44H,#05H MOV 45H,#06H MOV 46H,#07H ACALL DD1 ;DD1是LCD初始化

MOV DPTR,#TABLE1 ACALL DD2;DD2是LCD第一行显示TABLE1 ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据 SJMP $ DD1: MOV p0,#01H ;清屏 CALL ENABLE MOV p0,#38H ;显示功能 CALL ENABLE MOV p0,#0FH ;显示开关控制 CALL ENABLE MOV p0,#06H ;+1 CALL ENABLE RET DD2: MOV p0,#80H;第一行的开始位置 cALL ENABLE CALL WRITE1;到TABLE1取码? RET DD3: MOV p0,#0C0H;第二行的位置 CALL ENABLE CALL WRITE1;到TABLE2 取码 RET ENABLE: CLR RS ;送命令 CLR RW CLR E CALL DELAY SETB E RET WRITE1: MOV R1,#00H ;显示table中的值 A1: MOV A,R1;到table取码 MOVC A,@A+DPTR call wRITE2 ;显示到lcd INC R1 CJNE A,#00H,A1 ;是否到00h RET WRITE2:MOV p0,A ;显示 SETB RS CLR RW CLR E CALL DELAY SETB E RET

1602液晶字符显示

1602液晶字符显示

1.基本简介 LCD1602工业字符型液晶,能够同时显示16x02即32个字符。(16列2行) 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方

便地应用于市面上大部分的字符型液晶。 2.管脚功能 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 ⑶特性 3.3V或5V工作电压,对比度可调

1602液晶显示计算器电路图及程序

#include #include #include #include unsigned char code Error[]={"error"}; unsigned char code Systemerror[]={"system error"}; unsigned char code Lcd[]={"lcd calculate"}; char str[16]; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; /*********************** 函数功能:延时1ms ***********************/ void delay1ms() { unsigned char i,j; for (i=0;i<10;i++) for (j=0;j<33;j++) ; } /************************ 函数功能:延时n毫秒 入口参数:n ************************/ void delaynms(unsigned char n) { unsigned char i; for (i=0;i

液晶1602显示字符代码

1602液晶字符码 十十六ASCII 十十六ASCII 十十六ASCII 进制进制字符进制进制字符进制进制字符 00 00 自定义字符1 56 38 8 96 60 ` 01 01 自定义字符2 57 39 9 97 61 a 02 02 自定义字符3 58 3A : 98 62 b 03 03 自定义字符4 59 3B ; 99 63 c 04 04 自定义字符5 60 3C < 100 64 d 05 05 自定义字符6 61 3D = 101 65 e 06 06 自定义字符7 62 3E > 102 66 f 07 07 自定义字符8 63 3F ? 103 67 g 08 08 自定义字符1 64 40 @ 104 68 h 09 09 自定义字符2 65 41 A 105 69 i 10 0A 自定义字符3 66 42 B 106 6A j 11 0B 自定义字符4 67 43 C 107 6B k 12 0C 自定义字符5 68 44 D 108 6C l 13 0D 自定义字符6 69 45 E 109 6D m 14 0E 自定义字符7 70 46 F 110 6E n 15 0F 自定义字符8 71 47 G 111 6F o 32 20 空格72 48 H 112 70 p 33 21 ! 73 49 I 113 71 q 34 22 " 74 4A J 114 72 r 35 23 # 75 4B K 115 73 s 36 24 $ 76 4C L 116 74 t 37 25 % 77 4D M 117 75 u 38 26 & 78 4E N 118 76 v 39 27 ' 79 4F O 119 77 w 40 28 ( 80 50 P 120 78 x 41 29 ) 81 51 Q 121 79 y 42 2A * 82 52 R 122 7A z 43 2B + 83 53 S 123 7B { 44 2C , 84 54 T 124 7C | 45 2D - 85 55 U 125 7D } 46 2E . 86 56 V 126 7E ~ 47 2F / 87 57 W 48 30 0 88 58 X 49 31 1 89 59 Y 50 32 2 90 5A Z 51 33 3 91 5B [ 52 34 4 92 5C \ 53 35 5 93 5D ] 54 36 6 94 5E ^ 55 37 7 95 5F _

LM1602液晶显示程序

#include #define uchar unsigned char #define uint unsigned int unsigned char code tab1[16]=" Now time is: "; unsigned char tab2[16]=" 00:00:00 "; uchar second = 30; uchar minite = 11; uchar hour = 15; sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; void delay() { int i,j; for(i=0; i<=100; i++) for(j=0; j<=20; j++); } void Write_Command(uchar command) { P0 = command; RS = 0; RW = 0; E = 1; delay(); E = 0; } void Write_Data(uchar Data) { P0 = Data; RS = 1; RW = 0; E = 1; delay(); E = 0; } void LCD_Init(void)//初始化 { Write_Command(0x01); Write_Command(0x38);

Write_Command(0x0c); Write_Command(0x06); } void LCD_Printfc(uchar hang,uchar lie,uchar sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie; Write_Command(a); Write_Data(sign); } void LCD_Display(uchar *tab1) { uchar i; Write_Command(0x80); for(i=0; i<16; i++) { Write_Data(tab1[i]); delay(); } /* Write_Command(0xc0); for(i=0; i<16; i++) { Write_Data(tab2[i]); delay(); }*/ } void time_view(void) { if(second == 60) { minite ++; second = 0; } if(minite == 60) { hour++; minite = 0; } if(hour == 24)

LCD1602显示汉字“生日快乐”

1602显示“生日快乐” ////////////////////目标板:红油板///////////////////// ////////////////////修改自:不要显卡《1602显示汉字“生日快乐”》原因:乱码//////////////////////// #include #define uchar unsigned char #define uint unsigned int sbit RS=P0^5; sbit RW=P0^6; sbit E=P0^7; uchar sheng[]={0x04,0x14,0x1f,0x14,0x0e,0x04,0x1f,0x00}; //“生”字字模uchar ri[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}; //“日”字字模 uchar kuai[]={0x0a,0x0a,0x1f,0x1b,0x1f,0x0a,0x0d,0x00}; //“快”字字模uchar le[]={0x1e,0x10,0x14,0x1f,0x04,0x15,0x15,0x00}; //“乐”字字模 void delay(uint m) { while(m--); } void Write_Instruction(uchar Instruction) //1602写命令 { delay(5); RS=0;

RW=0; E=1; P2=Instruction; E=0; } void Write_Data(uchar Data) //1602写数据{ delay(5); RS=1; RW=0; E=1; P2=Data; E=0; } void LCD1602_Init() //1602初始化 { Write_Instruction(0x06); Write_Instruction(0x30); Write_Instruction(0x0c); } void main() { uchar i; LCD1602_Init();

LCD1602汇编显示程序

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

51单片机控制1602LCD显示程序

LCD显示电路 #include sbit RS=P3^7; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P3^6; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^7; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,将BF位定义为P0.7引脚 #define Lcd_Data P0 #include #include //包含_nop_()函数定义的头文件 unsigned char code string1[ ]= {0x77,0x75,0x20,0x79,0x61,0x6E,0x67,0x20,0x79,0x61,0x6E,0x67,0x20,0x20,0x20,0x20}; //第一行显示的字符 void Lcd_delay1ms() // 函数功能:延时1ms //注:不同单片机不同晶振需要对此函数进行修改 { unsigned char i,j; for(i=0;i<90;i++) for(j=0;j<33;j++); } void Lcd_delay(unsigned int n) // 函数功能:延时若干毫秒,入口参数:n { unsigned int i; for(i=0;i

/***************************************************** 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 ***************************************************/ bit Lcd_BusyTest(void) { bit result; RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; //E=1,才允许读写 _nop_(); //空操作 _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0; return result; } /***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate ***************************************************/ void Lcd_WriteCom (unsigned char dictate) { while(Lcd_BusyTest()==1); //如果忙就等待 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0; E=0; //E置低电平(写指令时就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_(); //空操作两个机器周期,给硬件反应时间 Lcd_Data=dictate; //将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令} /***************************************************** 函数功能:指定字符显示的实际地址 入口参数:x

LCD1602字符测试显示程序与仿真

#include "reg51.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int uchar code table1 []={" WELCOME "}; //欢迎显示,包括空格在内<=16 uchar code table2 []={"Name: "};//欢迎显示,包括空格在内<=16 //************管脚定义************************ sbit lcd_rs = P3^0; //液晶数据命令选择端 sbit lcd_en = P3^1; //液晶使能 //************参数定义************************ uint tvalue;//温度值 uchar tflag;//温度正负标志 uchar data disdata[5]; //************子函数定义************************ void delay(uchar z); //delay延时子程序 void init_lcd(); //LCD1602初始化函数 void write_com(uchar com); //LCD1602写指令函数 void write_data(uchar date); //LCD1602写数据函数 void lcd1602_display(uchar *q,uchar *p);//LCD1602显示函数 void welcome_1(); //LCD1602显示欢迎函数1 //************主函数************************ void main() { welcome_1(); delay(200); while(1); } //************delay延时子程序************************ void delay(uchar z)

1602显示汉字

液晶显示模块LCD1602介绍液晶显示(LCD)是单片机应用系统中的一种常见人机接口形式,其优点是体积小、重量轻、功耗低。目前市场上的液晶显示器主要有字段型、点阵字符型和点阵图形三大类。 此处介绍点阵字符型LCD1602。 点阵字符型液晶显示根据显示容量可以分为1*16,2*16,2*20字等形式。LCD1602为2*16型。 LCD1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。 LCD1602模块采用16引脚接线: 引脚01:Vss,接地。 引脚02:Vdd,接5V。 引脚03:VL,对比度调整端。通常接地,此时对比度最高。 引脚04:RS,数据/命令寄存器选择端。1→数据寄存器,0→命令寄存器。 引脚05:RW,读/写选择端。1→读,0→写。 引脚06:E,使能端。1→0跳变时液晶模块执行命令。 引脚07-14,D0-D7,8位双向数据总线。 引脚15:BLA,背光正极。 应缴16:BLK,背光负极。 LCD1602模块的命令,共有11条,如表1所示 表1 LCD1602的操作命令 序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清屏0 0 0 0 0 0 0 0 0 1 2 光标归位0 0 0 0 0 0 0 0 1 * 3 输入模式设置0 0 0 0 0 0 0 0 I/D S 4 显示与不显示设置0 0 0 0 0 1 D C B 0 0 0 0 0 1 S/C R/L * * 5 光标或屏幕内容移位 选择 6 功能设置0 0 0 0 1 DL N F * * 7 CGRAM地址设置0 0 0 1 CGRAM地址 8 DDRAM地址设置0 0 1 DDRAM地址 0 1 BF 计数器地址 9 读忙标志和计数器地 址设置 10 写DDRAM或 1 0 要写的数据 CGROM 1 1 读出的数据 11 读DDRAM或 CGROM 命令说明: 命令1:清屏。光标回到左上角,地址计数器设为0. 命令2:光标归位。光标回到左上角。

相关文档
最新文档