单片机新手,请教个问题

[复制链接]
开启电子 发表于 2012-12-4 11:40 | 显示全部楼层
尝试独立出各位数码管的位选,简单讲就是每时每刻只有一个数码管选通。
ruoyuzhiji 发表于 2012-12-4 11:49 | 显示全部楼层
这要慢慢分析。
 楼主| tongshaoqiang 发表于 2012-12-4 22:29 | 显示全部楼层

哪位帮我看看啊,我觉得是否是硬件导致实现不了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tongshaoqiang 发表于 2012-12-5 09:03 | 显示全部楼层
上传了我写的代码,哪位帮忙看看,错误在哪
 楼主| tongshaoqiang 发表于 2012-12-5 10:55 | 显示全部楼层
没人帮看吗
panjiajun8201 发表于 2012-12-5 13:15 | 显示全部楼层
W_Controller 发表于 2012-12-3 17:20
数码管的这种显示称作动态扫描,原理就是利用人的视觉暂留现象;这个时间一般在5ms左右,人肉眼是感觉不 ...

在30ms  就感觉不会闪烁了

评分

参与人数 1威望 +4 收起 理由
tongshaoqiang + 4 很给力!

查看全部评分

W_Controller 发表于 2012-12-5 13:52 | 显示全部楼层
void display(uchar shi,uchar ge)
{   
     P0=0xff;
     P0=table[shi];
      pnp1=0;
      pnp2=1;
      delayms(5);  //显示十位
  
       P0=0xff;      
       P0=table[ge];
       pnp2=0;
       pnp1=1;
       delayms(5);  //显示ge位
}

评分

参与人数 1威望 +2 收起 理由
tongshaoqiang + 2 很给力!

查看全部评分

duhemayi 发表于 2012-12-5 14:16 | 显示全部楼层
两位应该是个动态显示,数码管没有消隐吧
阿毅1977 发表于 2012-12-5 14:40 | 显示全部楼层
正解在27楼。。
消隐和赋值顺序颠倒了。
ai大海ai 发表于 2012-12-5 20:20 | 显示全部楼层
首先不清楚你的是静态扫描还是动态扫描,刚学的拿开发板练习的大多应该是动态扫描,刚看你回复人家,你觉得十位的数应该跟各位一样。确实是这样的,但编程时你可以先选中个位数码管,然后让他显示个位数,一秒后然后熄灭个位,选中十位,然后让程序循环。看看实验现象。然后再更改两个数码管的间隔时间,我那那时候好像用5ms,你就会发现两个数码管都亮且显示不同的数。学习51建议你主要以郭天祥的那个视频为主,然后拿开发板多练习,书只是参考资料,不是你入门资料。

评分

参与人数 1威望 +4 收起 理由
tongshaoqiang + 4 赞一个!

查看全部评分

 楼主| tongshaoqiang 发表于 2012-12-5 21:09 | 显示全部楼层
阿毅1977 发表于 2012-12-5 14:40
正解在27楼。。
消隐和赋值顺序颠倒了。

正是原因所在!困扰我好几晚上了,我看的是郭天翔的教程,用的不是他的开发板。
还以为是我的开发板硬件实现不了呢。
 楼主| tongshaoqiang 发表于 2012-12-5 21:11 | 显示全部楼层
ai大海ai 发表于 2012-12-5 20:20
首先不清楚你的是静态扫描还是动态扫描,刚学的拿开发板练习的大多应该是动态扫描,刚看你回复人家,你觉得 ...

很中肯!谢谢指点!
vic.kong 发表于 2012-12-6 08:44 | 显示全部楼层
楼主的问题在于 不理解 数码管的动态扫描~~~~

所以上网搜一下动态扫描原理 就好~
江枫渔火 发表于 2012-12-6 18:21 | 显示全部楼层
语文也要深入学习~
代码看不懂~
不过百度了一下,原理是这样的:循环轮流显示每个数码管,每个数码管之间插入一个“全黑”的消隐,保证每个数码管两次显示之间的间隔不要低于每秒24次(理论值),实际值还更高,听人说要50次才能真正不觉闪。
in2004 发表于 2012-12-11 13:12 | 显示全部楼层
根据你的原理图,试一下这个程序,或许可以实现:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x0c,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar num1,num2,ge,shi;
sbit  pnp4=P1^3;
sbit  pnp3=P1^2;
void delay(uint xms)
{
   uint a,b;
   for(a=xms;a>0;a--)
      for(b=110;b>0;b--);
   }
void display()
{
   pnp4=1;
  P0=table[ge];
  pnp4=0;
  delay(5);
   
    pnp3=1;
    P0=table[shi];
    pnp3=0;
    delay(5);
}
void main()
{
  TMOD=0x01;
  EA=1;
  ET0=1;
TR0=1;
while(1)
{
  display();
     }
  }
void T0_time()interrupt 1
{
   TH0=(65536-45872)/256;
   TL0=(65536-45872)%256;
    num++;
    if(num==20)
    {
        num2++;
       num=0;
       if(num2==60)
         {
            num2=0;
              }
         }
        ge=num2%10;
       shi=num2/10;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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