(结贴,仿真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. }
复制代码结果如下:
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
21条回答
elecfun
2020-02-06 18:59
#include <at89x52.h>
#define uchar unsigned char

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar i=0;

void
timer0() interrupt 1
{

    TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
   
    P2 = 0x01 << i;
    P0 = tab[i];
    if
(++i >= 4)
        i = 0;
}


void
main(void)
{

    TMOD = 0x01;
    EA   = 1;
    ET0  = 1;
    TH0  = (65536-10000)/256;
    TL0  = (65536-10000)%256;
    TR0  = 1;

    while
(1) ;
}


一周热门 更多>