新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > avr單片機 串口實現printf(使用變參函數)

        avr單片機 串口實現printf(使用變參函數)

        作者: 時間:2018-09-14 來源:網絡 收藏

        #include

        本文引用地址:http://www.104case.com/article/201809/389165.htm

        #include

        #include

        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

        ;

        UDR = data;

        }

        static void my(const char* fmt,...)

        {

        const char* s;

        int d;

        char buf[16];

        va_list ap;

        va_start(ap,fmt); // 將ap指向fmt(即可變參數的第一個?下一個?)

        while (*fmt)

        {

        if (*fmt != '%')

        {

        put_char(*fmt++); // 正常發送

        continue;

        }

        switch (*++fmt) // next %

        {

        case 's':

        s = va_arg(ap,const char*); // 將ap指向者轉成char*型,并返回之

        for (; *s; s++)

        put_char(*s);

        break;

        case 'x':

        d = va_arg(ap,int); // 將ap指向者轉成int型,并返回之

        itoa(d,buf,16); // 將整型d以16進制轉到buf中

        for (s = buf; *s; s++)

        put_char(*s);

        break;

        case 'd':

        d = va_arg(ap,int);

        itoa(d,buf,10); // 將整型d以10進制轉到buf中

        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)

        {

        my(/n/rHello %s/n/r0x%x = %d/n,s,i,i);

        }

        return 0;

        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 姚安县| 文昌市| 万荣县| 蚌埠市| 祁门县| 霍州市| 淮滨县| 湟中县| 周宁县| 宁乡县| 天全县| 施秉县| 德格县| 昆明市| 康马县| 弥渡县| 青神县| 古丈县| 黔江区| 云梦县| 靖宇县| 襄汾县| 宜良县| 麻城市| 固安县| 札达县| 丰都县| 和顺县| 勐海县| 仪征市| 苍溪县| 台安县| 原阳县| 开远市| 繁峙县| 凌源市| 黄山市| 西华县| 台前县| 临颍县| 麻江县|