📄 lcd1602.c
字号:
#include "..\dp8051.h"
#include "lcd.h"
unsigned char code welcome1[]={"welcome.to.shnu!"};
unsigned char code welcome2[]={"enter.the.menu"};
void main(void)
{
delay20ms();
init_lcd();
display_signal(0xf,1,0x30); //第一个数表示某行第几个,第二个数表示第几行,第三个表示要显示的内容
display_list(0,0,welcome1);
//display_list(0,1,welcome2);
while(1);
}
void init_lcd(void)
{
output=0;
write_command_1602(clear);
delay5ms();
write_command_1602(function);
delay5ms();
write_command_1602(part_open);
delay5ms();
write_command_1602(gb_right);
delay5ms();
}
void write_command_1602(unsigned char address_buf)
{
output=address_buf;
rs_lcd=0;
rw_lcd=0;
e_lcd=0;
e_lcd=1;
}
unsigned char read_command_1602()
{
rs_lcd=1;
rw_lcd=1;
e_lcd=0;
e_lcd=0;
e_lcd=1;
return(output);
}
void write_data_1602(unsigned char data_buf)
{
read_data_1602();
output=data_buf;
rs_lcd=1;
rw_lcd=0;
e_lcd=0;
e_lcd=0;
e_lcd=1;
}
unsigned char read_data_1602()
{
rs_lcd=1;
rw_lcd=1;
e_lcd=0;
e_lcd=0;
e_lcd=1;
return(output);
}
void display_signal(unsigned char x, unsigned char y, unsigned char data1)
{
y&=0x1; //和1相与,若为零表示在第一行,若为1表示在第二行
x&=0xf; //和f(15)相与,确保一行显示不超过16个字
if(y==1)
x|=0x40; //等于把x(80h---8fh)+40h=c0h---cfh
//也可以这样写:if(y==0)
// {
// x=0x80+x;
// else x=0xc0+x;
// }
x|=0x80;
write_command_1602(x);
write_data_1602(data1);
bg_lcd=0;
}
void display_list(unsigned char x,unsigned char y,unsigned char code *list_data1) //这种定义常用于字库数组和结构体中
{
unsigned char length;
length=0;
y&=0x1;
x&=0xf;
while (list_data1[length]>0x20)
{
if(x<=0xf)
{
display_signal(x,y,list_data1[length]);
length++;
x++;
}
}
}
void delay5ms()
{
unsigned int delay_buf_a=5000;
while(delay_buf_a--);
}
void delay20ms()
{
unsigned int delay_buf_b=20;
while(delay_buf_b--)
{
unsigned int delay_buf_c=1000;
while(delay_buf_c--);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -