微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 利用动态扫描和定时器1在数码管上显示出从765432

利用动态扫描和定时器1在数码管上显示出从765432

时间:10-02 整理:3721RD 点击:
//利用动态扫描和定时器1在数码管上显示出从765432
//开始以1/10秒的速度往下递减直至765398并保持显示此数,
//与此同时利用定时器0以500MS速度进行流水灯从上至下移动,
//当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,
//3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。
//到此保持住。

  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit dula=P2^6;
  6. sbit wela=P2^7;

  7. uchar code table[]={
  8. 0x3f,0x06,0x5b,0x4f,
  9. 0x66,0x6d,0x7d,0x07,
  10. 0x7f,0x6f,0x77,0x7c,
  11. 0x39,0x5e,0x79,0x71,
  12. 0x76,0x79,0x38,0x3f,0};

  13. uchar a,m,n,i,bai,shi,ge,flag,flag1,flag2;
  14. uint num;

  15. void display(uchar aa,uchar bb,uchar cc,uchar bai, uchar shi, uchar ge);
  16. void initialization();
  17. void led();
  18. void delay(uint i);

  19. void main()                                           //主程序开始
  20. {
  21.         initialization();

  22.         while(1)
  23.         {        
  24.                 if(flag1!=1)
  25.                         display(7,6,5,bai,shi,ge);
  26.                 else
  27.                         display(16,17,18,18,19,20);        
  28.                
  29.         }                        
  30. }

  31. void delay(uint i)                                //延时子程序
  32. {
  33.         uint x,y;
  34.         for(x=i;x>0;x--)
  35.                 for(y=110;y>0;y--);
  36. }

  37. void timer0() interrupt 1           //定时器0中断
  38. {
  39.         TH0=(65536-46080)/256;
  40.         TL0=(65536-46080)%256;
  41.         n++;
  42.         if(flag!=1)
  43.         {
  44.                 if(n==10)
  45.                 {
  46.                         n=0;
  47.                         led();
  48.                 }
  49.         }
  50.         else
  51.         {
  52.                 if(n==60)
  53.                 {        
  54.                         n=0;
  55.                         TR0=0;
  56.                         flag1=1;
  57.                         P1=0xff;
  58.                 }
  59.                 else
  60.                 {
  61.                         if(n%4==0)
  62.                         P1=~P1;
  63.                 }
  64.         }                 
  65. }

  66. void timer1() interrupt 3           //定时器1中断
  67. {
  68.         TH1=(65536-46080)/256;
  69.         TL1=(65536-46080)%256;
  70.         m++;
  71.         if(m==2)
  72.         {
  73.                 m=0;
  74.                 bai=num/100;
  75.                 shi=num%100/10;
  76.                 ge=num%10;
  77.                 num--;
  78.                 if(num==397)
  79.                 {
  80.                         flag=1;
  81.                         n=0;
  82.                         //TR0=0;
  83.                         TR1=0;
  84.                         P1=0xff;
  85.                 }                        
  86.         }        
  87. }

  88. void led()                           //流水灯子程序
  89. {        
  90.         P1=a;
  91.         delay(5);
  92.         a=_cror_(a,1);        
  93. }

  94.                               
  95. void initialization()        //初始化子程序   
  96. {
  97.         dula=1;
  98.         P0=0;
  99.         dula=0;

  100.         a=0x7f;
  101.         n=0;
  102.         num=432;
  103.         flag=0;
  104.         flag1=0;
  105.         flag2=0;


  106.         TMOD=0x11;
  107.         TH0=(65536-46080)/256;
  108.         TL0=(65536-46080)%256;
  109.         TH1=(65536-46080)/256;
  110.         TL1=(65536-46080)%256;
  111.         EA=1;
  112.         ET0=1;
  113.         ET1=1;
  114.         TR0=1;
  115.         TR1=1;
  116. }

  117. void display(uchar aa,uchar bb,uchar cc,uchar bai, uchar shi, uchar ge)                           //显示子程序
  118. {
  119. //1                                                   
  120.         dula=1;
  121.         P0=table[aa];        
  122.         dula=0;
  123.         P0=0xff;
  124.         wela=1;
  125.         P0=0xfe;
  126.         wela=0;        
  127.         delay(5);                                                                                                        

  128. //2
  129.         dula=1;
  130.         P0=table[bb];
  131.         dula=0;
  132.         P0=0xff;
  133.         wela=1;
  134.         P0=0xfd;
  135.         wela=0;
  136.         delay(5);

  137. //3
  138.         dula=1;
  139.         P0=table[cc];
  140.         dula=0;
  141.         P0=0xff;
  142.         wela=1;
  143.         P0=0xfb;
  144.         wela=0;
  145.         delay(5);

  146. //4        

  147.         dula=1;
  148.         P0=table[bai];
  149.         dula=0;
  150.         P0=0xff;
  151.         wela=1;
  152.         P0=0xf7;
  153.         wela=0;
  154.         delay(5);

  155. //5
  156.         dula=1;
  157.         P0=table[shi];
  158.         dula=0;
  159.         P0=0xff;
  160.         wela=1;
  161.         P0=0xef;
  162.         wela=0;
  163.         delay(5);

  164. //6

  165.         dula=1;
  166.         P0=table[ge];
  167.         dula=0;
  168.         P0=0xff;
  169.         wela=1;
  170.         P0=0xdf;
  171.         wela=0;
  172.         delay(5);
  173.         
  174. }         

复制代码

强烈欢迎各位高手质证程序漏洞,提出更优方案。

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

网站地图

Top