找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2359|回复: 0
收起左侧

求教我用VB上位机给单片机发一个数,其中整数部分4位,小数2位,最后在12864上显示...

[复制链接]
ID:94344 发表于 2015-11-1 20:18 | 显示全部楼层 |阅读模式
我用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;
                        }                                       
        //        }
        }        
}


        
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表