|
本帖最后由 此昵称_o03iZ 于 2019-7-21 23:30 编辑
#include"reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
void delay(u16 i)
{
while (i--);
}
sbit la=P2^0;
sbit lb=P2^1;
sbit lc=P2^2;
u8 smg[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
int main ()
{
P1=0x00;
while (1)
{
int point;
P0=0x0f;
if (P0!=0x0f){
delay (1000);
if (P0!=0x0f)
{
switch(P0)
{
case (0x0e):point=0;break;
case (0x0d):point=4;break;
}
P0=0xf0;
switch(P0)
{
case (0xe0):point=point;break;
case (0xd0):point=point+1;break;
case (0xb0):point=point+2;break;
case (0x70):point=point+3;break;
}
switch(point)
{
case 0:la=0,lb=0,lc=0; P1=smg[point];break;
case 1:la=1,lb=0,lc=0; P1=smg[point];break;
case 2:la=0,lb=1,lc=0; P1=smg[point];break;
case 3:la=1,lb=1,lc=0; P1=smg[point];break;
case 4:la=0,lb=0,lc=1; P1=smg[point];break;
case 5:la=1,lb=0,lc=1; P1=smg[point];break;
case 6:la=0,lb=1,lc=1; P1=smg[point];break;
case 7:la=1,lb=1,lc=1; P1=smg[point];break;
}
}
while (P0!=0xf0){}
}
}
return 0;
} 各位大哥帮我看下这个代码有没有问题,我这个是矩阵按键和动态数码管结合起来,按第一个就第一个亮0,按第二个就第二个亮一,依次类推,但有时候按到某一个再不管按其他的哪个都不会变化了,有时候又不会,我不知道是不是代码的问题。
|
|