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

2020-01-23 14:40发布

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[a];
    Delay_ms(2);
               
         BIT_1()                                 //        十位
        shuma_datpot=table2[b];
    Delay_ms(2);                                          
               
           BIT_2()                                // 个位
        shuma_datpot=table2[c];
    Delay_ms(2);
}
                 
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
xiaodao35
1楼-- · 2020-01-23 15:12
10进制和16进制的问题,显示数据转换10净值
昭仁
2楼-- · 2020-01-23 16:25
那是因為您接收的時候是16進制值
然後您處理上您是用10進制處理方式處理
也就是說您串口助手看到10是16進制(等於10進制的16)
當然接收時顯示就是16
昭仁
3楼-- · 2020-01-23 17:17
 精彩回答 2  元偷偷看……
shuiluo2
4楼-- · 2020-01-23 17:39
楼上同胞正解
暗杀无情
5楼-- · 2020-01-23 22:59
谢谢各位大神

一周热门 更多>