📄 lcd例程.c
字号:
#define lcd_da P0
sbit lcd_ce_wr =P2^7;
sbit lcd_c_d =P2^6;
void lcd_write_byte(bit com_or_data,unsigned char buff)
{
uchar i=0;
lcd_da=buff;
lcd_ce_wr=1;
lcd_c_d=com_or_data;
lcd_ce_wr=0;
lcd_ce_wr=1;
}
void lcd_write_1byte(uchar buff)
{
lcd_write_byte(0,buff);
}
void lcd_write_1com(uchar buff)
{
lcd_write_byte(1,buff);
}
void lcd_write_2byte(uchar * buff)
{
lcd_write_byte(0,*buff);
lcd_write_byte(1,*(buff+1));
}
void lcd_write_3byte(uchar * buff)
{
lcd_write_byte(0,*buff);
lcd_write_2byte(buff+1);
}
void lcd_init(void)
{
lcd_comm_buff[0]=0;
lcd_comm_buff[1]=0;
lcd_comm_buff[2]=0x42; //图形显示区首地址设置:0x0000
lcd_write_3byte(lcd_comm_buff);
lcd_comm_buff[0]=0x1e;
lcd_comm_buff[2]=0x43; //图形显示宽度设置
lcd_write_3byte(lcd_comm_buff);
lcd_write_1com(0x81); //逻辑" EXOR"
lcd_write_1com(0x9b); //文本关,图形开,光标开,闪烁开
}
void clear_lcd_buff(void)
{
lcd_comm_buff[0]=0;
lcd_comm_buff[1]=0;
lcd_comm_buff[2]=0;
}
void lcd_clear_page(void)
{
uint i=0;
clear_lcd_buff();
lcd_comm_buff[2]=0x24;
lcd_write_3byte(lcd_comm_buff);
lcd_write_1com(0xb0);//自动写数据
for(i=0xf00;i>0;i--)
{
#ifdef ZhengChang_Display
lcd_write_1byte(0x00);
#else
lcd_write_1byte(0xff);
#endif
}
lcd_write_1com(0xb3);//自动写数据
}
void display_acsii(uint Display_Addr,uchar buff,uchar j)
{
uchar i;
uint at24_Addr_buff;
at24_Addr_buff=0x4990+(uint)(buff-0x20)*16;
clear_lcd_buff();
for (i=0;i<16;i++)
{
lcd_Addr_Input(Display_Addr);
if(power_display_bit)
{
lcd_comm_buff[0]=~(~(at24_RanRead_byte(at24_Addr_buff+i))^main_xor_data)^Not_Xor[j];
}
else
{
lcd_comm_buff[0]=(~(at24_RanRead_byte(at24_Addr_buff+i))^main_xor_data);
}
#ifdef ZhengChang_Display
lcd_comm_buff[0]=~lcd_comm_buff[0];
#endif
lcd_comm_buff[1]=0xc0;
lcd_write_2byte(lcd_comm_buff);
Display_Addr=Display_Addr+30;
}
}
void display_Chinese(uint Display_Addr,uint P_Add)
{
uchar i;
clear_lcd_buff();
for(i=0;i<16;i++)
{
lcd_Addr_Input(Display_Addr);
#ifdef ZhengChang_Display
lcd_comm_buff[0]=~(at24_RanRead_byte(P_Add+i*2)^main_xor_data);
#else
lcd_comm_buff[0]=at24_RanRead_byte(P_Add+i*2)^main_xor_data;
#endif
lcd_comm_buff[1]=0xc0;
lcd_write_2byte(lcd_comm_buff);
#ifdef ZhengChang_Display
lcd_comm_buff[0]=~(at24_RanRead_byte(P_Add+i*2+1)^main_xor_data);
#else
lcd_comm_buff[0]=at24_RanRead_byte(P_Add+i*2+1)^main_xor_data;
#endif
lcd_comm_buff[1]=0xc0;
lcd_write_2byte(lcd_comm_buff);
Display_Addr=Display_Addr+30;
}
}
void lcd_Addr_Input(uint Display_Addr)
{
lcd_comm_buff[0]=(uchar)Display_Addr;
lcd_comm_buff[1]=(uchar)(Display_Addr>>8);
lcd_comm_buff[2]=0x24;
lcd_write_3byte(lcd_comm_buff);
}
void display_Chinese_24x24(uint Display_Addr,uchar Word_count)
{
uchar i;
uint at24_Addr_buff;
at24_Addr_buff=0x4000+(uint)Word_count*72;
clear_lcd_buff();
for(i=0;i<24;i++)
{
lcd_Addr_Input(Display_Addr);
lcd_write_1com(0xb0);//自动写数据
#ifdef ZhengChang_Display
lcd_write_1byte(~(at24_RanRead_byte(at24_Addr_buff+i*3)^main_xor_data));
lcd_write_1byte(~(at24_RanRead_byte(at24_Addr_buff+i*3+1)^main_xor_data));
lcd_write_1byte(~(at24_RanRead_byte(at24_Addr_buff+i*3+2)^main_xor_data));
#else
lcd_write_1byte(at24_RanRead_byte(at24_Addr_buff+i*3)^main_xor_data);
lcd_write_1byte(at24_RanRead_byte(at24_Addr_buff+i*3+1)^main_xor_data);
lcd_write_1byte(at24_RanRead_byte(at24_Addr_buff+i*3+2)^main_xor_data);
#endif
lcd_write_1com(0xb3);//自动写数据
Display_Addr=Display_Addr+30;
}
}
uchar dprintf(uint Display_Addr,uchar WordType,char *fmt,...)
{
uint tmp_Y;
va_list arg_ptr;
char c1,c2;
uchar uLen,i=0,j=0;
char xdata *tmpBuf;
EA_save=EA;
EA=0;
tmpBuf = calloc (32, sizeof (char));
va_start(arg_ptr,fmt);
uLen=(uchar)vsprintf(tmpBuf,fmt,arg_ptr);
va_end(arg_ptr);
if(printf_bit==0)
{
tmp_Y=Display_Addr%30;
if((tmp_Y+uLen)>30)
uLen=30-tmp_Y;
}
while(i<uLen)
{
c1=tmpBuf[i];
c2=tmpBuf[i+1];
if(printf_bit==1)
{
s_printf(c1);
}
else
{
if(c1>=0x00)
{
if(c1>=0x20)
{
display_acsii(Display_Addr+i,c1,i);
}
}
else//中文
{
if(WordType==Display_Li24x24)
{
for(j=0;j<sizeof(GB_24)/sizeof(GB_24[0]);j++)
{
if(c1==GB_24[j].Index[0]&&c2==GB_24[j].Index[1])
break;
}
if(j<sizeof(GB_24)/sizeof(GB_24[0]))
{
display_Chinese_24x24((Display_Addr+(i/2)*3),j);
}
}
else if(WordType==Display_KaiCuType)
{
for(j=0;j<sizeof(KaiCu_Type)/sizeof(KaiCu_Type[0]);j++)
{
if(c1==KaiCu_Type[j].Index[0]&&c2==KaiCu_Type[j].Index[1])
break;
}
if(j<sizeof(KaiCu_Type)/sizeof(KaiCu_Type[0]))
{
display_Chinese((Display_Addr+i),0x4fb0+j*32);
}
}
else if(WordType==Display_KaiXiType)
{
for(j=0;j<sizeof(KaiXi_Type)/sizeof(KaiXi_Type[0]);j++)
{
if(c1==KaiXi_Type[j].Index[0]&&c2==KaiXi_Type[j].Index[1])
break;
}
if(j<sizeof(KaiXi_Type)/sizeof(KaiXi_Type[0]))
{
display_Chinese((Display_Addr+i),0x5310+j*32);
}
}
i++;
}
}
i++;
}
free(tmpBuf);
EA=EA_save;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -