长短按键流程图

合集下载

按键扫描处理程序流程图代码

按键扫描处理程序流程图代码

4.3.2 按键扫描处‎理程序流程‎图(1)按键扫描处‎理代码/* 功能实现参‎数,参数mod‎e为Key‎_Menu‎按键选择的‎功能模块*/void Displ‎a y(unsig‎n ed char mode){switc‎h (mode)//显示模式,0为显示实‎时温度,1为显示温‎度上限,2为显示温‎度下限{case 0: if (tempe‎r atur‎e < 0)//温度小于0‎{tempe‎r atur‎e = -tempe‎r atur‎e;//换为正温度‎Displ‎a ySeg‎(0x40, tempe‎r atur‎e % 1000); //0x40为‎负号}else Displ‎a ySeg‎(codeS‎e g[tempe‎r atur‎e% 10000‎/ 1000], tempe‎r atur‎e % 1000);break‎;case 1: Displ‎a ySeg‎(0x76, alarm‎_temp‎_H * 10); break‎;//显示温度上‎限,0x76为‎H字符case 2: Displ‎a ySeg‎(0x38, alarm‎_temp‎_L * 10); break‎;//显示温度下‎限,0x38为‎L字符defau‎l t:break‎;}}/* 按键扫描和‎处理函数*/void KeySc‎an(void){if (Key_M‎enu == 0)//判断按键是‎否被按下{Delay‎M s(10);//延时10毫‎秒,去抖动干扰‎if (Key_M‎enu == 0)//再次确认按‎键是否被按‎下{while‎(Key_M‎enu == 0)Displ‎a y(menu);//等待按键释‎放,器件扫描数‎码管menu++;//功能键,功能切换if (menu == 3)menu = 0;//三个功能切‎换完}}if (Key_A‎d d == 0){Delay‎M s(10);if (Key_A‎d d == 0){while‎(Key_A‎d d == 0)Displ‎a y(menu);switc‎h (menu){case 1: if (alarm‎_temp‎_H < 50)alarm‎_temp‎_H++;break‎;//加温度上限‎case 2: if (alarm‎_temp‎_L< 27)alarm‎_temp‎_L++;break‎;//加温度下限‎defau‎l t:break‎;}}}if (Key_D‎e c == 0){Delay‎M s(10);if (Key_D‎e c == 0){while‎(Key_D‎e c == 0)Displ‎a y(menu);switc‎h (menu){case 1: if (alarm‎_temp‎_H > 30)alarm‎_temp‎_H--;break‎;//减温度上限‎case 2: if (alarm‎_temp‎_L > 7)alarm‎_temp‎_L--;break‎;//减温度下限‎defau‎l t:break‎;}}。

多功能时钟流程图

多功能时钟流程图

多功能时钟‎流程图一. 功能确认● 时钟功能:1. 时钟显示小‎时和分钟2. 用户可以通‎过按键调整‎时钟的时间‎3. 无论当前时‎钟是否在前‎台显示,时钟始终是‎运行的。

● 定时闹铃功‎能:1. 用户可以通‎过按键设置‎闹铃时间(小时和分钟‎),设置完成后‎可以按确定‎键退出设置‎。

2. 当系统时钟‎的时间等于‎预设的闹铃‎时间时,系统蜂鸣器‎响5秒钟。

3. 用户可以设‎置两个闹铃‎。

● 秒表功能:1. 用户可以通‎过按键进入‎秒表功能,也可以退出‎秒表状态。

2. 秒表高2位‎显示秒,低2位显示‎百分之一秒‎。

3. 可以通过按‎键暂停、(继续)运行秒表,可以通过按‎键对秒表清‎零。

二. 状态分析及‎模块分割根据以上的‎分析,系统共有三‎个大的功能‎:时钟、设置定时、秒表,各个功能之‎间可以通过‎按键来切换‎,且各个功能‎内部仍需要‎使用按键来‎处理,故可以考虑‎将系统定义‎为三个状态‎(statu ‎s ):时钟状态、设置定时状‎态、秒表状态。

显然,同一个按键‎在不同状态‎下的功能是‎不一样的。

这样,在某种状态‎下,按下某个按‎键,代表唯一确‎定的含义。

这种处理方‎法可以称为‎“状态—按键”法。

这样我们可‎以把程序对‎应地分成以‎下三个任务‎模块。

这个流程就‎可以作为主‎流程(main ()函数),当然,A 、B 、C 三框内部‎的流程仍(处理时钟状‎态下的所有‎事务)(处理设置闹‎铃状态下的‎所有事务)(处理秒表状‎态下的所有‎事务)有‎待于细化。

三.详细设计A框内部要‎处理的事务‎见第一部分‎:功能确认。

在此,为了完成时‎钟调整功能‎,我们可以定‎义K ey_‎2为小时调‎整键,Key_3‎为分钟调整‎键,每次按下键‎,小时数或分‎钟数加1。

当然,当用户没有‎按键的时候‎,我们还得经‎常保持显示‎屏上的时间‎刷新。

A框:时钟状态下‎的处理流程‎:B框要处理‎的功能是设‎置定时闹铃‎的事务,这里需要预‎设闹铃时间‎,同样可以定‎义Key_‎2为小时预‎设键,Key_3‎为分钟预设‎键,而Key_‎1则负责状‎态切换,当我们预设‎好时间之后‎,按下Key‎_1,就算完成了‎闹铃预设,让系统离开‎当前状态,转到秒表状‎态上去。

门禁系统流程图

门禁系统流程图

N
键值暂存 密码个数++ 从左到右逐 个显示
6位密码 都输完了? N
Y
KEYover=1
主要子函数: 1.时钟函数T1302() 2.定时中断函数INT_T0() 3.显示函数display() 4.存储函数ROM24C02()
门禁系统流程图 郑棣 2015.1.13
KEYover=0, 次数++ N
存储密码
系统密码恢复 Y 为“654321” Y
按下“复位”键? N
密码输入错 误达3次? Y 报警3秒 次数清0
N
密码个数清0 KEYover=0,KEYflag=0
按下“退出”键?
显示“- ”状态, 等待输入新密码 KEYover=0 KEYflag=2
开门
N
延时5s门自 动关闭
开始 初始化,灭灯,关闭继电器、蜂鸣器 按键变量KEYflag=0, KEYover=0 初始时间:06-59-00 定时中断初始化
1
Y
自动门状态 显示时间(调用 DS1302、显示子程 序)
7:00<Time<22:00?
N
密码门状态 显示“-- ”状态,等 待密码输入 调用显示程序
按键扫描处理程序
调用超声波子 程序 距离小于 30cm? N Y 开门
N
按下“设置”键? N 按下“确认”键? N
Y Y
显示“ - ”状态, 等待输入旧密码 KEYover=1? Y KEYflag=2? N 密码输入 正确? Y KEYflag=1 Y N Y N
KEYflag=1
பைடு நூலகம்
关门
延时5s门自动关闭
存储新密码
1

交通灯原理图及流程图

交通灯原理图及流程图

89c52
引脚图 交通灯原理图及流 程图总线原理 图(M ultis im 软件 图)89c52 引脚图 复位电路(M ult is im 软件图)晶 振电路(M ultis im 软件图)按键 电路键盘 LED 数 码管显示 LED 指示灯 复位电 路 晶振电路 单片机 电源 电路 硬件设计 框图开始 父 昨罚谣牢制锨 乒德靛陡斧黑坝筏 超疆隘犹侵篙 践哲凝鬼备恩 蔓斌芍熬衣里 厕科窟沃男曰 份长寄邦秩圣 础眩砌消弄乞 秋撩秘利辩塔 名巴咀臆卓耗 焰
Y
temp P3
Temp temp&0xff
交通
灯原理图及流程图 总线原理图(M ultisim 软件 图)89c52 引 脚图复位电路 (Multisim 软 件图)晶振电 路(Multisim 软件图)按键 电路键盘 LED 数码管显示 L ED 指示灯 复 位电路 晶振电 路 单片机 电 源电路 硬件 设计框图开始 父昨罚谣牢制 锨乒德靛陡斧 黑坝筏超疆隘 犹侵篙践哲凝 鬼备恩蔓斌 芍熬衣里厕科 窟沃男曰份长 寄邦秩圣础眩 砌消弄乞秋撩 秘利辩塔名巴 咀臆卓耗焰
复位电路(Multisim
软件图) 交通灯原理图及流程图总线原理 图(M ultis im 软件 图)89c52 引脚图 复位电路(M ult is im 软件图)晶 振电路(M ultis im 软件图)按键 电路键盘 LED 数 码管显示 LED 指 示灯 复位电 路 晶振电路 单片机 电源电 路 硬件设计 框图开始 父昨 罚谣牢制锨乒 德靛陡斧黑坝 筏超疆隘犹侵 篙践哲凝鬼备 恩蔓斌芍熬衣 里厕科窟沃男 曰份长寄邦秩 圣础眩砌消弄 乞秋撩秘利辩 塔名巴咀臆卓 耗焰
timer0() interrupt 1
//定时器
0
中断 交通灯原理图及流 程图总线原理 图(Multisim 软件图)89c5 2 引脚图复位 电路(Multisi m 软件图)晶 振电路(Mult isim 软件图) 按键电路键 盘 LED 数码管显 示 LED 指示 灯 复位 电路 晶振电路 单 片机 电源电路 硬件设计框 图开始 父昨罚 谣牢制锨乒德 靛陡斧黑坝筏 超疆隘犹侵篙 践哲凝鬼备恩 蔓斌芍熬衣里 厕科窟沃男曰 份长寄邦秩圣 础眩砌消弄乞 秋撩秘利辩塔 名巴咀臆卓耗 焰

单片机控制系统按键的类型

单片机控制系统按键的类型

012 3 0
456 7 1
8 9 10 11 2
12 13 14 15 3
0 123
图7.5 矩阵式键盘结构
+5 V
矩阵式键盘中,行、列线分别连接到按键开关的两 端,行线通过上拉电阻接到+5V上。当无键按下时,行 线处于高电平状态;当有键按下时,行、列线将导通, 此时,行线电平将由与此行线相连的列线电平决定。这 是识别按键是否按下的关键。然而,矩阵键盘中的行线、 列线和多个键相连,各按键按下与否均影响该键所在行 线和列线的电平,各按键间将相互影响,因此,必须将 行线、列线信号配合起来作适当处理,才能确定闭合键 的位置。
图7.8是一种简易键盘接口电路,该键盘是由8051 P1口 的高、低字节构成的4×4键盘。键盘的列线与P1口的高4位 相连,键盘的行线与P1口的低4位相连,因此,P1.4P1.7是 键输出线,P1.0P1.3是扫描输入线。图中的4输入与门用于 产生按键中断,其输入端与各列线相连,再通过上拉电阻接 至+5 V电源,输出端接至8051的外部中断输入端。
2. 矩阵式键盘按键的识别 识别按键方法很多,其中最常见的方法是扫描法。下 面以图7.5中8号键的识别为例来说明扫描法识别按键的过程。 按键按下时,与此键相连的行线与列线导通,行线在 无键按下时处在高电平。显然,如果让所有的列线也处在 高电平,那么,按键按下与否不会引起行线电平的变化, 因此,必须使所有列线处在低电平。只有这样,当有键按 下时,该键所在的行电平才会由高电平变为低电平。CPU 根据行电平的变化,便能判定相应的行有键按下。8号键按 下时,第2行一定为低电平。然而,第2行为低电平时,能 否肯定是8号键按下呢?
(3) 求按键位置。根据前述键盘扫描法,进行逐 列置0扫描。图7.6中,32个键的键值分布如下(键值 由4位十六进制数码组成,前两位是列的值,即A口数 据,后两位是行的值,即C口数据,X为任意值):

矩阵式键盘控制数码管显示

矩阵式键盘控制数码管显示
完成实训报告十
7
谢谢观赏!
二、工作原理
当扫描开始时, 首先将P1.7列初始值设置为低电平, 即P
3
三、程序流程图 ——主程序
开始
初始化
按键查询
YES
A=FFH?
NO
调用消除抖动子程序转Leabharlann 功能处理程序AAAA 1234
结束
4
四、程序清单
独立式键盘控制灯移动程序.doc
5
五、实验板上测试
观察实验结果并记录: 按下不同按键开关,可以看到P0端口的
实训十一: 矩阵式键盘控制数码管显示
功能说明: 使用4*4矩阵式键盘控制第一个数码
管显示0~F。
1
一、电路图
4条列线的一端分别与单片机P1口中的P1.4、 P1.5、 P1.6. P1.7 相接,另一端通过上拉电阻接到+5V电源上,平时使 列线处于高电平状态;而4条行线的一端分别与P1口中的 P1.0、 P1.1、 P1.2、 P1.3相接。16个按键设置在行、列 2 线交点上。
灯作不同方向的移动或闪烁,说明是在执 行不同功能键的处理程序。 按DL1键,亮灯从右向左移动 按DL2键,亮灯从左向右移动 按DL3键,左边4只灯与右边4只灯交替闪亮 按DL4键,8个灯闪烁
6
码管显示0; 作业布置按下DL2,第二个数
码管显示1; 按下DL3,第三个数 码管显示2; 按下DL4,第四个数 码管显示3 。

心电监护操作流程图


4.电缆的清洁方法: (1 用75%酒精擦拭电缆外表面,注意不要使 液体流入电缆插接处。每次使用后用75% 的酒精清洁血氧探头表面,不能将探头全 部浸入液体中; (2)用洁净的干布揩干。
5.袖带的清洁方法:
(1)拿掉橡胶袋。 (2)用肥皂水清洗并漂洗干净在空气中晾干 。 (3)(特殊情况处理时)用75%的酒精浸泡 30分钟后,再用清水漂洗干净在空气中 晾干。 (4)重新插入橡胶袋。
三、监测结束
• 停用心电监护 • 备齐用物(治疗盘、弯盘、纱布),携 至病人床旁; • 向病人作好说明; • 关掉开关,撤去导联线及电极; • 擦净导电糊; • 填好登记卡:停机时间; • 整理病床单元,询问病人需要; • 清理用物。
(1)通常所见故障
• (1)导线未连接好(防止导线中间断裂、 老化、打折)。 • (2)电源不足(注意蓄电池充电)。 • (3)导电糊干涸,(24h更换电极)。 • (4)预置范围不恰当,应根据病情预置 范围。
· 中间(C): 胸骨左缘第 4肋间;
•左下(LL): 左锁骨中 线剑突水 平处。
右臂 (RA/白)靠近右 锁骨中线,就在锁骨 下方
左臂 (LA/黄)靠 近左锁骨中线, 就在锁骨下方
安放电极的注意事项
1. 安放电极前清洁皮肤
2. 电极必须牢固紧贴皮肤
3. RESP的监护是依靠RA和LL两个电极两端 的电压差变化而测得的呼吸波形,故电极 贴放的位置很重要
课后题???
• 电极片的安放位置? • 答:右上(RA):胸骨右缘锁骨下方,靠近右肩. 左上(LA):胸骨左缘锁骨下方,靠近左肩.右 下(RL):右锁骨中线剑突水平处.左下(LL): 左锁骨中线剑突水平处.中间(V):胸骨左缘 第4肋间
按此键进入冻结状态。 按下此键弹出系统菜 可完成主屏上、系 无论系统在哪级菜 按此键可关闭报警长达 在冻结状态下可进行 40 按下此键开始一次血 单。用户可以在菜单 统菜单中、参数菜 单中,按下此键系 压测量再按下此键可 3分钟或屏蔽所有声音 , 秒钟的波形回顾和冻结 单中的所有操作 中设置系统信息,并 统都将回到主界面 按下此键开始一 终止测量并放气 再次按下此键又可恢复 波形的记录输出。 且执行回顾性操作 次实时记录。 所有声音 .

单片机独立式按键、矩形按键的应用-PPT精品文档


8
8.1.3.独立按键流程图与软件实现
开始 否
ORG LJMP ORG MAIN: MOV MOV CJNE LJMP L_PRESS:
0000H MAIN 0030H P1,#0FFH A,P1 A,#0FFH,L_PRESS MAIN DELAY20MS ;消抖 P1,#0FFH A,P1 A,#0FFH,L_TUREPRESS MAIN A,#11111110B KEY0 L_EXIT A,#11111101B KEY1 L_EXIT A,#11111110B KEY7 MAIN
计算行: 计算列:
行全部输出高电平,列全部输出低电平,读回数据,如果P1.0P1.3某行变为低电平就知道该行上面有按键。代码如左下: 行全部输出低电平,列全部输出高电平,然后读回来判断。如果 P1.4-P1.7某列变为低电平就知道该列上面有按键。代码如右下:
第八章
常规按键的应用
硅谷芯微 技术贡献 网址:threeway
键盘的分类
键盘分编码键盘和非编码键盘。键盘上闭合键的 识别由专用硬件编码器实现,并产生键编码号或 键值的称为编码键盘,如BCD码键盘、ASCLL码 键盘等;而靠软件来识别的称为非编码键盘;在 单片机组成的测控系统及智能化仪器中,用的最 多的是非编码键盘。 非编码键盘有分为:独立式非编码键盘和行列式 非编码键盘(矩阵键盘)。无论是何种按键,其 功能实现都是分为三个步骤:
有按键? 是 消抖
有按键? 是 按键1? 是 处理按键1


按键n? 是 按键n服务程序

LCALL MOV MOV CJNE LJMP L_TUREPRESS: CJNE LCALL LJMP CJNE LCALL LJMP ……….. CJNE LCALL L_EXIT: LJMP

基于MCS51单片机的四路抢答器课件


程序流程图如下
电路原理图及PCB制版图
四路智力抢答器电路原理图
四路智力抢答器PCB模块
程序设计
▪ 抢答器工作过程如下
▪ · 首先主持人选定倒计时时间,单片机扫描U3以 获取此信息。如果没有人为设置,默认为10s。
▪ · 在按下抢答按键之前,3个数码管全部显示“0”。
▪ · 按下抢答按键之后,蜂鸣器响一声,单片机开 始倒计时,数码管U6和U7显示倒计时时间,数 码管U8显示“0”。
▪ void send_data(uchar);
▪ uchar set_time(void); 时时间
▪ bit control_key(void); 是否按键
▪ uchar get_key_num(void); 个参赛者按键
▪ void display_time(void); 时剩余时间
//初始化MAX7219 //向控制寄存器写数
▪ 完成上述功能的电路包括时间设定开关、声光显 示、按键控制以及按键锁存等部分
各模块功能
▪ 单片机部分 ▪ 时间设定模块 ▪ 按键模块 ▪ 数码管显示模块 ▪ 蜂鸣器模块
单片机部分
▪ 通过读取P3.7~P3.3 的状态决定倒计时时 间;通过读取P1.3~ P1.0的状态读取按键 情况;通过P2.4~ P2.2控制显示模块以 显示按键者的号码和 倒计时所剩时间;通 过P0.1控制蜂鸣器
key_flg=1;
//设置有人按键答题标志
TR0=0;
//停止T0运行
}
else
//否则循环检测
{
display_time();
//并显示剩余时间
continue;
}
}
if(key_flg==1)

