练习2

二、数码管显示原理及应用实现

1、数码管依次显示从0F,时间间隔为500ms

2、利用定时器1,定时60s让数码管第一位显示十位,第二位显示个位,到60s数码管关闭,让流水灯从左到右循环移动。

 

  1 #include<reg52.h>
  2 sbit du=P2^6;
  3 sbit we=P2^7;
  4 
  5 void delay(unsigned int x)
  6 {
  7   unsigned char i;
  8     while(x--)
  9     {
 10       for(i=0;i<120;i++);
 11     }
 12 
 13 
 14 }
 15 unsigned char leddata[]={ 
 16  
 17                 0x3F,  //"0"
 18                 0x06,  //"1"
 19                 0x5B,  //"2"
 20                 0x4F,  //"3"
 21                 0x66,  //"4"
 22                 0x6D,  //"5"
 23                 0x7D,  //"6"
 24                 0x07,  //"7"
 25                 0x7F,  //"8"
 26                 0x6F,  //"9"
 27                 0x77,  //"A"
 28                 0x7C,  //"B"
 29                 0x39,  //"C"
 30                 0x5E,  //"D"
 31                 0x79,  //"E"
 32                 0x71,  //"F"
 33                 0x76,  //"H"
 34                 0x38,  //"L"
 35                 0x37,  //"n"
 36                 0x3E,  //"u"
 37                 0x73,  //"P"
 38                 0x5C,  //"o"
 39                 0x40,  //"-"
 40                 0x00,  //??
 41                 0x00  //???
 42  
 43                          };
 44   unsigned char array[8]={
 45            0xFE,
 46            0xFD,
 47            0xFB,
 48            0xF7,
 49          0xEF,
 50            0xDF,
 51            0xBF,
 52            0x7F}; 
 53 void display(unsigned char i)
 54 {
 55     unsigned char shi,ge;
 56   ge=i%10;
 57     shi=i/10;
 58     
 59     we=1;
 60     P0=0xbb;
 61     we=0;
 62     
 63     du=1;
 64     P0=leddata[shi];
 65     du=0;
 66     delay(5);
 67     
 68     we=1;
 69     P0=0x77;
 70     we=0;
 71     
 72     du=1;
 73     P0=leddata[ge];
 74     du=0;
 75     delay(5);
 76     
 77 
 78 }
 79 void main()
 80 {
 81     unsigned char a,b;
 82     unsigned char i;
 83     
 84   TR1=1;
 85     TMOD=0x10;
 86     TH1=0x4b;
 87     TL1=0xfc;
 88     
 89     while(1)
 90     {
 91      if(TF1==1)
 92      {
 93      TH1=0x4b;
 94      TL1=0xfc;
 95      TF1=0;
 96      a++;
 97      
 98  }
 99      if(a==20)
100      {
101        a=0;
102          b++;
103      
104      }
105      display(b);
106    if(b==60)
107      {
108          TR1=0;
109          we=1;
110          P0=0xff;
111          we=0;
112          while(1){
113        for(i=0;i<8;i++)
114          {
115            P1=array[i];
116              delay(500);
117          
118          }
119       }
120          
121      }         
122     
123 
124     
125     }
126 
127 }

 

posted @ 2018-01-16 11:30  Justice-V  阅读(146)  评论(0)    收藏  举报