完善下面代码#include <reg52.h>//包含51头文件 #include <intrins.h>//包含移位标准库函数头文件 #define uint unsigned int #define uchar unsigned char sbit DU = P2^6;//数码管段选 sbit WE = P2^7;//数码管段选 uchar num;//数码管显示的值 uchar KeyValue = 20;//按键值 显示- //共阴数码管段选表 uchar code tabel[]= { //0 1 2 3 4 5 6 7 8 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, //9 A B C D E F H L 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x76, 0x38}; void delay(uint z) // 延时函数 { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } void KeyScan() // 描述 :4*4矩阵键盘与独立键盘扫描 { P3 = 0XF0;//列扫描 if(P3 != 0XF0)// ; { delay(10);// ; if(P3 != 0XF0)// ; { switch(P3) //判断那一列被按下 { case 0xe0: KeyValue = 0; break;//第一列被按下 case 0xd0 ;//第二列被按下 ;//第三列被按下 ;//第四列被按下 } P3 = 0X0F;// ; switch(P3) // ; { case 0x0e: KeyValue = KeyValue; break;//第一行被按下 case 0x0d: KeyValue = KeyValue + 4; break;//第二行被按下 ;//第三行被按下 ;//第四行被按下 } ;//松手检测 } } } void main()//main函数自身会循环 { WE = 1;// ; P0 = 0XFE; // ; WE = 0;// ; DU = 1;// ; while(1) { KeyScan( ); //16个按键键盘扫描 P0 = tabel[KeyValue];// ; } }
时间: 2024-02-10 22:17:33 浏览: 78
这段代码应该是一个基于51单片机的数码管显示程序,其中包含了一个键盘扫描函数。程序中使用了共阴数码管段选表,通过按键扫描函数获取按键值,然后将按键值转换为对应的数码管段选值,最终通过P0口输出到数码管上显示。其中,P2.6和P2.7分别用作数码管的段选和位选,P3口用作按键扫描输入口,P0口用作数码管的数据口输出。程序中还有一个延时函数delay()用于延时操作。
需要注意的是,程序中有一些语法错误,如在KeyScan()函数中的switch语句中缺少了冒号,应该改为:
```
switch(P3)
{
case 0xe0: KeyValue = 0; break;//第一列被按下
case 0xd0: KeyValue = KeyValue; break;//第二列被按下
case 0xb0: KeyValue = KeyValue; break;//第三列被按下
case 0x70: KeyValue = KeyValue; break;//第四列被按下
}
P3 = 0X0F;
switch(P3)
{
case 0x0e: KeyValue = KeyValue; break;//第一行被按下
case 0x0d: KeyValue = KeyValue + 4; break;//第二行被按下
case 0x0b: KeyValue = KeyValue + 8; break;//第三行被按下
case 0x07: KeyValue = KeyValue + 12; break;//第四行被按下
}
```
此外,还有一些注释不全,应该完善一下。
阅读全文