标题: 串口通信数码管显示 [打印本页]

作者: captainiron    时间: 2016-5-8 22:47
标题: 串口通信数码管显示
串口调试助手发送数据,四位数码管二进制显示,发送5显示0101,发送15还是显示0101,十位为什么无效?搞了半天搞不懂求教
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
void UART_RECEIVE(void)        ;
void Delay5ms();
void display() ;
void CONVER();
uchar data TEMP;
uchar data dbuf[8];//四个数码管
uchar code segta[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
main()
{
TMOD=0x20;
TL1=0xFD;
TH1=0xFD;
PCON=0x00;
SCON=0x50;
EA=1;
ES=1;
TR1=1;
while (1)
display();
}
void display()
{
uchar data i,rl;
rl=0xfe;
for(i=0;i<4;i++)
{
P1=rl;
P0=segta[dbuf[i]];         //p0口传输段码值;
Delay5ms();
rl=_crol_(rl,1);
P0=0xFF;                          //清零段码值
if (i==3)rl=0Xfe;  //4个数码管,P1口低四位循环
}
}
void UART_RECEIVE (void) interrupt 4 using 2
{
RI=0;
TEMP=SBUF;
CONVER();
}
void CONVER()
{
uchar i,j,k;
j=TEMP;
for(i=0;i<8;i++)
{
k=j&0x01;  //与二进制0001相与
if(k==0)dbuf[i]=0;
else dbuf[i]=1;
j>>=1;     //右移
}
}
void Delay5ms()
{
unsigned char j,k;
for(j=10;j>0;j--)
for(k=250;k>0;k--);
}



作者: captainiron    时间: 2016-5-9 15:22
懂了见笑了。
单片机内部处理的是ASCII值,15表示为0011 0001  0011 0101 而5表示为0011 0101,SBUF位8位寄存器,我只有四位数码管,所以每次只能看到低四位。15表示为0011 0001 0011 0101,共16位分两次发送,高位1的后四位因为动态显示的原因看不到。应该是这样吧
作者: captainiron    时间: 2016-5-9 15:28
懂了见笑了,
单片机内部发送的是ACSII值15表示为00110001 00110101而5表示为00110101。SBUF为8位寄存器,一次发送8位数据,我只有四位数码管,所以只能看到低四位0101。
15的高位后四位因为动态显示的原因以及频率的原因看不到。应该是这样吧
作者: captainiron    时间: 2016-5-9 15:30
审核好麻烦啊
作者: admin    时间: 2016-5-10 22:25
就是这个原因 是个小问题,我以前也遇到过
作者: captainiron    时间: 2016-5-12 12:39
admin 发表于 2016-5-10 22:25
就是这个原因 是个小问题,我以前也遇到过

哈哈哈还需要继续学习




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1