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

📄 print.c

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 C
字号:
#include <stdio.h>
#include <absacc.h>
#include <stdarg.h>
#include <./Atmel/at89x52.h>
#include "source.h"	
unsigned char xsatouc(unsigned char cht){
	unsigned char xtemp;
	if((cht>='0')&&(cht<='9')){
		xtemp=cht-48;
	}
	else if((cht>='a')&&(cht<='f')){
		xtemp=cht-87;
	}
	else if((cht>='A')&&(cht<='F')){
		xtemp=cht-55;
	}
	else{
		xtemp=0xff;
	}
	return xtemp;
}
unsigned char xatouc(unsigned char *s){
	unsigned char xa=0;
	xa=xsatouc(s[0]);
	if(s[1]!=0){
		xa<<=4;
		xa|=xsatouc(s[1]);
	}
	return xa;
}
unsigned char *itos(unsigned int arg){
	static unsigned char buf[6];
	unsigned char i;
	unsigned int cvt;
	i=0;
	cvt=arg;
	while(1){
		i++;
		buf[i]=0x30+cvt%10;
		cvt /=10;
		if(cvt==0){
			break;
		}		
	}
	buf[0]=i;
	return buf;
}
unsigned char *itosx(unsigned int arg){
	static unsigned char buf[5];
	unsigned char i,n;
	unsigned int cvt;
	cvt=arg;
	for(i=1;i<5;i++){
		n=cvt%16;
		if(n<10){//0-9
			buf[i]=0x30+n;
		}
		else{//A-F
			buf[i]=55+n;//0x41+n-10
		}
		cvt >>=4;
	}
	buf[0]=4;
	return buf;
}
unsigned char *ctosx(unsigned char arg){
	static unsigned char buf[3];
	unsigned char i,n;
	unsigned char cvt;
	cvt=arg;
	for(i=1;i<3;i++){
		n=cvt%16;
		if(n<10){//0-9
			buf[i]=0x30+n;
		}
		else{//A-F
			buf[i]=55+n;//0x41+n-10
		}
		cvt >>=4;
	}
	buf[0]=2;
	return buf;
}
unsigned char *ltos(unsigned long arg){
	static unsigned char buf[11];
	unsigned char i;
	unsigned long cvt;
	i=0;
	cvt=arg;
	while(1){
		i++;
		buf[i]=0x30+cvt%10;
		cvt /=10;
		if(cvt==0){
			break;
		}		
	}
	buf[0]=i;
	return buf;
}
void putchark(unsigned char c){
	dst_buf[dst_head]=c; 
	dst_head ++;
	dst_head %=DST_LEN; 
}
void print_char(unsigned char c){
	dst_buf[dst_head]=c; 
	dst_head ++;
	dst_head %=DST_LEN; 
	TDBdata_over=0;
	TI=1;
}
unsigned char printk (const char *fmtstr   /* format string        */
            ,...){     /* additional arguments */
			unsigned char *p;
			unsigned char i;
			unsigned char *ptr;
			unsigned char arg_len;
			va_list num_ptr;
			static unsigned int argint;
			static unsigned char argchar;
			static unsigned long arglong;
			va_start(num_ptr,fmtstr);
			p=fmtstr;
			arg_len=0;
			while(*p!=0){
				if(*p=='%'){
					p++;
					if(*p=='d'){// %d
						argint=va_arg(num_ptr,int);
						arg_len++;
						ptr=itos(argint);
						for(i=ptr[0];i>=1;i--){
							putchark(ptr[i]);
						}
					}
					else if(*p=='c'){// %c
						argchar=va_arg(num_ptr,char);
						arg_len++;
						ptr=itos((unsigned int )argchar);
						for(i=ptr[0];i>=1;i--){
							putchark(ptr[i]);
						}
					}
					else if(*p=='x'){// %x unsigned int 
						argint=va_arg(num_ptr,int);
						arg_len++;
						ptr=itosx(argint);
						for(i=ptr[0];i>=1;i--){
							putchark(ptr[i]);
						}
					}
					else if(*p=='b'){// %bx unsigned char 
						p++;
						if(*p=='x'){
							argchar=va_arg(num_ptr,char);
							arg_len++;
							ptr=ctosx(argchar);
							for(i=ptr[0];i>=1;i--){
								putchark(ptr[i]);
							}
						}
					}
					else if(*p=='s'){//%s
						ptr=va_arg(num_ptr,char *);
						arg_len++;
						for(i=0;i<100;i++){//max string len is 100.
							if(*ptr=='\0'){
								break;
							}
							putchark(*ptr);
							ptr++;
						}
					}
					else if(*p=='l'){//%l
						arglong=va_arg(num_ptr,long);
						arg_len++;
						ptr=ltos(arglong);
						for(i=ptr[0];i>=1;i--){
							putchark(ptr[i]);
						}
					}
				}
				else if(*p=='\n'){
						putchark(0x0d);/* output CR  */
						putchark(*p);//0x0a
				}
				else{
					putchark(*p);
				}
				p++;
			}
			va_end(num_ptr);
			if(TDBdata_over){
				TDBdata_over=0;
				TI=1;
		   	}
			return arg_len;
}

⌨️ 快捷键说明

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