第1个回答 2019-09-23
/*******************************************************************************
*
* 普中科技
--------------------------------------------------------------------------------
* 实 验 名 : 按键选择LED灯左右移动实验
* 实验说明 : 按键选择LED灯左右移动
* 连接方式 : 见接线图
* 注 意 :
*******************************************************************************/
//--包含你要使用的头文件--//
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>
//--定义要使用的IO口--//
sbit K1 = P1^0; //对应按钮K1
sbit K2 = P1^1; //对应按钮K2
sbit L1=P2^4;
sbit L2=P2^5;
sbit L3=P2^6;
sbit L4=P2^7;
//--定义全局函数--//
void Delay10ms(unsigned int c); //延时10ms
unsigned char Key_Scan1();
unsigned char Key_Scan2();
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main(void)
{
unsigned char keyNum1,keyNum2;
while (1)
{
keyNum1= Key_Scan1(); //扫描键盘
keyNum2= Key_Scan2();
if (keyNum1 == 0,keyNum2==0) //如果键值返回1
{
L1=1;
}
if (keyNum1 == 0,keyNum2==1) //如果键值返回1
{
L2=1;
}
if (keyNum1 == 1,keyNum2==0) //如果键值返回1
{
L3=1;
}
if (keyNum1 == 1,keyNum2==1) //如果键值返回1
{
L4=1;
}
}
}
/*******************************************************************************
* 函 数 名 : Key_Scan()
* 函数功能 : 扫描键盘
* 输 入 : 无
* 输 出 : 读取到的键值
*******************************************************************************/
unsigned char Key_Scan1()
{
unsigned char key1= 0, i; //保存键值
//--检测按键1--//
if (K1==0) //检测按键K1是否按下
{
Delay10ms(1); //消除抖动
if (K1==0) //再次检测按键是否按下
{
key1 = 1;
i = 0;
while ((i<50) && (K1==0)) //检测按键是否松开
{
Delay10ms(1);
i++;
}
}
}
return key1;
}
unsigned char Key_Scan2()
{ //--检测按键2--//
unsigned char key2= 0,O;
if (K2==0) //检测按键K1是否按下
{
Delay10ms(1); //消除抖动
if (K2==0) //再次检测按键是否按下
{
key2 =1;
O = 0;
while ((0<50) && (K2==0)) //检测按键是否松开
{
Delay10ms(1);
O++;
}
}
}
return key2; //将读取到键值的值返回
}
/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
你看下行不行 我没板子没实验本回答被提问者和网友采纳