4X4 矩阵键盘,实现自己定义键号为0~9,A~F,编程实现按下按键抬起后在多位数码管上将当前显示数字左移一位

2024-12-19 13:55:21
推荐回答(2个)
回答1:

#include 

#define uchar unsigned char

#define uint unsigned int

uchar Bits=0,Ten=0,Hundred=0,Thousand=0;

uchar code ledshow[16]={ 0x3F,/*0*/

        0x06,/*1*/

        0x5B,/*2*/

        0x4F,/*3*/

        0x66,/*4*/

        0x6D,/*5*/

        0x7D,/*6*/

        0x07,/*7*/

        0x7F,/*8*/

        0x6F,/*9*/

        0x77,/*A*/

        0x7C,/*b*/

        0x39,/*C*/

        0x5E,/*d*/

        0x79,/*E*/

        0x71,/*F*/} ; //共阴数码管代码

uchar code jz_code[17]={0xff,

                        0xee,0xed,0xeb,0xe7,

0xde,0xdd,0xdb,0xd7,

0xbe,0xbd,0xbb,0xb7,

0x7e,0x7d,0x7b,0x77};  //键盘代码

void delay(unsigned char a)  //延时

{

unsigned char i;

while(a--)

for(i=100;i>0;i--);

}

uchar kbscan(void)          //键盘扫描

{

  unsigned char hang,lie,key;

    P1=0xf0;

delay(5);

lie=P1;

P1=0x0f;

delay(5);

hang=P1;

for(key=16;key>0;key--)

{

 if(jz_code[key]==(hang|lie)) break;

}

return (key);

}

void data_l(void)  //左移

{

 uchar i;

 static keytemp=0;

 i= kbscan();

 if(i!=0)

 {

 if(!(keytemp==i))

 {

 keytemp=i;

 Thousand=Hundred;     //千位

 Hundred=Ten;//百位

 Ten=Bits;    //十位

 Bits=i-1;    //个位

 }

 }

 else keytemp=0;

}

void display(void)//数码管显示,调试方法:数码管间隔跳动函数中 delay(5);四个,调小

{

 data_l();

 P0=ledshow[Thousand];

 P2_0=0;

 delay(5);

 P2_0=1;

 P0=ledshow[Hundred];

 P2_1=0;

 delay(5);

 P2_1=1;

 P0=ledshow[Ten];

 P2_2=0;

 delay(5);

 P2_2=1;

 P0=ledshow[Bits];

 P2_3=0;

 delay(5);

 P2_3=1;

}

                  

void main(void)

{  

   P2=0xff;

   while(1)

   {

display();

   }

}

回答2:

写过这种程序。 用百度 网页,搜索:

做而论道 按键控制移位显示

百度一下,即可找到。