求指错,C51矩阵按键数码管显示
程序编译通过,但是数码管完全没反应,由于刚刚接触不多,对于一些语句的顺序和用法可能错了自己看不出来
#include<reg52.h>
sbit duan=P2^6;//定义数码管段选段选
sbit wei=P2^7;//定义数码管位选
unsigned char Hang_scan[]={0xfe,0xfd,0xfb,0xf7};//行扫描初始值数组
unsigned char DIGITAL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char key=0;//按键编号
void delay();//声明延时函数
void scan(){
unsigned char i;//行编号
for(i=0;i<4;i++){
P3=Hang_scan[i];//逐行赋初始值
if(P3!=Hang_scan[i]){//按键消抖
delay();
if(P3!=Hang_scan[i]){//再次判断按键是否按下
switch(P3&0xf0){//由按键按下后P3高四位的值判断列位置
case 0xe0:key=4*i+1; break;//第1列
case 0xd0:key=4*i+2; break;//2
case 0xb0:key=4*i+3; break;//3
case 0x70:key=4*i+4; break;//4
}
}while(P3!=Hang_scan[i]){}//判断按键是否弹起
}
}
}
void delay(){
unsigned char j;
for(j=0;j<1000;j++);
}
void main(){
while(1){
scan();
wei=1;//打开位选
P0=0xfb;//选择第二位
wei=0;
duan=1;//打开段选
P0=DIGITAL[key-1];//给数码管端口赋值
duan=0;
}
}