发新帖我要提问
12
返回列表
打印

单片机新手,请教个问题

[复制链接]
楼主: tongshaoqiang
手机看帖
扫描二维码
随时随地手机跟帖
21
尝试独立出各位数码管的位选,简单讲就是每时每刻只有一个数码管选通。

使用特权

评论回复
22
ruoyuzhiji| | 2012-12-4 11:49 | 只看该作者
这要慢慢分析。

使用特权

评论回复
23
tongshaoqiang|  楼主 | 2012-12-4 22:29 | 只看该作者

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

使用特权

评论回复
24
tongshaoqiang|  楼主 | 2012-12-5 09:03 | 只看该作者
上传了我写的代码,哪位帮忙看看,错误在哪

使用特权

评论回复
25
tongshaoqiang|  楼主 | 2012-12-5 10:55 | 只看该作者
没人帮看吗

使用特权

评论回复
26
panjiajun8201| | 2012-12-5 13:15 | 只看该作者
W_Controller 发表于 2012-12-3 17:20
数码管的这种显示称作动态扫描,原理就是利用人的视觉暂留现象;这个时间一般在5ms左右,人肉眼是感觉不 ...

在30ms  就感觉不会闪烁了

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
tongshaoqiang + 4 很给力!
27
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 很给力!
28
duhemayi| | 2012-12-5 14:16 | 只看该作者
两位应该是个动态显示,数码管没有消隐吧

使用特权

评论回复
29
阿毅1977| | 2012-12-5 14:40 | 只看该作者
正解在27楼。。
消隐和赋值顺序颠倒了。

使用特权

评论回复
30
ai大海ai| | 2012-12-5 20:20 | 只看该作者
首先不清楚你的是静态扫描还是动态扫描,刚学的拿开发板练习的大多应该是动态扫描,刚看你回复人家,你觉得十位的数应该跟各位一样。确实是这样的,但编程时你可以先选中个位数码管,然后让他显示个位数,一秒后然后熄灭个位,选中十位,然后让程序循环。看看实验现象。然后再更改两个数码管的间隔时间,我那那时候好像用5ms,你就会发现两个数码管都亮且显示不同的数。学习51建议你主要以郭天祥的那个视频为主,然后拿开发板多练习,书只是参考资料,不是你入门资料。

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
tongshaoqiang + 4 赞一个!
31
tongshaoqiang|  楼主 | 2012-12-5 21:09 | 只看该作者
阿毅1977 发表于 2012-12-5 14:40
正解在27楼。。
消隐和赋值顺序颠倒了。

正是原因所在!困扰我好几晚上了,我看的是郭天翔的教程,用的不是他的开发板。
还以为是我的开发板硬件实现不了呢。

使用特权

评论回复
32
tongshaoqiang|  楼主 | 2012-12-5 21:11 | 只看该作者
ai大海ai 发表于 2012-12-5 20:20
首先不清楚你的是静态扫描还是动态扫描,刚学的拿开发板练习的大多应该是动态扫描,刚看你回复人家,你觉得 ...

很中肯!谢谢指点!

使用特权

评论回复
33
vic.kong| | 2012-12-6 08:44 | 只看该作者
楼主的问题在于 不理解 数码管的动态扫描~~~~

所以上网搜一下动态扫描原理 就好~

使用特权

评论回复
34
江枫渔火| | 2012-12-6 18:21 | 只看该作者
语文也要深入学习~
代码看不懂~
不过百度了一下,原理是这样的:循环轮流显示每个数码管,每个数码管之间插入一个“全黑”的消隐,保证每个数码管两次显示之间的间隔不要低于每秒24次(理论值),实际值还更高,听人说要50次才能真正不觉闪。

使用特权

评论回复
35
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;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则