三种按键处理函数

发布者:温暖阳光最新更新时间:2016-12-30 来源: eefocus关键字:按键  处理函数 手机看文章 扫描二维码
随时随地手机看文章

 1 void keyScan(void)

 2 {

 3      char i;

 4      uint8 m;

 5      uint8 R0 = 0;

 6      TRISB=0x38; //xls 2012-11-26 增加复位键RB5

 7 

 8      R0 = PORTB; //RB3,RB4,RB5按键读取

 9     R0 &=0x38; //保留键值

10     R0 = ~R0; //正逻辑

11     /*以下是RC滤波处理,R0,R1對應於KEY1,KEY2的BUF*/

12      datakey.allkey = (R0>>3);//将读到的键值移至最右端 比如当前在RB1 顾右移一位 如果为RB4 R3则右移3位

13     for (i=0;i<3;i++)//这里根据有几个独立按键进行设置 只有一个按键时则i=1,三个则i=3  

14     {

15        s_kcap[i]=((s_kcap[i]<<3)-s_kcap[i]+(datakey.allkey&0x01)<<4+4)>>3; //rc滤波及4舍5入

16      datakey.allkey>>=1;

17       if (s_kcap[i]>12)

18      {

19         datakey.allkey|=0x80;

20      } 

21   } 

22    m=datakey.allkey;

23    datakey.allkey=(datalastkey.allkey^datakey.allkey)        &datalastkey.allkey;//後沿處理

24    datalastkey.allkey=m;

25 

26 //datakey.allkey=(datalastkey.allkey^datakey.allkey)&datakey.allkey;  //前沿處理

27 //datalastkey.allkey=m;

28 }


按键是接:RB3'4'5 ;没键为高,按下去 为0



 1 extern volatile union key datakey;

 2 extern volatile union lastkey datalastkey;

 3 extern volatile union fistkey datafistkey;

 4 //板上按键定义

 5 #define K2 (datakey.allkey&0x40) 

 6 #define K3 (datakey.allkey&0x80) //

 7 #define K1 (datakey.allkey&0x20) //

 8 

 9 #define LK2  (datalastkey.allkey&0x40)

10 #define LK3  (datalastkey.allkey&0x80) //extern volatile union var key;

11 #define LK1  (datalastkey.allkey&0x20)


 1 #ifndef _MYDEFINE_H

 2 #define _MYDEFINE_H

 3 

 4 #define BIT bit

 5 #define uint8  unsigned char

 6 #define uint16 unsigned int

 7 #define uint32 unsigned long int

 8 

 9 #define BT_CFG2_6  RA0 

10 #define BT_CFG1_6  RA2

11 #define ON_OFF_SLEEP_WAKE_B RA3

12 

13 #define _ON                                1

14 #define _OFF                               0

15 #define _TRUE                           1

16 #define _FLASE                            0

17 

18 #define _PRINTF                  _OFF

19 

20 #define Acsii(x)               x+0x30 



一般放主循环里 10ms或20ms一次

第二种:


 1 static volatile bank3 uchar key1  @ 0x6b;        //定义十二个按键,电平触发

 2 static volatile bank3 uchar key2  @ 0x6c;

 3 static volatile bank3 uchar lkey1 @ 0x6d;        //定义十二个按键,前沿触发

 4 static volatile bank3 uchar lkey2 @ 0x6f;

 5 

 6 static volatile  bit    k0    @ (unsigned)&key1*8+0;

 7 static volatile  bit    k1    @ (unsigned)&key1*8+1;

 8 static volatile  bit    k2    @ (unsigned)&key1*8+2;

 9 static volatile  bit    k3    @ (unsigned)&key1*8+3;

10 static volatile  bit    k4    @ (unsigned)&key1*8+4;

11 static volatile  bit    k5    @ (unsigned)&key1*8+5;

12 static volatile  bit    k6    @ (unsigned)&key1*8+6;

13 static volatile  bit    k7    @ (unsigned)&key1*8+7;

14 

15 static volatile bit    k8    @ (unsigned)&key2*8+0;

16 static volatile bit    k9    @ (unsigned)&key2*8+1;

17 static volatile bit    k10    @ (unsigned)&key2*8+2;

18 static volatile bit    k11    @ (unsigned)&key2*8+3;

19 

20 static volatile bit    lk0    @ (unsigned)&lkey1*8+0;

21 static volatile bit    lk1    @ (unsigned)&lkey1*8+1;

22 static volatile bit    lk2    @ (unsigned)&lkey1*8+2;

23 static volatile bit    lk3    @ (unsigned)&lkey1*8+3;

24 static volatile bit    lk4    @ (unsigned)&lkey1*8+4;

25 static volatile bit    lk5    @ (unsigned)&lkey1*8+5;

26 static volatile bit    lk6    @ (unsigned)&lkey1*8+6;

27 static volatile bit    lk7    @ (unsigned)&lkey1*8+7;

28 

29 static volatile bit    lk8    @ (unsigned)&lkey2*8+0;

30 static volatile bit    lk9    @ (unsigned)&lkey2*8+1;

31 static volatile bit    lk10 @ (unsigned)&lkey2*8+2;

32 static volatile bit    lk11 @ (unsigned)&lkey2*8+3;

33 

34 uchar keycnt;

35 

36 void keyscan(void)                    //按键扫描

