سلام یه سوالی داشتم
من میخواستم برنامه یک ولتمتر 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)); } }
دیدگاه