暗杀无情 发表于 2014-5-27 17:07:07

求助帖:51单片机发送数字

PC机发送给单片机一个数字,单片机接收并在数码管上显示。为什么0-9时能正常显示,10-19单片机就会自动加6.20-29就会自动加12.但是串口调试助手里显示的是正常的数字。下面是程序。菜鸟还请各位大神指点

#include<reg52.h>
#include"shuma.h"

sbit SHU_MA        = P0;                          //测试数码

typedef unsigned char uint8;
typedef unsigned int uint16;



unsigned char a,q=0;
void UART_init (void)                          //串口初始化
{
        SCON = 0x50;
        TMOD = 0X20;
        TH1= 0xFD;
        TL1= 0xFD;
        TR1= 1;
        //ES   = 1;
        //EA   = 1;

}


//************************************************
//延时函数
//******************

void delay500ms(void)   
{
    unsigned char a,b,c;
    for(c=122;c>0;c--)
      for(b=222;b>0;b--)
            for(a=7;a>0;a--);
    // if Keil,require use intrins.h
    //_nop_();                       
}
void Send_data(void )
{

        if(TI)
        {
                TI = 0;
                REN = 1; //关闭接收
        }
        if(RI)
        {
                RI = 0;
                q = SBUF;
                //q++;
                SBUF = q;
                   a = q;
                REN = 0;   //关闭发送

        }
}       



////////////////////////////////////////////////////////
///******************************主函数
///////////////////////////////////////////////////////


main()
{
        UART_init();
        while(1)
        {
          Send_data();
          Dis_Data(a);          //将发送的数据显示显示在数码管
        }

}       
   这是数码管显示的函数
void Dis_Data(unsigned int dat)
{
        unsigned int a,b,c;
       
       
                a =dat%1000/100;                           //百位                       
                b =dat%100/10;                                     //十位   
                c =dat%10;                                               //个位   
                       
       BIT_0()                               //        百位
        shuma_datpot=table2;
    Delay_ms(2);
               
       BIT_1()                               //        十位
        shuma_datpot=table2;
    Delay_ms(2);                                          
               
       BIT_2()                                // 个位
        shuma_datpot=table2;
    Delay_ms(2);
}
               

xiaodao35 发表于 2014-5-27 17:11:54

10进制和16进制的问题,显示数据转换10净值

昭仁 发表于 2014-5-27 17:15:24

那是因為您接收的時候是16進制值
然後您處理上您是用10進制處理方式處理
也就是說您串口助手看到10是16進制(等於10進制的16)
當然接收時顯示就是16

昭仁 发表于 2014-5-27 17:41:00

如果我想法沒錯
您可以將數值轉換改成
                a =dat/256;                           //百位                        
                b = (dat%256)/16;                                     //十位   
                c = (dat%256)%16;                                                 //个位   
這樣您應該會看到串口助手跟您顯示的是一樣的

如有錯誤請多指教!!

shuiluo2 发表于 2014-5-27 17:52:02

楼上同胞正解

暗杀无情 发表于 2014-5-28 19:20:41

谢谢各位大神
页: [1]
查看完整版本: 求助帖:51单片机发送数字