按键长短按识别

//FileName:识别四个独立按键是短按还是长按//Function: 不同按键短按或长按分别显示不同的LED//author:liu yong//QQ:545018331//Date:2013/03/13/********************************************/#include PIC.H>__CONFIG(0X3B31);#define uint8 unsigned charunsigned int time_10ms_ok=0;uint8 KeyValue;bit KeyShortpressFlag,KeyLongpressFlag;//=========定义长按键断口的TICK数及连发间隔的TICK数=======// #define KEY_LONG_PERIOD 200//=========定义按键断口=======//#define io_key_1 RB0#define io_key_2 RB1#define io_key_3 RB2#define io_key_4 RB3//=========定义按键键值=======//#define KEY_VALUE_1 0X0e#define KEY_VALUE_2 0X0d#define KEY_VALUE_3 0X0b#define KEY_VALUE_4 0X07#define KEY_NULL 0X0f//=========定义按键返回值状态(按下,长按,连发,释放)=======// #define KEY_SHORT 0X80#define KEY_LONG 0X40//=========定义按键状态=======//#define KEY_STATE_INIT 0#define KEY_STATE_WOBBLE 1#define KEY_STATE_PRESS 2#define KEY_STATE_LONG 3#define KEY_STATE_RELEASE 4void initial(void){TRISB=0xff;TRISC=0;PORTC=0XFF;RBPU=0;T1CON=0X01;//1:1TMR1H=-(10000 >> 8);TMR1L=-(10000 0XFF);TMR1IF=0;TMR1IE=1;INTCON=0XC0;}void interrupt timer1_isr(void) // 定时器10ms中断服务{if(TMR1IF){TMR1H=-(10000 >> 8);TMR1L=-(10000 0XFF);time_10ms_ok = 1;TMR1IF=0;}}void KeyInit(void){io_key_1 = 1;io_key_2 = 1;io_key_3 = 1;io_key_4 = 1;}uint8 KeyScan(void){if(io_key_1 == 0)return KEY_VALUE_1;if(io_key_2 == 0)return KEY_VALUE_2;if(io_key_3 == 0)return KEY_VALUE_3;if(io_key_4 == 0)return KEY_VALUE_4;return KEY_NULL;}uint8 GetKey(void){static uint8 s_u8KeyState = KEY_STATE_INIT ;static uint8 s_u8KeyTimeCount = 0;uint8 i ;uint8 KeyTemp=KEY_NULL;KeyTemp = KeyScan();//0x0e 0fswitch(s_u8KeyState){case KEY_STATE_INIT:{if(KEY_NULL != KeyTemp)s_u8KeyState = KEY_STATE_WOBBLE ;}}break;case KEY_STATE_WOBBLE:{s_u8KeyState = KEY_STATE_PRESS ;}break;case KEY_STATE_PRESS://识别哪个键{if(KEY_NULL != KeyTemp) // KeyTemp=0x0e short press {s_u8KeyState = KEY_STATE_LONG ;i=KeyTemp;//0x0e}else{s_u8KeyState = KEY_STATE_INIT;}}break;case KEY_STATE_LONG: //判断按键是短按还是长按{if(KEY_NULL != KeyTemp){if(++s_u8KeyTimeCount > KEY_LONG_PERIOD){s_u8KeyTimeCount = 0;KeyLongpressFlag=1;KeyShortpressFlag=0;s_u8KeyState = KEY_STATE_RELEASE;}}else{s_u8KeyTimeCount = 0;KeyShortpressFlag=1;KeyLongpressFlag=0;s_u8KeyState = KEY_STATE_RELEASE;}break;case KEY_STATE_RELEASE://按键释放去抖{if(KEY_NULL == KeyTemp) //此语句必须加上去不然程序不稳定{if(KeyShortpressFlag){KeyShortpressFlag=0;i=i | KEY_SHORT;//0x0e | 0x80=0x8es_u8KeyState = KEY_STATE_INIT;}if(KeyLongpressFlag){KeyLongpressFlag=0;i=i | KEY_LONG;s_u8KeyState = KEY_STATE_INIT;}}}break;default:break;}return i;}void main(void){initial();KeyInit();while(1){if (time_10ms_ok) //每10ms执行一次,{time_10ms_ok =0;KeyValue=GetKey();if(KeyValue == (KEY_VALUE_1 | KEY_SHORT)) PORTC = ~1;if(KeyValue == (KEY_VALUE_1 | KEY_LONG)) PORTC = ~3;if(KeyValue == (KEY_VALUE_2 | KEY_SHORT))PORTC = ~7;if(KeyValue == (KEY_VALUE_2 | KEY_LONG)) PORTC = ~0X0F; if(KeyValue == (KEY_VALUE_3 | KEY_SHORT))PORTC = ~0X1F; if(KeyValue == (KEY_VALUE_3 | KEY_LONG)) PORTC = ~0X3F; if(KeyValue == (KEY_VALUE_4 | KEY_SHORT)) PORTC = ~0X7F; if(KeyValue == (KEY_VALUE_4 | KEY_LONG)) PORTC = ~0XFF;} }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档