JP165跳线帽断开、JP10连接J12(为了实现按键控制LED灯的效果)、JP5连接JP8、J21接左边

3.5.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文件代码:

 

  •  
#ifndef KEY_H#define KEY_H#include <reg51.h>#include "type.h"#include "delay.h"#include "led.h"u8 Key_Scan(void);#define KEY P1  //定义按键sbit key1=KEY^0;sbit key2=KEY^1;sbit key3=KEY^2;sbit key4=KEY^3;sbit key5=KEY^4;sbit key6=KEY^5;sbit key7=KEY^6;sbit key8=KEY^7;#endif

Key.c文件代码:

 

#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_Htypedef unsigned char u8;typedef unsigned short u16;typedef unsigned int u32;#endif