STC15F2K60S2学习笔记3——独立按键

目录

1.独立按键原理图

2.独立按键原理

 3.编程实现:统计S4按下次数

3.1.判断按键是否按下函数

3.2.按键处理函数

3.3.数码管函数

3.4.外设控制函数

3.5主函数


1.独立按键原理图

STC15F2K60S2中的按键有独立按键和矩阵按键两个模式,J5跳冒控制按键模式。当J5跳冒接在23口时该按键处于独立按键模式(BTN模式),当J5跳冒接在12口时该按键处于矩阵按键模式(KBD模式)。这里,我们需要将J5跳冒接在23口实现独立按键模式。

2.独立按键原理

以S7按下为例。当S7按下时,按键两端导通。由于S7左端接的GND,导通后P30口即为低电平。于是,当单片机判断一个按键是否按下时,只需检测连接该按键的端口是否为低电平即可。但是,在实际操作中,会伴随这按键的抖动。于是我们要对按键进行消抖处理,才可精确判断按键是否按下。

 3.编程实现:统计S4按下次数

思路:在while(1)内循环换:

①读取P33状态

②如果是0,则等待10ms,再读取P33状态

③如果还是0,确定有按键按下;则执行number++;让数码管数字+1

   如果不是0,则说明是抖动;则不执行任何程序

④等待按键弹起后,再等待10ms,从①再开始执行

3.1.判断按键是否按下函数

这里我们使用的是状态机法,程序代码如下:

//独立按键状态机法
#define KEY_NO   0  //无按键状态,用于判断是否按下
#define KEY_DOWN 1	//有按键按下状态,判断是否为抖动
#define KEY_UP   2	//等待松手状态,判断是否弹起

u8 vBTN_Read(void)	//10ms执行一次
{
	static u8 key_state=0; //定义key_state为静态变量,用于保存每次按键状态
	u8 key_io=0,key_val=0;	//key_io:读取IO口的状态;key_val:返回键值;
	
	key_io=P3&0x0f;				//对P3读回来的高4位IO口清0,屏蔽不关心的IO口状态
	switch(key_state)
	{
		case KEY_NO:					//无按键状态,用于判断是否按下
			if(key_io!=0x0f) key_state=KEY_DOWN;
		break;
		
		case KEY_DOWN:				//有按键按下状态,判断是否为抖动
			if(key_io!=0x0f)
			{
				if(key_io==0x0e) key_val=7;		//S7
				if(key_io==0x0d) key_val=6;		//S6
				if(key_io==0x0b) key_val=5;		//S5
				if(key_io==0x07) key_val=4;		//S4
				key_state=KEY_UP;
			}
			else
				key_state=KEY_NO;
		break;
			
		case KEY_UP:						//等待松手状态,判断弹起
			if(key_io==0x0f) key_state=KEY_NO;
		break;
	}
	return key_val;
}

3.2.按键处理函数

u8 cnt_key;  //定义按键计时变量,在定时器中计时
u8 s4_number;//定义用来保存S4按下的次数变量
void vBTN_Process(void)
{
	u8 key_val;
	if(cnt_key>=10)  //10MS进行一次读取
	{
		cnt_key=0;
		key_val=vBTN_Read(); //读取按键的键值
		if(key_val==4)
		{
			s4_number++;
		}
	}
}

3.3.数码管函数

//共阴数码管码表
u8 smg_code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//数码管操作函数
u8 smg_buf[8];
void vSMG_Process()
{
	smg_buf[0]=smg_code[s4_number/100];
	smg_buf[1]=smg_code[s4_number/10%10];
	smg_buf[2]=smg_code[s4_number%10];
	smg_buf[3]=0x00;
	smg_buf[4]=0x00;
	smg_buf[5]=0x00;
	smg_buf[6]=0x00;
	smg_buf[7]=0x00;
}

//数码管显示函数
void vSMG_Display()
{
	static u8 i=0;
	vDevice_Ctrl(0xc0,0);   //位选(消除鬼影)
	vDevice_Ctrl(0xe0,~smg_buf[i]);   //段选
	vDevice_Ctrl(0xc0,0x01<<i);   //位选
	i=(i+1)%8;
}

3.4.外设控制函数

#include "Device.h"

/**
  * @brief 外设控制函数
  * @param None
  * @retval None
  */
void vDevice_Ctrl(unsigned char P2data,unsigned char P0data)
{
	P0=P0data;
	P2=P2data;
	P2=0;
}

3.5主函数

#include "system.h"
#include <intrins.h>
#include "Device.h"

HexToBin led_ctrl,uln_ctrl;

/**
	* @brief 系统初始化函数:关闭继电器、蜂鸣器
  * @param None
  * @retval None
  */

void vSystem_Init(void)
{
	vDevice_Ctrl(0xa0,0);      /*关闭蜂鸣器、继电器*/
	led_ctrl.hex=0xff;
	vDevice_Ctrl(0x80,led_ctrl.hex);	/*关闭LED*/
}

void Timer2Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x04;		//定时器时钟12T模式
	T2L = 0x20;		//设置定时初值
	T2H = 0xD1;		//设置定时初值
	AUXR |= 0x10;		//定时器2开始计时
	IE2|=0x04;      //开定时器2中断
	EA=1;
}

void main(void)
{
	vSystem_Init();
	Timer2Init();
	while(1)
	{
		vSMG_Process();
		vBTN_Process();
	}
}

//中断服务程序
void vTimer2_ISR() interrupt  12 //中断入口
{
	cnt_key++;
	vSMG_Display();
}

注意事项:1.每次按键按下需要单次触发

                  2.需要有松手检测

                  3.不用delay延时堵塞程序

芷汀琯
关注 关注
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片机学习笔记——双机通信(型号:STC15F2K60S2
qq_46304554的博客
08-14 2482
一、定义变量 /********************** myM485 485双机通信例程测试 型号:STC15F2K60S2 主频:11.0592MHz ************************/ #include <STC15F2K60S2.H> #include <intrins.h> /*---------宏定义---------*/ #define uint unsigned int #define uchar unsigned char #define ul
51单片机STC15F2K60S2
qq_45032598的博客
06-19 1073
/ 显示DIS1数码管,0-F 轮流显示,1秒切换。// 蜂鸣器连接的引脚。// 数码管D1连接的引脚。// 数码管D2连接的引脚。// 数码管D3连接的引脚。// K1按键连接的引脚。// K2按键连接的引脚。// K3按键连接的引脚。// K4按键连接的引脚。// K7按键连接的引脚。// K6按键连接的引脚。
【蓝桥杯(51) STC15F2K60S2】之 “独立按键实验“
world的博客
06-23 333
相关代码: #include “STC15F2K60S2.H” unsigned char KeyNumber; unsigned char value; unsigned char code SMG_weixu[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f}; sbit R1 = P3^0; sbit R2 = P3^1; sbit R3 = P3^2; sb
蓝桥杯单片机stc15f2k61s2矩阵按键中断扫描代码
miaoxiaocheng的博客
02-28 1484
使用中断函数进行矩阵按键的扫描,在《手把手教你学51单片机》上面的代码修改了一下。感觉这个代码写的比较好。 #include&lt;stc15f2k60s2.h&gt; #define uchar unsigned char sbit KEY_IN_1 = P4^4; sbit KEY_IN_2 = P4^2; sbit KEY_IN_3 = P3^5; sbit KEY_IN_4 ...
蓝桥杯stc15f2k61s2独立按键.zip
01-16
代码包含用延时写的流水灯,呼吸灯。原创代码,主要用于给学弟上课。keil5需要stc包的可以参考博客关于蓝桥杯的第一篇文章
Stc15F2k60s2
最新发布
a__life的博客
03-26 543
可以看出P0引脚并不能直接控制Led的亮灭,P0与Y4共同作用控制Led的亮灭,在原理图中找到Y4C,它受到Y4和WR控制,wr为0,所以影响Wr值的只有Y4,所以我们接着研究Y4。最终效果是P2控制锁存器Y4的开关,锁存器像是一道拦着数据的门,有数据要到他想去的位置,就打开锁存器,通过后立马关上(图中含有与、或、非门,自行理清逻辑即可。数据输入还是P0输入,但同样的Y5c控制着锁存器,决定着数据是否能通过,找到原理图上的Y5c,发现被Y5控制着,再通过P2引脚将Y5置1,代码如下。
STC15F2K60S2
05-03
STC15F2K60S2资料开源资料数据手册电路图出厂程序
STC15F2K60S2单片机
weixin_62305228的博客
05-23 5809
中断系统是为了让CPU具有对外界紧急事件的实时处理能力而设置的。当CPU正在处理某件事时,外界来了一个紧急请求,需要CPU停下当前进程,去处理紧急请求,处理玩紧急请求之后,再返回原进程继续工作。同时在中断之中还有一个重要的东西就是中断的优先级,CPU每次处理事件都是通过优先级来进行。每一个高级别的中断都可以打断低级别的程序进程。上述代码就是一个简单的中断服务代码,通过设置一个周期,通过中断次数来判断是否达到一个周期,从而实现数码管的动态显示。下面一段是实现数码管计时同时只显示有效位数的代码。
STC15系列单片机学习笔记——光敏电阻与蜂鸣器的使用案例
qq_46304554的博客
08-31 2034
光照报警器
STC15系列单片机学习笔记——流水灯设计与数码管设计
qq_46304554的博客
08-24 2457
1. 单片机外观图: 2.相关原理图: 3.第一个设计——流水灯 设计思路 依次轮流点亮发光二极管 源码 #include<STC15F2K60S2.H> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit led_sel=P2^3; uchar led; //初始化,设置推挽输出 void init() { P0M0=0XFF; P0M1=0X00; P2M0=0
STC15F2K60S2资料
07-27
STC15F2K60S2资料汇总,包含程序、下载工具、驱动以及PCB图和电路图。全部囊括在内。
STC15F2K60S2数据手册
05-27
STC15F2K60S2数据手册,100多行,中文版,非常详细,囊括了stc15系列芯片的主要特性,对于STC15F2K60S2开发是没有问题
STC15F2K60S2串口通信程序
06-18
STC15F2K60S2串口通信程序
stc15F2K60S2单片机头文件
11-10
stc15F2K60S2单片机头文件
STC15F2K60S2最小系统板(Mini)资料v1.0.zip 例程丰富
07-12
STC15F2K60S2最小系统板(Mini)资料v1.0.例程丰富 蓝桥杯电子类的可以参考
STC15系列单片机学习笔记——数码管与流水灯结合的案例
qq_46304554的博客
08-27 3083
1.单片机外观图: 2.相关原理图: 3.案例的目的 显示一个电话号码,并且在电话号码开头数字出现的同时下方的发光二极管发亮,方便了解是从哪里开始。 4.源代码 #include<STC15F2K60S2.H> #define uchar unsigned char #define uint unsigned int sbit led_sel=P2^3;//发光二极管的负极 uchar uiLed = 0x80; //LED灯值寄存 /*---------变量定义----
STC15系列单片机学习笔记——扫描频率可改变的电子钟
qq_46304554的博客
08-31 1933
1.单片机外观图 2.相关原理图 3.案例目的 数字钟是通过计数模拟时钟,将计数值转换成时间形式,以格式时-分-秒在LED数码管上进行显示,并通过按键调节扫描频率,该实验分8个等级,通过对应8个二极管从左至右指示扫描频率越来越高的8中扫描频率。 4.源代码片段分析 4.1 导入头文件以及变量定义 #include<STC15F2K60S2.H> #include<intrins.h> #define uchar unsigned char #define uint unsigne
STC15F2K60S2系列单片机
热门推荐
宁静致远
02-24 3万+
STC15F2K60S2系列主要性能: ●大容量2048字节片内RAM数据存储器 ●高速:1个时钟/机器周期,增强型8051内核(STC Y5),速度比传统8051快7~12倍 速度也比STC早期的1T系列单片机(如STC12/11/10系列)的速度快20% ●宽电压:5.5~3.8V,2.4~3.6V(STC15L2K60S2系列) ●低功耗设计:低速模式,空闲模式,掉电模式(可由
【蓝桥杯——单片机学习笔记】四.矩阵键盘STC15F2K60S2
默默无闻小菜鸡的博客
02-24 2600
一.原理图 二.原理图分析 如上图,用跳线帽连接J5的1和2,此时为矩阵键盘模式。即P3.7口与左侧4个按键的左端相连,此时可发现P3.0-3确定行,P3.4-7确定列。以S6为例,当S6按下时,P3.1与P3.7相连,此时通过行列便可确定按键。具体实现看代码。 三.代码 状态机: #define KEY P3 #define key_state_0 0 //判断按键是否按下 #define k...
写文章

热门文章

  • latex学习笔记——latex的字体字号设置 26853
  • 数学建模论文写作学习——问题重述与问题分析写作规范 5447
  • origin学习笔记1——将数据制成图表 4716
  • latex学习笔记——latex中的特殊字符 4448
  • Latex学习笔记——latex中的中文处理办法 4282

最新评论

  • STC15F2K60S2学习笔记2——数码管动态显示

    2301_80294874: 为啥没有定时器就显示不了呢?

  • 微机原理与接口技术学习笔记2——8086寻址方式

    CSDN-Ada助手: 非常感谢你分享了这么有价值的博客!关于8086寻址方式的学习笔记非常实用,我相信会对很多读者有所帮助。同时,我也想鼓励你继续创作相关的技术博文,因为这是一个需要不断学习和更新的领域。如果你感兴趣的话,我建议你可以写一篇关于微机原理中常见的数据传输方式的博客,例如DMA、中断和IO口等。期待你的作品! 2023年博客之星「城市赛道」年中评选已开启(https://activity.csdn.net/creatActivity?id=10470&utm_source=blog_comment_city ), 博主的原力值在所在城市已经名列前茅,持续创作就有机会成为所在城市的 TOP1 博主(https://bbs.csdn.net/forums/blogstar2023?typeId=3152981&utm_source=blog_comment_city),更有丰厚奖品等你来拿~。

  • latex学习笔记——latex的字体字号设置

    SudoReboot: 我改好了,因为前面作用域设置的是全局,前面加个{}就好了

  • latex学习笔记——latex的字体字号设置

    芷汀琯: 你的代码是啥样呀 我看看我会么表情包

  • latex学习笔记——latex的字体字号设置

    SudoReboot: 为什么我设置中文的粗体与斜体的时候,整行中文都变成了粗体且没有斜体

大家在看

  • 酒吧收银系统解决方案——未来之窗行业应用跨平台架构
  • 解决idea配置文件加载超大的问题 23

最新文章

  • 微机原理与接口技术学习笔记2——8086寻址方式
  • 微机原理与接口技术学习笔记1——堆栈指令
  • STC15F2K60S2学习笔记2——数码管动态显示
2023年5篇
2022年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家郑州仿铜玻璃钢雕塑个性化玻璃钢人物雕塑义乌玻璃钢雕塑咨询电话圆形玻璃钢花盆模具艺术小品玻璃钢地产雕塑楚雄玻璃钢雕塑代理自贡玻璃钢雕塑制作庆阳广场玻璃钢雕塑价格商场吊饰美陈商场玻璃扶手装饰美陈山西弥勒佛大肚佛玻璃钢雕塑厂江苏小型玻璃钢花盆宿州抽象玻璃钢雕塑联系方式哈尔滨玻璃钢雕塑人物厂家河北广场玻璃钢雕塑玻璃钢雕塑是什潮汕玻璃钢袋鼠雕塑黄山景区玻璃钢雕塑楼盘玻璃钢雕塑销售方法松原玻璃钢雕塑佛像江苏玻璃钢雕塑摆件哪里买镇江玻璃钢马雕塑设计沈阳大型玻璃钢雕塑上海玻璃钢景观雕塑加工价格玻璃钢花盆雕塑厂家订制虞城玻璃钢雕塑价格商场北欧风美陈贵州玻璃钢雕塑设计及定制安康玻璃钢雕塑生产厂家福建常见商场美陈价钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化