[51单片机] 数码管动态扫描显示乱码程序出啥问题了?

[复制链接]
3417|15
 楼主| 弹弓 发表于 2014-2-18 18:03 | 显示全部楼层 |阅读模式
#include
unsigned char table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char table2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
sbit weixuan=P2^3;//位锁存
sbit duanxuan=P2^2;//段锁存
void delay(unsigned char a)
{
   while(a--);
}
void main()
{
   unsigned char i;
   while(1)
   {
   for(i=0;i<8;i++)
   {
           weixuan=1;
           P0=table2[i];
           weixuan=0;
           duanxuan=1;
           P0=table1[i];
           duanxuan=0;
           delay(200);
   }
   }
}
嵌入式云终端 发表于 2014-2-18 21:20 | 显示全部楼层
好多年没用动态扫描了,帮你顶替下,数码管显示和键盘管理的芯片也就3毛多,我们一般用天薇的芯片
 楼主| 弹弓 发表于 2014-2-22 16:41 | 显示全部楼层
嵌入式云终端 发表于 2014-2-18 21:20
好多年没用动态扫描了,帮你顶替下,数码管显示和键盘管理的芯片也就3毛多,我们一般用天薇的芯片 ...

谢谢你。刚开始学单片机没多久。所以从最基本学起。
youluo235 发表于 2014-2-22 17:16 | 显示全部楼层
显示不是之前设计好的?是不是数组部分没有对应好。另外最好自己检查。
ningling_21 发表于 2014-2-22 17:50 | 显示全部楼层
把例程下载进去看看有没有问题...
 楼主| 弹弓 发表于 2014-2-22 18:46 | 显示全部楼层
youluo235 发表于 2014-2-22 17:16
显示不是之前设计好的?是不是数组部分没有对应好。另外最好自己检查。

这个是自己写的。因为我的板子是独立的。可以跳线。我后来把只把这些程序的位选和段选的引脚换了,以及把P0换为P1.就能准确显示了。我一开始以为自己跳线跳错了。试了很多次都一样。
 楼主| 弹弓 发表于 2014-2-22 18:48 | 显示全部楼层
ningling_21 发表于 2014-2-22 17:50
把例程下载进去看看有没有问题...

试过,也是乱码。以前不是这样的。后来我又写过。端口换了,就能正确显示了。如下:
#include<reg52.h>
unsigned char table_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char table_w[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
sbit wei=P2^0;
sbit duan=P2^1;

void delay(unsigned int a)
{
        while(a--);
}

void main()
{
        unsigned char i;
    for(i=0;i<8;i++)
        {
                wei=1;
                P1=table_w;
                wei=0;
               
                duan=1;
                P1=table_d;
                duan=0;
                delay(300);       
        }
       
               
}
youluo235 发表于 2014-2-22 22:27 | 显示全部楼层
弹弓 发表于 2014-2-22 18:46
这个是自己写的。因为我的板子是独立的。可以跳线。我后来把只把这些程序的位选和段选的引脚换了,以及把 ...

把P0换为P1.就能准确显示了?这是不是和P0口需要上啦电阻有关系。是不是你的没上啦。因为51那个口需要上啦才能正常用的
 楼主| 弹弓 发表于 2014-2-22 23:16 | 显示全部楼层
youluo235 发表于 2014-2-22 22:27
把P0换为P1.就能准确显示了?这是不是和P0口需要上啦电阻有关系。是不是你的没上啦。因为51那个口需要上 ...

板子已经有焊上上拉电阻了。它有显示,只不过是显示乱码。
ningling_21 发表于 2014-2-23 09:05 | 显示全部楼层
P1=table_d;

这样编译能通过吗?
youluo235 发表于 2014-2-23 09:21 | 显示全部楼层
弹弓 发表于 2014-2-22 23:16
板子已经有焊上上拉电阻了。它有显示,只不过是显示乱码。

P1就不乱码了。P0就是乱码,这什么逻辑。估计是你单片机的P0口换了。换个51插上去看看
zhimagod 发表于 2014-2-23 09:27 | 显示全部楼层
1、你的电路是怎么连接的?为什么可以使用同一个端口传输位信号和段信号?除了单片机还用了哪些芯片?比如595?
2、看看你的P0除了连接LED外还连接了什么?
51DPJLT 发表于 2014-2-23 10:09 | 显示全部楼层
总是感觉怪怪的,段选实现数码管的选择,位选实现数据传输,最好能将电路连接图画一下,你加了锁存器了吗????好事多磨,对你有好处,加油!!!!
 楼主| 弹弓 发表于 2014-2-23 12:56 | 显示全部楼层
ningling_21 发表于 2014-2-23 09:05
P1=table_d;

这样编译能通过吗?

呃,看得很仔细。这个是我的失误,编译的时候是table_d的。可能是复制的时候不小心。谢谢你
 楼主| 弹弓 发表于 2014-2-23 12:57 | 显示全部楼层
ningling_21 发表于 2014-2-23 09:05
P1=table_d;

这样编译能通过吗?

这里不能显示那个符号
申继鹏 发表于 2014-2-28 20:13 | 显示全部楼层
你的是八位数码管要显示1-9?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

62

帖子

0

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