<3052.h>
#define
E_SIG 0x20
#define
RS_SIG 0x10
void ioinit(void)
{
P3.DDR = 0xff;
}
void adinit(void)
{
AD.ADCSR.BIT.ADF = 0;
AD.ADCSR.BIT.SCAN = 1;
AD.ADCSR.BIT.CKS = 1;
AD.ADCSR.BIT.CH = 3;
AD.ADCSR.BIT.ADST = 1;
}
void wait(void)
{
int t = 1000;
while(t--);
}
void lcdo8(unsigned char d)
{
d = d | E_SIG;
P3.DR.BYTE = d;
d = d & 0xdf;
P3.DR.BYTE = d;
wait();
}
void lcdini(void)
{
lcdo8(3);
lcdo8(3);
lcdo8(3);
lcdo8(2);
lcdo8(2);
lcdo8(8);
lcdo8(0);
lcdo8(0x0c);
lcdo8(0);
lcdo8(6);
}
void lcdclr(void)
{
P3.DR.BYTE = 0;
lcdo8(0);
lcdo8(1);
wait();
}
void lcdxy1(void)
{
P3.DR.BYTE = 0;
lcdo8(8);
lcdo8(0);
wait();
}
void lcdxy2(void)
{
P3.DR.BYTE = 0;
lcdo8(0x0c);
lcdo8(0);
wait();
}
void lcdxy(int x,int y)
{
P3.DR.BYTE = 0;
lcdo8(x);
lcdo8(y);
wait();
}
lcdo4(unsigned char d)
{
unsigned dd;
dd = d;
d = d >> 4;
d = d & 0x0f;
d = d | RS_SIG;
lcdo8(d);
wait();
dd = dd & 0x0f;
dd = dd | RS_SIG;
lcdo8(dd);
wait();
}
void dsp1g(char *str)
{
int c = 16;
for(c=0;c<16;c++)
{
lcdo4(*str);
str++;
}
}
int main(void)
{
int add=0;
int adcdata[3];
char s[4];
int i;
ioinit();
adinit();
wait();
lcdini();
wait();
lcdclr();
lcdxy1();
dsp1g("AN0 Input VOLT ");
wait();
lcdxy2();
dsp1g(" ");
while(1){
AD.ADCSR.BIT.ADST = 1;
while(AD.ADCSR.BIT.ADF == 0);
adcdata[0] = (AD.ADDRA & 0xff00) >> 6;
adcdata[1] = (AD.ADDRB & 0xff00) >> 6;
adcdata[2] = (AD.ADDRC & 0xff00) >> 6;
AD.ADCSR.BIT.ADF = 0;
add = (int)((adcdata[0]*(5.0/1024.0)*1000.0)+0.5);
for(i=0;i<4;i++)
{
s[i] = add % 10;
add/=10;
}
lcdxy(0x0c,5);
lcdo4(s[3]+'0');
lcdo4('.');
lcdo4(s[2]+'0');
lcdo4(s[1]+'0');
lcdo4(s[0]+'0');
lcdo4('V');
wait();
}
}
最終更新:2011年02月06日 21:13