标题:
用89C51单片机写了一个LCD显示两个字符串的程序
[打印本页]
作者:
wukouyyq
时间:
2022-5-9 19:41
标题:
用89C51单片机写了一个LCD显示两个字符串的程序
初学单片机,勿喷,请大侠指正,
20220509194027.jpg
(129.39 KB, 下载次数: 65)
下载附件
仿真图片
2022-5-9 19:41 上传
程序如下 ,有需要的直接复制拷备
main.c 如下:
#include <reg52.h>
#include "1602.h"
typedef unsigned char u8;
u8 code word1[]={"1234567890ABCDEF"};
u8 code word2[]={"www.51hei.com"};
void main()
{
LCD_init();
w_string(0x80,word1);
w_string(0xc0,word2);
while(1);
}
/****************************************************************/
//1602.h 文件如下:
#ifndef _1602_H_
#define _1602_H_
/*
1602液晶屏的操作
读数据,写数据,写命令
定义引脚:P0口是数据,P2口是控制
*/
sbit RS=P2^0; //定义屏的模式管脚位
sbit RW=P2^1; //定义屏的读写管脚位
sbit EN=P2^2; //屏的使能位
sbit BUSY=P0^7;
void wait() //实际是判断LCD是否忙,是否可进入读写状态
{
P0=0xff;
do
{
RS=0; //命令(状态)模式
RW=1; //读操作
EN=0; //使能关
EN=1; //使能开
}while(BUSY==1);
EN=0;
}
void w_dat(unsigned char dat) //写数据
{
wait();
EN=0;
P0=dat;
RS=1; //数据模式
RW=0; //写操作
EN=1; //使能开,数据进去了
EN=0; //使能关
}
void w_cmd(unsigned char cmd) //写命令函数
{
wait();
EN=0;
P0=cmd;
RS=0; //命令(状态)模式
RW=0; //写操作
EN=1; //使能开,命令进去了
EN=0; //使能关
}
void w_string(unsigned char addr,unsigned char *p) //写入字符串函数
{
w_cmd(addr); //写入命令,让屏从那里开始显示
while(*p !='\0') //循环字符串中的每个字符,直到结尾
{
w_dat(*p++);
}
}
void LCD_init() //LCD初始化函数
{
w_cmd(0x38); //16*2显示,5*7点阵,8位数据接口
w_cmd(0x0c); //显示器开、光标开、光标允许闪烁
w_cmd(0x06); //文字不动、光标自动右移
w_cmd(0x01); //清屏
}
#endif
作者:
hy47566398
时间:
2022-5-10 16:52
E口跳变少了延时,仿真可以,上机不行
作者:
wukouyyq
时间:
2022-5-13 20:50
谢谢楼上,今天发现这个问题了。
我把程序下载到实物中(刚买的1602屏,以前没有),结果还是不显示,不知如何是好,就从某一个宝找到测试程序,从程序中分析,看到语句中有 两行一样的,所以我把程序改了一下:
所有EN=1;前面加两行EN=0; 这样下载后OK。
希望看到此帖的所有人能学有所成!!!!!
作者:
zmh010
时间:
2022-5-18 11:38
楼主,在此程序上。若想实现,按键切换屏幕。要怎么做呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1