立即注册
登录
返回首页
uid:98238的个人空间
空间首页
主题
个人资料
论坛
问答区
单片机教程
单片机DIY
电子DIY
帮助
我的空间
好友
帖子
收藏
道具
勋章
任务
淘帖
群组
排行榜
留言板
lehaiboy
2017-7-23 00:26
#include "config.h"
#include "delay.h"
unsigned char Trg;
unsigned char Cont;
void KeyRead( void );
void KeyProc(void);
void Func(void);
sbit KEY_MODE=P2^3;
#define KEY_MODE 0x01 // 模式按键
unsigned char cnt_plus,Mode;
/************* 功能说明 **************
本功能是一个按键短按 开和关,第二个是长按 第二io口低电平点亮灯
******************************************/
/************* 本地常量声明 **************/
/******************** IO配置函数 **************************/
void GPIO_config(void)
{
P5M0 = 0; //设置准双向口
P5M1 = 0;
P1M0 = 1; //设置准双向口
P1M1 = 0;
P2M0 = 0; //设置准双向口
P2M1 = 0;
P2=0x18;
}
/******************** 主函数 **************************/
void main(void)
{
GPIO_config();
while(1)
{
KeyRead();
KeyProc();
}
}
void KeyProc(void)
{
if (Trg & KEY_MODE) // 如果按下的是KEY_MODE,而且你常按这按键也没有用,
{ //它是不会执行第二次的哦 , 必须先松开再按下
Mode++;
if(Mode>3)
{Mode=0;P55 = 1;}
// 模式寄存器加1,当然,这里只是演示,你可以执行你想
if(Mode==1)
{P55 = 0;}
if(Mode==2)
{P55 = 1;}
if(Mode==3)
{P55 = 0;}
// 执行的任何代码
}
if (Cont & KEY_PLUS) // 如果“加”按键被按着不放
{
cnt_plus++; // 计时
if (cnt_plus > 100) // 20ms*100 = 2S 如果时间到
{
cnt_plus=0;
Func(); // 你需要的执行的程序
}
}
}
void Func(void)
{
P17=~P17;
}
void KeyRead( void )
{
unsigned char ReadData = P2^0xff; // 1
Trg = ReadData & (ReadData ^ Cont); // 2
Cont = ReadData; // 3
}
uid:98238
加为好友
打个招呼
发送消息
手机版
|
小黑屋
|
51黑电子论坛
|
管理员QQ:125739409;技术交流QQ群281945664
Powered by
单片机教程网
返回顶部