疑问代码:(k为unsigned char型)
处理结果:
提出疑问:为什么sprintf函数无法正常执行(没有任何报错)
所有代码:
```c++
#include "reg52.h"
#include "stdio.h"
#include "onewire.h"
#define u8 unsigned char
#define u16 unsigned int
code unsigned char shownum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
u8 COD[8],PSI,COT[10];
u16 seg_delay;
void Timer0_Init(void);
void SEG_Proc();
void main()
{
Timer0_Init();
while(1)
{
SEG_Proc();
}
}
/*********数码管*************/
/*
将字符串转化成数码管代码
*/
void SEG_TSL(u8 *input,u8 *output)
{
u8 i=0,j=0,k=0;
u8 *s_temp=0;
for(i=0;i<8;i++,j++)
{
for(k=0;k<9;k++) //问题所在处
{
sprintf(s_temp,"%u",(unsigned int)k);
if(input[j] == *s_temp)
{
output[i] = shownum[k];
break;
}
}
if(input[j+1] == '.')
{
output[i] |= 0x80;
j++;
}
}
}
/*
数码管显示函数
P22,P23,P24协助译码器控制位选,其中P22为最低位
*/
void SEG_Show(u8 COD,u8 PSI)
{
//消影
P0 = 0x00;
//位选
P2 = P2 & 0xe3 | (PSI<<2);
//段选
P0 = COD;
}
/***************定时器***************************/
void Timer0_Init(void) //1毫秒@12MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
//开启中断
EA = 1;
ET0 = 1;
}
void Timer0_IT() interrupt 1
{
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
if(seg_delay++ == 300)seg_delay = 0;
SEG_Show(COD[PSI],PSI);
if(PSI++ == 8)PSI = 0;
}
/************************************************/
void SEG_Proc()
{
float seg_temp;
if(seg_delay)return;
seg_delay = 1;
Convert_T();
seg_temp = rd_temperature()*0.0625;
sprintf(COT," %2.4f",seg_temp);
SEG_TSL(COT,COD);
}