历史上的今天

今天是:2024年11月14日(星期四)

2019年11月14日 | 单片机通过单个按键按下时间(长短按键)执行不同功能

发布者:ZenMaster123 来源: 51hei关键字:单片机  按键  功能 手机看文章 扫描二维码
随时随地手机看文章

如果要节省单片机IO口,可以用一个按键,通过判断按下的时间来执行不同的子程序,自己闲来无事随意写了个,可能不够精简,但是功能都有,proteus仿真能出来,三种按键时间,短时间按下LED1亮,中等长度时间LED2亮,长时间按下LED3亮,具体按多久,自己稍微体会下就能把握

单片机长短按键仿真原理图如下
0.png

单片机源程序:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

sbit keyback=P1^0;

sbit k=P1^4;

sbit key1=P1^1;

sbit key2=P1^2;

sbit key3=P1^3;

static uint i=0;

uchar keystay=0x00;

uchar T0RH;

uchar T0RL;


void configtimer0(uchar ms)

{

ulong tmp;

tmp=11059200/12;

tmp=(ms*tmp)/1000;

tmp=65536-tmp+10;

T0RH=(unsigned char)(tmp>>8);

T0RL=(unsigned char)tmp;

TMOD &=0xF0;

TMOD |=0x01;

TH0=T0RH;

TL0=T0RL;

ET0=1;

TR0=1;

}



void Judge(uint num)

{

if((5{                                           

key1=0;

key2=1;

key3=1;

i=0;

}

if((50{

key2=0;

key1=1;

key3=1;

i=0;

}

if(num>120)

{

key3=0;

key1=1;

key2=1;

i=0;

}

}




main()

{

EA=1; 

configtimer0(10);

while(1)

{

  if((keystay&0xFF)==0x00)

{

Judge(i);

          }

         }

}




void keyscan()

{

keystay=(keystay<<1) | (!keyback);

}

  

void interrupt_timer0()interrupt 1

{

TH0=T0RH;

TL0=T0RL;

keyscan();

if((keystay&0xFF)==0xFF)

{

  i++;

  

  if(i>400)

  {

   i=0;

         }

…………



关键字:单片机  按键  功能 引用地址:单片机通过单个按键按下时间(长短按键)执行不同功能

上一篇:GY521 mpu-6050调试经验与教训
下一篇:基于单片机控制的简易自动循迹小车仿真与程序源码

推荐阅读

机器人视觉解决方案是我们实现机器人视野的几大挑战。即便变得越来越简单易用,还是有一些棘手的问题。很多因素影响机器人在环境中的视觉,任务设置和工作场所。这里有9个总结出来的机器人视觉挑战:照明如果有过在低光照下拍摄数码照片的经验,就会知道照明至关重要。糟糕的照明会毁掉一切。成像传感器不像人眼那样适应性强或敏感。如果照明类型错误,视...
任意波形发生器的用途越来越广泛,因为它具备比较灵活的信号产生能力。图1 N6030A任意波形发生器原理框图图1是典型的Agilent N6030A/N8241A高性能任意波形发生器的原理框图。任意波形发生器主要包括如下几个部分:1)FPGA:把存在SRAM里的用软件产生的波形输入到DAC器件;2)DAC:最关键的器件,决定整个任意波形发生器的性能;3)信号调理:对输出的信...
韩联社昨日报道,三星电子原定于13日飞往西安和天津的两架包机已被取消,原因或与中国近日加强入境检疫有关。不过韩国外交部今日表示,中韩两国为简化双方企业人士入境程序设置的“快捷通道”依旧保持正常运行,三星包机被取消属于个别未获批案例,韩方将继续就此与中方协调。韩国外交部表示,LG Display前一天的赴华包机已通过“快捷通道”向广州工厂派...

史海拾趣

问答坊 | AI 解惑

有调通过marvell wifi 8686 sdio接口驱动来讨论下???

正在调sdio接口的wifi 8686驱动,sdio确认好的,读写寄存器,加载固件都没问题。有以下问题: 1. 我是直接把驱动放在bsp中编的,wince启动后自动加载wifi驱动, 并且这个wifi驱动会自行搜索热点。我的理解是wifi驱动加载固件启动完wifi芯片注册网络 ...…

查看全部问答∨

protel 99se中,sp232E在哪个库中?

如题。 protel 99se中,SP232E所在的库叫什么?…

查看全部问答∨

lstAdd的使用问题!

    SESSION_POS_S *pTestpos1, *pTestpos2, *pTestpos3, *pPos;     LIST *pMyList = NULL;     int NodeIndex = 0;             DPRINT("-------- lstAdd测试 -------\\n ...…

查看全部问答∨

看看我的成果

本人长期从事单片机开发应用,积累了一定的经验。本人将毕生研究心得集成了文字,放在我的博客里,希望大家光临指导,并给点意见。我的博客地址;http://blog.mcuol.com/user/Article/500.html…

查看全部问答∨

f2812AD转换波动很大,不知是什么原因?

用电位器输出一个电压值,从我watch窗口看到的ADCresult值都在变化,变化比较大。如0xabc0,b为都会能差4,帮忙分析一下可能那里设置不对。谢谢!…

查看全部问答∨

ez430-rf2500遇到了问题。。求指点

 想请问你一下 那个ez430-rf2500为什么ed连上电池两个灯还是不闪。。ap的红灯在闪烁。。并且PC上温度只有一个ap温度显示。。就是说ed的没有反应。。好像是没有连接到网络。。后来又折腾了一下。。现在ap的红绿灯都在闪。。但是ed还是没反应。 ...…

查看全部问答∨

特权同学写的sdram控制器读出的数据全是FF?

最近在用特权同学写的sdram控制器,但是串口读出的数据全是FF,不知道出错在什么地方?用没用过调通的朋友,不吝赐教,万分感谢啊…

查看全部问答∨

高手帮忙看一下这程序

#include<reg51.h>    //  包含51单片机寄存器定义的头文件unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //数字0~9的段码unsigned char int_time ; //中断次数计数变量unsigned ...…

查看全部问答∨

Verilog HDL信号类型不一致

module main (                       ....); wire   clk1MHz; // 产生1MHz的时钟波形 // 输入为20MHz的时钟 clock_divider  instT1MHz &nb ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved