⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch5_miniprint.c

📁 avr下最小化的printf函数
💻 C
字号:
#include<avr/io.h>
#include<avr/delay.h>
#include<stdio.h>
#include<stdlib.h>



void DelayMs( unsigned int  ms )
{
	
	unsigned int i;
	for(i = 0; i< ms; i++ )
		{
			_delay_loop_2(8*250);
		}//end for
}//end DelayMs


void usart_putc(unsigned char c)
{
	while(!(UCSR0A & ( 1 << UDRE0) ) ) //Wait for empty transmit buffer
		;//empty body

	UDR0 = c; //Put data into buffer,sends the data
}// end putc

void MiniPrintf(char *fmt, ...)
{
	va_list ap;

	char strval[6];
	char *p;
	int nval;
	unsigned char i;
	va_start(ap,fmt);

	for( p = fmt; *p != '\0'; p++)
		{
			if(*p != '%')
				{
					usart_putc(*p);
					continue;
				}

			p++;
			switch(*p)
				{
					case 'd':
						{nval = va_arg(ap, int);
						itoa(nval,strval,10);
						break;}
					case 'x':
							{nval = va_arg(ap,int); itoa(nval, strval,16);break;}
							
				}//end switch

			i=0;
			for(i=0;strval[i]; i++)
				{usart_putc(strval[i ]);}

			va_end(ap);
		}//end for
}//end MiniPrint

int main(void)
{
	
	
	unsigned int i= -5;

	UCSR0B = _BV(RXEN0) | _BV(TXEN0);
	UBRR0L = 51;

	

	while(1)
		{
			MiniPrintf("dec: %d < %d\n", i, i+1);
			MiniPrintf("hex:0x%x\n",i );
			i++;
			DelayMs(500);
		}//end while


}//end main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -