سلام یه سوالی داشتم
من میخواستم برنامه یک ولتمتر 0 تا 5 ولت dc رو با mega32 در کدویژن بنویسم که علاوه بر نشان دادن ولتاژ روی lcd ، ولتاژ را به صورت عقربه ای انالوگ روی glcd نمایش بده.
من برنامشو نوشتم ، مشکلم با نشان دادن انالوگ ولتاژ است .
برنامه ای که نوشتم رو میذارم ،ممنون میشم بگین اشکال برنامه چیه .
من میخواستم برنامه یک ولتمتر 0 تا 5 ولت dc رو با mega32 در کدویژن بنویسم که علاوه بر نشان دادن ولتاژ روی lcd ، ولتاژ را به صورت عقربه ای انالوگ روی glcd نمایش بده.
من برنامشو نوشتم ، مشکلم با نشان دادن انالوگ ولتاژ است .
برنامه ای که نوشتم رو میذارم ،ممنون میشم بگین اشکال برنامه چیه .
کد:
#include <mega32a.h>
#include <delay.h>
#include <alcd.h>
#include <glcd.h>
#include <font5x7.h>
#include <stdlib.h>
#include <math.h>
#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))
float volt;
char str[10];
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
void main(void)
{
float theta;
GLCDINIT_t glcd_init_data;
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
lcd_init(16);
glcd_init_data.font=font5x7;
glcd_init_data.readxmem=NULL;
glcd_init_data.writexmem=NULL;
glcd_init(&glcd_init_data);
glcd_clear();
delay_ms(10);
glcd_arc(64,32,0,180,30);
glcd_line(64,1,64,3);
glcd_line(85,9,85,13);
glcd_line(43,9,43,13);
glcd_outtextxy(96,32,"5");
glcd_outtextxy(29,32,"0");
while (1)
{
volt=read_adc(0);
if (volt==0)
{
ftoa(volt,2,str);
lcd_putsf("volt=0.00");
delay_ms(100);
lcd_clear();
}
else
{
volt=volt/204.6;
ftoa(volt,2,str);
lcd_putsf("V = ");
lcd_puts(str);
lcd_putsf(" (volt)");
delay_ms(100);
lcd_clear();
}
theta=volt*36;
glcd_line(64,32,64-30*cos(theta),32-30*sin(theta));
}
}






دیدگاه