📄 16x2lcddriver.c
字号:
#include <p18cxxx.h>
#include "16x2LCDDriver.h"
//16X2LCD的延时子程序
void lcd_delay(unsigned int delaytime)
{
while(delaytime)delaytime--;
}
//向LCD写入命令的子程序
void write_lcd_command(unsigned char write_command)
{
lcd_delay(40);
RsCLR;//Rs=0
RWCLR;//RW=0
LCDPORT=write_command;//写命令字
ENsET;//EN=1;
ENCLR;//EN=0
}
//向LCD写入数据的子程序
void write_lcd_data(unsigned char write_data)
{
lcd_delay(40);
RssET;//Rs=1
RWCLR;//RW=0
LCDPORT=write_data;//写数据
ENsET;//EN=1
ENCLR;//EN=0
}
//初始化LCD的子程序
void initize_lcd(void)
{
unsigned char i;
ENCLR;
for(i=200;i>0;i--)lcd_delay(248);//延时45ms
write_lcd_command(0x3f);
for(i=4;i>0;i--)lcd_delay(248);
write_lcd_command(0x3f);
write_lcd_command(0x0f);
write_lcd_command(0x01);
for(i=4;i>0;i--)lcd_delay(248);
write_lcd_command(0x06);
for(i=4;i>0;i--)lcd_delay(248);
}
//在LCD上显示字符串内容的子程序,X和Y分别与LCD显示屏上的坐标,左上角为(0,0)
void lcd_displaystr(unsigned char x,unsigned char y,const unsigned char *str)
{
switch(x)
{
case 0:
write_lcd_command(0x80+y);//光标定位在第一行
break;
case 1:
write_lcd_command(0xc0+y);//光标定位在第二行
break;
}
while(*str)//判断字符串是否全部送完
{
write_lcd_data(*str);//向LCD送需要显示的数据
str++;//指针加1
}
}
//在LCD上显示字符串内容的子程序,X和Y分别与LCD显示屏上的坐标,左上角为(0,0)
void lcd_displaystr_ram(unsigned char x,unsigned char y,unsigned char *str)
{
switch(x)
{
case 0:
write_lcd_command(0x80+y);
break;
case 1:
write_lcd_command(0xc0+y);
break;
}
while(*str)
{
write_lcd_data(*str);
str++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -