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

📄 main.c

📁 《AVR单片机GCC程序设计》
💻 C
字号:
/*
	格式化打印输出最小化实现测试程序
	文件名 :main.c
	硬  件 :CA-M8实验板
	时  钟 :外部4MHz
	
	2004-11-22
*/

#include <avr/io.h>
#include <stdio.h>		//使用va_list 等参数相关宏
#include <stdlib.h>		//itoa 声明
#include <avr/delay.h>

//延时一豪秒
void DelayMs(unsigned int t)
{
	unsigned int i;
	for(i=0;i<t;i++)
		_delay_loop_2(250 * 4);
}

//串行口写一字节
int usart_putchar(char c)
{
	if(c=='\n')
		usart_putchar('\r');
	loop_until_bit_is_set(UCSRA,UDRE);
	UDR=c;
	return 0;
}

//格式化输出函数
void miniprintf(char *fmt, ...) 
{ 
	va_list ap; //参数变量定义
	
	char strval[6]; 
	char *p; 
	int nval; 
	unsigned char i;
	
	va_start(ap, fmt); //设置第一个参数为fmt
	for(p = fmt; *p; p++) 
	{ 
		if (*p != '%') 
		{
			usart_putchar(*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; 
		} 
		i=0;
		for(i=0;strval[i];i++)
			usart_putchar(strval[i]);
	} 
	va_end(ap); //结束参数变量的使用
}
 
//测试主例程
int main(void)
{
	unsigned int i=-5;
	
	UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<<RXCIE)|(1<<TXCIE)|*/
	UBRRL=25;	//9600 baud 6MHz:38  4MHz:25	
	
	while(1)
	{
		miniprintf("dec:%d\n",i);
		miniprintf("hex:0x%x\n",i);
		i++;
		DelayMs(1000);
	}
}

⌨️ 快捷键说明

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