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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
然後您處理上您是用10進制處理方式處理
也就是說您串口助手看到10是16進制(等於10進制的16)
當然接收時顯示就是16
一周热门 更多>