找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

矩阵键盘移位数码管显示问题

[复制链接]
admin 发表于 2012-9-2 17:25:03 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define uchar unsigned char
#define uint unsigned int
char key_count=0;
char last_key= -1;
char num[8];
char key_buf[]={0x7e,0x7d,0x7b,0x77,0xbe,0xbd,0xbb,0xb7,
0xde,0xdd,0xdb,0xd7,0xee,0xed,0xeb,0xe7};
unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0-F
/*------------------------------------------------
函数声明
------------------------------------------------*/
uchar keyscan(void);//键盘扫描
void delay(uint i); //演示程序
/*------------------------------------------------
主函数
------------------------------------------------*/
void main()
{
uchar key,n=0,k=0;

while(1)
{
key=keyscan(); //调用键盘扫描,
if (key != last_key) //if (key != -1)
{
last_key = key; //key2 = getKey();
delay(500);
if(key!=-1) //if(key2 == -1)
{


// 有按键按下
for (n=0; n<7; n++)
{
num[n] = num[n+1];// LED显示左移一位

}
num[7] = key; // 最右显示新按下键的键值


}
}

for(k=0;k<8;k++)
{
P0 = dofly[num[k]];
P2 = (k); //位选,k=1表示选通第一个数码管...
delay(300);
}
}
}
/*------------------------------------------------
键盘扫描程序
------------------------------------------------*/
uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l,k,i;//行列值中间变量
P3=0x0f; //行线输出全为0
cord_h=P3&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{

cord_h=P3&0x0f; //读入列线值
P3=cord_h|0xf0; //输出当前列线值
cord_l=P3&0xf0; //读入行线值
k=(cord_h+cord_l);
for(i=0;i<16;i++)
{
if(key_buf[i]==k)
{

return i;
}
}
}
}return -1; //返回该值
}
/*------------------------------------------------
延时程序
------------------------------------------------*/
void delay(uint i) //延时函数
{
while(i--);
}
这样的程序为什么实现不了第一次按下一次按键,第一个数码管显示相应的值,再按一次,第一位数码管显示,同时第二位数码管上保留我第一次输入的数。以此类推。按完8次后,数码管上显示我刚才按的8个数字。
是什么问题呢!各位高手帮忙看看修改修改!!
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-29 02:49 , Processed in 0.053358 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表