Pwm_Adc_3_Digit_4550
Codes are under testing and not perfect...
//all port test
//POETD.b0 to a
//.....
//.....
//PORTD.b6 to g
#define dig1 PORTD.f5
#define dig10 PORTD.f6
#define dig100 PORTD.f7
unsigned int show=0;
unsigned char num1,num10,num100,cnt,i;
unsigned char pattern;
unsigned char display(unsigned char num)
{
unsigned char dig[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
0x7D,0x07,0x7F,0x6F};
pattern=dig[num];
return(~pattern);
}
void interrupt()
{
TMR0l=245; //2.5ms interrupt
INTCON=0x20; //check
portd=0;
if(show==1)
{
PORTB=display(num1);
dig1=1;
dig10=0;
dig100=0;
}
if(show==10)
{
PORTB=display(num1);
dig1=1;
dig10=0;
dig100=0;
PORTB=display(num10);
dig1=0;
dig10=1;
dig100=0;
}
if(show==100)
{
PORTB=display(num1);
dig1=1;
dig10=0;
dig100=0;
PORTB=display(num10);
dig1=0;
dig10=1;
dig100=0;
PORTB=display(num100);
dig1=0;
dig10=0;
dig100=1;
}
}
void main()
{
TRISA=0;
TRISC=0;
TRISD=0;
TRISB=0;
ADCON1=0x3f; //make all nit sigital on portb
TMR0l=245; //2.5ms interrupt
INTCON=0xA0;
T0CON=0xC4;
Pwm1_init(5000);
for(;;)
{
cnt=Adc_Read(0);
delay_ms(100);
Pwm1_Change_Duty(cnt);
Pwm1_Start();
// if(cnt>999)cnt=0;
// cnt=cnt+1;
if(cnt<10)
{
show=1;
num1=cnt;
}
if(cnt>=10 && cnt<=99)
{
show=10;
num1=cnt%10;
num10=cnt/10;
}
if(cnt>99)
{
show=100;
num100=cnt/100;
num10=(cnt/10)%10;
num1=cnt%10;
}
}
}
Comments
Post a Comment