石家庄建设网站公司简介,免费网站源码下载平台,抖音代运营计划书,网店美工课程LCD1602
liquid crystal display 液晶显示屏#xff0c;一种字符型液晶显示模块#xff0c;可以显示 16*2 个字符#xff0c;每个字符是 5*7 点阵。 P0 P2 会和数码管、LED 一定程度上冲突。 地。 Vcc。 调对比度的。 RS#xff1a;数据指令端。1代表 DB 是数据#x…LCD1602
liquid crystal display 液晶显示屏一种字符型液晶显示模块可以显示 16*2 个字符每个字符是 5*7 点阵。 P0 P2 会和数码管、LED 一定程度上冲突。 地。 Vcc。 调对比度的。 RS数据指令端。1代表 DB 是数据0代表是指令。 RW1读0写。 E类似时钟的使能。高电平有效下降沿执行。 DB并行输入。一个字节长。 BG背光灯电源。
内部结构图 类似 SMG想显示1并不是直接输入1而是操纵数码管右侧一竖被点亮。字模库起的就是这个作用里面有固定的 ROM 和用户课自定义的 RAM。
DDRAM 长于屏幕可以通过移平实现滚动效果。
AC address controller可以自动移位写入数据。
字模库中的数据大多数和 ASCII 码是一样的。
指令 初始化指令
初始化要做哪些操作
规定显示区域如8位数据接口2行显示5*7点阵即为0011 10xx如果取0即为 0x38.。
显示的模式设置如开启显示关闭光标关闭光标闪烁0000 1101即 0x0D。
进入模式设置如读写后光标屏幕不动0000 0110,0x06。如果是滚动屏幕则为。
清屏0x01。
显示指令
先设置 DDRAM 初始地址0x80|AC开头的8是 DDRAM 固定指令信息不能改。后面的全是0与 AC 光标位置做与AC 不同位置的值见 DDRAM 地址表.
然后发送数据。
时序 模块化
第一阶段我们先编写 LCD1602 模块化编程代码这一部分主要显示静态内容用于程序编写过程中显示变量进行调试。
目标模块化函数 //LCD1602.h
#ifndef __LCD1602_H__
#define __LCD1602_H__#include reg52.h
#include intrins.h
sbit LCD_RSP2^6;
sbit LCD_RWP2^5;
sbit LCD_EP2^7;
#define LCD_DATAPORT P0void LCD_Delay1ms(); //11.0592MHz
void LCD_WriteCommand(unsigned char Command);
void LCD_WriteData(unsigned char Data);
void LCD_Init();
void LCD_SetCursor(unsigned char line, unsigned char column);
unsigned int LCD_Pow(unsigned char x, unsigned char y);
void LCD_ShowChar(unsigned char line, unsigned char column, unsigned char c);
void LCD_ShowString(unsigned char line, unsigned char column, unsigned char str[]);
void LCD_ShowNum(unsigned char line, unsigned char column, unsigned int num, unsigned char length);
void LCD_ShowSignedNum(unsigned char line, unsigned char column, int num, unsigned char length);
void LCD_ShowHexNum(unsigned char line, unsigned char column, unsigned int num, unsigned char length);
void LCD_ShowBinNum(unsigned char line, unsigned char column, unsigned int num, unsigned char length);
#endif//LCD1602.c
#include LCD1602.Hvoid LCD_Delay1ms() //11.0592MHz
{unsigned char i, j;_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);
}void LCD_WriteCommand(unsigned char Command){LCD_RS0;LCD_RW0;LCD_E0;LCD_DATAPORTCommand;LCD_Delay1ms();LCD_E1;LCD_Delay1ms();LCD_E0;
}void LCD_WriteData(unsigned char Data){LCD_RS1;LCD_RW0;LCD_E0;LCD_DATAPORTData;LCD_Delay1ms();LCD_E1;LCD_Delay1ms();LCD_E0;
}void LCD_Init(){LCD_WriteCommand(0x38);LCD_WriteCommand(0x0C);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);
}void LCD_SetCursor(unsigned char line, unsigned char column){if(line1){LCD_WriteCommand(0x80|(column-1));}else{LCD_WriteCommand(0x80|(column-1)0x40);}
}unsigned int LCD_Pow(unsigned char x, unsigned char y){unsigned char iy;unsigned int res1;for(;i0;i--)res*x;return res;
}void LCD_ShowChar(unsigned char line, unsigned char column, unsigned char c){LCD_SetCursor(line, column);LCD_WriteData(c);
}void LCD_ShowString(unsigned char line, unsigned char column, unsigned char str[]){unsigned int i0;LCD_SetCursor(line, column);while(str[i]!\0){LCD_WriteData(str[i]);i;}
}void LCD_ShowNum(unsigned char line, unsigned char column, unsigned int num, unsigned char length){unsigned char i;unsigned base;LCD_SetCursor(line, column);for(ilength;i0;i--){baseLCD_Pow(10, i-1);LCD_WriteData(num/base%100); }
}void LCD_ShowBinNum(unsigned char line, unsigned char column, unsigned int num, unsigned char length){unsigned char i;unsigned char base;unsigned char single_num;LCD_SetCursor(line, column);for(ilength;i0;i--){baseLCD_Pow(2, i-1);single_numnum/base%20;LCD_WriteData(single_num); }
}void LCD_ShowHexNum(unsigned char line, unsigned char column, unsigned int num, unsigned char length){unsigned char i;unsigned char base;unsigned char single_num;LCD_SetCursor(line, column);for(ilength;i0;i--){baseLCD_Pow(16, i-1);single_numnum/base%16;if(single_num9)single_num0;else single_numA-10;LCD_WriteData(single_num); }
}void LCD_ShowSignedNum(unsigned char line, unsigned char column, int num, unsigned char length){unsigned char i;unsigned base;LCD_SetCursor(line, column);if(num0)LCD_WriteData();else {LCD_WriteData(-);num-num;}for(ilength;i0;i--){baseLCD_Pow(10, i-1);LCD_WriteData(num/base%100); }
}如果希望屏幕滚动一定时间执行一次LCD_WriteCommand(0x18); 屏幕左移指令。