-
-
-
-
-
- #include <stdarg.h>
- #include <stdlib.h>
- #include <avr/io.h>
-
- typedef unsigned char uint8;
- static void usart_init(void)
- {
- UCSRA = 0x02;
- UCSRB = 0x18;
- UCSRC = 0x06;
- UBRRH = 0x00;
- UBRRL = 103;
- }
- static void put_char(uint8 data)
- {
- if (data == '/r')
- put_char(0x09);
- while ( !(UCSRA & (1<<UDRE)) )
- ;
- UDR = data;
- }
-
-
- static void myprintf(const char* fmt,...)
- {
- const char* s;
- int d;
- char buf[16];
- va_list ap;
- va_start(ap,fmt);
- while (*fmt)
- {
- if (*fmt != '%')
- {
- put_char(*fmt++);
- continue;
- }
- switch (*++fmt)
- {
- case 's':
- s = va_arg(ap,const char*);
- for (; *s; s++)
- put_char(*s);
- break;
- case 'x':
- d = va_arg(ap,int);
- itoa(d,buf,16);
- for (s = buf; *s; s++)
- put_char(*s);
- break;
- case 'd':
- d = va_arg(ap,int);
- itoa(d,buf,10);
- for (s = buf; *s; s++)
- put_char(*s);
- break;
- default:
- put_char(*fmt);
- break;
- }
- fmt++;
- }
- va_end(ap);
- }
- int main(void)
- {
- usart_init();
- uint8 i = 100;
- uint8* s = "Word!";
- while(1)
- {
- myprintf("/n/rHello %s/n/r0x%x = %d/n",s,i,i);
- }
- return 0;
- }
上面這段代碼是在網(wǎng)上的一個(gè)代碼的修改,修改后直接適用于avr16單片機 ,編譯環(huán)境是 avrstudio中的avr-gcc。
下面貼一個(gè)《c和指針》里的 求平均值的小程序
- #include <stdio.h>
- #include <stdarg.h>
-
- float average(int n_value,...)
- {
- unsigned char i;
- float sum = 0;
- va_list var_arg;
- va_start(var_arg,n_value);
- for(i=0;i<n_value;i++)
- {
- sum+=va_arg(var_arg,int);
- }
-
- va_end(var_arg);
-
- return sum/n_value;
-
-
- }
-
- int main()
- {
- float sum;
- sum=average(5,1,2,3,4,5);
-
- printf("%f",sum);
- return 1;
-
- }
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。