📄 lcd.c.bak
字号:
/*************************************************
/
/
/
**************************************************/
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
const uchar font[]={
0x41,0x21,0x23,0x14,0xE8,0x41,0x46,0x5F,
0x10,0x11,0x11,0x11,0x12,0x04,0x18,0x60,
0x00,0x00,0xFC,0x58,0x40,0xA0,0x18,0xF6,
0x10,0x10,0x10,0x10,0xC0,0x30,0x1C,0x08,
0x02,0x41,0x2F,0x20,0x01,0x03,0xE2,0x23,
0x22,0x23,0x22,0x23,0x22,0x50,0x8F,0x00,
0x10,0x20,0xFC,0x80,0x00,0xF0,0x10,0xF0,
0x10,0xF0,0x10,0xF0,0x10,0x00,0xFE,0x00,
0x00,0x1F,0x10,0x13,0x10,0x10,0x17,0x10,
0x13,0x12,0x12,0x13,0x22,0x20,0x40,0x80,
0x00,0xFC,0x84,0xE4,0x84,0x84,0xF4,0x04,
0xE4,0x24,0x24,0xE4,0x24,0x04,0x14,0x08
};
uchar read_data(void){
uchar i;
TRISC=0x00;
TRISB=0xff;
PORTC|=0x04; //set CD
PORTC&=0xfd; //clear RD
i=PORTB;
PORTC|=0x02; //set RD
return(i);
}
void write_data(uchar data_d){
TRISC=0x00;
TRISB=0x00;
PORTC&=0xfb; //clear CD
PORTB=data_d;
PORTC&=0xfe; //clear WR
PORTC|=0x01; //set WR
}
void write_contr(uchar data_c){
TRISC=0x00;
TRISB=0x00;
PORTC|=0x04; //clear CD
PORTB=data_c;
PORTC&=0xfe; //clear WR
PORTC|=0x01; //set WR
}
void lcd_double_operator(uchar data1,uchar data2,uchar com){
uchar i;
i=0;
while(i!=0x02)
{
i=read_data();
i=i&0x02;
}
write_data(data1); /*参数1*/
i=0;
while(i!=0x02)
{
i=read_data();
i=i&0x02;
}
write_data(data2); /*参数2*/
i=0;
while(i!=0x01)
{
i=read_data();
i=i&0x01;
}
write_contr(com); /*指令*/
}
void lcd_single_operator(uchar data1,uchar com){
uchar i;
i=0;
while(i!=0x02)
{
i=read_data();
i=i&0x02;
}
write_data(data1); /*参数1*/
i=0;
while(i!=0x01)
{
i=read_data();
i=i&0x01;
}
write_contr(com); /*指令*/
}
void lcd_none_operator(uchar com){
uchar i;
i=0;
while(i!=0x01)
{
i=read_data();
i=i&0x01;
}
write_contr(com); /*指令*/
}
void lcd_ini(){
lcd_double_operator(0x00,0x00,0x40);
lcd_double_operator(0x1e,0x00,0x41);
lcd_double_operator(0x00,0x0c,0x42);
lcd_double_operator(0x1e,0x00,0x43);
lcd_none_operator(0xa0);
lcd_none_operator(0x84);
lcd_none_operator(0x9f);
}
void creat_cgram(uchar count){
uint i,x;
x=count*4;
x=x*8;
lcd_double_operator(0x03,0x00,0x22);
lcd_double_operator(0x00,0x1c,0x24);
for (i=0;i<x;i++){
lcd_single_operator(font[i],0xc0);
}
}
void lcd_clear(){
uint i;
lcd_double_operator(0x00,0x00,0x24); //首地址
for(i=0;i<0x1000;i++){
lcd_single_operator(0x00,0xc0);
}
}
void write_english(uchar cursor_x,uchar cursor_y,uchar c_code,uchar attr){
uint x;
x=cursor_y*30;
x=x+cursor_x; /*y=cursor_y*30+cursor_x*/
lcd_double_operator((x&0x00ff),(x/256),0x24);
lcd_single_operator(c_code,0xc4);
lcd_double_operator((x&0x00ff),(x/256)+0x0c,0x24);
lcd_single_operator(attr,0xc4);
}
void write_chinese(uchar cursor_x,uchar cursor_y,uchar ct_code,uchar attr){
uint x;
x=cursor_y*30;
x=x+cursor_x; //y=cursor_y*30+cursor_x
lcd_double_operator((x&0x00ff),(x/256),0x24);
lcd_single_operator(ct_code,0xc4);
lcd_double_operator((x&0x00ff),(x/256)+0x0c,0x24);
lcd_single_operator(attr,0xc4);
lcd_double_operator(((x&0x00ff)+1),(x/256),0x24);
lcd_single_operator(ct_code+2,0xc4);
lcd_double_operator(((x&0x00ff)+1),(x/256)+0x0c,0x24);
lcd_single_operator(attr,0xc4);
x+=30;
lcd_double_operator((x&0x00ff),(x/256),0x24);
lcd_single_operator(ct_code+1,0xc4);
lcd_double_operator((x&0x00ff),(x/256)+0x0c,0x24);
lcd_single_operator(attr,0xc4);
lcd_double_operator(((x&0x00ff)+1),(x/256),0x24);
lcd_single_operator(ct_code+3,0xc4);
lcd_double_operator(((x&0x00ff)+1),(x/256)+0x0c,0x24);
lcd_single_operator(attr,0xc4);
}
void main(void)
{
lcd_ini();
lcd_clear();
creat_cgram(0x03);
lcd_double_operator(0x08,0x00,0x21);
write_english(0x04,0x02,'t'-0x20,0x05);
write_english(0x05,0x02,'h'-0x20,0x05);
write_english(0x06,0x02,'i'-0x20,0x05);
write_english(0x07,0x02,'s'-0x20,0x05);
write_english(0x08,0x02,' '-0x20,0x05);
write_english(0x09,0x02,'i'-0x20,0x05);
write_english(0x0a,0x02,'s'-0x20,0x05);
write_english(0x0b,0x02,' '-0x20,0x05);
write_english(0x0c,0x02,'a'-0x20,0x05);
write_english(0x0d,0x02,' '-0x20,0x05);
write_english(0x0e,0x02,'t'-0x20,0x05);
write_english(0x0f,0x02,'e'-0x20,0x05);
write_english(0x10,0x02,'s'-0x20,0x05);
write_english(0x11,0x02,'t'-0x20,0x05);
write_english(0x12,0x02,'!'-0x20,0x05);
write_english(0x04,0x03,'t'-0x20,0x08);
write_english(0x05,0x03,'h'-0x20,0x08);
write_english(0x06,0x03,'i'-0x20,0x08);
write_english(0x07,0x03,'s'-0x20,0x08);
write_english(0x08,0x03,' '-0x20,0x08);
write_english(0x09,0x03,'i'-0x20,0x08);
write_english(0x0a,0x03,'s'-0x20,0x08);
write_english(0x0b,0x03,' '-0x20,0x08);
write_english(0x0c,0x03,'a'-0x20,0x08);
write_english(0x0d,0x03,' '-0x20,0x08);
write_english(0x0e,0x03,'t'-0x20,0x08);
write_english(0x0f,0x03,'e'-0x20,0x08);
write_english(0x10,0x03,'s'-0x20,0x08);
write_english(0x11,0x03,'t'-0x20,0x08);
write_english(0x12,0x03,'!'-0x20,0x08);
write_chinese(0x13,0x04,0x80,0x0d);
write_chinese(0x15,0x04,0x84,0x0d);
write_chinese(0x17,0x04,0x88,0x0d);
write_chinese(0x13,0x06,0x80,0x00);
write_chinese(0x15,0x06,0x84,0x00);
write_chinese(0x17,0x06,0x88,0x00);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -