帮忙写个程序,单片机控制的!4×4矩阵键盘控制八个等,前八个开关每个开关控制一个灯亮,

2025-03-20 02:12:52
推荐回答(3个)
回答1:

#include"reg52.h"

#define uchar unsigned char
#define uint unsigned int
#define light P2
#define keyboard P1

uchar key,num;

uchar table0[] = {0x00,
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar table1[] = {0xef,0xdf,0xbf,0x7f};

sbit R1 = P1^0;
sbit R2 = P1^1;
sbit R3 = P1^2;
sbit R4 = P1^3;

void delay(uint z){ //time delay
uint x,y;
for(x = 0;x < z;x++)
for(y = 0;y < 110;y++);
}

void display(){ //display
light = table0[num];
}

void keyvalue(uint a,uint b,uint c,uint d){
if(R1 == 0)num = a;
if(R2 == 0)num = b;
if(R3 == 0)num = c;
if(R4 == 0)num = d;
}

void keyscan(){
uint i;
for(i = 0;i < 4;i++){
keyboard = table1[i];
key = keyboard;
key = key & 0x0f;
while(key != 0x0f){
switch(i){
case(0):keyvalue(1,5,9,13);break;
case(1):keyvalue(2,6,10,14);break;
case(2):keyvalue(3,7,11,15);break;
case(3):keyvalue(4,8,12,16);break;
}
while(key != 0x0f){
key = keyboard;
key = key & 0x0f;
}
}
}
}

void main(){
while(1){
keyscan();
display();
}
}

回答2:

具体要求没说明白是后8个灯每个开关任意控制两个灯吗

回答3:

这问题没有说清楚啊!后八个开关怎么了?