37 {

38     keycnt++;

39     xs0=xs1=xs2=xs3=xs4=xs5=xs6=xs7=RD7=0; //

40 

41     TRISD=0X0F;                    //

42 

43     RD6=1;RD5=0;RD4=1;            //(k4~k7)

44     asm("nop");asm("nop");

45     R0=(RD^0X0f)&0x0f;

46     R0=R0<<4;

47 

48     RD4=0;RD5=1;RD6=1;            //(k0~k3)

49     asm("nop");asm("nop");

50     R0+=((RD^0X0F)&0X0F);

51 

52     RD6=0;RD5=1;RD4=1;            //(k8~k11

53     asm("nop");asm("nop");

54     R1=(RD^0X0f)&0x0f;

55 

56     if(R0|R1)                    //有键?

57      {     

58           if(keycnt>=12)

59             {keycnt=0;

60               key1=R0;key2=R1;

61             }

62            else

63             {key1=lkey1;//lkey1电平值,key1,前沿值

64              key2=lkey2;

65             }

66     }

67     else

68         {key1=key2=0;

69          keycnt=0;

70         }

71     R2=key1;R3=key2;

72     key1=key1&(lkey1^key1);    lkey1=R2;

73     key2=key2&(lkey2^key2);    lkey2=R3;

74 }


第三种:


 1 BOOL Switch2IsPressed(void)

 2 {

 3     if(sw2 != old_sw2)

 4     {

 5         old_sw2 = sw2;                  // Save new value

 6         if(sw2 == 0)                    // If pressed

 7             return TRUE;                // Was pressed

 8     }//end if

 9     return FALSE;                       // Was not pressed

10 }//end Switch2IsPressed

11 

12 

13 typedef enum _BOOL { FALSE = 0, TRUE } BOOL;



关键字:按键  处理函数 引用地址:三种按键处理函数

上一篇:pic单片机计数
下一篇:PIC18F中断定时器

推荐阅读最新更新时间:2024-03-16 15:27

C51 Key-press按键
代码: #include reg52.h #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0; //发光二极管 sbit KEY1=P3^4; //按键 sbit dula=P2^6; //数码管段选 sbit wela=P2^7; 数码管位选 uchar disnum; uchar code table_du ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //数码管显示的字定义 delay(ucha
[单片机]
MSP430F5529火箭板 --> 按键中断控制LED实验
实验目的:   测试评估板上的按键和LED 实验内容:   1、按下s1一次红灯亮1s后熄灭   2、快速按下s1两次绿灯亮1s后熄灭 bsp_led.h #ifndef _BSP_LED_H #define _BSP_LED_H #include msp430.h #define Set_Bit(val,bitn) (val |= (/*1 */(bitn))) #define Clr_Bit(val,bitn) (val &= ~(/*1 */(bitn))) #define Get_Bit(val,bitn) (val & (1 bitn)) //LED1 #define LED1_RED_DIR
[单片机]
MSP430F5529火箭板 --> <font color='red'>按键</font>中断控制LED实验
AVR独立按键C程序
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int uint num1; #pragma data:code//定义程序存在ROM里面 const table ={ 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86, 0x8e }; /***********************************************/ /*******************延时子程序**********
[单片机]
单片机C语言实现独立按键检测与矩阵键盘操作
所有的电子产品几乎到涉及到按键操作。所以微控制器是如何识别一个按键是否被按下,按下后又该如何做出反应,又如何防止按键抖动呢?更深入一点,微控制器又是如何识别矩阵键盘的?本文将详细阐述如何用C语言实现独立按键的检测和矩阵键盘操作。 完成本文所需硬件:基于C51系列单片机的开发板(本文是基于STC12C5A60S2处理器的一款开发板),带中文版windows操作系统的电脑。 完成本文所需软件:KEIL系列平台(本文选取Keil uVision4), STC烧写软件-ISP-V6.82E 。 一、独立按键检测 这里我要实现用按键K1去控制发光二极管LD4。同时为了试验按键过程中与其他事件的冲突性,引入两个事件即LD1
[单片机]
51单片机方波发生器程序100HZ和200HZ按键控制
//本机晶振11.0592,采用stc89c51单片机,P3.2 P3.3两个按键控制方波发生器的输出频率. #include reg52.h #define uchar unsigned char #define uint unsigned int sbit output=P1^7; //输出点 sbit oneset=P3^2; //设置100HZ sbit twoset=P3^3; //设置200HZ uint number1=0; //定时器0高8位 uint number2=0; //定时器0低8位 void main() { TMOD=0x01; TH0=0xee; //任意设定初值 TL0=0x0b; E
[单片机]
CC2530按键控制跑马灯的运行与暂停
实验要求 代码实现 #include ioCC2530.h #define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4 //按键 #define SW1 P1_2 //统计数量 unsigned int count = 0; //标志位 unsigned char F_LED = 0; //延迟函数 void Delay(unsigned int t) { while(t--); } //端口初始化函数 void Init_Prot() { //配置4个LED灯的引擎 //选择端口的功能 P1SEL &=~0x1B;//设置通用io端口
[单片机]
CC2530<font color='red'>按键</font>控制跑马灯的运行与暂停
单片机独立按键和矩阵键盘概念及原理
一、基本知识 1.按键分类与输入原理 按键按照结构原理科分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送人累加器,然后通
[单片机]
单片机独立<font color='red'>按键</font>和矩阵键盘概念及原理
基于51单片机按键控制喇叭发出多种声音
具体实现功能: 51单片机按键控制喇叭发出多种声音。 设计介绍 51单片机简介 51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 51系列单片机具有以下标准功能: 8k字节Flash,512字节RAM, 32位I/O口线,看门狗定时器, 内置4KB EEPROM, MAX810复位电路, 三个16位定时器/计数器, 一个6向量2级中断结构, 全双工串行口。 另外, 51系列在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机停止工作,直到下一个中
[单片机]
基于51单片机<font color='red'>按键</font>控制喇叭发出多种声音
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved