永发信息网

求LCD1602显示生日快乐四个汉字的程序,单片机用AT89S52的,谢啦~

答案:4  悬赏:50  手机版
解决时间 2021-03-06 09:57
求LCD1602显示生日快乐四个汉字的程序,单片机用AT89S52的,谢啦~
最佳答案

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]="Believe yourself!";
uchar code table2[]="Happybirthy to you!";
sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P1^2;
void delay(uint ms)
{
uint n;
for(;ms>0;ms--)
for(n=124;n>0;n--);
}

void write_Instruction(uchar Instruction)
{
RS=0;
RW=0;
E=0;
P0=Instruction;
delay(5);
E=1;
delay(5);
E=0;
}

void write_Data(uchar Data)
{
RS=1;
RW=0;
E=0;
P0=Data;
delay(5);
E=1;
delay(5);
E=0;
}

void Init()
{
delay(15);
write_Instruction(0x38);
delay(5);
write_Instruction(0x38);
delay(5);
write_Instruction(0x38);
delay(5);
write_Instruction(0x38);
write_Instruction(0x38);
write_Instruction(0x08);
write_Instruction(0x01);
write_Instruction(0x06);
write_Instruction(0x0c);
}
void left_move()
{
uchar i;
for(i=0;i<16;i++)
{
write_Instruction(0x18);
delay(3000);
}
}
void main()
{
uchar i;
Init();
while(1)
{
write_Instruction(0x80);

for(i=0;i<16;i++)
{
write_Data(table1[i]);
delay(1);
}

write_Instruction(0x80+0x40);
for(i=0;i<19;i++)
{
write_Data(table2[i]);
delay(1);
}
left_move();
}
}
全部回答
#define lcd_way 0x80 //状态字 #define lcd1602_h 1 //宏定义手册中出现的h的定义 #define lcd1602_l 0 //宏定义手册中出现的l的定义 #define lcd1602_dat 1 //数据 #define lcd1602_com 0 //命令 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_num; //定义变量用来液晶无忙回答的退出死循环 lcd1602_num=255; //忙状态检测次数 while(lcd1602_readway()) //检查忙状态 {lcd1602_num--; //检测次数自减 if(lcd1602_num==0) //判断检测次数等于0 中文的程序 看着真别扭
太强悍了,1602可以显示汉字么?另外,1602是显示双排的,哪怕用符号来显示,也不可能完成生日快乐的正确显示,建议采用12832或者12864屏幕显示,要么就是采用1602显示英文“HAPPY BIRTHDAY TO YOU”倒是可以的。
(因为你没有说想怎样显示‘生日快乐!’,所以我给你编写的是这些字向右循环移动,你也可以编写,闪烁的,循环左移的) 在LCD中,一次只能写入一个字符,所以,你先建立一个字符串数组: unsigned char code string[]={"生日快乐!"} 然后再设置一个循环,从第一个数组元素开始写入LCD,直到写到字符串的结束标志‘\0’为止,程序如下: unsigned char i; i=0; while(string[i]!='\0') { WriteData (string[i]); i++; delay (150); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
吕长明烧牛肉总店地址在什么地方,想过去办事
手机怎么截游戏图
tnt什么武器适合高抛?
读图 “我国土地利用类型构成图”, 回答问题
我的笔记本电脑用户名为adminisator密码应该
大神们 北京东三环国贸附近有没有卖稻香村的
read amazing share哪个不同
护照还有2个月过期还可以办理签证吗
(1)图甲中的符号A表示该电表可用来测量____
梦已逝,心已碎,留下只是在为离开做准备吗?
sergiorossi(恒隆广场店)我想知道这个在什么
521是代表什么意思?
2013年南京哪些民办学校招聘音乐老师的?
拍立得mini8为什么有相纸却显示的是s
护肤的正确步骤?护肤达人进
推荐资讯
患者女,67岁。出现头痛头晕、视物不清近2周
设备如何防静电
头孢是使什么提炼的
主机连接海信液晶电视机vga为何提示无信号
单选题细胞中含量微少,但对维持生命活动必不
浉河区信阳嗨贝贝儿童摄影这个地址怎么能查询
速卖通知识产权投诉为什么有的标注严重违规
华为手机格式化后无服务问题那里,不能打电话
纽波利顿犬厉害还是藏獒厉害
视神经脊髓炎复发在吃药、但腿软发热只一会儿
我想购买一辆八九万元的汽车,可以贷款购车吗
怎么重礼仪
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?