代码:
#include "reg51.h"
// 数码管共阴极字符数组 0-f
unsigned char seg_code[16] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
void delay(){ // 延时 n ms
unsigned int i = 10000;
while (i--);
}
void display(unsigned char n){
switch(n){
case 0xff - 0x11: P0 = seg_code[0]; break;
case 0xff - 0x12: P0 = seg_code[1]; break;
case 0xff - 0x14: P0 = seg_code[2]; break;
case 0xff - 0x18: P0 = seg_code[3]; break;
case 0xff - 0x21: P0 = seg_code[4]; break;
case 0xff - 0x22: P0 = seg_code[5]; break;
case 0xff - 0x24: P0 = seg_code[6]; break;
case 0xff - 0x28: P0 = seg_code[7]; break;
case 0xff - 0x41: P0 = seg_code[8]; break;
case 0xff - 0x42: P0 = seg_code[9];break;
case 0xff - 0x44: P0 = seg_code[10];break;
case 0xff - 0x48: P0 = seg_code[11];break;
case 0xff - 0x81: P0 = seg_code[12];break;
case 0xff - 0x82: P0 = seg_code[13];break;
case 0xff - 0x84: P0 = seg_code[14];break;
case 0xff - 0x88: P0 = seg_code[15];break;
default: break;
}
}
// 按键延时实现 索引自增
void key_scan(){
unsigned char tmp1, tmp2, tmp;
P2 = 0xf0;
if (P2 != 0xf0){ // 检测按键是否变化
delay();
tmp1 = P2;
P2 = 0x0f;
if (P2 != 0x0f){
tmp2 = P2;
}
}
tmp = tmp1 + tmp2;
display(tmp);
}
void main(){
P0 = 0x00;
P1 = 0x7f;
while (1){
key_scan();
}
}