📄 lcd.c
字号:
//2行X16个字符位LCD驱动程序
//P0接LCD MODULE D0~D7,
#include "reg51.h"
#include "common.h"
#include "lcd.h"
#include "remote.h"
#define LCDMaxChar 11
void send_cmd(uchar);
void send_data(uchar);
void check_ready(void);
void lcd_disp_test_code(void);
void cpy_test_code_str(uchar *st1, uchar *st2);
uchar gLCDstr[LCDMaxChar];
uchar code bcd2asc[] = {'0','1','2','3','4','5','6','7','8','9',
'A', 'B', 'C', 'D', 'E', 'F', //0-F
};
/*函数名称:LCD Module 地址发送*/
void send_cmd(uchar lcd_cmd)
{
uchar i;
rs_lcd = 0;
rw_lcd = 0;
P0 = lcd_cmd;
en_lcd=1;
for(i=0;i<2;i++);
en_lcd=0;
}
/*函数名称:LCD Module 数据发送*/
void send_data(uchar lcd_data)
{
uchar i;
rs_lcd = 1;
rw_lcd = 0;
P0 = lcd_data;
en_lcd=1;
for(i=0;i<2;i++);
en_lcd=0;
}
/*函数名称:读LCD Module 忙状态*/
uchar read_status()
{
uchar port_status=0;
rs_lcd = 0;
rw_lcd = 1;
port_status = P0;
return (port_status&0x80);
}
/*函数名称:判断LCD Module 是否忙状态,若是,延时*/
void check_ready(void)
{
uchar i;
i=read_status();
if(i) for(i=0;i<50;i++);
}
void lcd_task(void)
{
uchar i,address,a0=128;
for(i=0;i<32;i++)
{
check_ready();
if(a0<0x90)
address = 0x80;
else
address = 0xC0;
send_cmd(address+i%16);
check_ready();
send_data(gLCDstr[i]);
a0=a0+1;
}
}
void cpy_test_code_str(uchar *st1, uchar *st2)
{
uchar i;
for(i=0;i<11;i++)
st2[i]=st1[i];
}
void lcd_disp_test_code(void)
{
uchar temp_code;
uchar test_code_string[11];
temp_code = (uchar)(ir_system_code >> 12);
test_code_string[0]=bcd2asc[temp_code];
temp_code = (uchar)(ir_system_code >>8 ) & 0x0f;
test_code_string[1]=bcd2asc[temp_code];
temp_code = (uchar)(ir_system_code >> 4) & 0x0f;
test_code_string[2]=bcd2asc[temp_code];
temp_code = (uchar)ir_system_code&0x0f;
test_code_string[3]=bcd2asc[temp_code];
test_code_string[4]=' ';
test_code_string[5]=' ';
test_code_string[6]='0';
test_code_string[7]='x';
temp_code = (ir_data_code>>4)&0x0f;
test_code_string[8]=bcd2asc[temp_code];
temp_code = ir_data_code&0x0f;
test_code_string[9]=bcd2asc[temp_code];
test_code_string[10]=' ';
cpy_test_code_str(test_code_string,gLCDstr);
}
/*函数名称:LCD Module 初始化*/
void lcd_init(void)
{
uchar i;
for(i=0;i<100;i++);
en_lcd=1;
send_cmd(0x38); //function set,8bit,2-line mode,5X7 dots
check_ready();
send_cmd(0x38);
check_ready();
send_cmd(0x38);
check_ready();
send_cmd(0x38);
check_ready();
send_cmd(0x0c); //display off
check_ready();
send_cmd(0x01); // clear display
check_ready();
send_cmd(0x06); //enter mode set
check_ready();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -