|
#include <reg52.h>
#include "PCF8591.h"
bit flagls=1;
unsigned char T0RH=0;
unsigned char T0RL=0;
unsigned char channel=0;
unsigned char LedBuff[4]={0xff,0xff,0xff,0xff};
unsigned char code smgcode[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
sbit LSA=P1^5;
sbit LSB=P1^6;
sbit LSC=P1^7;
sbit KEY0=P3^2;
void ConfigTimer0(unsigned int ms);
void ValueToBuff(unsigned char val);
void Delayms (unsigned int xms);
void main(void)
{
unsigned char val;
EA=1;
EX0=1;
IT0=1;
ConfigTimer0(2);
while(1)
{
if(flagls)
{
flagls=0;
val=GetADCValue(channel);
ValueToBuff(val);
channel%=2;
}
}
}
void ValueToBuff(unsigned char val)
{
val=(val*250)/255;
LedBuff[0]=smgcode[(val%10)];
LedBuff[1]=smgcode[(val/10)%10];
LedBuff[2]=smgcode[(val/100)];
LedBuff[2]&=0x7f;
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;
tmp=11059200/12;
tmp=(tmp*ms)/1000;
tmp=65536-tmp;
tmp=tmp+18;
T0RH=(unsigned char)(tmp>>8);
T0RL=(unsigned char)tmp;
TMOD&=0xf0;
TMOD|=0x01;
TH0=T0RH;
TL0=T0RL;
ET0=1;
TR0=1;
}
void LedScan(void)
{
static unsigned char i=0;
P0=0xff;
switch(i)
{
case 0:
LSA=1;
LSB=0;
LSC=0;
i++;
P0=LedBuff[0];
Delayms(2);
break;
case 1:
LSA=0;
LSB=1;
LSC=0;
i++;
P0=LedBuff[1];
Delayms(2);
break;
case 2:
LSA=1;
LSB=1;
LSC=0;
i++;
P0=LedBuff[2];
Delayms(2);
break;
case 3:
LSA=0;
LSB=0;
LSC=1;
i=0;
P0=LedBuff[3];
Delayms(2);
break;
default:
break;
}
}
void InterruptTimer0(void) interrupt 1
{
static unsigned int tmrls=0;
TH0=T0RH;
TL0=T0RL;
tmrls++;
if(tmrls>=5)
{
tmrls=0;
flagls=1;
}
LedScan();
}
void EXINT0(void) interrupt 0
{
Delayms(2);
channel=~channel;
}
void Delayms (unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
{
for(j=106;j>0;j--);
}
}
|
|