📄 nt7538_6800.c
字号:
//-----------------------------------------------------------------------------
void wr_cmd(uchar wrcmd)
{
wait();
RS =0; //select instruction
RW =0; //to write
LCD_DATA=wrcmd;
E =1;
delay_us(1);
E =0;
delay_us(1);
}
//-----------------------------------------------------------------------------
void wr_data(uchar wrdata)
{
wait();
RS =1; //select data
RW =0; //to write
LCD_DATA=wrdata;
E =1;
delay_us(1);
E =0;
delay_us(1);
}
//-----------------------------------------------------------------------------
void init_lcd()
{
constr=v0; //
autoid=1; //
bmp_id=0; //
dispid=1; //
wr_cmd(0xa4); //EON=0,normal display
wr_cmd(0xa6); //REV=0,normal display
wr_cmd(0xa1); //segment drive is normal ADC=0;0xa1 is Reverse
wr_cmd(0x40); //Initial display line for COM0
wr_cmd(0xc0); //Com drive is normal;0xc8 is Reverse
delay_us(1);
wr_cmd(Rab); //(1+R2/R1)
delay_us(1);
wr_cmd(0x81); //contrast control
wr_cmd(constr); //Set step=8 (first set step=64)
delay_us(1);
wr_cmd(bias); //set bias
wr_cmd(0x2c);
wr_cmd(0x2e);
wr_cmd(0x2f); //set power control
delay_us(1);
//wr_cmd(0xa4);
wr_cmd(0xaf); //Turn Display On
delay_ms(1);
}
//-----------------------------------------------------------------------------
void disp_panxl(uchar dat1,dat2)
{
uchar ii,jj;
wr_cmd(0x40);
for(ii=0;ii<9;ii++)
{
wr_cmd(0xb0+ii); //select page
wr_cmd(0x10); //set MSB
wr_cmd(0x00); //set LSB
for(jj=0;jj<66;jj++)
{
wr_data(dat1);
wr_data(dat2);
}
}
}
//-----------------------------------------------------------------------------
void disp_bmp(uchar *dat)
{
uchar ii,jj;
wr_cmd(0x40);
for(ii=0;ii<8;ii++)
{
wr_cmd(0xb0+ii); //select page
wr_cmd(0x10); //set MSB
wr_cmd(0x00); //set LSB
for(jj=0;jj<132;jj++)
{
wr_data(*(dat++));
}
}
}
//-----------------------------------------------------------------------------
/*void disp_frame()
{
uchar ii,jj;
wr_cmd(0x40);
wr_cmd(0xb0); //select page
wr_cmd(0x10); //set MSB
wr_cmd(0x00); //set LSB
wr_data(0xff);
for(jj=0;jj<126;jj++)
wr_data(0x01);
wr_data(0xff);
for(ii=0;ii<6;ii++)
{
wr_cmd(0xb1+ii); //select page
wr_cmd(0x10); //set MSB
wr_cmd(0x00); //set LSB
wr_data(0xff);
for(jj=0;jj<126;jj++)
wr_data(0x00);
wr_data(0xff);
}
wr_cmd(0xb7); //select page
wr_cmd(0x10); //set MSB
wr_cmd(0x00); //set LSB
wr_data(0xff);
for(jj=0;jj<126;jj++)
wr_data(0x80);
wr_data(0xff);
}*/
//-----------------------------------------------------------------------------
void disp_qq()
{
uint ii;
uint jj,kk;
wr_cmd(0x40);
for(ii=0;ii<8;ii++)
{
wr_cmd(0xb0+ii); //select page
wr_cmd(0x10); //set MSB
wr_cmd(0x00); //set LSB
for(jj=0;jj<17;jj++)
for(kk=0;kk<8;kk++)
wr_data(q[kk]);
}
}
//-----------------------------------------------------------------------------
void show_constr()
{
uchar nn;
uchar tmph,tmpl;
tmph=constr/10;
tmpl=constr%10;
//显示对比度
wr_cmd(0xb0); //select 13 page
wr_cmd(0x17); //set MSB
wr_cmd(0x02); //set LSB
for(nn=0;nn<6;nn++) //write *10
wr_data(num[tmph*6+nn]);
for(nn=0;nn<6;nn++) //write *1
wr_data(num[tmpl*6+nn]);
}
//-----------------------------------------------------------------------------
void do_key()
{
uchar tkeyin;
KEY_IN=0xff;
delay_ms(5);
tkeyin=KEY_IN;
//判断自动刷新标志
if((tkeyin&AUTO)==0x00) autoid=1;
else autoid=0;
//画面往下翻bmp_id++
if((tkeyin&ADDU)==0x00)
{
dispid=1; //刷新标志置"1"
bmp_id++;
if(bmp_id>=BmpMax)
bmp_id=0;
}
//画面往上翻bmp_id--
if((tkeyin&SUBD)==0x00)
{
dispid=1; //刷新标志置"1"
if(bmp_id>0)
{
bmp_id--;
}
else bmp_id=BmpMax-1;
}
//对比度参数constr++
if((tkeyin&ADUP)==0x00)
{
if(constr<63) constr++;
wr_cmd(0x81); //SET Register
wr_cmd(constr);
delay_us(2);
show_constr();
}
//对比度参数constr--
if((tkeyin&ADDN)==0x00)
{
if(constr>0) constr--;
wr_cmd(0x81); //SET Register
wr_cmd(constr);
delay_us(2);
show_constr();
}
delay_ms(50);
}
//-----------------------------------------------------------------------------
void main (void)
{
init_cpu();
delay_us(5);
init_lcd();
delay_us(5);
disp_panxl(0x00,0x00);
delay_us(100);
while(1)
{
do_key();
if(dispid==1)
{
switch(bmp_id)
{
case 0: disp_panxl(0xff,0xff); break;
case 1: disp_panxl(0x00,0x00); break;
case 2: disp_panxl(0x55,0xaa); break;
case 3: disp_panxl(0xaa,0x55); break;
case 4: disp_bmp(huiz); break;
case 5: disp_qq(); break;
case 6: disp_bmp(hanz); break;
default: break;
}
dispid=0; //清除刷新标志
}
//For auto display switch
if(autoid==1)
{
dispid=1;
bmp_id++;
if(bmp_id>=BmpMax) bmp_id=0;
delay_ms(dl0); //自动显示时延时dl0
}
}
}
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -