?? 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 + -