📄 1602lcd.c
字号:
#include <1602lcd.h>
#define uchar unsigned char
void delay(uchar ms);
BOOL lcd_bz();
void lcd_wcmd(uchar cmd);
void lcd_pos(uchar pos);
void lcd_CGRAMpos(uchar pos);
void lcd_wdat(uchar dat) ;
void lcd_init(); //主函数调用
void display(uchar pos,uchar len, uchar *q); //主函数调用
void ZIMO2CGRAM(uchar pos,uchar len, uchar *q); //主函数调用
/*void longdelay(uchar s) //长延时
{
while(s--)
{
delay(60) ;
}
}*/
void delay(uchar ms)
{ // 延时子程序
uchar i ;
while(ms--)
{
for(i = 0 ; i<250;i++) ;
}
}
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result ;
rs = 0 ;
rw = 1 ;
ep = 1 ;
result = (BOOL)(P0 & 0x80) ;
ep = 0 ;
return result ;
}
void lcd_wcmd(uchar cmd)
{ // 写入指令数据到LCD
while(lcd_bz()) ;
rs = 0 ;
rw = 0 ;
ep = 1 ; //写操作下降沿有效
P0 = cmd ;
ep = 0 ;
}
void lcd_pos(uchar pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80) ; //DDRAM
}
void lcd_CGRAMpos(uchar pos)
{ //设定显示位置
lcd_wcmd(pos | 0x40) ; //CGRAM
}
void lcd_wdat(uchar dat)
{ //写入字符显示数据到LCD
while(lcd_bz()) ;
rs = 1 ;
rw = 0 ;
ep = 0 ;
P0 = dat ;
ep = 1 ;
ep = 0 ;
}
void lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x38) ; //function set
delay(1) ;
lcd_wcmd(0x38) ; //function set
delay(1) ;
lcd_wcmd(0x08) ; //display off
delay(1) ;
lcd_wcmd(0x01) ; //清除LCD的显示内容
delay(1) ;
lcd_wcmd(0x06) ; //entry mode set
delay(1) ;
lcd_wcmd(0x0c) ; //display on
delay(1) ;
}
/*---------------
函数名称:display()
功能 :在LCD上显示数组的数据
说明 :先写显示地址,后写显示数据
调用 :lcd_wcmd(), lcd_pos()
入口参数:pos 写入的位置,q指向要写入的数据所在的数组
返回值 :无
----------------*/
void display(uchar pos,uchar len, uchar *q)
{
uchar i ;
// lcd_wcmd(0x01) ; //clear
// delay(10) ;
lcd_pos(pos) ;
for(i=0 ;i<len;i++)
{
lcd_wdat(*q) ;
q++ ;
// longdelay(3) ;
}
}
void ZIMO2CGRAM(uchar pos,uchar len, uchar *q)
{
uchar i ;
// delay(10) ;
lcd_CGRAMpos(pos) ;
for(i=0 ;i<len;i++)
{
lcd_wdat(*q) ;
q++ ;
// longdelay(3) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -