找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51单片机的数码管显示程序调试的一些问题

查看数: 2325 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-4-18 20:08

正文摘要:

这是关于串口通信的一个演示程序,功能是通过计算机发送数到单片机以数码管范围是(0-65535)的形式显示,在演示过程中发现一到 32767也就是发送7fff之后的数据时数码管乱码 这是7fff数据的调试变量表 ...

回复

ID:907979 发表于 2021-4-19 14:26
wulin 发表于 2021-4-19 07:50
数据类型使用不当会发生错误,给你改了,仔细对比就知道哪里错。

谢谢哥,我这就对比调试一下
ID:213173 发表于 2021-4-19 07:50

数据类型使用不当会发生错误,给你改了,仔细对比就知道哪里错。
  1. #include <reg52.h>

  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar aa,bb;
  5. uint  num;

  6. //定义数组存储数码管码值
  7. uchar code table[]={
  8.         0x3f,0x06,0x5b,0x4f,
  9.         0x66,0x6d,0x7d,0x07,
  10.         0x7f,0x6f};
  11. uchar arr[2];

  12. //配置管脚
  13. sbit dul=P2^6;
  14. sbit wel=P2^7;

  15. void delay(uint x);
  16. void UART_Init();
  17. void display();
  18.       
  19. //定义延时函数
  20. void delay(uint x)
  21. {
  22.         uint a,b;
  23.         for(a=0;a<x;a++)
  24.                 for(b=0;b<110;b++);
  25. }
  26.       
  27. void main()
  28. {
  29.         UART_Init();
  30.         while(1)
  31.         {
  32.                 display();
  33.         }
  34. }

  35. void UART_Init()
  36. {
  37.         TMOD=0x20;  //定时器1设置位 8位自动重载计数器
  38.         TH1 =0xfd;  //设置波特率为9600
  39.         TL1 =0xfd;
  40.         SM0 = 0;
  41.         SM1 = 1; //串口工作方式1,为10位数据异步收发器
  42.         REN = 1;//允许接收
  43.         EA = 1;
  44.         ES = 1;  //把串口中断打开
  45.         TR1= 1;
  46.         aa=0;
  47. }

  48. void UART() interrupt 4
  49. {
  50.         RI=0;
  51.         arr[aa]=SBUF;       
  52.         aa++;
  53.         if(aa==2)
  54.         {
  55.                 aa=0;
  56.                 num=arr[0]<<8|arr[1];      
  57.         }
  58. }

  59. void display()
  60. {
  61.         P0=0x00;//段消隐
  62.         dul=1;
  63.         dul=0;
  64.         switch(bb)
  65.         {               
  66.                 case 0:
  67.                 P0=0xfe;
  68.                 wel=1;       
  69.                 wel=0;
  70.                 P0=table[0];
  71.                 dul=1;
  72.                 dul=0;
  73.                 break;
  74.        
  75.                 case 1:
  76.                 P0=0xfd;
  77.                 wel=1;
  78.                 wel=0;
  79.                 P0=table[num/10000%10];
  80.                 dul=1;
  81.                 dul=0;
  82.                 break;
  83.        
  84.                 case 2:
  85.                 P0=0xfb;
  86.                 wel=1;
  87.                 wel=0;
  88.                 P0=table[num/1000%10];
  89.                 dul=1;
  90.                 dul=0;
  91.                 break;

  92.                 case 3:       
  93.                 P0=0xf7;
  94.                 wel=1;
  95.                 wel=0;
  96.                 P0=table[num/100%10];
  97.                 dul=1;
  98.                 dul=0;
  99.                 break;
  100.        
  101.                 case 4:
  102.                 P0=0xef;
  103.                 wel=1;
  104.                 wel=0;
  105.                 P0=table[num/10%10];
  106.                 dul=1;
  107.                 dul=0;
  108.                 break;
  109.        
  110.                 case 5:
  111.                 P0=0xdf;
  112.                 wel=1;
  113.                 wel=0;
  114.                 P0=table[num%10];
  115.                 dul=1;
  116.                 dul=0;
  117.                 break;
  118.         }
  119.         delay(1);
  120.         bb++;
  121.         if(bb==6)
  122.                 bb=0;
  123. }
复制代码
ID:814525 发表于 2021-4-18 23:16
#define uchar unsigned char;
#define uint  unsigned int ;
宏定义错误,后面;号去掉。
ID:907979 发表于 2021-4-18 22:27
有点懵了

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

Powered by 单片机教程网

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