历史上的今天
返回首页

历史上的今天

今天是:2025年07月30日(星期三)

正在发生

2021年07月30日 | 51单片机开发之独立按键

2021-07-30 来源:eefocus

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


3.5.2 示例代码


下面代码都使用多文件编程模型,这里贴出每个文件的主要代码。


下面代码实现的效果是,按下按键控制LED灯。


Main.c文件:


#include

#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

#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

#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


推荐阅读

史海拾趣

Altonics公司的发展小趣事

随着技术的不断进步,Altonics公司始终保持着对创新的热情。公司加大研发投入,引进高端技术人才,不断推出具有创新性和竞争力的新产品。其中,公司自主研发的一款智能传感器,凭借其高精度、高稳定性的特点,迅速占领市场份额,成为工业自动化领域的明星产品。

Alpha (Taiwan)公司的发展小趣事

Alpha (Taiwan)公司自创立之初,便致力于电子技术的研发与创新。面对日益激烈的市场竞争,公司不断投入资金,引进先进设备,吸引了一批优秀的研发人才。这些人才凭借深厚的专业知识和敏锐的市场洞察力,成功开发出一系列具有竞争力的电子产品,如高性能的芯片、精密的传感器等。这些产品的推出,不仅提升了公司的市场地位,也为公司的快速发展奠定了坚实基础。

ETC1公司的发展小趣事

万集科技是ETC行业中另一家知名的企业。公司专注于ETC设备的研发、生产和销售,以及ETC系统的集成与服务。在市场拓展方面,万集科技采取了多元化的策略,不仅与国内众多高速公路管理机构建立了合作关系,还积极开拓海外市场。通过不断的市场拓展和品牌建设,万集科技逐渐成为了ETC行业中的佼佼者。

迦美信芯(CanaanTek)公司的发展小趣事

随着智能手机市场的不断成熟和发展,手机射频前端对频段的支持、开关速度的变化以及天线调谐方向提出了更高的要求。迦美信芯紧抓这一市场机遇,早在2014年就开始布局射频前端芯片领域,专注该领域芯片的研发与设计。经过多年的努力和发展,迦美信芯已成为国内领先的手机品牌在天线开关以及天线调谐器方面的主要供应商之一,为全球TOP 5的手机终端客户提供大量优质产品。

Gigarams Semiconductor Device Corp公司的发展小趣事
这可能是由于控制算法复杂或系统响应速度不足导致的。解决方案包括简化控制算法、提高系统响应速度或采用更高效的控制策略。
DINTEK公司的发展小趣事
这可能是由于传感器精度不足、控制器算法不准确或驱动器性能不稳定等原因导致的。解决方案包括提高传感器精度、优化控制器算法和更换性能更稳定的驱动器。

问答坊 | AI 解惑

转让友善micro2440sdk开发板

         本人去年7月份左右买了友善之臂的micro2440sdk开发板,现在将其转让,并且我愿意回答bootloader以及wince驱动的问题,其余不懂的我也会给一些意见。开发板网址http://www.arm9.net/micro2440sdk.asp就是这 ...…

查看全部问答>

招聘Wince开发工程师

,地点深圳,有意发邮件到k_s@126.com…

查看全部问答>

刷卡支付功能的手机的相关技术

可以给我讲讲有关刷卡支付功能的手机的关键开发技术吗?…

查看全部问答>

请高手前来帮忙-难题!

情况如下: 开发板为AU1200,自己进行了重开发。换掉了原来的网卡芯片。换成了DM9000AE 板子启动后。在YAMON无法网络下载(问题1.这里是否可以修改YAMON的源码,将网卡配置通?如果可以请告之方法,我对此一无所知。),通过串口下载了eboot.sre ...…

查看全部问答>

WINCE 5.0 Proxy 客户端设置问题?

针对于Platform builder(Windows CE 5.0)的模拟环境下采用WININET API进行设置,通过Proxy访问外部网,其中Proxy需要认证,却可以通过,而相应的OS烧录入设备中却不通,何故?? PS. 应用WININET相关API如下:InternetOpen, InternetConnect, InternetS ...…

查看全部问答>

一个不知名的符号

读程序的时候突然发现的,volatile   GPIO   PA @ 0x5000; volatile   GPIO   PB @ 0x5005; 其中@ 符号是什么意思呢,请教各位大虾了!最好能具体点,关于这个符号的,谢谢!…

查看全部问答>

【最小系统板】大家用过什么样的彩色LED,能不能推荐一款

最小系统板的设计过程中,斑斑deweyled建议我加一个彩色LED到系统板上去。 我觉得挺有意思,配合PWM可以发出不同的颜色,所以在这里请大家推荐一种LED, 还是那个小要求,最好体积小,并且容易获得。…

查看全部问答>

430自带ADC外部能用的最多有多少路

哪个系列带的ADC最多,是5系的吗…

查看全部问答>

世界上最小的单道无线心电图仪

刚看到优酷上的视频, http://v.youku.com/v_show/id_XNTMxOTE4Njc2.html 视频中的无线心电图仪看起来非常小, 正好我们公司也在搞这方面的东西,  大家讨论一下, 优缺点, 市场前景, 呵呵! …

查看全部问答>