求助帖: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);
}
10进制和16进制的问题,显示数据转换10净值
那是因為您接收的時候是16進制值
然後您處理上您是用10進制處理方式處理
也就是說您串口助手看到10是16進制(等於10進制的16)
當然接收時顯示就是16 如果我想法沒錯
您可以將數值轉換改成
a =dat/256; //百位
b = (dat%256)/16; //十位
c = (dat%256)%16; //个位
這樣您應該會看到串口助手跟您顯示的是一樣的
如有錯誤請多指教!! 楼上同胞正解 谢谢各位大神
页:
[1]