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

[复制链接]
1189|4
 楼主| 15383646831 发表于 2018-1-19 21:29 | 显示全部楼层 |阅读模式
程序可以运行 但是数码管第一位一直显示8 其他位置数码管正常  
还有如何电脑输入十进制的数字数码管也显示十进制的数字,而不需要pc机输入十六进制的数字
求大神解答
  代码有不规范处望指正
  1. //  用的是普中科技的板子

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

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

  7. void delay(u16 i)                           // 延时
  8. {
  9.   while(i--);
  10. }

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

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

  15. void KeyDown()                                                                                 //数码管位选 动态扫描
  16. {
  17.    u8 i;
  18.    for(i=0;i<8;i++)
  19.    {
  20.       switch(i)
  21.           {
  22.             case(0):LSA=0;LSB=0;LSC=0;break;                          //74HC138芯片
  23.                   case(1):LSA=1;LSB=0;LSC=0;break;
  24.                 case(2):LSA=0;LSB=1;LSC=0;break;
  25.                 case(3):LSA=1;LSB=1;LSC=0;break;
  26.                 case(4):LSA=0;LSB=0;LSC=1;break;
  27.             case(5):LSA=1;LSB=0;LSC=1;break;
  28.                      
  29.           }
  30.             P0=Display[i];
  31.          delay(100);
  32.          P0=0x00;  
  33.    }
  34. }


  35. void Dispros()                                                         //数码管显示串口接受到的数据
  36. {
  37.   Display[0]=smgduan[Q/10];
  38.   Display[1]=smgduan[Q%10];
  39.   Display[2]=smgduan[N/10];
  40.   Display[3]=smgduan[N%10];
  41.   Display[4]=smgduan[M/10];
  42.   Display[5]=smgduan[M%10];                                                            //数码管        显示从右到左 个位数在右边第一位  所      以个位数为 Display[5]
  43. }
  44.    
  45.      
  46. void UsartInit()                                                  //串口的初始化
  47. {
  48.      TMOD=0X20;                                                          //设定定时器为工作方式 2
  49.          SCON=0X50;                                                          //设定串口工作方式位1
  50.          PCON=0X80;                                                          //频率倍频
  51.          TH1=0XF4;                                                          //频率
  52.          TL1=0XF4;
  53.          ES=1;                                                                 //打开串口中断
  54.          EA=1;                                                                 //打开总中断
  55.          TR1=1;                                                                 //打开定时器
  56. }

  57. void main()
  58. {
  59.    UsartInit();                                                   //串口初始化
  60.    while(1)
  61.    {
  62.              KeyDown();                                                //数码管显示
  63.           Dispros();
  64.    }
  65. }

  66. void Usart() interrupt 4                                //定时器中断
  67. {
  68.           M=SBUF;
  69.         if(M>=100)                              // 个位数和十位数M
  70.          {  
  71.                 N++;                                                  //百位数千位数N
  72.                 if(N>=100)                               
  73.                 {
  74.                   Q++;                                                  //万位数
  75.                 }
  76.          }
  77.      RI=0;                                                          //软件置零

  78. }




fengchenlong 发表于 2018-1-20 00:18 | 显示全部楼层
看不懂,帮顶
dirtwillfly 发表于 2018-1-20 07:28 来自手机 | 显示全部楼层
pc通过串口发送给单片机的字符,实际上是发送的ascii码。你在程序里加通过接受到的ascii码开决定显示的数字就可以了
dirtwillfly 发表于 2018-1-20 07:31 来自手机 | 显示全部楼层
关于第一位一直显示8,这个要根据电路图和代码来看。没用过普中的板子不了解它的电路。估计是显示程序有选通,这个板子应该带例程,也可以对比下例程
 楼主| 15383646831 发表于 2018-1-20 11:06 | 显示全部楼层
dirtwillfly 发表于 2018-1-20 07:31
关于第一位一直显示8,这个要根据电路图和代码来看。没用过普中的板子不了解它的电路。估计是显示程序有选 ...

谢了 我再检查看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

22

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部