📄 lcd1602.c
字号:
//头文件
#include<reg52.h>
#include<absacc.h>
//所用的端口
#define WI_1602 XBYTE[0xd000]//写指令
#define WD_1602 XBYTE[0xd100]//写数据
#define RI_1602 XBYTE[0xd200]//读状态
#define RD_1602 XBYTE[0xd300]//读数据
//需要用的定义
typedef unsigned char uchar;
typedef unsigned int uint;
/* ************ 函数声明域 ************** */
void delay1ms(uint i);//延时1ms子程序
uchar Read_1602(void);//读状态,返回一个uchar类型的数据,当此数据为0x80时,为忙,否则不忙
void WriteI_1602(uchar i);//写指令
void InitWriteI_1602(uchar i);//初始时写指令,不用判忙
void WriteD_1602(uchar i,uchar address);//写数据,address为要写入的地址
void Init_ts1602(void);//初始化1602
/************** 全局变量域 *****************/
uchar code dzxh[]={' ',0xfa,0xfb,' ','D','o','n','\'','t',' ','G','o','!','O','K','?'};//字符数组,字符库是ASCII码
uchar code dzxh1[]=" Hello!!! My name is Tang Xiaozheng,I'm from China.Nice to meet you! ";//字符数组,字符库是ASCII码
/************* 主程序域 **************/
main()
{
uchar i,j;
Init_ts1602();//首先一定要初始化
while(1)
for(j=0;j<55;j++)//j是用来移动的
{
WriteI_1602(0x01);//显示清屏
for(i=0x0;i<=16;i++)//显示字符
WriteD_1602(dzxh[i],i);//在当前位置写入数据
for(i=0x40;i<0x50;i++)//带移动显示字符组
WriteD_1602(dzxh1[i-0x40+j],i);//在当前位置写入数据
delay1ms(500);//决定移动的时间间隔
}
while(1);//最好写上这个,否则屏幕会一闪一闪
}
/************************************************************/
// 以下是函数部分 //
/************************************************************/
void delay1ms(uint i)//延时1ms子程序
{ //当i取uint,y取uchar,y=150,晶振为12M时,比较准确
uchar y;
while(i--)
{
for(y=0;y<150;y++);
}
}
//读状态,返回一个uchar类型的数据,当此数据为0x80时,为忙,否则不忙
uchar Read_1602(void)
{
uchar busy;//用来判断是否忙,0x80为忙
busy=(RI_1602&0x80);//读取状态,最高位为判忙,提取最高位
return busy;
}
//写指令
void WriteI_1602(uchar i)
{
while(Read_1602()==0x80);//不忙了再写指令
WI_1602=i;
}
//初始时写指令,不用判忙
void InitWriteI_1602(uchar i)
{
WI_1602=i;
}
//写数据
void WriteD_1602(uchar i,uchar address)//写数据,address为要写入的地址
{
WriteI_1602(0x80|address);
while(Read_1602()==0x80);//不忙了再写数据
WD_1602=i;
}
void Init_ts1602(void)//严格按照液晶的文档来写的,所以会有刚开始的3个delay1ms()函数
{
delay1ms(15);
InitWriteI_1602(0x38);//显示模式设置
delay1ms(5);
InitWriteI_1602(0x38);
delay1ms(5);
InitWriteI_1602(0x38);
WriteI_1602(0x38);
WriteI_1602(0x08);//关闭显示
WriteI_1602(0x01);//显示清屏
WriteI_1602(0x06);//显示光标移动设置
WriteI_1602(0x0f);//显示开及光标设置
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -