📄 1602.c
字号:
/*=======================================
1602lcd模块驱动程序
==========================================
说明:1.晶体:11.0592MHz
2.1602驱动:ks0066
******************************************/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define lcd_data P0 //定义P2口为数据口
sbit lcd_rs = P2^0 ; //寄存器选择
sbit lcd_rw = P2^1 ; //读/写控制
sbit lcd_e = P2^2 ; //读/写使能
//sbit lcd_blk = P1^0 ; //背光led 1.off 0.on
//函数声明
void delay5ms(void);
void delay400ms(void);
void lcd_write_command(uchar wc_lcd,busy_c);
/***********************************
//函数名称: void lcd_ini(void)
//传递参数: 无
//返 回 值: 无
//函数功能: LCD初始化
//函数说明:
***********************************/
void lcd_ini(void)
{
lcd_data = 0;
lcd_write_command(0x38,0); //16*2显示,5*7点阵,8位数据接口,不检测忙
delay5ms();
// lcd_write_command(0x38,0);
// delay5ms();
// lcd_write_command(0x38,0); //三次显示模式, 不检测忙
// delay5ms();
lcd_write_command(0x38,1); //16*2显示,5*7点阵,8位数据接口,需要检测忙
// lcd_write_command(0x80,1); //关闭显示
lcd_write_command(0x01,1); //clear显示
lcd_write_command(0x06,1); //指针和光标+1,不滚屏
lcd_write_command(0x0c,1); //开显示,不显示光标
}
/***********************************
//函数名称: uchar lcd_read_status(void)
//传递参数: 无
//返 回 值: uchar
//函数功能: 读lcm状态,等待lcd空闲
//函数说明: DB7=1,忙
***********************************/
uchar lcd_read_status(void)
{
lcd_data=0xff;
lcd_rs=0;
lcd_rw=1;
lcd_e=0;
lcd_e=0;
lcd_e=1;
while(lcd_data & 0x80); //如果DB7为1表示忙,则死循环等待
return lcd_data;
}
/***********************************
//函数名称: void lcd_write_data(uchar wd_lcd)
//传递参数: uchar wd_lcd
//返 回 值: 无
//函数功能: lcd写数据
//函数说明:
***********************************/
void lcd_write_data(uchar wd_lcd)
{
lcd_read_status(); //判断lcd忙标志
lcd_data = wd_lcd;
lcd_rs = 1;
lcd_rw = 0;
lcd_e = 0;
lcd_e = 0;
lcd_e = 1;
}
/***********************************
//函数名称: void lcd_write_command(uchar wc_lcd, busy_c)
//传递参数: uchar wc_lcd, busy_c
//返 回 值: 无
//函数功能: lcd写命令
//函数说明: busy_c=0 是表示不用检测忙信号
***********************************/
void lcd_write_command(uchar wc_lcd, busy_c)
{
if (busy_c)
lcd_read_status();
lcd_data = wc_lcd;
lcd_rs=0;
lcd_rw = 0;
lcd_e = 0;
lcd_e = 0;
lcd_e = 1;
}
/***********************************
//函数名称: void disp_one_char(uchar x, uchar y,uchar disp_data)
//传递参数: uchar x, uchar y,uchar disp_data
//返 回 值: 无
//函数功能: 指定位置显示 一个 字符
//函数说明:
***********************************/
void disp_one_char(uchar x,uchar y,uchar disp_data)
{
y = y&0x01;
x = x&0x0f; //限制2行,没行15个字
if (y)
x =x + 0x40; //算RAM地址,假如y为1则表示第二行,x地址就从40H开始
x = x + 0x80; //两行的地址的最高位DB7都要恒为1
lcd_write_command(x,0);
lcd_write_data(disp_data);
}
/***********************************
//函数名称: void disp_one_char(uchar x, uchar y,uchar *disp_data)
//传递参数: uchar x, uchar y,uchar *disp_data
//返 回 值: 无
//函数功能: 指定位置显示 一串 字符
//函数说明:
***********************************/
void disp_list_char(uchar x,uchar y,uchar *disp_data) //x表示列位置,从0到15共16位,y表示行,从0到1共2行
{
uchar char_length,j;
char_length = strlen(disp_data);
y = y&0x01;
x = x&0x0f;
for (j=0;j<char_length;j++)
{
disp_one_char( x,y,disp_data[j]); //显示一个字符
x++;
}
}
/***********************************
//函数名称: void delay5ms(void)
//传递参数: 无
//返 回 值: 无
//函数功能: 延时5MS
//函数说明:
***********************************/
void delay5ms(void)
{
uint TempCyc = 5552;
while(TempCyc--);
}
/***********************************
//函数名称: void delay400ms(void)
//传递参数: 无
//返 回 值: 无
//函数功能: L延时400MS
//函数说明: LCD开机延时
***********************************/
/*
void delay400ms(void)
{
uchar TempCycA = 5;
uint TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
/*****d******************************
//函数名称: void main(void)
//传递参数: 无
//返 回 值: 无
//函数功能: 主函数
//函数说明:
************************************/
void main(void)
{
uint key,x=0;
delay5ms();
lcd_ini(); //lcd初始化
while((key=P2&0xf0)==0xf0) //Wellcome流动效果
{
disp_list_char(x,0,"->Wellcome-> "); // 开机首屏幕
x++;
disp_list_char(0,1,"^Happy new year^"); // 问候语
delay5ms();delay5ms();delay5ms();delay5ms();delay5ms();
delay5ms();delay5ms();delay5ms();delay5ms();delay5ms(); //10个delay5毫秒
} //要按定任一键约1秒才跳出循环
while(1)
{
key=0;
key=P2&0xf0; //键盘扫描
switch(key)
{ case 0xe0:
{
disp_list_char(0,0," Do you want to ");
disp_list_char(0,1,"send Record 01 ?");
}break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -