搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 2014-5-27 17:07:07 | 显示全部楼层 |阅读模式
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);
}
                 

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-5-27 17:11:54 | 显示全部楼层
10进制和16进制的问题,显示数据转换10净值

出0入0汤圆

发表于 2014-5-27 17:15:24 | 显示全部楼层
那是因為您接收的時候是16進制值
然後您處理上您是用10進制處理方式處理
也就是說您串口助手看到10是16進制(等於10進制的16)
當然接收時顯示就是16

出0入0汤圆

发表于 2014-5-27 17:41:00 | 显示全部楼层
如果我想法沒錯
您可以將數值轉換改成
                a =  dat/256;                             //百位                        
                b = (dat%256)/16;                                     //十位   
                c = (dat%256)%16;                                                 //个位     
這樣您應該會看到串口助手跟您顯示的是一樣的

如有錯誤請多指教!!

出130入20汤圆

发表于 2014-5-27 17:52:02 | 显示全部楼层
楼上同胞正解

出0入0汤圆

 楼主| 发表于 2014-5-28 19:20:41 | 显示全部楼层
谢谢各位大神
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 03:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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