📄 330_display.c
字号:
/******************
filename:display.c
master: liuyul
startdate: 4-17 2006
fishceddate:4-18 2006
************/
/*
显示
*/
extern struct screen setdata;
extern struct keyboard out;
unsigned int screen;
extern xdata unsigned char screenkeep; //屏保参数;
void write(unsigned char add,unsigned char da,bit d);//写LCD显示模块;
void numten(unsigned char x); //LCD数码显示十位;
void numone(unsigned char x); //LCD数码显示个位;
void wind(unsigned char windnum); //风速标志显示;
extern void refreshWDT(void) ;
void del1s(void); //延时;
void openlcd(void); //LCD初始程序;
/***********************************
入口地址:display()
全局变量:out
函数调用:write(unsigned char add,unsigned char da,bit d),numten(unsigned char x),numone(unsigned char x),openlcd();
功能:对液晶显示器的显示内容进行显示和刷新;
************************************/
void display(void) //显示所有该显示的模块;
{
openlcd(); //LCD初始化;
wind(out.wind); //风速显示刷新;
write(4,3,1);
numone(setdata.tempnum%10); //数码个位的显示;
numten(setdata.tempnum/10); //数码十位的显示;
if(out.heat==1) //制冷制热模式标志的刷新;
{
write(2,1,1); //显示制热标志;
write(2,2,0); //关闭制冷标志;
}
else
{
write(2,2,1); //显示制冷标志;
write(2,1,0); //关闭制热标志;
}
if(out.manual==1) //手动自动标志的刷新;
{
write(3,1,1); //显示手动标志;
write(3,2,0); //关闭自动标志;
}
else
{
write(3,2,1); //显示自动标志;
write(3,1,0); //关闭手动标志;
}
}
/*************************************************************************************
入口地址:del1s() *
局部变量:out *
函数调用:delay10ms(); *
功能:对液晶显示器的显示内容进行显示和刷新; *
**************************************************************************************/
void del1s(void)
{
unsigned char i;
for(i=0;i<20;i++)
{
delay10ms();
}
}
/*************************************************************************************
入口地址:delay10ms() *
局部变量:out * *
功能:对液晶显示器的显示内容进行显示和刷新; *
**************************************************************************************/
void delay10ms(void)
{
unsigned int aa,bb;
refreshWDT() ;
for(aa=0;aa<670;aa++)
{
for(bb=0;bb<30;bb++)
{}
}
}
/**********************************************
入口地址:keyscan()
功能:键盘扫描,屏保处理;
***********************************************/
keyscan(void)
{
unsigned char num ;
p1mdout |= 0xf0 ;
p1 |= 0xf0 ;
num = p1 ; //读取键盘数据;
num = (num >> 4) ;
switch(num) //键盘开关量入口;
{
case 0x0f:return(0);break; //无键按下时返回值为零;
case 0x0b:return(1);break; //设置键返回1;
case 0x0e:return(2);break; //减少键返回2;
case 0x0d:return(3);break; //增加键返回3;
case 0x07:return(4);break; //POWER键返回4;
}
p1mdout &= ~0xf0 ;
}
/*************************************************************************************
入口地址:wind(x) *
输入:unsigned char x * * *
功能:对液晶显示器风速的显示内容进行显示和刷新; *
**************************************************************************************/
void wind(unsigned char x)
{
switch(x)
{
case 0: //显示风速为0;
write(0,3,0);
write(0,2,0);
write(0,1,0);
write(1,2,0);
write(1,3,0);
write(1,1,1);
break;
case 1: //显示风速为10%到20%;
case 2:
write(0,3,0);
write(0,2,0);
write(0,1,0);
write(1,3,0);
write(1,2,1);
write(1,1,1);
break;
case 3: //显示风速为30%到40%;
case 4:
write(0,3,0);
write(0,2,0);
write(0,1,0);
write(1,3,1);
write(1,2,1);
write(1,1,1);
break;
case 5: //显示风速为50%到60%;
case 6:
write(0,3,1);
write(0,2,0);
write(0,1,0);
write(1,3,1);
write(1,2,1);
write(1,1,1);
break;
case 7: //显示风速为70%到80%;
case 8:
write(0,3,1);
write(0,2,1);
write(0,1,0);
write(1,3,1);
write(1,2,1);
write(1,1,1);
break;
case 9: //显示风速为90%到100%;
case 10:
write(0,3,1);
write(0,2,1);
write(0,1,1);
write(1,3,1);
write(1,2,1);
write(1,1,1);
break;
}
}
/*************************************************************************************
入口地址:numone(b) *
输入:unsigned char b *
局部变量:unsigned char u,m,q *
功能:对液晶显示器数码个位的显示内容进行显示和刷新; *
**************************************************************************************/
/************************************************
u 0 1 2 3 4 5 6 7
m
0
1
2
3
*************************************************/
void numone(unsigned char b) //b选择数码显示的一维数组
{
unsigned char u; //如上图中的u对应模块的纵坐标;
unsigned char m; //如上图中的m对应模块的横坐标;
unsigned char q; //数码显示数组的二维数组;
bit z; //显示标志,为1显示,为0不显示;
q=0; //二维数组指针清0;
u=4; //选择4纵列;
for(m=0;m<3;m++) //对横行的选择;
{
z=lcdonemap[b][q]; //读取数码模块的值,为1显示,为0不显示;
write(u,m,z); //写数码模块;
q++; //数码指针加1;
}
u=5; //选择5纵列;
for(m=0;m<4;m++) //对横行的选择;
{
z=lcdonemap[b][q]; //读取数码模块的值,为1显示,为0不显示;
write(u,m,z); //写数码模块;
q++; //数码指针加1;
}
}
/*************************************************************************************
入口地址:numten(a) *
输入:unsigned char a *
局部变量:unsigned char u,m,q *
功能:对液晶显示器数码十位的显示内容进行显示和刷新; *
**************************************************************************************/
void numten(unsigned char a)
{
unsigned char u,m,q;
bit z;
q=0;
for(u=6;u<8;u++) //选择纵列;
{
for(m=0;m<4;m++) //对横行的选择;
{
z=lcdtenmap[a][q]; //读取数码模块的值,为1显示,为0不显示;
write(u,m,z); //写数码模块
q++; //数码指针加1;
}
}
}
/*************************************************************************************
入口地址:write(add,da,d) *
输入:unsigned char add,da,d *
局部变量:unsigned char var *
功能:对液晶显示器的显示内容进行显示和刷新; *
**************************************************************************************/
void write(unsigned char add,unsigned char da,bit d)
{
unsigned char var; //HT1621显示对应的代码;
if(d) //d为1要求显示对应位;
{
switch(da) //显示位的开关量;
{
case 0:var|=0x01;break; //显示器存储第1行的选择;
case 1:var|=0x02;break; //显示器存储第2行的选择;
case 2:var|=0x04;break; //显示器存储第3行的选择;
case 3:var|=0x08;break; //显示器存储第4行的选择;
}
}
else //d为0要求不显示对应的位;
{
switch(da) //不显示位的开关量;
{
case 0:var&=0xfe;break; //不选择显示器存储第1行;
case 1:var&=0xfd;break; //不选择显示器存储第2行;
case 2:var&=0xfb;break; //不选择显示器存储第3行;
case 3:var&=0xf7;break; //不选择显示器存储第4行;
}
}
writemem(add,var);
}
/*************************************************************************************
入口地址:writemem() *
输入:unsigned char add,var; *
局部变量:unsigned char temp,i; *
功能:对液晶显示器的显示内容进行显示和刷新; *
**************************************************************************************/
void writemem(unsigned char add,unsigned char var)
{
unsigned char temp,i;
lcdcs=0; //显示器控制芯片的选择位有效;
delay();
writeic(1); //写数据指令;
writeic(0);
writeic(1);
for(i=0;i<6;i++) //6位地址的处理;
{
temp=add&0x20; //地址最高位屏避;
if(temp) //地址为1写地址;
{
writeic(1); //写地址;
}
else //为0不写;
{
writeic(0); //不写地址;
}
add=add<<1; //地址数据左移1位;
}
for(i=0;i<4;i++) //4位数据的处理;
{
temp=var&0x01; //最低位有效;
if(temp) //如果最低位有效就写1;
{
writeic(1); //写数据1;
}
else //如果最低位无效就写0;
{
writeic(0); //写0;
}
var=var>>1; //数据位右移;
}
lcdcs=1; //显示器控制芯片的选择无效;
delay(); //延时;
}
/********************************
入口地址:delay
备注:液晶显示器所使用的工作频率决定延时的长短;
*********************************/
void delay(void)
{
unsigned int i;
for(i=0;i<20;i++)
{;}
}
/********************************
入口地址:writeic()
备注:写数据;
*********************************/
void writeic(bit x)
{
lcddata=x; //对显示控制器进行写操作;
lcdwr=0; //数据写有效;
delay(); //延时;
lcdwr=1; //数据写无效;
delay(); //延时;
}
/********************************
入口地址:openlcd()
备注:打开LCD
*********************************/
void openlcd(void)
{
unsigned char i;
bit z;
lcdcs=0;
delay();
for(i=0;i<12;i++)
{
z=openlcdnum[0][i];
writeic(z);
}
lcdcs=1;
delay();
lcdcs=0;
delay();
for(i=0;i<12;i++)
{
z=openlcdnum[1][i];
writeic(z);
}
lcdcs=1;
delay();
lcdcs=0;
delay();
for(i=0;i<12;i++)
{
z=openlcdnum[2][i];
writeic(z);
}
delay();
}
/********************************
入口地址:closelcd()
备注:关闭LCD
*********************************/
void closelcd(void)
{
unsigned char i;
bit z;
lcdcs=0;
delay();
for(i=0;i<12;i++)
{
z=openlcdnum[3][i];
writeic(z);
}
lcdcs=1;
delay();
lcdcs=0;
delay();
for(i=0;i<12;i++)
{
z=openlcdnum[4][i];
writeic(z);
}
lcdcs=1;
delay();
}
/********************************
入口地址:closewind()
备注:关闭风速显示;
*********************************/
void closewind(void)
{
write(4,3,0);
write(0,0,0);
write(1,2,0);
write(1,3,0);
write(0,3,0);
write(0,2,0);
write(0,1,0);
write(1,1,0);
}
/********************************
入口地址:closetemp()
备注:关闭数码显示;
*********************************/
void closetemp(void)
{
write(4,0,0);
write(4,1,0);
write(4,2,0);
write(4,3,1);
write(5,0,0);
write(5,1,0);
write(5,2,0);
write(5,3,0);
write(6,0,0);
write(6,1,0);
write(6,2,0);
write(6,3,0);
write(7,0,0);
write(7,1,0);
write(7,2,0);
write(7,3,0);
delay10ms();
}
/********************************
入口地址:closemode()
备注:关闭自动和手动模式;
*********************************/
void closemode(void)
{
write(3,1,0);
write(3,2,0);
delay10ms();
}
/********************************
入口地址:closekind()
备注:关闭制冷和制热;
*********************************/
void closekind(void)
{
write(2,1,0);
write(2,2,0);
delay10ms();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -