B站普中51单片机代码自敲打(一)

静态数码管

 1 #include <REGX52.H>
 2 
 3 typedef unsigned char u8;
 4 typedef unsigned int u16;
 5 
 6 u8 code smgduan[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,        //共阴码表
 7     0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
 8 
 9 void delay(u16 i)
10 {
11     while(i--);
12 }
13 void main()
14 {
15     u16 i = 0;
16     while(1)
17     {
18         for(i = 0; i < 16; i++)
19         {
20             P0 = ~smgduan[i];
21             delay(50000);
22         }
23     }
24 }

动态数码管

 1 #include <REGX52.H>
 2 #include <INTRINS.H>
 3 
 4 typedef unsigned int u16;
 5 typedef unsigned char u8;
 6 
 7 
 8 sbit LSA = P2^2;
 9 sbit LSB = P2^3;
10 sbit LSC = P2^4;
11 
12 u8 code smgduan[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
13                         0x77,0x7C,0x39,0x5E,0x79,0x71};
14 
15 void delay(u16 i)
16 {
17     while(i--);
18 }
19     
20 void DigDisplay()
21 {
22     u8 i;
23     for(i = 0; i < 8; i++)
24     {
25         switch(i)
26         {
27             case 0:
28                 LSA = 0;
29                 LSB = 0;
30                 LSC = 0;
31                 break;
32             case 1:
33                 LSA = 1;
34                 LSB = 0;
35                 LSC = 0;
36                 break;
37             case 2:
38                 LSA = 0;
39                 LSB = 1;
40                 LSC = 0;
41                 break;
42             case 3:
43                 LSA = 1;
44                 LSB = 1;
45                 LSC = 0;
46                 break;
47             case 4:
48                 LSA = 0;
49                 LSB = 0;
50                 LSC = 1;
51                 break;
52             case 5:
53                 LSA = 1;
54                 LSB = 0;
55                 LSC = 1;
56                 break;
57             case 6:
58                 LSA = 0;
59                 LSB = 1;
60                 LSC = 1;
61                 break;
62             case 7:
63                 LSA = 1;
64                 LSB = 1;
65                 LSC = 1;
66                 break;
67         }
68         P0 = smgduan[i+1];
69         delay(100);
70         P0 = 0X00;
71     }
72 }
73 
74 void main()
75 {
76     while(1)
77     {
78         DigDisplay();
79     }
80 }

独立按键

 1 #include <REGX52.H>
 2 
 3 typedef unsigned int u16;
 4 
 5 sbit LED = P0^0;
 6 sbit K1 = P1^0;
 7 
 8 
 9 void delay(u16 i)
10 {
11     while(i--);
12 }
13 
14 void keypros()
15 {
16     if(K1 == 0)
17     {
18         delay(1000);
19         if(K1 == 0)
20         {
21             LED = ~LED;
22         }
23         while(!K1);
24     }
25 }
26 
27 void main()
28 {
29     
30     LED = 0;
31     while(1)
32     {
33         keypros();
34     }
35 }

矩阵按键

 

 1 #include <REGX52.H>
 2 #include <INTRINS.H>
 3 
 4 typedef unsigned char u8;
 5 typedef unsigned int u16;
 6 
 7 #define GPIO_DIG P0
 8 #define GPIO_KEY P1
 9 
10 
11 
12 u8 code smgduan[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
13                         0x77,0x7C,0x39,0x5E,0x79,0x71};
14 
15                         
16 u8 KeyValue;
17                         
18 void delay(u16 i)
19 {
20     while(i--);
21 }
22 
23 void KeyDown()
24 {
25     char a = 0;
26     GPIO_KEY = 0x0F;
27     if(GPIO_KEY != 0X0F)
28     {
29         delay(1000);
30         if(GPIO_KEY != 0X0F)
31         {
32             GPIO_KEY = 0x0F;
33             switch(GPIO_KEY)
34             {
35                 case(0x07): KeyValue = 0;
36                 break;
37                 case(0x0B): KeyValue = 1;
38                 break;
39                 case(0x0D): KeyValue = 2;
40                 break;
41                 case(0x0E): KeyValue = 3;
42                 break;
43             }
44             GPIO_KEY = 0xF0;
45             switch(GPIO_KEY)
46             {
47                 case(0X70): KeyValue = KeyValue;
48                 break;
49                 case(0XB0): KeyValue = KeyValue + 4;
50                 break;
51                 case(0XD0): KeyValue = KeyValue + 8;
52                 break;
53                 case(0XE0): KeyValue = KeyValue + 12;
54                 break;
55             }
56             
57             while((a < 50) && (GPIO_KEY != 0XF0))
58             {
59                 delay(1000);
60                 a++;
61             }
62         }
63     }
64 }
65 
66 void main()
67 {
68     while(1)
69     {
70         KeyDown();
71         GPIO_DIG = ~smgduan[KeyValue];
72     }
73 }

 

posted @ 2020-09-11 16:19  阿雷Sun  阅读(405)  评论(0)    收藏  举报