标题: 单片机数码管显示程序 [打印本页]

作者: lx80072    时间: 2019-7-3 22:25
标题: 单片机数码管显示程序
设计一个带有控制功能脉冲计数器系统,被计数脉冲由T1(P3.5)输入,所记录的脉冲数以十进制形式在数码管显示(至少应可记录256个脉冲);1个点动开关控制是否允许计数(按1次允许,再按1次禁止。再按又允许。。。。),1个点动开关作为外部脉冲输入,不启动计数时,数码管显示6位学号(在6个数码管显示),启动计数后数码管显示计数个数(在最右侧三个数码管上显示)。
系统增加脉冲发生器功能,由T0产生周期为2s的方波,由P3.0口输出到LED0,用发光二极管显示方波信号;

单片机程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. charxuehao[]={0x7d,0x6d,0x3f,0x4f,0x07,0x06};    //这里顺序分别是4 5 6 3 7 1(按照需要自己改)
  4. code unsigned char LEDMAP[] = {  // 八段管显示码
  5. 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  6. 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71    //这里是从1~f(16进制)
  7. };
  8. sbit p3_0=P3^0;
  9. char t=0;
  10. void delay(char j)
  11. {
  12.          chari;
  13.          for(i=0;i<125;i++)
  14.          for(;j>0;j--);
  15. }
  16. void main()
  17. {
  18.          charled,a,b,c,count;
  19.          TMOD=0x51;    //这里是T1计数,T0定时,如果这里改了,那么后边的TH1,TH0等等都得改一下,相信大家应该都会!
  20.          EA=1;
  21.          ET0=1;
  22.          ET1=1;
  23.          TR1=0;
  24.          TR0=1;
  25.          IT0=1;
  26.          IT1=1;
  27.          EX0=1;
  28.          EX1=1;
  29.          TH1=TL1=0;
  30.          TH0=3c;
  31.          TL0=b0;
  32.          p3_0=1;
  33.          while(1)
  34.          {
  35.                   if(TR1==0)
  36.                   {
  37.                                      P2=0x20;
  38.                                     for(led=0;led<6;led++)
  39.                                     {                        
  40.                                              P1=xuehao[led];      
  41.                                              delay(30);
  42.                                              P2>>=1;
  43.                                              
  44.                                     }
  45.                   }
  46.                   else if(TR1==1)
  47.                   {                        
  48.                        count=TL1;
  49.                         c=count/100;
  50.                        b=(count%100)/10;
  51.                      a=count%10;
  52.                            P2=0x08;
  53.                       P1= LEDMAP[c];
  54.                            delay(300);
  55.                            P2=0x10;
  56.                      P1= LEDMAP[ b];
  57.                            delay(300);
  58.                            P2=0x20;
  59.                      P1= LEDMAP[a];
  60.                            delay(300);
  61.                   }
  62.          }
  63. }
  64. void key()interrupt 0
  65. {
  66.          TR1=!TR1;
  67.          if(TR1==0)
  68.          TL1=0;
  69. }
  70. void key2()interrupt 2
  71. {
  72.          TR0=!TR0;
  73.          if(TR0==0)
  74.          p3_0=0;
  75. }  
  76. void time()interrupt 1
  77. {
  78.          TH0=3c;
  79.          TL0=b0;
  80.          t++;
  81.          if(t==20)
  82.          {
  83.                   p3_0=!p3_0;
  84.                   t=0;
  85.          }
  86. }
复制代码



作者: admin    时间: 2019-7-3 23:20
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)




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