📄 lcd320a.c
字号:
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include <hzk1.h>
#define lcd_data XBYTE[0x0000] /*液晶显示数据入口*/
#define lcd_com XBYTE[0x0200] /*液晶显示命令入口*/
bdata unsigned char flag;
sbit f_bw=flag^0;
#define SYSTEM_SET_COM 0x40 /*初始化设置*/
#define SCROLL_COM 0x44 /*显示域设置*/
#define SLEEP_IN 0x53 /*休闲模式设置*/
#define DISP_ON 0x59 /*显示状态开*/
#define DISP_OFF 0x58 /*显示状态关*/
#define OYLAY 0x5b /*显示合成设置*/
#define HDOT_SCR 0x5a /*点位移设置*/
#define CSRRFORM 0x5d /*光标形状设置*/
#define CGRAM_ADR 0x5c /*CGRAM首址设置*/
#define CSRDIR_RIGHT 0x4c /*光标向右移*/
#define CSRDIR_LEFT 0x4d /*光标向左移*/
#define CSRDIR_UP 0x4e /*光标向上移*/
#define CSRDIR_DOWM 0x4f /*光标向下移*/
#define CSRW 0x46 /*光标指针设置*/
#define CSRR 0x47 /*读取光标指针*/
#define MWRITE 0x42 /*数据写入设置*/
#define MREAD 0x43 /*数据读取设置*/
//SYSTEM SET
#define SYSTEM_SET_P1 0x30 /**/
#define SYSTEM_SET_P2 0x87 /*字符宽8位*/
#define SYSTEM_SET_P3 0x07 /*字符高*/
#define SYSTEM_SET_P4 0x27 /*一行显示40个字节*/
#define SYSTEM_SET_P5 0x42 /*驱动频率时间常数*/
#define SYSTEM_SET_P6 0xf0 /*扫描驱动帧参数*/
#define SYSTEM_SET_P7 0x30 /*显示行的字节数低位*/
#define SYSTEM_SET_P8 0x00 /*显示行的字节数高位*/
//SCROLL
#define SCROLL_P1 0x00 /**/
#define SCROLL_P2 0x00 /**/
#define SCROLL_P3 0xf0 /**/
#define SCROLL_P4 0x00 /**/
#define SCROLL_P5 0x40 /**/
#define SCROLL_P6 0xf0 /**/
#define SCROLL_P7 0x00 /**/
#define SCROLL_P8 0x80 /**/
#define SCROLL_P9 0x00 /**/
#define SCROLL_P10 0x00 /**/
data unsigned char lx,ly;
//清屏
void lcd_clear(unsigned char no)
{
data unsigned int i;
lcd_com=CSRDIR_RIGHT; //光标右移
lcd_com=CSRW; //光标地址设置
switch(no)
{
case 1:
lcd_data=0xff; lcd_data=0x00;
break;
case 2:
lcd_data=0x00; lcd_data=0x40;
break;
case 3:
lcd_data=0x00; lcd_data=0x80;
break;
default:
lcd_data=0x00; lcd_data=0x00;
break;
}
lcd_com=MWRITE; //写入显示缓冲区
for (i=0;i<=240*40;i++)
lcd_data=0x0;
_nop_();
}
void lcd_init(void)
{
lcd_com=SYSTEM_SET_COM;
lcd_data=SYSTEM_SET_P1;
lcd_data=SYSTEM_SET_P2;
lcd_data=SYSTEM_SET_P3;
lcd_data=SYSTEM_SET_P4;
lcd_data=SYSTEM_SET_P5;
lcd_data=SYSTEM_SET_P6;
lcd_data=SYSTEM_SET_P7;
lcd_data=SYSTEM_SET_P8;
lcd_com=SCROLL_COM;
lcd_data=SCROLL_P1;
lcd_data=SCROLL_P2;
lcd_data=SCROLL_P3;
lcd_data=SCROLL_P4;
lcd_data=SCROLL_P5;
lcd_data=SCROLL_P6;
lcd_data=SCROLL_P7;
lcd_data=SCROLL_P8;
lcd_data=SCROLL_P9;
lcd_data=SCROLL_P10;
lcd_com=HDOT_SCR;
lcd_data=0x00;
lcd_com=OYLAY;
lcd_data=0x0c;
lcd_clear(1);
// lcd_clear(2);
// lcd_clear(3);
lcd_com=DISP_ON;
lcd_data=0x04;
// lcd_com=OYLAY;
// lcd_data=0x0f;
}
/* 16*16,8*16点阵
入口参数:
f_bw 反向显示
*/
void lcd_show(unsigned char *pr)
{
data unsigned char i,j;
data unsigned char l;
data unsigned int temp;
lcd_com=CSRDIR_DOWM; //光标下移
i=0;
l=*(pr+i);
while(l!=0xff)
{
lcd_com=CSRW;
temp=ly*0x30+lx;
lcd_data=temp%256;
lcd_data=temp/256; //光标地址
lcd_com=MWRITE;
l=*(pr+i);
if(l==0xfe)
{
i++;
l=*(pr+i);
for(j=0;j<16;j++)
{
if(f_bw)
lcd_data=~hzk0816[l][j];
else
lcd_data=hzk0816[l][j];
}
}
else
{
for(j=0;j<32;j++)
{
if(f_bw)
lcd_data=~hzk1616[l][j];
else
lcd_data=hzk1616[l][j];
if((j+1)%16==0)
{
lx++;
temp=ly*0x30+lx;
lcd_com=CSRW;
lcd_data=temp%256;
lcd_data=temp/256;
lcd_com=MWRITE;
}
}
}
lx++;
i++;
}
f_bw=0;
}
void lcd_show24(unsigned char *pr)
{
data unsigned char i,j;
data unsigned char l;
data unsigned int temp;
lcd_com=CSRDIR_DOWM;
i=0;
l=*(pr+i);
while(l!=0xff)
{
lcd_com=CSRW;
temp=ly*0x30+lx;
lcd_data=temp%256;
lcd_data=temp/256; //光标地址
lcd_com=MWRITE;
l=*(pr+i);
for(j=0;j<72;j++)
{
if(f_bw)
lcd_data=~hzk2424[l][j];
else
lcd_data=hzk2424[l][j];
if((j+1)%24==0)
{
lx++;
temp=ly*0x30+lx;
lcd_com=CSRW;
lcd_data=temp%256;
lcd_data=temp/256;
lcd_com=MWRITE;
}
}
lx++;
}
f_bw=0;
}
main()
{ unsigned char *p;
unsigned int i;
lcd_init();
*p=1;
*(p+1)=1;
*(p+2)=2;
*(p+3)=255;
while(1)
{
lcd_show(p);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -