1、在1602液晶屏上显示字符
2、在1602液晶屏上显示字符--程序编写
3、在1602液晶屏上显示字符--电路仿真
参考程序:
LCD1602.H
/********************************************
**程序名:LCD1602.H
**编写时间:2020.5.3
**硬件环境:stc89c52rc
12MHZ
**接口:RS RW E D0 ~~~D7
**修改日志:无
**说明:在qc1602液晶上测试成功,没有使用到全局变量
**Right version of all
********************************************/
#ifndef __LCD1602_H__
#define __LCD1602_H__
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATA P0 //定义LCD1602的数据口为P0口
sbit RS_1602=P2^7;
sbit RW_1602=P2^6;
sbit E_1602=P2^5;
extern void LCD1602_delay();
extern void LCD1602_check_busy();
extern void LCD1602_write_com( uchar );
extern void LCD1602_write_data(uchar);
extern void LCD1602_write_char(uchar x,uchar y,uchar dat);
//extern void LCD1602_write_string(uchar ,uchar,uchar *, uchar );
extern void LCD1602_write_CGRAM(uchar *);
extern void LCD1602_init( void );
#endif
LCD1602.C
/********************************************
**程序名:LCD1602.C
**编写时间:2020.5.3
**硬件环境:stc89c52rc
12MHZ
**接口:RS RW E D0 ~~~D7
**修改日志:无
**说明:在qc1602液晶上测试成功,没有使用到全局变量
**Right version of all
********************************************/
#include<AT89X52.h>
#include"LCD1602.h"
/********************************************
**函数名称:LCD1602_delay
**函数功能:用于LCD1602的延时
**入口参数:无
**输出参数:无
**备注:
********************************************/
void LCD1602_delay() //延时程序
{
uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<20;j++);
}
/********************************************
**函数名称:LCD1602_check_busy
**函数功能:用于LCD1602的查忙
**入口参数:无
**输出参数:无
**备注:
********************************************/
void LCD1602_check_busy( ) //查询忙碌标志信号程序
{
uchar busy;
do
{
E_1602=0;
RW_1602=1;
RS_1602=0;
E_1602=1;
busy=LCD1602_DATA;
E_1602=0;
LCD1602_delay();
} while(busy&&0x10==1);
}
/********************************************
**函数名称:LCD1602_write_com
**函数功能:向LCD1602写入指令
**入口参数:com
**输出参数:无
**备注:
********************************************/
void LCD1602_write_com( uchar com ) //写指令
{
LCD1602_check_busy();
E_1602=0;
RW_1602=0;
RS_1602=0;
E_1602=1;
LCD1602_DATA=com;
E_1602=0;
}
/********************************************
**函数名称:LCD1602_write_data
**函数功能:向LCD1602写入指令
**入口参数:com
**输出参数:无
**备注:
********************************************/
void LCD1602_write_data(uchar a ) //写数据到LCM程序
{
LCD1602_check_busy();
E_1602=0;
RW_1602=0;
RS_1602=1;
E_1602=1;
LCD1602_DATA=a;
E_1602=0;
}
/********************************************
**函数名称:LCD1602_write_string
**函数功能:向LCD1602指定位置写入一个字符串
**入口参数:com
**输出参数:无
**备注:x:第几行 y,第几列 dat:数组 num:
********************************************/
void LCD1602_write_string( uchar x,uchar y,uchar *dat, uchar num )
{
uchar i;
uchar m=0;
if(x==0)
{
LCD1602_write_com(0x80+y);
for(i=0;i<num;i++) //发送数据第一行
{
LCD1602_write_data(*(dat+i));
}
}
else if(x==1)
{
LCD1602_write_com(0xc0+y);
for(i=0;i<num;i++) //发送数据第一行
{
LCD1602_write_data(*(dat+i));
}
}
}
/********************************************
**函数名称:LCD1602_init
**函数功能:LCD1602初始化程序
**入口参数:无
**输出参数:无
**备注:
********************************************/
void LCD1602_init( ) //启动LCM程序(初始化程序)
{
/*这里要多次激活液晶*/
LCD1602_write_com(0x38);//设置显示模式
_nop_();_nop_();
LCD1602_write_com(0x38);//设置显示模式
_nop_();_nop_();
LCD1602_write_com(0x38);//设置显示模式
_nop_();_nop_();
LCD1602_write_com(0x0c);//开显示,不显示光标,不闪烁,00001100
LCD1602_write_com(0x01);//显示清屏
LCD1602_write_com(0x06);//当读取或者写一个字符后地址指针加一
LCD1602_write_com(0x0c);//开显示,不显示光标,不闪烁,00001100
}
main.C
#include <reg51.h>
#include <lcd1602.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uchar code table1[] = {"ahbvc.edu.cn"};
uchar code table2[] = {"18YingYongDianZi"};
LCD1602_init();
while(1)
{
LCD1602_write_string(0,2,table1,12);
LCD1602_write_string(1,0,table2,16);
}
}

