在学习单片机点亮数码管的时候,为实现0-9数字的依次显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| #include "reg52.h" typedef unsigned char u8; typedef unsigned int u16;
sbit P22 = P2^2; sbit P23 = P2^3; sbit P24 = P2^4;
void delay(unsigned int ms) { unsigned char i, j; while (ms--) { i = 2; j = 239; do { while (--j); } while (--i); } }
int toBin(unsigned char n) { int binaryNumber = 0; int remainder, i = 1, step = 1; while (n != 0) { remainder = n % 2; n /= 2; binaryNumber += remainder * i; i *= 10; } return binaryNumber; }
void showLed(unsigned char loc, unsigned char num) { code const int NUMBER[] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F };
int b = toBin(loc); P24 = b / 100; P23 = b / 10 % 10; P22 = b % 10; P0 = NUMBER[num]; delay(1); P0 = 0X00; }
void main() { while (1) { int i; for (i = 0; i < 10; i++) { showLed(2, i); delay(1000); } } }
|
其中NUMBER
中定义的是0-9数字在单片机中二进制的表示
toBin()
是将十进制数转为二进制,方便我们在调用的时候直接通过十进制数就能指定到对应的数码管
通用大部分STC89c5xx
的单片机