#include "REG8051.h"
unsigned char code coding[10][2]= {{0xB0,0x0E},{0x00,0x06},{0x70,0x0C},{0x50,0x0E},{0xC0,0x06},{0xD0,0x0A},{0xF0,0x0A},{0,0x0E},{0xF0,0x0E},{0xD0,0x0E}};
unsigned char code coding1[10][2]={{0x70,0x0D},{0x60,0} ,{0x30,0x0E},{0x70,0x0A},{0x60,0x03},{0x50,0x0B},{0x50,0x0F},{0x70,0},{0x70,0x0F},{0x70,0x0B}};
unsigned char code PLACE_code[20][2]={{0xC0,0xFF},
{0xC0,0xC1},{0xC1,0xC2},{0xC2,0xC3},{0xC3,0xC4},
{0xC4,0xC5},{0xC5,0xC6},{0xC6,0xC7},{0xC7,0xC8},
{0xC8,0xFF},
{0xC9,0xFF},
{0xC9,0xCA},{0xCA,0xCB},{0xCB,0xCC},{0xCC,0xCD},
{0xCD,0xCE},{0xCE,0xCF},{0xCF,0xB9},{0xB9,0xBA},
{0xBA,0xFF}};
void LCDcls(void)
{
char data * cp;
unsigned char i;
cp=0xC0;
for(i=0;i<16;i++)*cp++=0;
cp=0xB9;
*cp++=0;
*cp=0;
LCDCON=0xFB; /* DISP=0; Open LCD; 11.0592M/2096/16--Frame Frequence 330Hz */
}
void LCDdisplay(unsigned char place,unsigned char value,bit point)
/****************************************************************
*
* lable4 led16 led15 led14 led13 led12 led11 led10 led9 label3
* 19 18 17 16 15 14 13 12 11 10
*
*
* 0 1 2 3 4 5 6 7 8 9
* label1 led1 led2 led3 led4 led5 led6 led7 led8 label2
*
*
* point 表示小数点 1表示有,0表示无
****************************************************************/
{
char data * cp;
if((place==0)||(place==10))
{
cp=(unsigned char *)PLACE_code[place][0];
*cp |= (value&0x0F);
}
else if((place==9)||(place==19))
{
cp=(unsigned char *)PLACE_code[place][0];
*cp |= (value&0xF0);
}
else if((place>0)&&(place<9))
{
cp=(unsigned char *)PLACE_code[place][0];
*cp |= coding[value][0];
cp=(unsigned char *)PLACE_code[place][1];
*cp |= coding[value][1];
if(point)*cp |= 0x01;
}
else if((place>10)&&(place<19))
{
cp=(unsigned char *)PLACE_code[place][0];
*cp |= coding1[value][0];
if(!point) *cp &=0x7F;
cp=(unsigned char *)PLACE_code[place][1];
*cp |= coding1[value][1];
}
cp=(unsigned char *)PLACE_code[19][0];
*cp|=0x10;
}
LCDdisplayLED(unsigned char place,unsigned char value,bit point)
{
if((place>0)&&(place<9)) LCDdisplay(place,value,point);
if((place>8)&&(place<17))LCDdisplay(place+2,value,point);
LCDdisplay(10,0x80,0);
LCDCON=0xFB;
}
LCDdisplayMARK(unsigned char tmp)
{
switch(tmp)
{
case 0: //
LCDdisplay(0,0x01,0);
break;
case 1: //
LCDdisplay(0,0x02,0);
break;
case 2: //
LCDdisplay(0,0x04,0);
break;
case 3: //
LCDdisplay(0,0x08,0);
break;
case 4: //
LCDdisplay(9,0x10,0);
break;
case 5: //
LCDdisplay(9,0x20,0);
break;
case 6: //
LCDdisplay(9,0x40,0);
break;
case 7: //
LCDdisplay(9,0x80,0);
break;
case 8: //
LCDdisplay(10,0x01,0);
break;
case 9: //
LCDdisplay(10,0x02,0);
break;
case 10: //
LCDdisplay(10,0x04,0);
break;
case 11: //
LCDdisplay(10,0x08,0);
break;
case 12: //
LCDDATA9 |=0x80; //显示圆周率
break;
case 13: //
LCDdisplay(19,0x10,0);
break;
case 14: //
LCDdisplay(19,0x20,0);
break;
case 15: //
LCDdisplay(19,0x40,0);
break;
case 16: //
LCDdisplay(19,0x80,0);
break;
}
LCDCON=0xFB;
}
void LCDtest(void)
{
unsigned char i;
for(i=1;i<17;i++)
{
LCDdisplayLED(i,i%10,0);
}
LCDCON=0xFB;
}
void LED5_6_7(unsigned char place,bit light)
{
PCR0=0xFF; //设置I/O口为写状态
switch(place)
{
case 5:
if(light) P0 |= 0x20;
else P0 &=0xDF;
break;
case 6:
if(light) P0 |= 0x40;
else P0 &=0xBF;
break;
case 7:
if(light) P0 |= 0x80;
else P0 &=0x7F;
break;
}
}