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 }
勤奋努力的小L

浙公网安备 33010602011771号