找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5151|回复: 5
打印 上一主题 下一主题
收起左侧

串口通信数码管显示

[复制链接]
跳转到指定楼层
楼主
ID:99893 发表于 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--);
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:99893 发表于 2016-5-9 15:22 | 只看该作者
懂了见笑了。
单片机内部处理的是ASCII值,15表示为0011 0001  0011 0101 而5表示为0011 0101,SBUF位8位寄存器,我只有四位数码管,所以每次只能看到低四位。15表示为0011 0001 0011 0101,共16位分两次发送,高位1的后四位因为动态显示的原因看不到。应该是这样吧

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:99893 发表于 2016-5-9 15:28 | 只看该作者
懂了见笑了,
单片机内部发送的是ACSII值15表示为00110001 00110101而5表示为00110101。SBUF为8位寄存器,一次发送8位数据,我只有四位数码管,所以只能看到低四位0101。
15的高位后四位因为动态显示的原因以及频率的原因看不到。应该是这样吧
回复

使用道具 举报

地板
ID:99893 发表于 2016-5-9 15:30 | 只看该作者
审核好麻烦啊
回复

使用道具 举报

5#
ID:1 发表于 2016-5-10 22:25 | 只看该作者
就是这个原因 是个小问题,我以前也遇到过
回复

使用道具 举报

6#
ID:99893 发表于 2016-5-12 12:39 | 只看该作者
admin 发表于 2016-5-10 22:25
就是这个原因 是个小问题,我以前也遇到过

哈哈哈还需要继续学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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