├── README.md ├── p 072 独立按键识别 ├── p 072 独立按键识别.DSN ├── p 072 独立按键识别.c └── p 072 独立按键识别.omf ├── p 073 键控流水灯 ├── kid-51.c ├── p 073 键控流水灯.DSN ├── p 073 键控流水灯.c └── p 073 键控流水灯.omf ├── p 078 LED数码管显示 ├── kid-51.c ├── p 078 LED数码管显示.DSN ├── p 078 LED数码管显示.c └── p 078 LED数码管显示.omf ├── p 078 计数显示器 ├── kid-51.c ├── p 078 计数显示器.DSN ├── p 078 计数显示器.c └── p 078 计数显示器.omf ├── p 080 数码管动态显示 ├── kid-51.c ├── p 080 数码管动态显示.DSN ├── p 080 数码管动态显示.c └── p 080 数码管动态显示.omf ├── p 083 行列式键盘编程 ├── kid-51.c ├── p 083 行列式键盘编程.DSN ├── p 083 行列式键盘编程.c └── p 083 行列式键盘编程.omf ├── p 097 中断扫描法行列式键盘 ├── kid-51.c ├── p 097 中断扫描法行列式键盘.DSN ├── p 097 中断扫描法行列式键盘.c └── p 097 中断扫描法行列式键盘.omf ├── p 099 中断方式的键控流水灯 ├── kid-51.c ├── p 099 中断方式的键控流水灯.DSN ├── p 099 中断方式的键控流水灯.c └── p 099 中断方式的键控流水灯.omf ├── p 101 数码管验证两级外部中断嵌套 ├── kid-51.c ├── p 101 数码管验证两级外部中断嵌套.DSN ├── p 101 数码管验证两级外部中断嵌套.c └── p 101 数码管验证两级外部中断嵌套.omf ├── p 112 定时方式 1 输出方波 ├── kid-51.c ├── p 112 定时方式 1 输出方波.DSN ├── p 112 定时方式 1 输出方波.c └── p 112 定时方式 1 输出方波.omf ├── p 115 定时方式 2 输出方波 ├── kid-51.c ├── p 115 定时方式 2 输出方波.DSN ├── p 115 定时方式 2 输出方波.c └── p 115 定时方式 2 输出方波.omf ├── p 116 计数方式 2 计数显示器 ├── kid-51.c ├── p 116 计数方式 2 计数显示器.DSN ├── p 116 计数方式 2 计数显示器.c └── p 116 计数方式 2 计数显示器.omf ├── p 119 波形展宽 ├── kid-51.c ├── p 119 波形展宽.DSN ├── p 119 波形展宽.c └── p 119 波形展宽.omf └── p 121 输出周期为 2.5s 的脉冲信号 ├── kid-51.c ├── p 121 输出周期为 2.5s 的脉冲信号.DSN ├── p 121 输出周期为 2.5s 的脉冲信号.c └── p 121 输出周期为 2.5s 的脉冲信号.omf /README.md: -------------------------------------------------------------------------------- 1 | Singlechip-80C51 2 | ================ 3 | 4 | 本科单片机课程,基于 Proteus 与 Keil C 5 | 6 | 练习来自「单片机原理及应用 基于 Proteus 和 Keil C」(第二版),林立 / 张俊亮 著,电子工业出版社 -------------------------------------------------------------------------------- /p 072 独立按键识别/p 072 独立按键识别.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 072 独立按键识别/p 072 独立按键识别.DSN -------------------------------------------------------------------------------- /p 072 独立按键识别/p 072 独立按键识别.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void main() 4 | { 5 | char key = 0; 6 | while(1) 7 | { 8 | key = P0 & 0x0f; 9 | if( key != 0x0f ) { 10 | P2 = key; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /p 072 独立按键识别/p 072 独立按键识别.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 072 独立按键识别/p 072 独立按键识别.omf -------------------------------------------------------------------------------- /p 073 键控流水灯/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.1.0 */ 2 | 3 | #define true 1 4 | #define false 0 5 | #define TRUE 1 6 | #define FALSE 0 7 | 8 | #define B0 0x01 // 0000 0001 9 | #define B1 0x02 // 0000 0010 10 | #define B2 0x04 // 0000 0100 11 | #define B3 0x01 // 0000 1000 12 | #define B4 0x08 // 0001 0000 13 | #define B5 0x10 // 0010 0000 14 | #define B6 0x20 // 0100 0000 15 | #define B7 0x80 // 1000 0000 16 | 17 | #define _B0 0xfe // 1111 1110 18 | #define _B1 0xfd // 1111 1101 19 | #define _B2 0xfb // 1111 1011 20 | #define _B3 0xf7 // 1111 0111 21 | #define _B4 0xef // 1110 1111 22 | #define _B5 0xdf // 1101 1111 23 | #define _B6 0xbf // 1011 1111 24 | #define _B7 0x7f // 0111 1111 25 | 26 | #define b0 0x1 // 0001 27 | #define b1 0x2 // 0010 28 | #define b2 0x4 // 0100 29 | #define b3 0x8 // 1000 30 | 31 | #define _b0 0xe // 1110 32 | #define _b1 0xd // 1101 33 | #define _b2 0xb // 1011 34 | #define _b3 0x7 // 0111 35 | 36 | 37 | 38 | // binary -> decimal 39 | // case : 40 | // "1101" -> 13 41 | // "00001101" -> 13 42 | // "11001011" -> 203 43 | // "1100 1011" -> 203 ( support any space between numbers ) 44 | // "1010110111010" -> 5562 45 | 46 | int b( char* num_2 ) 47 | { 48 | int val = 1; // 1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 64 -> 128 49 | int num_10 = 0; 50 | char i = 0; 51 | 52 | while( *( num_2 + 1 ) != '\0' ) { 53 | num_2++; 54 | i++; 55 | } 56 | 57 | while( i >= 0 ) 58 | { 59 | if( *num_2 != ' ' ) { 60 | if( *num_2 == '1' ) { 61 | num_10 += val; 62 | } 63 | val *= 2; 64 | } 65 | 66 | num_2--; 67 | i--; 68 | } 69 | 70 | return num_10; 71 | } 72 | 73 | 74 | 75 | void delay( int times ) 76 | { 77 | int i; 78 | while( times-- ) { 79 | i = 1E3; 80 | while( i-- ); 81 | } 82 | } -------------------------------------------------------------------------------- /p 073 键控流水灯/p 073 键控流水灯.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 073 键控流水灯/p 073 键控流水灯.DSN -------------------------------------------------------------------------------- /p 073 键控流水灯/p 073 键控流水灯.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | void main() 5 | { 6 | bit run = false; 7 | 8 | // 0 = down 9 | // 1 = up 10 | bit dir = 1; 11 | 12 | unsigned char LED[4] = { _B0, _B1, _B2, _B3 }; 13 | int i; 14 | 15 | while( true ) 16 | { 17 | int k = P0 & 0x0f; 18 | 19 | switch( k ) { 20 | case _b0: 21 | run = true; break; 22 | case _b1: 23 | run = false; break; 24 | case _b2: 25 | dir = 0; break; 26 | case _b3: 27 | dir = 1; break; 28 | } 29 | 30 | if( run ) { 31 | 32 | if( dir ) { 33 | for( i = 3; i >= 0; i-- ) { 34 | P2 = LED[i]; 35 | delay( 30 ); 36 | } 37 | } else { 38 | for( i = 0; i <= 3; i++ ) { 39 | P2 = LED[i]; 40 | delay( 30 ); 41 | } 42 | } 43 | 44 | } else { 45 | P2 = 0xff; 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /p 073 键控流水灯/p 073 键控流水灯.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 073 键控流水灯/p 073 键控流水灯.omf -------------------------------------------------------------------------------- /p 078 LED数码管显示/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.2.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | 11 | #define B0 0x01 // 0000 0001 12 | #define B1 0x02 // 0000 0010 13 | #define B2 0x04 // 0000 0100 14 | #define B3 0x01 // 0000 1000 15 | #define B4 0x08 // 0001 0000 16 | #define B5 0x10 // 0010 0000 17 | #define B6 0x20 // 0100 0000 18 | #define B7 0x80 // 1000 0000 19 | 20 | #define _B0 0xfe // 1111 1110 21 | #define _B1 0xfd // 1111 1101 22 | #define _B2 0xfb // 1111 1011 23 | #define _B3 0xf7 // 1111 0111 24 | #define _B4 0xef // 1110 1111 25 | #define _B5 0xdf // 1101 1111 26 | #define _B6 0xbf // 1011 1111 27 | #define _B7 0x7f // 0111 1111 28 | 29 | #define b0 0x1 // 0001 30 | #define b1 0x2 // 0010 31 | #define b2 0x4 // 0100 32 | #define b3 0x8 // 1000 33 | 34 | #define _b0 0xe // 1110 35 | #define _b1 0xd // 1101 36 | #define _b2 0xb // 1011 37 | #define _b3 0x7 // 0111 38 | 39 | 40 | 41 | #define led0 0xc0 42 | #define led1 0xf9 43 | #define led2 0xa4 44 | #define led3 0xb0 45 | #define led4 0x99 46 | #define led5 0x92 47 | #define led6 0x82 48 | #define led7 0xf8 49 | #define led8 0x80 50 | #define led9 0x90 51 | 52 | #define _led0 0x3f 53 | #define _led1 0x06 54 | #define _led2 0x5b 55 | #define _led3 0x4f 56 | #define _led4 0x66 57 | #define _led5 0x6d 58 | #define _led6 0x7d 59 | #define _led7 0x07 60 | #define _led8 0x7f 61 | #define _led9 0x6f 62 | 63 | 64 | 65 | // binary -> decimal 66 | // case : 67 | // "1101" -> 13 68 | // "00001101" -> 13 69 | // "11001011" -> 203 70 | // "1100 1011" -> 203 ( support any space between numbers ) 71 | // "1010110111010" -> 5562 72 | 73 | int b( char* num_2 ) 74 | { 75 | int val = 1; // 1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 64 -> 128 76 | int num_10 = 0; 77 | char i = 0; 78 | 79 | while( *( num_2 + 1 ) != '\0' ) { 80 | num_2++; 81 | i++; 82 | } 83 | 84 | while( i >= 0 ) 85 | { 86 | if( *num_2 != ' ' ) { 87 | if( *num_2 == '1' ) { 88 | num_10 += val; 89 | } 90 | val *= 2; 91 | } 92 | 93 | num_2--; 94 | i--; 95 | } 96 | 97 | return num_10; 98 | } 99 | 100 | 101 | 102 | void delay( int times ) 103 | { 104 | int i; 105 | while( times-- ) { 106 | i = 1E3; 107 | while( i-- ); 108 | } 109 | } -------------------------------------------------------------------------------- /p 078 LED数码管显示/p 078 LED数码管显示.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 078 LED数码管显示/p 078 LED数码管显示.DSN -------------------------------------------------------------------------------- /p 078 LED数码管显示/p 078 LED数码管显示.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | void main() 5 | { 6 | // negative pole 7 | char led[10] = { _led0, _led1, _led2, _led3, _led4, _led5, _led6, _led7, _led8, _led9 }; 8 | 9 | char i; 10 | while( true ) 11 | { 12 | for( i = 0; i < 10; i++ ) { 13 | P0 = led[i]; 14 | delay( 20 ); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /p 078 LED数码管显示/p 078 LED数码管显示.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 078 LED数码管显示/p 078 LED数码管显示.omf -------------------------------------------------------------------------------- /p 078 计数显示器/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.3.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | 11 | #define B0 0x01 // 0000 0001 12 | #define B1 0x02 // 0000 0010 13 | #define B2 0x04 // 0000 0100 14 | #define B3 0x08 // 0000 1000 15 | #define B4 0x10 // 0001 0000 16 | #define B5 0x20 // 0010 0000 17 | #define B6 0x40 // 0100 0000 18 | #define B7 0x80 // 1000 0000 19 | 20 | #define _B0 0xfe // 1111 1110 21 | #define _B1 0xfd // 1111 1101 22 | #define _B2 0xfb // 1111 1011 23 | #define _B3 0xf7 // 1111 0111 24 | #define _B4 0xef // 1110 1111 25 | #define _B5 0xdf // 1101 1111 26 | #define _B6 0xbf // 1011 1111 27 | #define _B7 0x7f // 0111 1111 28 | 29 | #define b0 0x1 // 0001 30 | #define b1 0x2 // 0010 31 | #define b2 0x4 // 0100 32 | #define b3 0x8 // 1000 33 | 34 | #define _b0 0xe // 1110 35 | #define _b1 0xd // 1101 36 | #define _b2 0xb // 1011 37 | #define _b3 0x7 // 0111 38 | 39 | 40 | 41 | #define led0 0xc0 42 | #define led1 0xf9 43 | #define led2 0xa4 44 | #define led3 0xb0 45 | #define led4 0x99 46 | #define led5 0x92 47 | #define led6 0x82 48 | #define led7 0xf8 49 | #define led8 0x80 50 | #define led9 0x90 51 | 52 | #define _led0 0x3f 53 | #define _led1 0x06 54 | #define _led2 0x5b 55 | #define _led3 0x4f 56 | #define _led4 0x66 57 | #define _led5 0x6d 58 | #define _led6 0x7d 59 | #define _led7 0x07 60 | #define _led8 0x7f 61 | #define _led9 0x6f 62 | 63 | 64 | 65 | void delay( int times ); 66 | int b( char* num_2 ); 67 | bit in( unsigned char port, char b ); 68 | 69 | 70 | 71 | void delay( int times ) 72 | { 73 | int i; 74 | while( times-- ) { 75 | i = 1E3; 76 | while( i-- ); 77 | } 78 | } 79 | 80 | 81 | 82 | // binary -> decimal 83 | // case : 84 | // "1101" -> 13 85 | // "00001101" -> 13 86 | // "11001011" -> 203 87 | // "1100 1011" -> 203 ( support any space between numbers ) 88 | // "1010110111010" -> 5562 89 | 90 | int b( char* num_2 ) 91 | { 92 | int val = 1; // 1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 64 -> 128 93 | int num_10 = 0; 94 | char i = 0; 95 | 96 | while( *( num_2 + 1 ) != '\0' ) { 97 | num_2++; 98 | i++; 99 | } 100 | 101 | while( i >= 0 ) 102 | { 103 | if( *num_2 != ' ' ) { 104 | if( *num_2 == '1' ) { 105 | num_10 += val; 106 | } 107 | val *= 2; 108 | } 109 | 110 | num_2--; 111 | i--; 112 | } 113 | 114 | return num_10; 115 | } 116 | 117 | 118 | 119 | bit in( unsigned char port, char b ) 120 | { 121 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 122 | return ( port & B[b] ) == B[b] ? 1 : 0; 123 | } -------------------------------------------------------------------------------- /p 078 计数显示器/p 078 计数显示器.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 078 计数显示器/p 078 计数显示器.DSN -------------------------------------------------------------------------------- /p 078 计数显示器/p 078 计数显示器.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | void main() 5 | { 6 | unsigned char led[] = { _led0, _led1, _led2, _led3, _led4, _led5, _led6, _led7, _led8, _led9 }; 7 | char count = 0; 8 | P0 = _led0; 9 | P2 = _led0; 10 | 11 | while( true ) 12 | { 13 | if( in( P3, 7 ) == 0 ) 14 | { 15 | count++; 16 | if( count == 100 ) { 17 | count = 0; 18 | } 19 | 20 | P0 = led[ count / 10 ]; 21 | P2 = led[ count % 10 ]; 22 | 23 | while( in( P3, 7 ) == 0 ); // 防止连续计数 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /p 078 计数显示器/p 078 计数显示器.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 078 计数显示器/p 078 计数显示器.omf -------------------------------------------------------------------------------- /p 080 数码管动态显示/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.4.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led0 0xc0 40 | #define led1 0xf9 41 | #define led2 0xa4 42 | #define led3 0xb0 43 | #define led4 0x99 44 | #define led5 0x92 45 | #define led6 0x82 46 | #define led7 0xf8 47 | #define led8 0x80 48 | #define led9 0x90 49 | #define ledL 0x38 50 | 51 | #define _led0 0x3f 52 | #define _led1 0x06 53 | #define _led2 0x5b 54 | #define _led3 0x4f 55 | #define _led4 0x66 56 | #define _led5 0x6d 57 | #define _led6 0x7d 58 | #define _led7 0x07 59 | #define _led8 0x7f 60 | #define _led9 0x6f 61 | #define _ledL 0x38 62 | 63 | 64 | 65 | void delay( int times ); 66 | int b( char* num_2 ); 67 | bit in( unsigned char port, char b ); 68 | 69 | 70 | 71 | void delay( int times ) 72 | { 73 | int i; 74 | while( times-- ) { 75 | i = 1E3; 76 | while( i-- ); 77 | } 78 | } 79 | 80 | 81 | 82 | // binary -> decimal 83 | // case : 84 | // "1101" -> 13 85 | // "00001101" -> 13 86 | // "11001011" -> 203 87 | // "1100 1011" -> 203 ( support any space between numbers ) 88 | // "1010110111010" -> 5562 89 | 90 | int b( char* num_2 ) 91 | { 92 | int val = 1; // 1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 64 -> 128 93 | int num_10 = 0; 94 | char i = 0; 95 | 96 | while( *( num_2 + 1 ) != '\0' ) { 97 | num_2++; 98 | i++; 99 | } 100 | 101 | while( i >= 0 ) 102 | { 103 | if( *num_2 != ' ' ) { 104 | if( *num_2 == '1' ) { 105 | num_10 += val; 106 | } 107 | val *= 2; 108 | } 109 | 110 | num_2--; 111 | i--; 112 | } 113 | 114 | return num_10; 115 | } 116 | 117 | 118 | 119 | bit in( unsigned char port, char b ) 120 | { 121 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 122 | return ( port & B[b] ) == B[b] ? 1 : 0; 123 | } -------------------------------------------------------------------------------- /p 080 数码管动态显示/p 080 数码管动态显示.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 080 数码管动态显示/p 080 数码管动态显示.DSN -------------------------------------------------------------------------------- /p 080 数码管动态显示/p 080 数码管动态显示.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | void main() { 5 | while( true ) { 6 | P3 = b1; 7 | P2 = _ledL; 8 | delay( 1 ); 9 | P3 = b0; 10 | P2 = _led2; 11 | delay( 1 ); 12 | } 13 | } -------------------------------------------------------------------------------- /p 080 数码管动态显示/p 080 数码管动态显示.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 080 数码管动态显示/p 080 数码管动态显示.omf -------------------------------------------------------------------------------- /p 083 行列式键盘编程/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.5.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led0 0xc0 40 | #define led1 0xf9 41 | #define led2 0xa4 42 | #define led3 0xb0 43 | #define led4 0x99 44 | #define led5 0x92 45 | #define led6 0x82 46 | #define led7 0xf8 47 | #define led8 0x80 48 | #define led9 0x90 49 | #define ledA 0x88 50 | #define ledB 0x80 51 | #define ledC 0xcc 52 | #define ledD 0xc0 53 | #define ledE 0x86 54 | #define ledF 0x8e 55 | #define ledL 0x38 56 | 57 | #define _led0 0x3f 58 | #define _led1 0x06 59 | #define _led2 0x5b 60 | #define _led3 0x4f 61 | #define _led4 0x66 62 | #define _led5 0x6d 63 | #define _led6 0x7d 64 | #define _led7 0x07 65 | #define _led8 0x7f 66 | #define _led9 0x6f 67 | #define _ledA 0x77 68 | #define _ledB 0x7f 69 | #define _ledC 0x39 70 | #define _ledD 0x3f 71 | #define _ledE 0x79 72 | #define _ledF 0x71 73 | #define _ledL 0x38 74 | 75 | 76 | 77 | void delay( int times ); 78 | void sleep( int times ); 79 | int b( char* num_2 ); 80 | bit in( unsigned char port, char b ); 81 | 82 | 83 | 84 | void delay( int times ) 85 | { 86 | int i; 87 | while( times-- ) { 88 | i = 1E3; 89 | while( i-- ); 90 | } 91 | } 92 | 93 | 94 | 95 | void sleep( int times ) 96 | { 97 | delay( times ); 98 | } 99 | 100 | 101 | 102 | // binary -> decimal 103 | // case : 104 | // "1101" -> 13 105 | // "00001101" -> 13 106 | // "11001011" -> 203 107 | // "1100 1011" -> 203 ( support any space between numbers ) 108 | // "1010110111010" -> 5562 109 | 110 | int b( char* num_2 ) 111 | { 112 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 113 | int num_10 = 0; 114 | char i = 0; 115 | 116 | while( *( num_2 + 1 ) != '\0' ) { 117 | num_2++; 118 | i++; 119 | } 120 | 121 | while( i >= 0 ) 122 | { 123 | if( *num_2 != ' ' ) { 124 | if( *num_2 == '1' ) { 125 | num_10 += val; 126 | } 127 | val *= 2; 128 | } 129 | 130 | num_2--; 131 | i--; 132 | } 133 | 134 | return num_10; 135 | } 136 | 137 | 138 | 139 | bit in( unsigned char port, char b ) 140 | { 141 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 142 | return ( port & B[b] ) == B[b] ? 1 : 0; 143 | } -------------------------------------------------------------------------------- /p 083 行列式键盘编程/p 083 行列式键盘编程.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 083 行列式键盘编程/p 083 行列式键盘编程.DSN -------------------------------------------------------------------------------- /p 083 行列式键盘编程/p 083 行列式键盘编程.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | void main() 5 | { 6 | char row, 7 | col; 8 | 9 | char led[] = { 10 | _led0, _led1, _led2, _led3, 11 | _led4, _led5, _led6, _led7, 12 | _led8, _led9, _ledA, _ledB, 13 | _ledC, _ledD, _ledE, _ledF 14 | }; 15 | 16 | char key[16]; 17 | 18 | key [0] = b("1110 1110"), key [1] = b("1101 1110"), key [2] = b("1011 1110"), key [3] = b("0111 1110"), 19 | key [4] = b("1110 1101"), key [5] = b("1101 1101"), key [6] = b("1011 1101"), key [7] = b("0111 1101"), 20 | key [8] = b("1110 1011"), key [9] = b("1101 1011"), key [10] = b("1011 1011"), key [11] = b("0111 1011"), 21 | key [12] = b("1110 0111"), key [13] = b("1101 0111"), key [14] = b("1011 0111"), key [15] = b("0111 0111"); 22 | 23 | P0 = 0x00; 24 | 25 | while( true ) 26 | { 27 | char rows[] = { _B0, _B1, _B2, _B3 }; 28 | char i, j; 29 | 30 | // scan each row 31 | for( i = 0; i < 4; i++ ) 32 | { 33 | P2 = rows[i]; 34 | // if click btn 35 | if( ( P2 & 0xf0 ) != 0xf0 ) 36 | { 37 | // search : which btn be click ? 38 | for( j = 0; j < 16; j++ ) 39 | { 40 | if( P2 == key[j] ) { 41 | // led on 42 | P0 = led[j]; 43 | break; 44 | } 45 | } 46 | } 47 | } 48 | } 49 | 50 | 51 | } -------------------------------------------------------------------------------- /p 083 行列式键盘编程/p 083 行列式键盘编程.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 083 行列式键盘编程/p 083 行列式键盘编程.omf -------------------------------------------------------------------------------- /p 097 中断扫描法行列式键盘/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.5.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led0 0xc0 40 | #define led1 0xf9 41 | #define led2 0xa4 42 | #define led3 0xb0 43 | #define led4 0x99 44 | #define led5 0x92 45 | #define led6 0x82 46 | #define led7 0xf8 47 | #define led8 0x80 48 | #define led9 0x90 49 | #define ledA 0x88 50 | #define ledB 0x80 51 | #define ledC 0xcc 52 | #define ledD 0xc0 53 | #define ledE 0x86 54 | #define ledF 0x8e 55 | #define ledL 0x38 56 | 57 | #define _led0 0x3f 58 | #define _led1 0x06 59 | #define _led2 0x5b 60 | #define _led3 0x4f 61 | #define _led4 0x66 62 | #define _led5 0x6d 63 | #define _led6 0x7d 64 | #define _led7 0x07 65 | #define _led8 0x7f 66 | #define _led9 0x6f 67 | #define _ledA 0x77 68 | #define _ledB 0x7f 69 | #define _ledC 0x39 70 | #define _ledD 0x3f 71 | #define _ledE 0x79 72 | #define _ledF 0x71 73 | #define _ledL 0x38 74 | 75 | 76 | 77 | void delay( int times ); 78 | void sleep( int times ); 79 | int b( char* num_2 ); 80 | bit in( unsigned char port, char b ); 81 | 82 | 83 | 84 | void delay( int times ) 85 | { 86 | int i; 87 | while( times-- ) { 88 | i = 1E3; 89 | while( i-- ); 90 | } 91 | } 92 | 93 | 94 | 95 | void sleep( int times ) 96 | { 97 | delay( times ); 98 | } 99 | 100 | 101 | 102 | // binary -> decimal 103 | // case : 104 | // "1101" -> 13 105 | // "00001101" -> 13 106 | // "11001011" -> 203 107 | // "1100 1011" -> 203 ( support any space between numbers ) 108 | // "1010110111010" -> 5562 109 | 110 | int b( char* num_2 ) 111 | { 112 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 113 | int num_10 = 0; 114 | char i = 0; 115 | 116 | while( *( num_2 + 1 ) != '\0' ) { 117 | num_2++; 118 | i++; 119 | } 120 | 121 | while( i >= 0 ) 122 | { 123 | if( *num_2 != ' ' ) { 124 | if( *num_2 == '1' ) { 125 | num_10 += val; 126 | } 127 | val *= 2; 128 | } 129 | 130 | num_2--; 131 | i--; 132 | } 133 | 134 | return num_10; 135 | } 136 | 137 | 138 | 139 | bit in( unsigned char port, char b ) 140 | { 141 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 142 | return ( port & B[b] ) == B[b] ? 1 : 0; 143 | } -------------------------------------------------------------------------------- /p 097 中断扫描法行列式键盘/p 097 中断扫描法行列式键盘.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 097 中断扫描法行列式键盘/p 097 中断扫描法行列式键盘.DSN -------------------------------------------------------------------------------- /p 097 中断扫描法行列式键盘/p 097 中断扫描法行列式键盘.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | 5 | char key[16]; 6 | char led[] = { 7 | _led0, _led1, _led2, _led3, 8 | _led4, _led5, _led6, _led7, 9 | _led8, _led9, _ledA, _ledB, 10 | _ledC, _ledD, _ledE, _ledF 11 | }; 12 | char rows[] = { _B0, _B1, _B2, _B3 }; 13 | 14 | 15 | onkey() interrupt 0 16 | { 17 | char i, j; 18 | for( i = 0; i < 4; i++ ) { 19 | P2 = rows[i]; 20 | for( j = 0; j < 16; j++ ) { 21 | if( P2 == key[j] ) { 22 | P0 = led[j]; 23 | break; 24 | }}} 25 | P2 = 0x0f; 26 | } 27 | 28 | 29 | main() 30 | { 31 | key [0] = b("1110 1110"), key [1] = b("1101 1110"), key [2] = b("1011 1110"), key [3] = b("0111 1110"), 32 | key [4] = b("1110 1101"), key [5] = b("1101 1101"), key [6] = b("1011 1101"), key [7] = b("0111 1101"), 33 | key [8] = b("1110 1011"), key [9] = b("1101 1011"), key [10] = b("1011 1011"), key [11] = b("0111 1011"), 34 | key [12] = b("1110 0111"), key [13] = b("1101 0111"), key [14] = b("1011 0111"), key [15] = b("0111 0111"); 35 | 36 | P0 = 0x00; 37 | IT0 = 1; 38 | EX0 = 1; 39 | EA = 1; 40 | 41 | P2 = 0x0f; 42 | 43 | while( true ); 44 | } -------------------------------------------------------------------------------- /p 097 中断扫描法行列式键盘/p 097 中断扫描法行列式键盘.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 097 中断扫描法行列式键盘/p 097 中断扫描法行列式键盘.omf -------------------------------------------------------------------------------- /p 099 中断方式的键控流水灯/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.5.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led0 0xc0 40 | #define led1 0xf9 41 | #define led2 0xa4 42 | #define led3 0xb0 43 | #define led4 0x99 44 | #define led5 0x92 45 | #define led6 0x82 46 | #define led7 0xf8 47 | #define led8 0x80 48 | #define led9 0x90 49 | #define ledA 0x88 50 | #define ledB 0x80 51 | #define ledC 0xcc 52 | #define ledD 0xc0 53 | #define ledE 0x86 54 | #define ledF 0x8e 55 | #define ledL 0x38 56 | 57 | #define _led0 0x3f 58 | #define _led1 0x06 59 | #define _led2 0x5b 60 | #define _led3 0x4f 61 | #define _led4 0x66 62 | #define _led5 0x6d 63 | #define _led6 0x7d 64 | #define _led7 0x07 65 | #define _led8 0x7f 66 | #define _led9 0x6f 67 | #define _ledA 0x77 68 | #define _ledB 0x7f 69 | #define _ledC 0x39 70 | #define _ledD 0x3f 71 | #define _ledE 0x79 72 | #define _ledF 0x71 73 | #define _ledL 0x38 74 | 75 | 76 | 77 | void delay( int times ); 78 | void sleep( int times ); 79 | int b( char* num_2 ); 80 | bit in( unsigned char port, char b ); 81 | 82 | 83 | 84 | void delay( int times ) 85 | { 86 | int i; 87 | while( times-- ) { 88 | i = 1E3; 89 | while( i-- ); 90 | } 91 | } 92 | 93 | 94 | 95 | void sleep( int times ) 96 | { 97 | delay( times ); 98 | } 99 | 100 | 101 | 102 | // binary -> decimal 103 | // case : 104 | // "1101" -> 13 105 | // "00001101" -> 13 106 | // "11001011" -> 203 107 | // "1100 1011" -> 203 ( support any space between numbers ) 108 | // "1010110111010" -> 5562 109 | 110 | int b( char* num_2 ) 111 | { 112 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 113 | int num_10 = 0; 114 | char i = 0; 115 | 116 | while( *( num_2 + 1 ) != '\0' ) { 117 | num_2++; 118 | i++; 119 | } 120 | 121 | while( i >= 0 ) 122 | { 123 | if( *num_2 != ' ' ) { 124 | if( *num_2 == '1' ) { 125 | num_10 += val; 126 | } 127 | val *= 2; 128 | } 129 | 130 | num_2--; 131 | i--; 132 | } 133 | 134 | return num_10; 135 | } 136 | 137 | 138 | 139 | bit in( unsigned char port, char b ) 140 | { 141 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 142 | return ( port & B[b] ) == B[b] ? 1 : 0; 143 | } -------------------------------------------------------------------------------- /p 099 中断方式的键控流水灯/p 099 中断方式的键控流水灯.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 099 中断方式的键控流水灯/p 099 中断方式的键控流水灯.DSN -------------------------------------------------------------------------------- /p 099 中断方式的键控流水灯/p 099 中断方式的键控流水灯.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | 5 | char led[] = { _B0, _B1, _B2, _B3 }; 6 | bit run = false; 7 | // 0 - down 8 | // 1 - up 9 | bit dir; 10 | 11 | 12 | main() 13 | { 14 | char i; 15 | 16 | IT0 = 1, EX0 = 1, EA = 1; 17 | 18 | while( true ) 19 | { 20 | if( run ) 21 | { 22 | if( dir ) { 23 | for( i = 3; i >= 0; i-- ) { 24 | P2 = led[i]; 25 | delay( 20 ); 26 | } 27 | } else { 28 | for( i = 0; i < 4; i++ ) { 29 | P2 = led[i]; 30 | delay( 20 ); 31 | } 32 | } 33 | 34 | } else { 35 | P2 = 0; 36 | } 37 | } 38 | } 39 | 40 | 41 | onkey() interrupt 0 42 | { 43 | switch( P0 & 0x0f ) { 44 | case _b0: run = 1, dir = 1; break; 45 | case _b1: run = 0; break; 46 | case _b2: dir = 0; break; 47 | case _b3: dir = 1; break; 48 | } 49 | } -------------------------------------------------------------------------------- /p 099 中断方式的键控流水灯/p 099 中断方式的键控流水灯.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 099 中断方式的键控流水灯/p 099 中断方式的键控流水灯.omf -------------------------------------------------------------------------------- /p 101 数码管验证两级外部中断嵌套/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.6.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led_ 0xaf 40 | #define led0 0xc0 41 | #define led1 0xf9 42 | #define led2 0xa4 43 | #define led3 0xb0 44 | #define led4 0x99 45 | #define led5 0x92 46 | #define led6 0x82 47 | #define led7 0xf8 48 | #define led8 0x80 49 | #define led9 0x90 50 | #define ledA 0x88 51 | #define ledB 0x80 52 | #define ledC 0xcc 53 | #define ledD 0xc0 54 | #define ledE 0x86 55 | #define ledF 0x8e 56 | #define ledL 0x38 57 | 58 | #define _led_ 0x40 59 | #define _led0 0x3f 60 | #define _led1 0x06 61 | #define _led2 0x5b 62 | #define _led3 0x4f 63 | #define _led4 0x66 64 | #define _led5 0x6d 65 | #define _led6 0x7d 66 | #define _led7 0x07 67 | #define _led8 0x7f 68 | #define _led9 0x6f 69 | #define _ledA 0x77 70 | #define _ledB 0x7f 71 | #define _ledC 0x39 72 | #define _ledD 0x3f 73 | #define _ledE 0x79 74 | #define _ledF 0x71 75 | #define _ledL 0x38 76 | 77 | 78 | 79 | void delay( int times ); 80 | void sleep( int times ); 81 | int b( char* num_2 ); 82 | bit in( unsigned char port, char b ); 83 | 84 | 85 | 86 | void delay( int times ) 87 | { 88 | int i; 89 | while( times-- ) { 90 | i = 1E3; 91 | while( i-- ); 92 | } 93 | } 94 | 95 | 96 | 97 | void sleep( int times ) 98 | { 99 | delay( times ); 100 | } 101 | 102 | 103 | 104 | // binary -> decimal 105 | // case : 106 | // "1101" -> 13 107 | // "00001101" -> 13 108 | // "11001011" -> 203 109 | // "1100 1011" -> 203 ( support any space between numbers ) 110 | // "1010110111010" -> 5562 111 | 112 | int b( char* num_2 ) 113 | { 114 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 115 | int num_10 = 0; 116 | char i = 0; 117 | 118 | while( *( num_2 + 1 ) != '\0' ) { 119 | num_2++; 120 | i++; 121 | } 122 | 123 | while( i >= 0 ) 124 | { 125 | if( *num_2 != ' ' ) { 126 | if( *num_2 == '1' ) { 127 | num_10 += val; 128 | } 129 | val *= 2; 130 | } 131 | 132 | num_2--; 133 | i--; 134 | } 135 | 136 | return num_10; 137 | } 138 | 139 | 140 | 141 | bit in( unsigned char port, char b ) 142 | { 143 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 144 | return ( port & B[b] ) == B[b] ? 1 : 0; 145 | } -------------------------------------------------------------------------------- /p 101 数码管验证两级外部中断嵌套/p 101 数码管验证两级外部中断嵌套.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 101 数码管验证两级外部中断嵌套/p 101 数码管验证两级外部中断嵌套.DSN -------------------------------------------------------------------------------- /p 101 数码管验证两级外部中断嵌套/p 101 数码管验证两级外部中断嵌套.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | show( unsigned char port ); 5 | 6 | char led[] = { _led0, _led1, _led2, _led3, _led4, _led5, _led6, _led7, _led8, _led9, _led_ }; 7 | sbit small_led = P3^0; 8 | 9 | 10 | main() 11 | { 12 | small_led = 0; 13 | P0 = P1 = P2 = _led_; // show '-' 14 | IT0 = IT1 = 1; // 脉冲触发 15 | PX0 = 0; PX1 = 1; // 优先级:int1 > int2 16 | EX0 = EX1 = EA = 1; // 开中断 17 | 18 | while( true ) { 19 | show( 0 ); 20 | } 21 | } 22 | 23 | 24 | int0() interrupt 0 25 | { 26 | small_led = IE0; 27 | show( 2 ); 28 | } 29 | 30 | 31 | int1() interrupt 2 32 | { 33 | small_led = IE0; 34 | show( 1 ); 35 | } 36 | 37 | 38 | // show led '0' ~ '9', end with '-' 39 | // port - 'P1' | 'P2' | 'P3' 40 | show( char port ) 41 | { 42 | char i; 43 | for( i = 0; i < 11; i++ ) { 44 | if( port == 0 ) P0 = led[i]; 45 | else if( port == 1 ) P1 = led[i]; 46 | else if( port == 2 ) P2 = led[i]; 47 | delay( 50 ); 48 | } 49 | } -------------------------------------------------------------------------------- /p 101 数码管验证两级外部中断嵌套/p 101 数码管验证两级外部中断嵌套.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 101 数码管验证两级外部中断嵌套/p 101 数码管验证两级外部中断嵌套.omf -------------------------------------------------------------------------------- /p 112 定时方式 1 输出方波/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.6.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led_ 0xaf 40 | #define led0 0xc0 41 | #define led1 0xf9 42 | #define led2 0xa4 43 | #define led3 0xb0 44 | #define led4 0x99 45 | #define led5 0x92 46 | #define led6 0x82 47 | #define led7 0xf8 48 | #define led8 0x80 49 | #define led9 0x90 50 | #define ledA 0x88 51 | #define ledB 0x80 52 | #define ledC 0xcc 53 | #define ledD 0xc0 54 | #define ledE 0x86 55 | #define ledF 0x8e 56 | #define ledL 0x38 57 | 58 | #define _led_ 0x40 59 | #define _led0 0x3f 60 | #define _led1 0x06 61 | #define _led2 0x5b 62 | #define _led3 0x4f 63 | #define _led4 0x66 64 | #define _led5 0x6d 65 | #define _led6 0x7d 66 | #define _led7 0x07 67 | #define _led8 0x7f 68 | #define _led9 0x6f 69 | #define _ledA 0x77 70 | #define _ledB 0x7f 71 | #define _ledC 0x39 72 | #define _ledD 0x3f 73 | #define _ledE 0x79 74 | #define _ledF 0x71 75 | #define _ledL 0x38 76 | 77 | 78 | 79 | void delay( int times ); 80 | void sleep( int times ); 81 | int b( char* num_2 ); 82 | bit in( unsigned char port, char b ); 83 | 84 | 85 | 86 | void delay( int times ) 87 | { 88 | int i; 89 | while( times-- ) { 90 | i = 1E3; 91 | while( i-- ); 92 | } 93 | } 94 | 95 | 96 | 97 | void sleep( int times ) 98 | { 99 | delay( times ); 100 | } 101 | 102 | 103 | 104 | // binary -> decimal 105 | // case : 106 | // "1101" -> 13 107 | // "00001101" -> 13 108 | // "11001011" -> 203 109 | // "1100 1011" -> 203 ( support any space between numbers ) 110 | // "1010110111010" -> 5562 111 | 112 | int b( char* num_2 ) 113 | { 114 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 115 | int num_10 = 0; 116 | char i = 0; 117 | 118 | while( *( num_2 + 1 ) != '\0' ) { 119 | num_2++; 120 | i++; 121 | } 122 | 123 | while( i >= 0 ) 124 | { 125 | if( *num_2 != ' ' ) { 126 | if( *num_2 == '1' ) { 127 | num_10 += val; 128 | } 129 | val *= 2; 130 | } 131 | 132 | num_2--; 133 | i--; 134 | } 135 | 136 | return num_10; 137 | } 138 | 139 | 140 | 141 | bit in( unsigned char port, char b ) 142 | { 143 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 144 | return ( port & B[b] ) == B[b] ? 1 : 0; 145 | } -------------------------------------------------------------------------------- /p 112 定时方式 1 输出方波/p 112 定时方式 1 输出方波.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 112 定时方式 1 输出方波/p 112 定时方式 1 输出方波.DSN -------------------------------------------------------------------------------- /p 112 定时方式 1 输出方波/p 112 定时方式 1 输出方波.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | sbit P2_0 = P2^0; 5 | 6 | main() 7 | { 8 | TMOD = b("0001 0000"); // 定时器模式 + 方式 1 9 | TH1 = 0xfc, TL1 = 0x18; // 计数初值 10 | EA = ET1 = 1; // 开中断 11 | TR1 = 1; // 开始计时 12 | 13 | while( true ); 14 | } 15 | 16 | 17 | t1() interrupt 3 18 | { 19 | P2_0 = !P2_0; 20 | TH1 = 0xfc, TL1 = 0x18; 21 | } -------------------------------------------------------------------------------- /p 112 定时方式 1 输出方波/p 112 定时方式 1 输出方波.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 112 定时方式 1 输出方波/p 112 定时方式 1 输出方波.omf -------------------------------------------------------------------------------- /p 115 定时方式 2 输出方波/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.6.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led_ 0xaf 40 | #define led0 0xc0 41 | #define led1 0xf9 42 | #define led2 0xa4 43 | #define led3 0xb0 44 | #define led4 0x99 45 | #define led5 0x92 46 | #define led6 0x82 47 | #define led7 0xf8 48 | #define led8 0x80 49 | #define led9 0x90 50 | #define ledA 0x88 51 | #define ledB 0x80 52 | #define ledC 0xcc 53 | #define ledD 0xc0 54 | #define ledE 0x86 55 | #define ledF 0x8e 56 | #define ledL 0x38 57 | 58 | #define _led_ 0x40 59 | #define _led0 0x3f 60 | #define _led1 0x06 61 | #define _led2 0x5b 62 | #define _led3 0x4f 63 | #define _led4 0x66 64 | #define _led5 0x6d 65 | #define _led6 0x7d 66 | #define _led7 0x07 67 | #define _led8 0x7f 68 | #define _led9 0x6f 69 | #define _ledA 0x77 70 | #define _ledB 0x7f 71 | #define _ledC 0x39 72 | #define _ledD 0x3f 73 | #define _ledE 0x79 74 | #define _ledF 0x71 75 | #define _ledL 0x38 76 | 77 | 78 | 79 | void delay( int times ); 80 | void sleep( int times ); 81 | int b( char* num_2 ); 82 | bit in( unsigned char port, char b ); 83 | 84 | 85 | 86 | void delay( int times ) 87 | { 88 | int i; 89 | while( times-- ) { 90 | i = 1E3; 91 | while( i-- ); 92 | } 93 | } 94 | 95 | 96 | 97 | void sleep( int times ) 98 | { 99 | delay( times ); 100 | } 101 | 102 | 103 | 104 | // binary -> decimal 105 | // case : 106 | // "1101" -> 13 107 | // "00001101" -> 13 108 | // "11001011" -> 203 109 | // "1100 1011" -> 203 ( support any space between numbers ) 110 | // "1010110111010" -> 5562 111 | 112 | int b( char* num_2 ) 113 | { 114 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 115 | int num_10 = 0; 116 | char i = 0; 117 | 118 | while( *( num_2 + 1 ) != '\0' ) { 119 | num_2++; 120 | i++; 121 | } 122 | 123 | while( i >= 0 ) 124 | { 125 | if( *num_2 != ' ' ) { 126 | if( *num_2 == '1' ) { 127 | num_10 += val; 128 | } 129 | val *= 2; 130 | } 131 | 132 | num_2--; 133 | i--; 134 | } 135 | 136 | return num_10; 137 | } 138 | 139 | 140 | 141 | bit in( unsigned char port, char b ) 142 | { 143 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 144 | return ( port & B[b] ) == B[b] ? 1 : 0; 145 | } -------------------------------------------------------------------------------- /p 115 定时方式 2 输出方波/p 115 定时方式 2 输出方波.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 115 定时方式 2 输出方波/p 115 定时方式 2 输出方波.DSN -------------------------------------------------------------------------------- /p 115 定时方式 2 输出方波/p 115 定时方式 2 输出方波.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | 5 | sbit P2_0 = P2^0; 6 | 7 | 8 | main() 9 | { 10 | TMOD = b("0000 0010"); 11 | TH0 = TL0 = 0x06; 12 | EA = ET0 = 1; 13 | TR0 = 1; 14 | 15 | while( true ); 16 | } 17 | 18 | 19 | t0() interrupt 1 20 | { 21 | P2_0 = !P2_0; 22 | } -------------------------------------------------------------------------------- /p 115 定时方式 2 输出方波/p 115 定时方式 2 输出方波.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 115 定时方式 2 输出方波/p 115 定时方式 2 输出方波.omf -------------------------------------------------------------------------------- /p 116 计数方式 2 计数显示器/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.6.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led_ 0xaf 40 | #define led0 0xc0 41 | #define led1 0xf9 42 | #define led2 0xa4 43 | #define led3 0xb0 44 | #define led4 0x99 45 | #define led5 0x92 46 | #define led6 0x82 47 | #define led7 0xf8 48 | #define led8 0x80 49 | #define led9 0x90 50 | #define ledA 0x88 51 | #define ledB 0x80 52 | #define ledC 0xcc 53 | #define ledD 0xc0 54 | #define ledE 0x86 55 | #define ledF 0x8e 56 | #define ledL 0x38 57 | 58 | #define _led_ 0x40 59 | #define _led0 0x3f 60 | #define _led1 0x06 61 | #define _led2 0x5b 62 | #define _led3 0x4f 63 | #define _led4 0x66 64 | #define _led5 0x6d 65 | #define _led6 0x7d 66 | #define _led7 0x07 67 | #define _led8 0x7f 68 | #define _led9 0x6f 69 | #define _ledA 0x77 70 | #define _ledB 0x7f 71 | #define _ledC 0x39 72 | #define _ledD 0x3f 73 | #define _ledE 0x79 74 | #define _ledF 0x71 75 | #define _ledL 0x38 76 | 77 | 78 | 79 | void delay( int times ); 80 | void sleep( int times ); 81 | int b( char* num_2 ); 82 | bit in( unsigned char port, char b ); 83 | 84 | 85 | 86 | void delay( int times ) 87 | { 88 | int i; 89 | while( times-- ) { 90 | i = 1E3; 91 | while( i-- ); 92 | } 93 | } 94 | 95 | 96 | 97 | void sleep( int times ) 98 | { 99 | delay( times ); 100 | } 101 | 102 | 103 | 104 | // binary -> decimal 105 | // case : 106 | // "1101" -> 13 107 | // "00001101" -> 13 108 | // "11001011" -> 203 109 | // "1100 1011" -> 203 ( support any space between numbers ) 110 | // "1010110111010" -> 5562 111 | 112 | int b( char* num_2 ) 113 | { 114 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 115 | int num_10 = 0; 116 | char i = 0; 117 | 118 | while( *( num_2 + 1 ) != '\0' ) { 119 | num_2++; 120 | i++; 121 | } 122 | 123 | while( i >= 0 ) 124 | { 125 | if( *num_2 != ' ' ) { 126 | if( *num_2 == '1' ) { 127 | num_10 += val; 128 | } 129 | val *= 2; 130 | } 131 | 132 | num_2--; 133 | i--; 134 | } 135 | 136 | return num_10; 137 | } 138 | 139 | 140 | 141 | bit in( unsigned char port, char b ) 142 | { 143 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 144 | return ( port & B[b] ) == B[b] ? 1 : 0; 145 | } -------------------------------------------------------------------------------- /p 116 计数方式 2 计数显示器/p 116 计数方式 2 计数显示器.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 116 计数方式 2 计数显示器/p 116 计数方式 2 计数显示器.DSN -------------------------------------------------------------------------------- /p 116 计数方式 2 计数显示器/p 116 计数方式 2 计数显示器.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | const char led[] = { _led0, _led1, _led2, _led3, _led4, _led5, _led6, _led7, _led8, _led9 }; 5 | char count = 0; 6 | 7 | main() 8 | { 9 | P0 = P2 = _led0; 10 | TMOD = b("0000 0110"); 11 | TH0 = TL0 = 0xff; 12 | EA = ET0 = 1; 13 | TR0 = 1; 14 | 15 | while( true ); 16 | } 17 | 18 | t0() interrupt 1 19 | { 20 | count++; 21 | if( count == 100 ) { 22 | count = 0; 23 | } 24 | 25 | P0 = led[ count / 10 ]; 26 | P2 = led[ count % 10 ]; 27 | } -------------------------------------------------------------------------------- /p 116 计数方式 2 计数显示器/p 116 计数方式 2 计数显示器.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 116 计数方式 2 计数显示器/p 116 计数方式 2 计数显示器.omf -------------------------------------------------------------------------------- /p 119 波形展宽/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.6.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led_ 0xaf 40 | #define led0 0xc0 41 | #define led1 0xf9 42 | #define led2 0xa4 43 | #define led3 0xb0 44 | #define led4 0x99 45 | #define led5 0x92 46 | #define led6 0x82 47 | #define led7 0xf8 48 | #define led8 0x80 49 | #define led9 0x90 50 | #define ledA 0x88 51 | #define ledB 0x80 52 | #define ledC 0xcc 53 | #define ledD 0xc0 54 | #define ledE 0x86 55 | #define ledF 0x8e 56 | #define ledL 0x38 57 | 58 | #define _led_ 0x40 59 | #define _led0 0x3f 60 | #define _led1 0x06 61 | #define _led2 0x5b 62 | #define _led3 0x4f 63 | #define _led4 0x66 64 | #define _led5 0x6d 65 | #define _led6 0x7d 66 | #define _led7 0x07 67 | #define _led8 0x7f 68 | #define _led9 0x6f 69 | #define _ledA 0x77 70 | #define _ledB 0x7f 71 | #define _ledC 0x39 72 | #define _ledD 0x3f 73 | #define _ledE 0x79 74 | #define _ledF 0x71 75 | #define _ledL 0x38 76 | 77 | 78 | 79 | void delay( int times ); 80 | void sleep( int times ); 81 | int b( char* num_2 ); 82 | bit in( unsigned char port, char b ); 83 | 84 | 85 | 86 | void delay( int times ) 87 | { 88 | int i; 89 | while( times-- ) { 90 | i = 1E3; 91 | while( i-- ); 92 | } 93 | } 94 | 95 | 96 | 97 | void sleep( int times ) 98 | { 99 | delay( times ); 100 | } 101 | 102 | 103 | 104 | // binary -> decimal 105 | // case : 106 | // "1101" -> 13 107 | // "00001101" -> 13 108 | // "11001011" -> 203 109 | // "1100 1011" -> 203 ( support any space between numbers ) 110 | // "1010110111010" -> 5562 111 | 112 | int b( char* num_2 ) 113 | { 114 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 115 | int num_10 = 0; 116 | char i = 0; 117 | 118 | while( *( num_2 + 1 ) != '\0' ) { 119 | num_2++; 120 | i++; 121 | } 122 | 123 | while( i >= 0 ) 124 | { 125 | if( *num_2 != ' ' ) { 126 | if( *num_2 == '1' ) { 127 | num_10 += val; 128 | } 129 | val *= 2; 130 | } 131 | 132 | num_2--; 133 | i--; 134 | } 135 | 136 | return num_10; 137 | } 138 | 139 | 140 | 141 | bit in( unsigned char port, char b ) 142 | { 143 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 144 | return ( port & B[b] ) == B[b] ? 1 : 0; 145 | } -------------------------------------------------------------------------------- /p 119 波形展宽/p 119 波形展宽.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 119 波形展宽/p 119 波形展宽.DSN -------------------------------------------------------------------------------- /p 119 波形展宽/p 119 波形展宽.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | sbit P3_0 = P3^0; 5 | 6 | main() 7 | { 8 | TMOD = 0x06; 9 | TL0 = 0xff; 10 | TR0 = true; 11 | 12 | while(1) 13 | { 14 | while( !TF0 ); 15 | 16 | TF0 = false; 17 | TMOD = 0x02; 18 | TL0 = 0x06; 19 | P3_0 = 0; 20 | 21 | while( !TF0 ); 22 | 23 | TF0 = false; 24 | TMOD = 0x06; 25 | TL0 = 0xff; 26 | P3_0 = 1; 27 | } 28 | } -------------------------------------------------------------------------------- /p 119 波形展宽/p 119 波形展宽.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 119 波形展宽/p 119 波形展宽.omf -------------------------------------------------------------------------------- /p 121 输出周期为 2.5s 的脉冲信号/kid-51.c: -------------------------------------------------------------------------------- 1 | /* version - 0.6.0 */ 2 | 3 | 4 | #define true 1 5 | #define false 0 6 | #define TRUE 1 7 | #define FALSE 0 8 | 9 | 10 | #define B0 0x01 // 0000 0001 11 | #define B1 0x02 // 0000 0010 12 | #define B2 0x04 // 0000 0100 13 | #define B3 0x08 // 0000 1000 14 | #define B4 0x10 // 0001 0000 15 | #define B5 0x20 // 0010 0000 16 | #define B6 0x40 // 0100 0000 17 | #define B7 0x80 // 1000 0000 18 | 19 | #define _B0 0xfe // 1111 1110 20 | #define _B1 0xfd // 1111 1101 21 | #define _B2 0xfb // 1111 1011 22 | #define _B3 0xf7 // 1111 0111 23 | #define _B4 0xef // 1110 1111 24 | #define _B5 0xdf // 1101 1111 25 | #define _B6 0xbf // 1011 1111 26 | #define _B7 0x7f // 0111 1111 27 | 28 | #define b0 0x1 // 0001 29 | #define b1 0x2 // 0010 30 | #define b2 0x4 // 0100 31 | #define b3 0x8 // 1000 32 | 33 | #define _b0 0xe // 1110 34 | #define _b1 0xd // 1101 35 | #define _b2 0xb // 1011 36 | #define _b3 0x7 // 0111 37 | 38 | 39 | #define led_ 0xaf 40 | #define led0 0xc0 41 | #define led1 0xf9 42 | #define led2 0xa4 43 | #define led3 0xb0 44 | #define led4 0x99 45 | #define led5 0x92 46 | #define led6 0x82 47 | #define led7 0xf8 48 | #define led8 0x80 49 | #define led9 0x90 50 | #define ledA 0x88 51 | #define ledB 0x80 52 | #define ledC 0xcc 53 | #define ledD 0xc0 54 | #define ledE 0x86 55 | #define ledF 0x8e 56 | #define ledL 0x38 57 | 58 | #define _led_ 0x40 59 | #define _led0 0x3f 60 | #define _led1 0x06 61 | #define _led2 0x5b 62 | #define _led3 0x4f 63 | #define _led4 0x66 64 | #define _led5 0x6d 65 | #define _led6 0x7d 66 | #define _led7 0x07 67 | #define _led8 0x7f 68 | #define _led9 0x6f 69 | #define _ledA 0x77 70 | #define _ledB 0x7f 71 | #define _ledC 0x39 72 | #define _ledD 0x3f 73 | #define _ledE 0x79 74 | #define _ledF 0x71 75 | #define _ledL 0x38 76 | 77 | 78 | 79 | void delay( int times ); 80 | void sleep( int times ); 81 | int b( char* num_2 ); 82 | bit in( unsigned char port, char b ); 83 | 84 | 85 | 86 | void delay( int times ) 87 | { 88 | int i; 89 | while( times-- ) { 90 | i = 1E3; 91 | while( i-- ); 92 | } 93 | } 94 | 95 | 96 | 97 | void sleep( int times ) 98 | { 99 | delay( times ); 100 | } 101 | 102 | 103 | 104 | // binary -> decimal 105 | // case : 106 | // "1101" -> 13 107 | // "00001101" -> 13 108 | // "11001011" -> 203 109 | // "1100 1011" -> 203 ( support any space between numbers ) 110 | // "1010110111010" -> 5562 111 | 112 | int b( char* num_2 ) 113 | { 114 | int val = 1; // 1 -> 2 -> 4 -> 8 -> ... 115 | int num_10 = 0; 116 | char i = 0; 117 | 118 | while( *( num_2 + 1 ) != '\0' ) { 119 | num_2++; 120 | i++; 121 | } 122 | 123 | while( i >= 0 ) 124 | { 125 | if( *num_2 != ' ' ) { 126 | if( *num_2 == '1' ) { 127 | num_10 += val; 128 | } 129 | val *= 2; 130 | } 131 | 132 | num_2--; 133 | i--; 134 | } 135 | 136 | return num_10; 137 | } 138 | 139 | 140 | 141 | bit in( unsigned char port, char b ) 142 | { 143 | unsigned char B[] = { B0, B1, B2, B3, B4, B5, B6, B7 }; 144 | return ( port & B[b] ) == B[b] ? 1 : 0; 145 | } -------------------------------------------------------------------------------- /p 121 输出周期为 2.5s 的脉冲信号/p 121 输出周期为 2.5s 的脉冲信号.DSN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 121 输出周期为 2.5s 的脉冲信号/p 121 输出周期为 2.5s 的脉冲信号.DSN -------------------------------------------------------------------------------- /p 121 输出周期为 2.5s 的脉冲信号/p 121 输出周期为 2.5s 的脉冲信号.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "kid-51.c" 3 | 4 | unsigned char count = 0; 5 | 6 | main() 7 | { 8 | TMOD = b("0000 0001"); 9 | TH0 = 0xd1, TL0 = 0x20; 10 | EA = ET0 = 1; 11 | TR0 = true; 12 | while( true ); 13 | } 14 | 15 | t0() interrupt 1 16 | { 17 | TH0 = 0xd1, TL0 = 0x20; 18 | 19 | count++; 20 | if( count == 50 ) { 21 | P2 = 0; 22 | } else if ( count == 250 ) { 23 | P2 = 1; 24 | count = 0; 25 | } 26 | } -------------------------------------------------------------------------------- /p 121 输出周期为 2.5s 的脉冲信号/p 121 输出周期为 2.5s 的脉冲信号.omf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ccodebaby/Singlechip-80C51/38d4a53a0995fd7c94066f4e2bcc11b4ca75a8aa/p 121 输出周期为 2.5s 的脉冲信号/p 121 输出周期为 2.5s 的脉冲信号.omf --------------------------------------------------------------------------------