printf函数输出的值怎么不对(按键数码管显示)
时间:10-02
整理:3721RD
点击:
#include <AT89X51.H>
#include <stdio.h>
#define datepart P0
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;
sbit key6=P3^5;
sbit key7=P3^6;
sbit key8=P3^7;
sbit latchwei=P2^1;
sbit latchduan=P2^0;
unsigned char duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned tempdate[8];
void init_timer0(void);
void display(unsigned char firstbit,unsigned char Num);
void delay(unsigned int t);
unsigned char keyscan(void);
void init_uart();
//////////////主函数
void main(void)
{
unsigned char num,i,j;
unsigned char temp[8];
init_uart();
init_timer0();
while(1)
{
num=keyscan();
delay(20000);
if(num) //每个此语句下执行一次
{
if(i<8)
{
temp=duan[num];//把第一个数字放在第一位
tempdate[7-i]=temp;
}
i++;
if(i==9)
{
i=0;
for(j=0;j<8;j++)
{
tempdate[j]=0;
}
}
TI=1;
printf("the number is %d\n",num); ///////此句在串口通信上输出的值怎么是256.。1280.。而不是1.2.3 ?
TI=0;
}
}
}
/////////////////延时函数
void delay(unsigned int t)
{
for(;t!=0;t--);
}
void init_timer0()
{
TMOD|=0X01;
EA=1;
ET0=1;
TR0=1;
}
///////////////////定时器中断函数
void timer_int()interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display(0,8);
}
/////////////////按键扫描函数
unsigned char keyscan(void)
{
//1
if(!key1)
{
delay(1000);
if(!key1)
{
while(!key1);
return 1;
}
}
//2
else if(!key2)
{
delay(1000);
if(!key2)
{
while(!key2);
return 2;
}
}
//3
else if(!key3)
{
delay(100);
if(!key3)
{
while(!key3);
return 3;
}
}
//4
else if(!key4)
{
delay(1000);
if(!key4)
{
while(!key4);
return 4;
}
}
//5
else if(!key5)
{
delay(1000);
if(!key5)
{
while(!key5);
return 5;
}
}
//6
else if(!key6)
{
delay(1000);
if(!key6)
{
while(!key6);
return 6;
}
}
//7
else if(!key7)
{
delay(1000);
if(!key7)
{
while(!key7);
return 7;
}
}
//8
else if(!key8)
{
delay(1000);
if(!key8)
{
while(!key8);
return 8;
}
}
else
return 0;
}
////////////////////显示函数
void display(unsigned char firstbit,unsigned char Num)
{
static unsigned char i=0;
datepart=0;
latchduan=1;
latchduan=0;
datepart=wei[i+firstbit];
latchwei=1;
latchwei=0;
datepart=tempdate;
latchduan=1;
latchduan=0;
i++;
if(i==Num)
i=0;
}
////////串口初始化函数
void init_uart(void)
{
SCON=0x50;
TMOD|=0X20;
TH1=0XFD;
TL0=0XFD;
TR1=1;
}
