微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 接收的过程中,接收过去的时候数据有接收到,但是就是...

接收的过程中,接收过去的时候数据有接收到,但是就是...

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];
//用来存放要显示的8位数的值
unsigned char buffer[5];//定义接收缓冲区
//--声明全局函数--//
void DigDisplay();//动态显示函数
void UsartConfiguration();
void main()
{
unsigned char i;
unsigned int a;
UsartConfiguration();
while(1)
{  
    for(i=0;i<5;i++)
   {
           REN = 1;//接收允许
        while(RI==0);
        buffer[i]=SBUF;
        RI = 0;
   }
}
        DisplayData[1] = DIG_CODE[buffer[0]];
        DisplayData[2] = DIG_CODE[buffer[1]];
        DisplayData[3] = DIG_CODE[buffer[2]]|0x80;
        DisplayData[4] = DIG_CODE[buffer[3]];
        DisplayData[5] = DIG_CODE[buffer[4]];
    DigDisplay();
}
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
TR1=1; //打开计数器
}
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
    case(0):
                LSA=0;LSB=0;LSC=0; break;//显示第0位
        case(1):
                LSA=1;LSB=0;LSC=0; break;//显示第1位
        case(2):
                LSA=0;LSB=1;LSC=0; break;//显示第2位
    case(3):
             LSA=1;LSB=1;LSC=0; break;//显示第3位
        case(4):
                LSA=0;LSB=0;LSC=1; break;//显示第4位
        case(5):
           LSA=1;LSB=0;LSC=1; break;//显示第5位
        case(6):
                LSA=0;LSB=1;LSC=1; break;//显示第6位
        case(7):
                LSA=1;LSB=1;LSC=1; break;//显示第7位                       
}
GPIO_DIG=DisplayData[i];//发送段码
j=10; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00;//消隐
}
}

就是什么啊?让大家猜你要说什么?

发现俩问题:
P0口作为普通IO口用时,需要接上拉电阻,接了没?
j=10; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00;//消隐
这段代码的延时也就几十微秒,这么短的时间,你的眼睛能看到发光吗?

unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
是17?

对的,我刚又去查了一下是没错的,请问有什么不对的吗?望指出

在数码管上显示不出来

你用的数码管是共阴还是共阳的?

我记得好像是共阴的没错

检查数码管代码以及数码管的管教是否接错!

嗯,好的十分谢谢

switch(i) //位选,选择点亮的数码管,

位选注意加延时呢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top