我用VB上位机给单片机发一个数,其中整数部分4位,小数2位,最后在12864上显示出来,现在出现个问题
我找了半天也找不出,就是第5位数字,大于3就出错,其他的都正常,如9299。99是正常的,但9399。99就不正常显示了,但用数组显示每个数是正常的,以下是程序
1.上位机
Private Sub Command5_Click()
If MSComm1.PortOpen = False Then
MsgBox "请打开串口"
Else
num = Val(Text1.Text) * 100
a(0) = Int(num Mod 10)
num = num \ 10
a(1) = Int(num Mod 10)
num = num \ 10
a(2) = Int(num Mod 10)
num = num \ 10
a(3) = Int(num Mod 10)
num = num \ 10
a(4) = Int(num Mod 10)
num = num \ 10
a(5) = Int(num Mod 10)
'a(1) = Val(Text2.Text)
'a(2) = Val(Text3.Text)
MSComm1.Output = a
'MSComm1.Output = (num Mod 256)
End If
End Sub
2.下位机
#include<reg52.h>
#include <intrins.h>
#include"main.h"
#include"delay.h"
#include "display.h"
//#include "bee.h"
#include "time.h"
void InitUart();
int flag=0;
long int ss=939999;
int k=0,qian,bai;
int num[8];
void main()
{
uchar i;
wela=0;
dula=0;
lcd_init();
InitUart();
lcd_pos(0,0); //设置显示位置为第一行的第1个字符
i = 0;
while(dis1 != '\0')
{ //显示字符
lcd_wdat(dis1);
i++;
}
while(1)
{
lcd_pos(2,0); //设置显示位置为第一行的第1个字符
lcd_wdat(dis2[ss/100000]);
lcd_wdat(dis2[(ss/10000)%10]);
lcd_wdat(dis2[(ss/1000)%10]);
lcd_wdat(dis2[(ss/100)%10]);
lcd_wdat(dis2[(ss/10)%10]);
lcd_wdat(dis2[ss%10]);
lcd_pos(1,0); //设置显示位置为第一行的第1个字符
lcd_wdat(dis2[num[0]/100]);
lcd_wdat(dis2[(num[0]/10)%10]);
lcd_wdat(dis2[num[0]%10]);
lcd_pos(1,2); //设置显示位置为第一行的第1个字符
lcd_wdat(dis2[num[1]/100]);
lcd_wdat(dis2[(num[1]/10)%10]);
lcd_wdat(dis2[num[1]%10]);
lcd_pos(1,4); //设置显示位置为第一行的第1个字符
lcd_wdat(dis2[num[2]/100]);
lcd_wdat(dis2[(num[2]/10)%10]);
lcd_wdat(dis2[num[2]%10]);
lcd_pos(1,6); //设置显示位置为第一行的第1个字符
lcd_wdat(dis2[num[3]/100]);
lcd_wdat(dis2[(num[3]/10)%10]);
lcd_wdat(dis2[num[3]%10]);
lcd_pos(3,0); //设置显示位置为第一行的第1个字符
lcd_wdat(dis2[num[4]/100]);
lcd_wdat(dis2[(num[4]/10)%10]);
lcd_wdat(dis2[num[4]%10]);
lcd_pos(3,2); //设置显示位置为第一行的第1个字符
lcd_wdat(dis2[num[5]/100]);
lcd_wdat(dis2[(num[5]/10)%10]);
lcd_wdat(dis2[num[5]%10]);
delay(250);
}
}
void InitUart()
{
TMOD = 0x20; // 高4位(定时器1)用于串口,低4位(定时器0)用于超声波计时
SCON = 0x50;
TH1 = 0xFD; // 波特率 9600
TL1 = 0xFD;
EA = 1; // 开启总中断
ES = 1; // 允许串口中断
TR1 = 1; // 开启定时器1
}
void Inter() interrupt 4
{
if(RI==1)
{
RI=0;
/* if(SBUF == 0x01)
{
P1 =0x00;
ss--;
}
else if(SBUF == 0x02)
{
P1 = 0xff;
ss++;
}
else
{ */
num[k]=SBUF;
k++;
if(k==6)
{
k=0;
ss=num[0]+num[1]*10+ num[2]*100+num[3]*1000+num[4]*10000+num[5]*100000;
ss=ss/10000;
}
// }
}
}
|