找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机驱动的数码管显示异常,有乱码

[复制链接]
跳转到指定楼层
楼主


同样的数字,四位数码管正常,二位数码管有乱码,同时,显示的数字顺序与实际要显示的数字顺序不符合,单片机代码如下:

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5. uchar code table1[]={50,3,25};
  6. uchar code table2[]={55,20,3};
  7. uchar a=50,b=55,n=0,m=0;
  8. uchar j,k,c3,c2,c1,c0;
  9. uchar pp;

  10. void delay(unsigned int i)
  11. {
  12.         int j;
  13.         for(i;i>0;i--)
  14.                 for(j=20;j>0;j--);
  15. }

  16. void display(uchar x,uchar y,uchar o,uchar p)
  17. {
  18.         P2=0x01;
  19.         P0=table[p];
  20.         delay(10);
  21.       
  22.         P2=0x04;
  23.         P0=table[o];
  24.         delay(10);

  25.         P2=0x08;
  26.         P0=table[y];
  27.         delay(10);

  28.         P2=0x02;
  29.         P0=table[x];
  30.         delay(10);
  31. }

  32. void main()
  33. {
  34.         TMOD=0x01;                                                  
  35.         TH0=(65536-46080)/256;
  36.         TL0=(65536-46080)%256;
  37.         ET0=1;                        
  38.         EA=1;
  39.         TR0=1;                       
  40.         while(1)
  41.         {
  42.                 if(TF0==1)                       
  43.                 {
  44.                         TF0=0;
  45.                         pp++;
  46.                         TH0=(65536-46080)/256;
  47.                         TL0=(65536-46080)%256;
  48.                 }
  49.                 if(pp==20)
  50.                 {      
  51.                         pp=0;
  52.                         a--;
  53.                         b--;
  54.                         if(a==0)
  55.                         {
  56.                                 n++;
  57.                                 a=table1[n];                              
  58.                                 if(n==2)
  59.                                 {
  60.                                         n=-1;
  61.                                 }         
  62.                         }
  63.                         if(b==0)
  64.                         {                                                                       
  65.                                 m++;
  66.                                 b=table2[m];                       
  67.                                 if(m==2)
  68.                                 {
  69.                                         m=-1;
  70.                                 }
  71.                         }
  72.                 }
  73.                 c0=a%10;                 
  74.                 c1=a/10;
  75.                 c2=b%10;
  76.                 c3=b/10;
  77.                 display(c1,c0,c2,c3);
  78.         }
  79. }
复制代码





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

使用道具 举报

沙发
ID:96682 发表于 2018-6-13 22:25 | 只看该作者
选用不同类型的数码管显示出现乱码也正常,就算用相同的数码管显示相同内容,有时软件也可能出现一些小异常
回复

使用道具 举报

板凳
ID:129368 发表于 2018-6-14 01:49 | 只看该作者
显示的时候还原下引脚原来状态,俗称清屏。就好了。也就是在赋值端口显示后全部口置1.然后再显示下一位数。
回复

使用道具 举报

地板
ID:351586 发表于 2018-6-14 09:14 | 只看该作者
显示的时候还原下引脚原来状态,俗称清屏。就好了。也就是在赋值端口显示后全部口置1.然后再显示下一位数。
回复

使用道具 举报

5#
ID:351618 发表于 2018-6-14 09:43 | 只看该作者
显示下一组数字前,先把之前的数字清了。乱码这个现象就是视觉暂存
回复

使用道具 举报

6#
ID:234075 发表于 2018-6-14 10:11 | 只看该作者
楼主的程序写的天马行空,排序有点乱,我倒是撸了半天,82行为什么是“c1,c0,c2,c3”,而不是大家习惯的C0,C1,C2,C3 ?数码管显示的排序也是01H,04H,08H最后是02H,最后在4位的数码管上显示顺序应该是b的十位,a的十位,b的个位,a的个位,不知道这个是不是你想要的显示结果?两个两位数码管分别显示b的十位,a的十位和b的个位,a的个位;
至于为什么显示乱码,可能是P0口电流过大的原因,建议楼主在P0口和数码管位选中间也加上一个74HC593试试;
再问问楼主,为啥不写中断服务程序,而习惯用TF0的查询法
回复

使用道具 举报

7#
ID:350162 发表于 2018-6-15 08:59 | 只看该作者
zhb2004xp 发表于 2018-6-14 10:11
楼主的程序写的天马行空,排序有点乱,我倒是撸了半天,82行为什么是“c1,c0,c2,c3”,而不是大家习惯的C0, ...

初学者,正在努力,我想显示的其实是两个倒计时,顺序应该是a的十位,a的个位,b的十位,b的个位,上面的二位数码管a倒计时,下面那个b倒计时,图中四位数码管是正确的显示顺序,倒计时也是对的,但是如果程序按照我想的顺序写,结果顺序就是乱的,只有按上面代码里的这个错误的顺序,四位数码管才有正确的顺序。另外,我也试过加消影,就是在延时后加P0=0x00,或者P0=0xff,但是加前者,数码管只显示8和9,加后者只显示”9“左下角缺的一节,而如果加P2=0x00,就什么都不显示了。实在想不明白,所以请求各路大神帮帮忙。
回复

使用道具 举报

8#
ID:352342 发表于 2018-6-15 09:50 | 只看该作者

显示的时候还原下引脚原来状态,俗称清屏。就好了。也就是在赋值端口显示后全部口置1.然后再显示下一位数。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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