📄 lm9864.c
字号:
#include <pic.h>
#define portat(address,bits) ((unsigned)(&address)*8+(bits))
#define portdata PORTD
#define lcd_time 0xff
static volatile bit RS @ portat(PORTC,0);
static volatile bit RW @ portat(PORTC,1);
static volatile bit E @ portat(PORTC,2);
static volatile bit RST @ portat(PORTC,3);
volatile unsigned char PAGE;
volatile unsigned char x_line;
volatile unsigned char y_line;
const unsigned char sz_number[160]={0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,
0x00,0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x0E,0x10,0x10,0x10,
0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,
0x04,0x04,0x88,0x70,0x00,0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00,
0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00,0x00,0x07,0x08,0x11,0x11,0x18,
0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00,0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,
0x00,0x00,0x00,0x00,0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,0x00,0x07,
0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00};
const unsigned char hz_charater[] = {0x00,0x08,0x86,0x60,0x07,0x00,0x08,0x08,0xFF,0x88,0x08,0x08,0xFF,0x88,0x18,0x00,
0x00,0x10,0x1E,0xE0,0x00,0x42,0x44,0x58,0xD0,0x40,0x40,0x40,0xD0,0x48,0xC6,0x40,0x00,0x10,0x10,0x10,0x10,0x1E,0x11,
0x10,0xF0,0x90,0x11,0x1E,0x10,0x10,0x30,0x10,0x00,0x02,0x02,0x04,0x04,0x08,0x88,0x50,0x20,0x50,0x88,0x08,0x04,0x04,
0x02,0x02,0x00,0x10,0x13,0xFF,0x92,0x31,0x00,0x00,0x1F,0x10,0x30,0xD0,0x90,0x10,0x3F,0x10,0x00,0x60,0x80,0xFE,0x00,
0x80,0x00,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x04,0x04,0x84,0x67,0x02,0x04,0x7A,0x43,0x42,0x42,0xF2,0x4B,
0x08,0x08,0x00,0x00,0x00,0x00,0xF0,0x24,0x44,0x08,0x88,0x50,0x20,0x50,0x88,0x0C,0x08,0x00,
0x04,0x84,0x44,0x67,0x00,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x0C,0x04,0x00,0x00,
0x00,0x00,0xF8,0x10,0x20,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00};
void system_inti(void)
{
INTCON = 0x00;
TRISC = 0xf0;
TRISD = 0x00;
di();
}
void lcd_delay(unsigned int number)
{
unsigned int i;
for (i=0;i<number;i++)
{
}
}
void lcd_rst(void)
{
RST = 0;
lcd_delay(lcd_time);
RST = 1;
lcd_delay(lcd_time);
}
void lcd_busy(void)
{
unsigned char temp;
portdata = 0xff;
RS = 0;
RW = 1;
E=1;
TRISD = 0xff;
temp = portdata;
E = 0;
while (temp & 0x80);
TRISD = 0x00;
return;
}
void write_command(unsigned char send_command)
{
lcd_busy();
RS = 0;
RW = 0;
portdata = send_command;
E = 1;
lcd_delay(0x02);
E = 0;
}
void write_data(unsigned char send_data)
{
lcd_busy();
write_command(x_line);
write_command(y_line);
RS = 1;
RW = 0;
portdata = send_data;
E = 1;
lcd_delay(0x02);
E = 0;
y_line ++;
if ((y_line & 0x0f) == 0x00)
{
x_line++;
y_line = 0x00;
}
}
void disp_data(unsigned char x, unsigned char y, unsigned char page,unsigned char charater, unsigned char size)
{
unsigned char i;
x_line = x;
y_line = y;
PAGE = page;
write_command(PAGE);
if (size == 0x00)
{
for (i = 0; i < 8;i++)
{
write_data(sz_number[charater*16+i]);
}
PAGE = PAGE - 1;
write_command(PAGE);
x_line = x;
y_line = y;
for (i = 0; i < 8;i++)
{
write_data(sz_number[charater*16+i+8]);
}
}
else
{
for (i = 0; i < 16;i++)
{
write_data(hz_charater[charater*32+i]);
}
PAGE = PAGE - 1;
write_command(PAGE);
x_line = x;
y_line = y;
for (i = 0; i < 16;i++)
{
write_data(hz_charater[charater*32+i+16]);
}
}
}
void lcd_init(void)
{
system_inti();
lcd_rst();
write_command(0xe2);
write_command(0xa2);
write_command(0xa0);
write_command(0xc0);
write_command(0x2f);
write_command(0x81);
write_command(0x2f);
write_command(0x40);
write_command(0xe0);
write_command(0xaf);
}
void lcd_clear(void)
{
unsigned char i,j;
PAGE = 0xb0;
for(i = 0;i < 8;i++)
{
x_line = 0x10;
y_line = 0x00;
write_command(PAGE);
for(j=0;j<98;j++)
{
write_data(0x00);
}
PAGE++;
}
}
void main(void)
{
lcd_delay(10000);
lcd_init();
write_command(0x40);
lcd_clear();
disp_data(0x11,0x00,0xb4,0,0x00);
disp_data(0x11,0x08,0xb4,1,0x00);
disp_data(0x12,0x00,0xb4,2,0x00);
disp_data(0x12,0x08,0xb4,3,0x00);
disp_data(0x13,0x00,0xb4,4,0x00);
disp_data(0x13,0x08,0xb4,5,0x00);
disp_data(0x14,0x00,0xb4,6,0x00);
disp_data(0x14,0x08,0xb4,7,0x00);
disp_data(0x15,0x00,0xb4,8,0x00);
disp_data(0x15,0x08,0xb4,9,0x00);
disp_data(0x11,0x06,0xb2,0,0xff);
disp_data(0x12,0x06,0xb2,1,0xff);
disp_data(0x13,0x06,0xb2,2,0xff);
while (1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -