标题: 为什么我的单片机数码管扫描不成功,实在找不出问题了,拜托大佬指点迷津 [打印本页]

作者: slckkk    时间: 2019-5-17 13:36
标题: 为什么我的单片机数码管扫描不成功,实在找不出问题了,拜托大佬指点迷津
  1. #include<reg52.h>
  2. sbit ENEND = P1^4;
  3. sbit ADDR0 = P1^0;
  4. sbit ADDR1 = P1^1;
  5. sbit ADDR2 = P1^2;
  6. sbit ADDR3 = P1^3;
  7. unsigned char code numtab[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
  8. unsigned char LedBuff[6]= {0};
  9. unsigned int cnt = 0;
  10. unsigned char i = 0;
  11. void main()
  12. {
  13.         unsigned long sec = 0;
  14.         ENEND = 0;
  15.         ADDR3 = 1;
  16.         P0 = 0xff;
  17.         TMOD = 0X01;
  18.         TH0 = 0xfc;
  19.         TL0 = 0x66;
  20.         TR0 = 1;
  21.         EA = 1;
  22.         ET0 = 1;
  23.         while(1)
  24.         {
  25.                 if (cnt == 1000)
  26.                 {  
  27.                 cnt = 0;
  28.             sec++;
  29.             if(sec>99)
  30.                         sec=0;
  31.             LedBuff[0] = sec%10;
  32.             LedBuff[1] = sec/10;
  33.                 }
  34.         }
  35. }
  36. /* 定时器0中断服务函数 控制位并显示对应的数值*/
  37. void Iterruptimer0() interrupt 1
  38. {
  39.         TH0 = 0XFC;
  40.         TL0 = 0X66;
  41.         cnt++;
  42.         P0 = 0XFF;
  43.         switch(i)
  44.         {
  45.                 case 0 : ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;i++;        P0 = numtab[LedBuff[0]];break;
  46.                 case 1 : ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;i=0; P0 = numtab[LedBuff[1]];break;      
  47.                 default : break;                              
  48.         }      
  49. }


复制代码



作者: zhanghyg    时间: 2019-5-18 15:15
图不对,P0口加上拉电阻,不应该用锁存芯片
作者: wulin    时间: 2019-5-18 21:55
根据经验,用PNP管做位码反相器仿真会失败,改成CD4069反相器就可以了。实物不会有这个问题。
作者: slckkk    时间: 2019-5-20 07:27
太感谢了
作者: slckkk    时间: 2019-5-20 07:28
wulin 发表于 2019-5-18 21:55
根据经验,用PNP管做位码反相器仿真会失败,改成CD4069反相器就可以了。实物不会有这个问题。

哦哦,好的,谢谢啦




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1