lcd1602液晶显示屏代码(求助51单片机 显示器1602的输出代码)
本文目录
- 求助51单片机 显示器1602的输出代码
- lcd1602液晶显示的程序
- LCD1602液晶显示出现乱码,如何解决
- 1602字符液晶的程序代码
- lcd1602显示0-10000
- 写出编程LCD1602液晶的初始化程序
- 单片机LCD1602液晶显示的汇编程序
求助51单片机 显示器1602的输出代码
#include 《string.h》
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
sbit DATA=P2; //定义LCD1602管脚
void lcd1602_display_str(unsigned char x,bit y,unsigned char dat);//x:列 0-15 y:行 0-1 dat写入的东西
void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll);
void lcd1602_init();
void lcd1602_write(bit sign, unsigned char dat) //sign=0:写入命令 sign=1:写入数据
{
delay_1ms(1);
RS=sign;
RW=0;
EN=0;
DATA=dat;
EN=1;
delay_1ms(1);
EN=1;
RS=0;
}
void lcd1602_init()
{
delay_1ms(10);
lcd1602_write(0,0x38);
lcd1602_write(0,0x38);
lcd1602_write(0,0x38);
lcd1602_write(0,0x0c);
lcd1602_write(0,0x01);
}
void lcd1602_display_str(unsigned char x,bit y,unsigned char dat)
{
unsigned char point=0x80+x;
unsigned char len=16;
unsigned char j=0;
if(y)
{point+=0x40;}
lcd1602_write(0,point);
len=strlen(dat);
for(j=0;j《len;j++)
{
lcd1602_write(1,dat);
}
}
void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll)
{
unsigned char point=0x80+x;
if(y)
{point+=0x40;}
lcd1602_write(0,point);
lcd1602_write(1,ascll);
}
以上是基础程序,也就是LCD1602的工作程序(注意我的延时函数未写出,请根据实际芯片的速度写延时函数)
unsigned char table=“ Hello,World “ ;
lcd1602_init() ;
lcd1602_display_str(0,1,table);
以上是工作程序(显示字符串),注意的是LCD一行最多16个字符,而且不支持中文,这是在第一列第二行输出的Hello,World,包括空格,一共16个字符。
如果是STC89C52的话,可以使用以下的延时函数
void delay_1ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i《n;i++)
for(j=0;j《110;j++);
}
lcd1602液晶显示的程序
①问,RS,RW,E 的设置为 读状态时序 的过程,读出来的数据(数据口P1) 的最高位 刚好即为 液晶的 忙碌 标志位。
②问,writecontrol(unsigned condata) 函数 是个 写指令 函数;
③问,空操作 是为了让数据稳定后,才使能 液晶接收数据;
④问,写指令有时间 间隔要求,太频繁的读写会丢码,所以要加延时,三条38指令,是因为安全起见,上电后马上初始化会出现液晶电源不稳而丢码;
⑤问,液晶显示 只在 更新数据 的时候刷新一次即可,液晶会维持内容,无需重复刷新。
⑥附送,③和④问,都是驱动太恶心而造成的结果,好的驱动程序不需如此操作。液晶的时序要求为ns级,单片机的指令周期普遍为us级,根本不需过多累赘。
#include“reg52.h“//包含52头文件
#include“SMC1602A.h“//包含SMC1602A宏定义文件
#define BusyReadCount10//读忙标志等待次数
#define SMC1602_DataP0//定义 数据接口
//sbit SMC1602_VO=P2^4;//定义 VO对比度接口
sbit SMC1602_RW=P2^5;//定义 R/W接口25
sbit SMC1602_RS=P2^6;//定义 RS接口26
sbit SMC1602_E=P2^7;//定义 E接口27
#define SMC1602_EnSMC1602_E=1//使能
#define SMC1602_DisSMC1602_E=0//禁止
uchar SMC1602_Read(bit read_type)//1602液晶屏读函数
{
uchar read_data;
SMC1602_Dis;//禁止使能
SMC1602_RW=ReadOperate;//读操作
SMC1602_RS=read_type;//读类型:0状态,1数据
SMC1602_En;//开启使能
read_data=SMC1602_Data;//存储结果
SMC1602_Dis;//禁止使能
return read_data;//返回结果
}
void SMC1602_WriteByte(bit write_type,uchar write_data)//1602液晶屏读函数
{
uchar i=BusyReadCount;
for(;i;i--);//延时操作,为写操作预留回复时间
while((SMC1602_Read(CommOperate)&BusyState) &&(++i《=BusyReadCount));//读取忙标志(BusyReadCount次),若均忙中,则不再读取忙标志,直接执行写操作
//while(SMC1602_Read(CommOperate)&BusyState) if(++i》BusyReadCount) return;//读取忙标志,若BusyReadCount次均忙中,则不进行写操作
//while(SMC1602_Read(CommOperate)&BusyState);//等待空闲(死等)
SMC1602_Dis;//禁止使能
SMC1602_RW=WriteOperate;//写操作
SMC1602_RS=write_type;//写类型:0指令,1数据
SMC1602_Data=write_data;//写操作,将操作数送的数据口
SMC1602_En;//开启使能
SMC1602_Dis;//禁止使能
}
void SMC1602_WriteCGRAM(uchar *write_buf,uchar start_loca,uchar word_num,uchar start_addr)//SMC1602写CGRAM函数,用于自定义字符
{
uchar i,j;
write_buf+=start_loca;//指向“需写入数据数组“的起始位置
SMC1602_WriteByte(CommOperate,CGRAMAddr|start_addr《《3);//写CGRAM操作,并将CGRAM起始地址设为 start_addr
for(j=0;j《word_num;j++)//自定义字符数量
for(i=0;i《8;i++) SMC1602_WriteByte(DataOperate,*write_buf++);//写入一个自定义字符8个字节数据
}
void SMC1602_Init()//1602液晶屏初始化函数
{
uint i;
SMC1602_WriteByte(CommOperate,DisplayMode);//显示模式设置:16×2显示,5×7点阵,8位数据接口
SMC1602_WriteByte(CommOperate,ScreenMode|ScreenOn);//光标模式设置:开启整体显示,开启光标显示,开启光标闪烁
SMC1602_WriteByte(CommOperate,InputMode);//输入方式设置:关闭整屏移动,开启光标正移动(+1)
SMC1602_WriteByte(CommOperate,CleanLCD);//清屏,复位光标
SMC1602_WriteByte(CommOperate,FirstCol);//定位第一行
for(i=150;i;i--);//等待电源稳定,否则写CGRAM数据(自定义字符)时容易丢失,uint执行周期长,用uchar将会缩短时间,不足以稳定LCD
}
LCD1602液晶显示出现乱码,如何解决
你把跟lcd数据连接的一些外设都去掉 程序的话\x0d\x0a\x0d\x0a#include
1602字符液晶的程序代码
(参考)
/#include《intrins.h》 //包含NOP空指令的头文件
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_H 1 //宏定义手册中出现的H的定义
#define LCD1602_L 0 //宏定义手册中出现的L的定义
#define LCD1602_DAT 1 //数据
#define LCD1602_COM 0 //命令
#define LCD_15MS 300 //宏定义15MS延时需要的数值
#defineLCD_5MS 100 //宏定义 5MS延时需要的数值
/*显示模式指令*/
#define LCD_Display_mode 0X38 //设置16x2显示 5x7点阵 8位数据接口
/*显示开/关及光标设置*/
#define LCD_shows0 0X0C //开显示 不显示光标 光标不闪烁
#define LCD_shows2 0X0E //开显示 显示光标 光标不闪烁
#define LCD_shows1 0X0F //开显示 显示光标 光标 闪烁
#define LCD_shows3 0X08 //关显示 不显示光标 光标不闪烁
/*指针设置*/
#define LCD_cursor1 0X04 //写一个字符 地址指针减1
#define LCD_cursor2 0X05 //写一个字符 地址指针减1 并屏幕右移
#define LCD_cursor3 0X06 //写一个字符 地址指针加1
#define LCD_cursor4 0X07 //写一个字符 地址指针加1 并屏幕左移
/*清屏指令*/
#define LCD_clear 0x01 //清屏指令 数据指针清零 所有显示清零
/*忙状态字*/
#define LCD_WAY 0x80 //状态字
/*宏定义显示起始地址*/
#define LCD_ADDH 0X80 //第一行地址0x80-0xA7
#define LCD_ADDL 0XC0 //第二行地址0xC0-0xE7
/*IO口定义*/
#define LCD1602_DATA P0 //宏定义8位数据线IO为P0口 D0~D7=P00~P07 8位数据线 D0=P00;
sbit LCD1602_RS=P2^5; //数据/命令选择端(H/L)
sbit LCD1602_RW=P2^6; //读/写选择端(H/L)
sbit LCD1602_E =P2^7; //使能信号
/*函数声明*/
void LCD1602_init(); //液晶初始化函数
void LCD1602_writecd(bit lcd_rs, uchar LCD1602_d);//写命令/数据 函数bit lcd_rs是数据还是命令 uchar LCD1602_d要写入的数据
uchar LCD1602_readway(); //读忙状态函数 由写入和读取函数调用
uchar LCD1602_readata(); //读数据函数
void LCD_DELAY(uchar LCD_delay); //
/*液晶初始化函数*/
void LCD1602_init() //液晶初始化函数
{ LCD_DELAY(LCD_15MS); //延时15MS 初始化
LCD1602_writecd(LCD1602_COM,LCD_Display_mode);//写指令38H 设置16x2显示 5x7点阵 8位数据接口
LCD1602_writecd(LCD1602_COM,LCD_shows0); //开显示 不显示光标 光标不闪烁
LCD1602_writecd(LCD1602_COM,LCD_cursor1); //检查忙状态
LCD1602_writecd(LCD1602_COM,LCD_clear); //写指令01H:显示清屏
}
/*液晶写命令/数据函数*/
void LCD1602_writecd(bit lcd_rs, uchar LCD1602_cd)//写命令/数据 函数
{ uchar LCD1602_NUM; //定义变量用来液晶无忙回答的退出死循环
LCD1602_NUM=255; //忙状态检测次数
while(LCD1602_readway()) //检查忙状态
{LCD1602_NUM--; //检测次数自减
if(LCD1602_NUM==0) //判断检测次数等于0
{break;} //退出循环判断忙
}
LCD1602_RW = LCD1602_L; //读/写选择端(H/L)
LCD1602_RS = lcd_rs; //数据/命令选择端(H/L)
LCD1602_DATA= LCD1602_cd; //IO口赋值
LCD1602_E = LCD1602_H; //拉高使能信号开始传输数据
LCD1602_E = LCD1602_L; //拉低使能信号锁存数据
LCD1602_DATA= 0xff; //IO口数据清除
}
/*忙状态读取函数*/
uchar LCD1602_readway()//读状态函数由写入和读取函数调用
{ uchar LCD1602_way; //状态字变量
LCD1602_DATA=0xff; //IO口数据清除
LCD1602_RS = LCD1602_COM; //数据/命令选择端(H/L) 命令
LCD1602_RW = LCD1602_H; //读/写选择端(H/L)
LCD1602_E = LCD1602_H; //拉高使能信号开始接收状态
LCD1602_way =LCD1602_DATA; //读取状态
LCD1602_E = LCD1602_L; //拉低使能信号锁存数据
LCD1602_way =LCD1602_way&LCD_WAY;//取忙状态字
return(LCD1602_way); //返回状态字
}
/*液晶读数据函数*/
uchar LCD1602_readata()//读数据函数
{ uchar LCD1602_data; //数据暂存变量
while(LCD1602_readway()); //检查忙状态 --------------------
LCD1602_DATA=0xff; //IO口数据清除
LCD1602_RS = LCD1602_DAT; //数据/命令选择端(H/L) 数据
LCD1602_RW = LCD1602_H; //读/写选择端(H/L)
LCD1602_E = LCD1602_H; //拉高使能信号开始接收状态
LCD1602_data= LCD1602_DATA; //读取状态
LCD1602_E = LCD1602_L; //拉低使能信号锁存数据
return(LCD1602_data); //返回数据
}
/*延时函数*/
void LCD_DELAY(uchar LCD_delay)//
{ uchar lcd_del;
while(LCD_delay--) //自减
{lcd_del=100;
while(lcd_del--);}
}
lcd1602显示0-10000
lcd1602显示0-10000意思是变量数值。
LCD1602是不能直接显示变量数值的,只能显示ASCII码,即显示字符。因此,要显示变量数值,需要把变量的每一位数转换成字符0~9。
写出编程LCD1602液晶的初始化程序
#include 《reg51.h》
#define uchar unsigned char
#define uint unsigned int
#define lcd_ports P1
sbit lcdrs=P3^5;
sbit lcdrw=P3^3;
sbit lcde=P3^4;
void delay(uint z)//延迟子程序
{
uchar i,j;
for(i=z;i》0;i--)
for(j=256;j》0;j--);
}
void write_com(uchar com) //1602写指令
{
lcdrs=0;
P1=com;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void write_data(uchar date) //1602写数据,写的是你要显示数据的ASCLL码值
{
lcdrs=1;
P1=date;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void init() //初始化
{
lcdrw=0;
lcde=0;
write_com(0x38); //使液晶显示点阵
write_com(0x0e); //初始设置
write_com(0x06); //初始设置
write_com(0x01); //清零
write_com(0x80+0x00); //使指针指向第一行第一列
}
void main()
{
init();
while(1){
write_com(0x80);//从第一行第一列开始写数据。
write_data(0x73); //显示s字符
write_data(0x69);//第一行第二列显示字符i
write_data(0x6e);//第一行第三列显示字符n
write_data(0x65);//第一行第四列显示字符e;}
}
单片机LCD1602液晶显示的汇编程序
也没去理解AC,只知道第一行第1点的地址是80H,第二行第1 点是C0H。
下面就是你要的程序,仅供参考
RS BIT P1.2 ;这3位是液晶屏的控制信号,连接方式由具体硬件而定
RW BIT P1.1
E BIT P1.0
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
mov R0,#24
ACALL INITIAL
ACALL DISPLAY;调用液晶显示子程序
AJMP MAIN
;-------液晶显示---------------------------------------
DISPLAY:
MOV A,#80H ;第一行第1 个点
ACALL WR_CMD
MOV DPTR, #LINE1
ACALL PR_STR
ACALL WR_DATA
DISP1:
MOV A,#1CH ;字符左移命令(注:实物中左移命令字为18H)
ACALL WR_CMD
ACALL D05S
DJNZ R0,DISP1
RET
;---液晶屏初始化-------------------------------------------------
INITIAL:
MOV A, #01H
ACALL WR_CMD
MOV A, #38H
ACALL WR_CMD
MOV A, #0CH
ACALL WR_CMD
MOV A, #06H
ACALL WR_CMD
RET
;----写液晶指令的子程序------------------------------------------
WR_CMD:
MOV P3, A
CLR RS ;写入控制命令
CLR RW
CLR E
ACALL DELAY
SETB E
RET
;----写液晶数据---------------------------------------------
WR_DATA:
MOV P3, A
SETB RS ;写入数据
CLR RW
CLR E
ACALL DELAY ;判断液晶模块是否忙?
SETB E
RET
;-----写行字符---------------------------------------------------------------
PR_STR:
CLR A
MOVC A, @A+DPTR
JZ END_PR
ACALL WR_DATA
INC DPTR
AJMP PR_STR
END_PR:
RET
;----查看液晶忙碌信号---------------------------------------------------------
DELAY:
MOV P3,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P3.7,DELAY ;如果P3.7为高电平表示忙就循环等待
RET
;----0.5S延时(按12MHZ算)-----------------------------------------------------------------
D05S:
MOV R6,#25
MOV R5,#100
MOV R4,#100
DJNZ R4,$
DJNZ R5,$-4
DJNZ R6,$-8
RET
;--------------------------------------------------------------------------------------
LINE1:
DB ’ ZHU NI YI SHENG PING AN’,00H
END
本文相关文章:
moto droid(电信的3G卡用MOTO Droid,到底是个什么情况不懂不懂,求助啊)
2024年6月4日 18:48
小米笔记本重装系统无法引导(小米笔记本重装系统进不去引导页,求助)
2024年6月2日 03:06
佳能60d拍出来的照片(我用佳能60D,用快门优先,拍出来的照片总是黑黑,求助)
2023年8月23日 19:00
诺顿杀毒为什么不卖了(重装系统后诺顿杀毒软件没有了,求助!)
2023年6月12日 10:20
炼狱蝰蛇怎么调dpi(新人求助,炼狱蝰蛇2013版DPI怎么调)
2023年5月21日 17:00
更多文章:
洛克王国钻地小子厉害还是幽狐求分析?寻找一款游戏,英文的名字叫钻石什么的
2024年7月19日 06:11
暗黑3中制作恶魔装置的钥匙守护者和图纸的具体位置是什么?暗黑3小米什么难度出2个钥匙
2023年4月6日 04:20
那里有征服私服?征服私服角色经验倍率数据是怎么修改的在哪里修改要什么工具有GM管理工具的可以发给我吗
2024年7月14日 08:55
全球使命辅助(跪求[全球使命]透视辅助要免费的要钱的不要来了有的发信 396378572@qq.com)
2023年9月9日 05:00
全民K歌中有A,有B,有C,有S都是什么意思唱的都跑调为什么还得3个s呢?请问,一般来说歌唱比赛的评判标准是什么
2024年6月7日 12:45
口袋妖怪xy攻略(口袋妖怪XY时髦值提升攻略 孵蛋之力如何获得)
2024年3月4日 22:30
求空间全屏素材大图 (限男生,全屏的)?2011全屏QQ真人秀教程以及素材那里有
2024年6月2日 08:55
海纳百川,有容乃大;壁立千仞,无欲则刚欲望是实践者的梦,你觉得欲望的本质是什么?为什么人会产生欲望
2024年8月30日 01:50
1 76合击传奇私服(传奇1.76私服英雄合击哪个辅助好用)
2024年6月5日 17:47
《海贼王》十大未解之谜,闪电能不能剪开明哥的鸟笼?漫威《惊奇队长》中,罗南为啥一看到惊奇队长就跑了
2023年5月1日 13:40
打印后台程序服务没有运行(xp系统打印后台程序服务没有运行怎么办)
2024年6月6日 19:33