3.3 独立按键
3.3.1 按键原理图
JP165跳线帽断开、JP10连接J12(为了实现按键控制LED灯的效果)、JP5连接JP8、J21接左边
3.3.2 示例代码
下面代码都使用多文件编程模型,这里贴出每个文件的主要代码。
下面代码实现的效果是,按下按键控制LED灯。
Main.c文件:
#include <reg51.h> #include "delay.h" #include "key.h" #include "type.h" #include "led.h" int main() { u8 key; LED=0; //关闭所有LED灯,51单片机默认输出高电平,LED默认高电平点亮 while(1) { key=Key_Scan(); if(key) { LED=~LED; //控制8盏灯 } } }
Key.h文件代码:
#include "key.h" /* 按键扫描函数 */ u8 Key_Scan(void) { static u8 flag=0; if((KEY!=0xFF)&&(flag==0)) //判断有没有按键按下 { DelayMs(20); //消抖 flag=1; //标志按键已经被按下 if(key1==0)return 1; if(key2==0)return 2; if(key3==0)return 3; if(key4==0)return 4; if(key5==0)return 5; if(key6==0)return 6; if(key7==0)return 7; if(key8==0)return 8; } else if(KEY==0xFF) //判断按键是否全部松开 { flag=0; //清除按下标志位 } return 0; }
Led.h文件代码:
#ifndef LED_H #define LED_H #include <reg51.h> #include "type.h" #include "delay.h" #define LED P0 //定义LED引脚 sbit LED1=P0^0; sbit LED2=P0^1; sbit LED3=P0^2; sbit LED4=P0^3; sbit LED5=P0^4; sbit LED6=P0^5; sbit LED7=P0^6; sbit LED8=P0^7; #endif
Type.h文件代码:
#ifndef TYPE_H #define TYPE_H typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; #endif