📄 lcd_drv.c
字号:
#include "LCD_drv.h"
#include "LCD_ziku.h"
unsigned char flag; /*可位寻址的*/
unsigned int *p;
/*************************************************/
/*延时*/
/*************************************************/
void delay(void)
{unsigned char i,j;
for(i=32;i>0;i--)
for(j=255;j>0;j--);
}
/*************************************************/
//初始化
/*************************************************/
void lcd_init(void)
{//初始化端口方向
CS1_SEL &= ~CS1_BIT;
RST_SEL &= ~RST_BIT;
A0_SEL &= ~A0_BIT;
SCLK_SEL &= ~SCLK_BIT;
DI_SEL &= ~DI_BIT;
CS1_DIR |= CS1_BIT;
RST_DIR |= RST_BIT;
A0_DIR |= A0_BIT;
SCLK_DIR |= SCLK_BIT;
DI_DIR |= DI_BIT;
rst=0;
delay();
rst=1;
delay();
wcom(0xa3); //LCD BIAS SET ( A2 1/8;A3 1/65DUTY)
wcom(0xa0); //ADC select,NORMAL 0-->127
wcom(0xaf); // DISPLAY ON/OFF
wcom(0x2f); //power control(VB,VR,VF=1,1,1)
wcom(0x23); // VOLT REGULATOR RADIO SET
wcom(0x81); //ELECTRONIC VOLUME mode setting 100B 对比度命令
wcom(0x28); //REFERENCE VOLT REG set
wcom(0xc0); //SHL SELECT
wcom(0xaf); //DISPLAY ON/OFF
wcom(0x40); // DISPLAY START LINE SET
nop();
nop();
}
/*************************************************/
//写命令
/*************************************************/
void wcom(unsigned char com)
{
cs1=0;
nop();
a0=0;
nop();
write(com);
nop();
nop();
cs1=1;
}
/*************************************************/
//写数据
/*************************************************/
void wdata(unsigned char dat)
{
cs1=0;
nop();
a0=1;
nop();
write(dat);
nop();
nop();
cs1=1;
}
/**************************************************/
//串口移位输出
/*************************************************/
void write(unsigned char dat)
{ unsigned char s,temp;
int i;
sclk=0;
s=dat;
for(i=8;i>0;i--)
{sclk=0;
nop();
nop();
temp=s & 0x80;
if(temp)
{di=1;}
else {di=0;}
sclk=1;
s=s<<1;
}
}
void dispLargeNum_2424(unsigned char page,unsigned char seg,unsigned char cod,unsigned char dot)
{
unsigned char i,j;
unsigned char num;
num = cod * 3;
wcom(0xaf);//开显示
for(i = 0;i <3;i++)
{
wcom(0xb0+page+i); //设定页地址
wcom(0x10+(0x0f&(seg>>4))); //设定列地址 ,高四位
wcom(0x00+(0x0f&seg)); //设定列地址 ,低四位
for(j = 0;j<24;j++)
{
wdata(LargeNum1[num+i][j]);
}
}
if(dot)////如果要显示小数点
{
seg += 13;
wcom(0x10+(0x0f&(seg>>4))); //设定列地址 ,高四位
wcom(0x00+(0x0f&seg)); //设定列地址 ,低四位
for(j = 0;j<3;j++)
{
wdata(0x07);
}
}
}
//显示数字0-9,:
void dispLargeNum_1616(unsigned char page,unsigned char seg,unsigned char cod)
{
unsigned char i,j;
unsigned char num;
num = cod * 2;
wcom(0xaf);//开显示
for(i = 0;i <2;i++)
{
wcom(0xb0+page+i); //设定页地址
wcom(0x10+(0x0f&(seg>>4))); //设定列地址 ,高四位
wcom(0x00+(0x0f&seg)); //设定列地址 ,低四位
for(j = 0;j<16;j++)
{
wdata(LargeNum2[num+i][j]);
}
}
/* if(dot)////如果要显示小数点
{
seg += 13;
wcom(0x10+(0x0f&(seg>>4))); //设定列地址 ,高四位
wcom(0x00+(0x0f&seg)); //设定列地址 ,低四位
for(j = 0;j<3;j++)
{
wdata(0x07);
}
}*/
}
/*************************************************/
//写disdate_a数据
/*************************************************/
void disdate_a(unsigned char dat_a,unsigned char dat_b)
{
int seg;
unsigned char page;
for(page=0xb0;page<0xb9;page++) //写页地址共9页 0xb8----0xb9
{ wcom(page); //如下汉字可改
wcom(0x10);
wcom(0x00);
for(seg=0;seg<64;seg++)
{ wdata(dat_a);
wdata(dat_b);
}
}
wcom(0xaf); /*开显示指令*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -