微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 郭天祥的TX-1C学习板有用过的吗?有问题求教

郭天祥的TX-1C学习板有用过的吗?有问题求教

时间:10-02 整理:3721RD 点击:

  1. //LED数码管操作
  2. //本章主要用数码管做计时器
  3. //0->3f ,1->06        ,2->
  4. #include<reg52.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit duanxuan=P2^6;        //段选锁存
  8. sbit weixuan=P2^7;           //位选锁存
  9. sbit D1=P0^0;
  10. uchar        code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  11. 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  12. uchar        code table2[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  13. uchar        count;
  14. uchar        a0,a1,a2,a3,a4,a5;
  15. bit flag2,flag3,flag4,flag5,flag6;
  16. void delay(uint);
  17. void main()
  18. {


  19.          weixuan=1;
  20.         P0=table2[5];
  21.         weixuan=0;

  22.         TMOD=0x01;
  23.         TH0=0x3c;
  24.         TL0=0xb0;

  25.         EA=1;
  26.         ET0=1;
  27.         TR0=1;


  28.         while(1)
  29.         {
  30.            //个位
  31.                 weixuan=1;
  32.                 P0=table2[0];
  33.                 weixuan=0;

  34.                 delay(1);

  35.                 duanxuan=1;
  36.                 P0=table1[a5];
  37.                 duanxuan=0;
  38.                 delay(1);
  39.                
  40.            //十位
  41.             if(flag2!=1)
  42.                 continue;
  43.                
  44.                 weixuan=1;
  45.                 P0=table2[1];
  46.                 weixuan=0;


  47.                 duanxuan=1;
  48.                 P0=table1[a4];
  49.                 duanxuan=0;
  50.                 delay(1);

  51.           //百位
  52.                   if(flag3!=1)
  53.                         continue;
  54.                  weixuan=1;
  55.                 P0=table2[2];
  56.                 weixuan=0;


  57.                 duanxuan=1;
  58.                 P0=table1[a3];
  59.                 duanxuan=0;
  60.                 delay(1);                 
  61.              //千位
  62.             if(flag4!=1)
  63.                         continue;
  64.                  weixuan=1;
  65.                 P0=table2[3];
  66.                 weixuan=0;


  67.                 duanxuan=1;
  68.                 P0=table1[a2];
  69.                 duanxuan=0;
  70.                 delay(1);
  71.   //万位
  72.               if(flag5!=1)
  73.                         continue;
  74.                   weixuan=1;
  75.                 P0=table2[4];
  76.                 weixuan=0;


  77.                 duanxuan=1;
  78.                 P0=table1[a1];
  79.                 duanxuan=0;
  80.                 delay(1);
  81.    //十万位
  82.               if(flag6!=1)
  83.                         continue;
  84.                 weixuan=1;
  85.                 P0=table2[5];
  86.                 weixuan=0;


  87.                 duanxuan=1;
  88.                 P0=table1[a0];
  89.                 duanxuan=0;
  90.                 delay(1);

  91.                
  92.          }
  93. }


  94. //10MS延时
  95. void delay(uint z)
  96. {
  97.          uint x,y;
  98.         for(y=0;y<z;y++)
  99.         {
  100.                 x=98;
  101.                 while(x--);
  102.         }
  103. }

  104. void time0() interrupt 1
  105. {
  106.           TH0=0x3c;
  107.          TL0=0xb0;
  108.           count++;
  109.          if(count==20)
  110.          {
  111.                  count=0;
  112.                 a5++;
  113.                 if(a5==10)
  114.                 {
  115.                         a5=0;
  116.                         a4++;
  117.                         flag2=1;        
  118.                 }
  119.                 if(a4==10)
  120.                 {
  121.                         a4=0;
  122.                         a3++;
  123.                         flag3=1;
  124.                 }
  125.                 if(a3==10)
  126.                 {
  127.                         a3=0;
  128.                         a2++;
  129.                         flag4=1;
  130.                 }
  131.                 if(a2==10)
  132.                 {
  133.                         a2=0;
  134.                         a1++;
  135.                         flag5=1;
  136.                 }
  137.                 if(a1==10)
  138.                 {
  139.                         a1=0;
  140.                         a0++;
  141.                         flag6=1;
  142.                 }
  143.                 if(a0==10)
  144.                 {
  145.                         a0=0;
  146.                         flag2=0;flag3=0;flag4=0;flag5=0;flag6=0;
  147.                 }
  148.                
  149.          }


  150. }

复制代码

程序是想实现用6个数码管按秒计数。先亮最低位的一个数码管,其他不亮,如果最后一个数码管加到10后,第二个数码管开始亮,依次类推。现在出现的问题是只有最后一个数码管亮时,前面某些数码管也会出现微微亮。大概加到20多时,就开始出现乱码了。求教问题出在哪里。
上一篇:家庭安全卫士
下一篇:纯化制备系统

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top