📄 lcd.c
字号:
#include "MATH.H"
#include "STC12.H"
#include "function.h"
#include "pin.h"
#include "variable.h"
#include<intrins.h>
void LCD_INIT(void)
{
lcd_reset();
lcd_preset();
lcd_clr(0);
//default display
lcd_predp();
}
void lcd_predp(void)
{
byte da3;
dp_chara(addr_Tc,0,1,0,12);
da3=da_TC;
da3=da_TC/10;
dp_chara(da3,0,1,30,6);
da3=da_TC%10;
dp_chara(da3,0,1,36,6);
dp_chara(addr_dot2,0,1,24,6);
/* if(!k_pw)
{
dp_chara(addr_OFF,0,1,30,18);
}
else
{
dp_chara(addr_ON,0,1,30,18);
} */
dp_chara(addr_Ref,0,2,0,18);
dp_chara(addr_dot2,0,2,24,6);
if(!k_ref)
{
dp_chara(addr_OFF,0,2,30,18);
}
else
{
dp_chara(addr_ON,0,2,30,18);
}
dp_chara(addr_Wind,0,3,0,30);
switch(k_fa%3)
{
case 0:
dp_chara(addr_OFF,0,3,30,18);
break;
case 1:
dp_chara(addr_ON,0,3,30,18);
break;
case 2:
dp_chara(addr_AUT,0,3,30,18);
break;
default:
break;
}
dp_chara(addr_TA,1,1,0,18);
//display ta
//ECCF3=0
CCAPM3&=0xfe;
da3=da_TA/10;
dp_bigchara(da3,1,2,18,12);
da3=da_TA%10;
dp_bigchara(da3,1,2,30,12);
//Open CCF3 interrupt
CCF3=0;
CCAPM3|=0x01;
}
void LCD_Write_da(byte chip,byte page,byte column,unsigned char di,byte len)
{
byte i;
E1=0;
// nobusyness(0);
delay(5);
E2=0;
// nobusyness(1);
delay(5);
switch(chip)
{
case 0:
//return from read-modify-write mode
// lcd_commd=0xee;
// LCD_WriteIR1();
// set page
lcd_commd=0xb8;
lcd_commd|=page;
LCD_WriteIR1();
//set column
lcd_commd=column;
LCD_WriteIR1();
//set read-modify-write mode
lcd_commd=0xe0;
LCD_WriteIR1();
//Write data to d_ram
for(i=0;i<len;i++)
{
//read BF flag
// nobusyness(0);
delay(5);
// da=di;
// DB0=(da&0x01);
// DB1=(da&0x02);
// da= da|0x03;
// P1=da;
seri_to_para(di);
AA=1;
R_W=0;
E1=1;
delay(1);
E1=0;
delay(1);
}
//return from read-modify-write mode
lcd_commd=0xee;
LCD_WriteIR1();
break;
case 1:
//return from read-modify-write mode
// lcd_commd=0xee;
// LCD_WriteIR2();
// set page
lcd_commd=0xb8;
lcd_commd|=page;
LCD_WriteIR2();
//set column
lcd_commd=column;
LCD_WriteIR2();
//set read-modify-write mode
lcd_commd=0xe0;
LCD_WriteIR2();
//Write data to d_ram
for(i=0;i<len;i++)
{
//read BF flag
// nobusyness(0);
delay(5);
// da=di;
// DB0=(da&0x01);
// DB1=(da&0x02);
// da= da|0x03;
// P1=(da);
seri_to_para(di);
AA=1;
R_W=0;
E2=1;
delay(1);
E2=0;
delay(1);
}
//return from read-modify-write mode
lcd_commd=0xee;
LCD_WriteIR2();
break;
default:
break;
}
}
//Write instruction to LCD
void LCD_WriteIR1(void)
{
E1=0;
// nobusyness(0);
delay(5);
E2=0;
// nobusyness(1);
delay(5);
// DB0=(lcd_commd&0x01);
// DB1=(lcd_commd&0x02);
// lcd_commd|=0x03;
// P1=lcd_commd;
seri_to_para(lcd_commd);
AA=0; //indicate it is instruction
R_W=0;
E1=1;
delay(1);
E1=0;
delay(1);
}
void LCD_WriteIR2(void)
{
E1=0;
// nobusyness(0);
delay(5);
E2=0;
// nobusyness(1);
delay(5);
// DB0=(lcd_commd&0x01);
// DB1=(lcd_commd&0x02);
// lcd_commd|=0x03;
// P1=lcd_commd;
seri_to_para(lcd_commd);
AA=0; //indicate it is instruction
R_W=0;
E2=1;
delay(1);
E2=0;
delay(1);
}
void LCD_Write_cbuff(void)
{
byte i,da,len;
E1=0;
// nobusyness(0);
delay(5);
E2=0;
// nobusyness(1);
delay(5);
lcd_commd=0;
da=lcd_xchip;
switch(da)
{
case 0:
//return from read-modify-write mode
// lcd_commd=0xee;
// LCD_WriteIR1();
// set page
lcd_commd=lcd_xrow;
lcd_commd|=0xb8;
LCD_WriteIR1();
//set column
lcd_commd=lcd_xcolumn;
LCD_WriteIR1();
//set read-modify-write mode
lcd_commd=0xe0;
LCD_WriteIR1();
//Write data to d_ram
len=lcd_xlen;
for(i=0;i<len;i++)
{
//read BF flag
// nobusyness(0);
delay(5);
da=*ptc++;
// DB0=(da&0x01);
// DB1=(da&0x02);
// da= da|0x03;
// P1=da;
seri_to_para(da);
AA=1;
R_W=0;
E1=1;
delay(1);
E1=0;
delay(1);
}
//return from read-modify-write mode
lcd_commd=0xee;
LCD_WriteIR1();
break;
case 1:
//return from read-modify-write mode
// lcd_commd=0xee;
// LCD_WriteIR2();
// set page
lcd_commd=lcd_xrow;
lcd_commd|=0xb8;
LCD_WriteIR2();
//set column
lcd_commd=lcd_xcolumn;
LCD_WriteIR2();
//set read-modify-write mode
lcd_commd=0xe0;
LCD_WriteIR2();
//Write data to d_ram
len=lcd_xlen;
for(i=0;i<len;i++)
{
//read BF flag
// nobusyness(0);
delay(5);
da=*ptc++;
// DB0=(da&0x01);
// DB1=(da&0x02);
// da= da|0x03;
// P1=da;
seri_to_para(da);
AA=1;
R_W=0;
E2=1;
delay(1);
E2=0;
delay(1);
}
//return from read-modify-write mode
lcd_commd=0xee;
LCD_WriteIR2();
break;
default:
break;
}
}
void lcd_reset(void)
{
E1=0;
E2=0;
lcd_commd=0xae;
LCD_WriteIR1();
//close display
lcd_commd=0xae;
LCD_WriteIR2();
//reset chip 1
lcd_commd=0xe2;
LCD_WriteIR1();
delay10ms(10);
//reset chip 2
lcd_commd=0xe2;
LCD_WriteIR2();
delay10ms(10);
}
//part--0: clear all display to normal state
// --1: clear all display to alarm state
// --2: clear left display
// --3: clear right display
void lcd_clr(byte part)
{
//close display
lcd_commd=0xae;
LCD_WriteIR1();
//close display
lcd_commd=0xae;
LCD_WriteIR2();
switch(part)
{
case 0:
//display the first row
lcd_commd=0xd4;
LCD_WriteIR1();
//display the first row
lcd_commd=0xd4;
LCD_WriteIR2();
clr1(0);
break;
case 1:
//display the first row
lcd_commd=0xd0;
LCD_WriteIR1();
//display the first row
lcd_commd=0xd0;
LCD_WriteIR2();
clr1(0);
break;
case 2:
//display the first row
lcd_commd=0xd4;
LCD_WriteIR1();
//display the first row
lcd_commd=0xd4;
LCD_WriteIR2();
clr1(1);
break;
case 3:
//display the first row
lcd_commd=0xd4;
LCD_WriteIR1();
//display the first row
lcd_commd=0xd4;
LCD_WriteIR2();
clr1(2);
break;
default:
break;
}
//open display
lcd_commd=0xaf;
LCD_WriteIR1();
//open display
lcd_commd=0xaf;
LCD_WriteIR2();
}
void lcd_preset(void)
{
E1=0;
E2=0;
//close display
// lcd_commd=0xae;
// LCD_WriteIR1();
// delay10ms(1);
//close display
// lcd_commd=0xae;
// LCD_WriteIR2();
// delay10ms(1);
//close free state
lcd_commd=0xa4;
LCD_WriteIR1();
// set 1/32 duty rate
lcd_commd=0xa9;
LCD_WriteIR1();
//set clockwise sort
lcd_commd=0xa0;
LCD_WriteIR1();
//close free state
lcd_commd=0xa4;
LCD_WriteIR2();
// set 1/32 duty rate
lcd_commd=0xa9;
LCD_WriteIR2();
//set clockwise sort
lcd_commd=0xa0;
LCD_WriteIR2();
}
//sbit da_stp P1^7;
//sbit cp P1^6;
//sbit le P1^5;
//function:transfer serial data to paral data
void seri_to_para(byte da)
{
byte i;
cp=0;
le=0;
for(i=0;i<8;i++)
{
cp=0;
if(da&0x01)
{
da_stp=1;
}
else
{
da_stp=0;
}
da>>=1;
// delay(5);
cp=1;
// delay(5);
}
le=1;
// delay(5);
_nop_();
_nop_();
le=0;
cp=0;
}
/*
byte LCD_Read_status(void)
{
byte da;
E1=0;
nobusyness(0);
E2=0;
nobusyness(1);
AA=0;
R_W=1;
E1=1;
da=0;
da|=(P1&0xfc);
if(DB0==1)
{
da|=0x01;
}
if(DB1==1)
{
da|=0x02;
}
E1=0;
return(da);
} */
void sear_dpl(void)
{
addr_dpl[0]=&dot_0;
addr_dpl[1]=&dot_1;
addr_dpl[2]=&dot_2;
addr_dpl[3]=&dot_3;
addr_dpl[4]=&dot_4;
addr_dpl[5]=&dot_5;
addr_dpl[6]=&dot_6;
addr_dpl[7]=&dot_7;
addr_dpl[8]=&dot_8;
addr_dpl[9]=&dot_9;
addr_dpl[10]=&dot_ON;
addr_dpl[11]=&dot_OFF;
addr_dpl[12]=&dot_AUT;
addr_dpl[13]=&dot_Nothing;
addr_dpl[14]=&dot_PW_;
addr_dpl[15]=&dot_Ref_;
addr_dpl[16]=&dot_Wind_;
addr_dpl[17]=&dot_TA_;
addr_dpl[18]=&dot_WA_;
addr_dpl[19]=&dot2;
addr_dpl[20]=&dot_Tc_;
addr_dpl_up[0]=&dot_0_up;
addr_dpl_up[1]=&dot_1_up;
addr_dpl_up[2]=&dot_2_up;
addr_dpl_up[3]=&dot_3_up;
addr_dpl_up[4]=&dot_4_up;
addr_dpl_up[5]=&dot_5_up;
addr_dpl_up[6]=&dot_6_up;
addr_dpl_up[7]=&dot_7_up;
addr_dpl_up[8]=&dot_8_up;
addr_dpl_up[9]=&dot_9_up;
addr_dpl_up[10]=&dot_00_up;
addr_dpl_up[11]=&dot_50_up;
addr_dpl_up[12]=&dot_SENS_up;
addr_dpl_up[13]=&dot_AH_up;
addr_dpl_up[14]=&dot_AL_up;
addr_dpl_up[15]=&dot_PR_up;
addr_dpl_up[16]=&dot_nothing_up;
addr_dpl_down[0]=&dot_0_down;
addr_dpl_down[1]=&dot_1_down;
addr_dpl_down[2]=&dot_2_down;
addr_dpl_down[3]=&dot_3_down;
addr_dpl_down[4]=&dot_4_down;
addr_dpl_down[5]=&dot_5_down;
addr_dpl_down[6]=&dot_6_down;
addr_dpl_down[7]=&dot_7_down;
addr_dpl_down[8]=&dot_8_down;
addr_dpl_down[9]=&dot_9_down;
addr_dpl_down[10]=&dot_00_down;
addr_dpl_down[11]=&dot_50_down;
addr_dpl_down[12]=&dot_SENS_down;
addr_dpl_down[13]=&dot_AH_down;
addr_dpl_down[14]=&dot_AL_down;
addr_dpl_down[15]=&dot_PR_down;
addr_dpl_down[16]=&dot_nothing_down;
}
void dp_bigchara(byte addr,byte chip,byte row,byte column,byte len)
{
lcd_xchip=chip;
ptc=addr_dpl_up[addr];
// ptc=(byte code * )addr_dpl_up+addr;
lcd_xrow=row;
lcd_xcolumn=column;
lcd_xlen=len;
LCD_Write_cbuff();
lcd_xrow=row+1;
ptc=addr_dpl_down[addr];
LCD_Write_cbuff();
}
void dp_chara(byte addr,byte chip,byte row,byte column,byte len)
{
lcd_xchip=chip;
ptc=addr_dpl[addr];
lcd_xrow=row;
lcd_xcolumn=column;
lcd_xlen=len;
LCD_Write_cbuff();
}
//part --0:clear all
// --1:clear left display
// --2:clear left display
void clr1(byte part)
{
byte i,j;
switch(part)
{
case 0:
//clear all
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
{
LCD_Write_da(i,j,0,0x00,61);
// delay10ms(2);
}
}
break;
//clear left display
case 1:
for(j=0;j<2;j++)
{
LCD_Write_da(0,j,0,0x00,61);
// delay10ms(2);
}
break;
//clear left display
case 2:
for(j=0;j<2;j++)
{
LCD_Write_da(1,j,0,0x00,61);
// delay10ms(2);
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -