#include <STC15F2K60S2.H>
#include <main.h>
#define XBYTE(address,data) P2 = ((P2&0x1f)|address);P0 = data;P2 = P2&0x1f; //关闭外设
unsigned char flag = 0;
unsigned char Key_Num;
unsigned char i;
bit GN = 0;
void key();
void time0();
void main()
{
XBYTE(0xA0,0x00);
XBYTE(0x80,0xff);
time0();
while(1)
{
key();
// XBYTE(0x80,P0&(~0x40));
if(Key_Num == '7')
{
XBYTE(0x80,P0&(~0x40)); //控制一个灯亮
} else
{
XBYTE(0x80,P0|0x40); //控制一个灯灭
}
if(Key_Num == '6')
{
XBYTE(0x80,P0&(~0x20));
}else
{
XBYTE(0x80,P0|0x20);
}
if(Key_Num == '5')
{
XBYTE(0x80,P0&(~0x10));
}else
{
XBYTE(0x80,P0|0x10);
}
// if(Key_Num == '4')
// {
// XBYTE(0x80,P0&(~0x08));
// }else
// {
// XBYTE(0x80,P0|0x08);
// }
if(Key_Num == '4') //长按--短按对应的状态
{
if(GN == 1)
{
XBYTE(0x80,0x00);
}
if(GN == 0)
{
XBYTE(0x80,0xff);
}
}
}
}
void key()
{
static unsigned char temp,state=0;
if(!flag)return;
else flag = 0;
if(!P30) temp = 1;
else if(!P31) temp = 2;
else if(!P32) temp = 3;
else if(!P33) temp = 4;
else temp = 0;
switch(state)
{
case 0: //状态1 判断是否有键按下
{
if(temp != 0) state = 1;
}
break;
case 1: //状态2 有键按下并读取数据
{
if(temp == 0) state = 0; //10ms的消抖
else
{
if(temp == 1) //按键S7 //短S7按键处理down
{
Key_Num = '7';
state = 2;
}
if(temp == 2) //按键S6 //短S6按键处理down
{
Key_Num = '6';
state = 2;
}
if(temp == 3) //按键S5 //短S5按键处理down
{
Key_Num = '5';
state = 2;
}
if(temp == 4) //按键S4 //短S4按键处理down
{
Key_Num = '4';
state = 2;
}
}
}
break;
case 2: //状态3 松开检测
{
i++; //长按1秒
if(i > 100)
{
i = 0;
if(GN == 1) //标志位
{
GN = 0;
}else
{
GN = 1;
}
}
if(temp == 0)
{
state = 0;
}
} break;
}
}
void time0() //1ms
{
TMOD = 0x01;
TL0 = (65536-1000)%256;
TH0 = (65536-1000)/256;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void time_0() interrupt 1
{
static unsigned char num;
TL0 = (65536-1000)%256;
TH0 = (65536-1000)/256;
if(num<=1000)
{
num++;
}else
{
num = 0;
}
if(num%10==0) flag = 1;
//
// if(num++ >= 10)
// {
//
// num = 0;
// flag = 1;
// }
}
CT107D单片机按键状态机实战
版权申诉
114 浏览量
2022-03-10
10:42:00
上传
评论
收藏 26KB ZIP 举报
琅中之嶹
- 粉丝: 5289
- 资源: 258
最新资源
- html动态爱心代码一(附源码)
- c40539bc-071a-486c-9d52-9d0c18d62dac 4.html
- 基于物理的非视域成像(NLOS)算法,利用了nerf+python源码+文档说明
- yuluer知更鸟.7z(1).001
- python课程设计-基于tensorflow实现的图文生成程序,数据集flickr30k-images+源代码+文档说明+截图
- python作业-基于Flickr30k数据集实现图像文本跨模态搜索python源码+数据集+测试界面+项目说明(高分课程设计)
- 基于Qt实现医院信息管理系统c++源码+文档说明+数据库(期末大作业)
- 基于python实现的医院信息管理系统完整源码+sql数据库+详细注释(高分课程设计)
- 基于python的眼底图像视杯视盘分割项目源码+文档说明+截图演示+详细注释(高分课程设计)
- ImageBasedModellingEdu-贰壹贰叁零
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