溫度顯示的時候數碼管數字顯示不對
#include<reg52.h>
unsigned char recv_flag;
unsigned char send_flag;
unsigned char c;
unsigned char num;
unsigned char table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char table2[]={0xc6,0x89};
unsigned char table3[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned char table4[];
unsigned char buf[15];
void dingshi(void)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
count++;
if(count==20)
{
count=0;
}
}
void delay(int n)
{
int i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
void uart_init()
{
// 第一步:配置波特率的產生
// 1、定時器T1的工作方式2
TMOD = 0x20;
// 2、裝初值:
TH1= TL1= 0xFD;//一般使用9600
// 3、啟動定時器
TR1 = 1;
// 第二步:串口工作方式確定
SM0 = 0;
SM1 = 1;
REN = 1;
//或者將以上三句話替換為 SCON = 0x50;
// 第三步:開啟總中斷
EA = 1;
// 第四步:開啟串口中斷
ES = 1;
}
void send_char(char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main()
{ float w,s;
uart_init();
while(1)
{
if(recv_flag == 1)
{
recv_flag = 0;
w=(buf[4]<<8)|buf[5];
s=(buf[10]<<8)|buf[11];
ES = 1;
}
P1=0xf7;
P0=table2[0];
delay(5);
P1 = 0xfb;
P0=table1[(int)(w*100/1000)];
delay(5);
P1 = 0xfd;
P0=table3[(int)(w*100/100)%10];
delay(5);
P1 = 0xfe;
P0=table1[(int)(w*100/10)%10];
delay(5);
dingshi(1)
// P1=0xf7;
// P0=table2[1];
// delay(5);
// P1 = 0xfb;
// P0=table1[(int)(s*100/1000)];
// delay(5);
// P1 = 0xfd;
// P0=table3[(int)(s*100/100)%10];
// delay(5);
// P1 = 0xfe;
// P0=table1[(int)(s*100/10)%10];
// delay(5);
}
}
void UART_ISR(void) interrupt 4 using 2
{
buf[num++] = SBUF;
RI = 0;
if(num == 15)
{
recv_flag = 1;
num = 0;
ES = 0;
}
} |