打印

关于pc与51单片机 串口通信的问题 求大神解答

[复制链接]
979|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
15383646831|  楼主 | 2018-1-19 21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序可以运行 但是数码管第一位一直显示8 其他位置数码管正常  
还有如何电脑输入十进制的数字数码管也显示十进制的数字,而不需要pc机输入十六进制的数字
求大神解答
  代码有不规范处望指正
//  用的是普中科技的板子

#include<reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;

u8 M,N,Q;
u8 Display[6];

void delay(u16 i)                           // 延时
{
  while(i--);
}

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //数码管段选

sbit LSA=P2^2;                                                                //由三个IO口控制74HC138芯片来控制数码管的位选
sbit LSB=P2^3;
sbit LSC=P2^4;

void KeyDown()                                                                                 //数码管位选 动态扫描
{
   u8 i;
   for(i=0;i<8;i++)
   {
      switch(i)
          {
            case(0):LSA=0;LSB=0;LSC=0;break;                          //74HC138芯片
                  case(1):LSA=1;LSB=0;LSC=0;break;
                case(2):LSA=0;LSB=1;LSC=0;break;
                case(3):LSA=1;LSB=1;LSC=0;break;
                case(4):LSA=0;LSB=0;LSC=1;break;
            case(5):LSA=1;LSB=0;LSC=1;break;
                     
          }
            P0=Display[i];
         delay(100);
         P0=0x00;  
   }
}


void Dispros()                                                         //数码管显示串口接受到的数据
{
  Display[0]=smgduan[Q/10];
  Display[1]=smgduan[Q%10];
  Display[2]=smgduan[N/10];
  Display[3]=smgduan[N%10];
  Display[4]=smgduan[M/10];
  Display[5]=smgduan[M%10];                                                            //数码管        显示从右到左 个位数在右边第一位  所      以个位数为 Display[5]
}
   
     
void UsartInit()                                                  //串口的初始化
{
     TMOD=0X20;                                                          //设定定时器为工作方式 2
         SCON=0X50;                                                          //设定串口工作方式位1
         PCON=0X80;                                                          //频率倍频
         TH1=0XF4;                                                          //频率
         TL1=0XF4;
         ES=1;                                                                 //打开串口中断
         EA=1;                                                                 //打开总中断
         TR1=1;                                                                 //打开定时器
}

void main()
{
   UsartInit();                                                   //串口初始化
   while(1)
   {
             KeyDown();                                                //数码管显示
          Dispros();
   }
}

void Usart() interrupt 4                                //定时器中断
{
          M=SBUF;
        if(M>=100)                              // 个位数和十位数M
         {  
                N++;                                                  //百位数千位数N
                if(N>=100)                               
                {
                  Q++;                                                  //万位数
                }
         }
     RI=0;                                                          //软件置零

}




相关帖子

沙发
fengchenlong| | 2018-1-20 00:18 | 只看该作者
看不懂,帮顶

使用特权

评论回复
板凳
dirtwillfly| | 2018-1-20 07:28 | 只看该作者
pc通过串口发送给单片机的字符,实际上是发送的ascii码。你在程序里加通过接受到的ascii码开决定显示的数字就可以了

使用特权

评论回复
地板
dirtwillfly| | 2018-1-20 07:31 | 只看该作者
关于第一位一直显示8,这个要根据电路图和代码来看。没用过普中的板子不了解它的电路。估计是显示程序有选通,这个板子应该带例程,也可以对比下例程

使用特权

评论回复
5
15383646831|  楼主 | 2018-1-20 11:06 | 只看该作者
dirtwillfly 发表于 2018-1-20 07:31
关于第一位一直显示8,这个要根据电路图和代码来看。没用过普中的板子不了解它的电路。估计是显示程序有选 ...

谢了 我再检查看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

22

帖子

0

粉丝