为什么这个矩阵键盘扫描程序不行,下载到单片机后没有反应?求大神!
时间:10-02
整理:3721RD
点击:
#include <reg52.h>
#include "74hc595.h"
#include "boardinit.h"
#include "delay.h"
uchar juzhen_keyscan();
sbit weixuan=P2^6; //数码管位选
sbit duanxuan=P2^5; //数码管段选
unsigned char code shuzhi[19]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0X89,0X7F,0XBF}; // 共阳数码管显示数组 0-dp
uchar temp,num_juzhen; // 0 1 2 3 4 5 6 7 8 9 A b c d E F H . -
void main()
{
boardinit();//板卡硬件初始化
P3=0xff; //P3口初始化
P2=0X00; //P2口初始化
duanxuan=0;
weixuan =0;
P0=0XFF; //选通数码管所有位
weixuan=1;
weixuan=0;
duanxuan=1;//让数码管实时更新显示字符
P0=shuzhi[8];
delay(100);
while(1)
{
P0=shuzhi[juzhen_keyscan()];//送字符编码,到数码管显示。
}
}
uchar juzhen_keyscan()
{
//*************************************************************************
P3=0Xfe;//扫描第一行
temp=P3;
if(temp!=0xfe) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xfe)
{
// while(!(P3==0xfe));
switch(temp)
{
case 0x7e: num_juzhen=1;
break;
case 0xbe: num_juzhen=2;
break;
case 0xde: num_juzhen=3;
break;
case 0xee: num_juzhen=4;
break;
}
}
}
//*************************************************************************
//*************************************************************************
P3=0Xfd;//扫描第二行
temp=P3;
if(temp!=0xfd) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xfd)
{
//while(!(P3==0xfd));
switch(temp)
{
case 0x7d: num_juzhen=5;
break;
case 0xbd: num_juzhen=6;
break;
case 0xdd: num_juzhen=7;
break;
case 0xed: num_juzhen=8;
break;
}
}
}
//*************************************************************************
//*************************************************************************
P3=0Xfb;//扫描第三行
temp=P3;
if(temp!=0xfb) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xfb)
{
//while(!(P3==0xfb));
switch(temp)
{
case 0x7b: num_juzhen=9;
break;
case 0xbb: num_juzhen=10;
break;
case 0xdb: num_juzhen=11;
break;
case 0xeb: num_juzhen=12;
break;
}
}
}
//*************************************************************************
//*************************************************************************
P3=0Xf7;//扫描第四行
temp=P3;
if(temp!=0xf7) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xf7)
{
//while(!(P3==0xf7));
switch(temp)
{
case 0x77: num_juzhen=13;
break;
case 0xb7: num_juzhen=14;
break;
case 0xd7: num_juzhen=15;
break;
case 0xe7: num_juzhen=16;
break;
}
}
}
return num_juzhen;
//*************************************************************************
}
#include "74hc595.h"
#include "boardinit.h"
#include "delay.h"
uchar juzhen_keyscan();
sbit weixuan=P2^6; //数码管位选
sbit duanxuan=P2^5; //数码管段选
unsigned char code shuzhi[19]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0X89,0X7F,0XBF}; // 共阳数码管显示数组 0-dp
uchar temp,num_juzhen; // 0 1 2 3 4 5 6 7 8 9 A b c d E F H . -
void main()
{
boardinit();//板卡硬件初始化
P3=0xff; //P3口初始化
P2=0X00; //P2口初始化
duanxuan=0;
weixuan =0;
P0=0XFF; //选通数码管所有位
weixuan=1;
weixuan=0;
duanxuan=1;//让数码管实时更新显示字符
P0=shuzhi[8];
delay(100);
while(1)
{
P0=shuzhi[juzhen_keyscan()];//送字符编码,到数码管显示。
}
}
uchar juzhen_keyscan()
{
//*************************************************************************
P3=0Xfe;//扫描第一行
temp=P3;
if(temp!=0xfe) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xfe)
{
// while(!(P3==0xfe));
switch(temp)
{
case 0x7e: num_juzhen=1;
break;
case 0xbe: num_juzhen=2;
break;
case 0xde: num_juzhen=3;
break;
case 0xee: num_juzhen=4;
break;
}
}
}
//*************************************************************************
//*************************************************************************
P3=0Xfd;//扫描第二行
temp=P3;
if(temp!=0xfd) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xfd)
{
//while(!(P3==0xfd));
switch(temp)
{
case 0x7d: num_juzhen=5;
break;
case 0xbd: num_juzhen=6;
break;
case 0xdd: num_juzhen=7;
break;
case 0xed: num_juzhen=8;
break;
}
}
}
//*************************************************************************
//*************************************************************************
P3=0Xfb;//扫描第三行
temp=P3;
if(temp!=0xfb) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xfb)
{
//while(!(P3==0xfb));
switch(temp)
{
case 0x7b: num_juzhen=9;
break;
case 0xbb: num_juzhen=10;
break;
case 0xdb: num_juzhen=11;
break;
case 0xeb: num_juzhen=12;
break;
}
}
}
//*************************************************************************
//*************************************************************************
P3=0Xf7;//扫描第四行
temp=P3;
if(temp!=0xf7) //判断如果是否有按键按下
{
//delay(10);//去除抖动 10ms
temp=P3;
if(temp!=0xf7)
{
//while(!(P3==0xf7));
switch(temp)
{
case 0x77: num_juzhen=13;
break;
case 0xb7: num_juzhen=14;
break;
case 0xd7: num_juzhen=15;
break;
case 0xe7: num_juzhen=16;
break;
}
}
}
return num_juzhen;
//*************************************************************************
}
好啊,一起学习
我也在学这个,可以一起讨论么