(结贴,仿真BUG)请教:用定时器作的动态数码管扫描总是.

2020-02-05 09:14发布

本帖最后由 renwocai 于 2012-5-30 11:33 编辑

比如4位共阳数码管,我希望它显示0123,结果只显示012,段码接P0口,位码接P2.0到P2.3.
程序如下:
  1. #include <at89x52.h>
  2. #define uchar unsigned char
  3. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. uchar i=0;
  5. sbit h4=P2^3;        //共阳,低电平有效
  6. sbit h3=P2^2;
  7. sbit h2=P2^1;
  8. sbit h1=P2^0;

  9. void timer0()interrupt 1
  10. {
  11.         TH0=(65536-10000)/256;
  12.         TL0=(65536-10000)%256;
  13.         switch(i)
  14.         {
  15.                 case 0:
  16.                 {
  17.                         h1=1;h2=0;h3=0;h4=0;P0=tab[0];
  18.                 };break;
  19.                 case 1:
  20.                 {
  21.                         h1=0;h2=1;h3=0;h4=0;P0=tab[1];
  22.                 };break;               
  23.                 case 2:
  24.                 {
  25.                         h1=0;h2=0;h3=1;h4=0;P0=tab[2];
  26.                 };break;               
  27.                 case 3:
  28.                 {
  29.                         h1=0;h2=0;h3=0;h4=1;P0=tab[3];
  30.                 };break;
  31.         }
  32.         i++;
  33.         if(i==4)
  34.         i=0;
  35. }
  36. main()
  37. {
  38.         TMOD=0X01;
  39.         EA=1;
  40.         ET0=1;
  41.         TH0=(65536-50000)/256;
  42.         TL0=(65536-50000)%256;
  43.         TR0=1;
  44.         while(1);
  45. }
复制代码结果如下:
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
renwocai
1楼-- · 2020-02-07 01:47
little_Monkey 发表于 2012-5-30 00:27
这个问题有多种方法可以解决,除了上面说明的外,还可以直接把if(i==4) i=0;放到switch前面,switch里面 ...

这样改了之后是这个结果:
renwocai
2楼-- · 2020-02-07 07:43
 精彩回答 2  元偷偷看……
renwocai
3楼-- · 2020-02-07 08:23
millwood0 发表于 2012-5-30 07:16
here is the waveform on the various pins.

As you can see, h4 did go high and the desired value (0xb ...

实物和仿真看到的效果是一样的。
millwood0
4楼-- · 2020-02-07 13:14
实物和仿真看到的效果是一样的。


that tells you a lot, doesn't it?
xiaobendan001
5楼-- · 2020-02-07 15:49
本帖最后由 xiaobendan001 于 2012-5-30 11:00 编辑

程序好像没有问题啊,不过俺习惯CASE后面不用{}的。
刚用KEIL模拟了一下,很好啊,i=0放哪儿都可以了。
renwocai
6楼-- · 2020-02-07 17:50
问题找到,正如millwood0所说,确定为仿真软件的BUG.现将程序和仿真打包上传。
事先我的实物因为接触不良,正好也是最后一位不亮,使我对这个程序产生了怀疑。仿真上的非门在实物上是三极管。

一周热门 更多>