📄 print.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 + -