本帖最后由 275891381 于 2018-3-1 21:36 编辑

volatile u64 xitong_haomiao;           //2^64/1000/3600/24/365=584942417年会复位

static   u8  fac_us=0;                                                             //us延时倍乘数

//SYSTICK的时钟固定为HCLK时钟的1/8

//中断时间time  =  ( SysTick->LOAD + 1 ) / f                        f = AHB或AHB/8            (9000-1+1)/9M=1ms

void delay_init(void)

{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);        //选择外部时钟  HCLK/8  9M 计数器减1为1/9000000秒

fac_us=SystemCoreClock/8000000;                                      //9

SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;           //开启SYSTICK中断

SysTick->LOAD=fac_us*1000-1;                                                     //每1/1000s中断一次

SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;           //开启SYSTICK

while(xitong_haomiao==0);

}

//nus:0~2^32=4294967296(最大值即2^32/fac_us@fac_us=1)

void delay_us(u32 nus)

{

u32 ticks;

u32 told,tnow,tcnt=0;

u32 reload=SysTick->LOAD;                                        //LOAD的值

ticks=nus*fac_us;                                                           //需要的节拍数

tcnt=0;

told=SysTick->VAL;                                                //刚进入时的计数器值

while(1)

{

tnow=SysTick->VAL;

if(tnow!=told)

{

if(tnow

else tcnt+=reload-tnow+told;

told=tnow;

if(tcnt>=ticks)break;                                //时间超过/等于要延迟的时间,则退出.

}

}

}

//nms:0---2^32/1000=4294967.296

void delay_ms(u32 nms)

{

delay_us((u32)(nms*1000));                                        //普通方式延时

}

void SysTick_Handler(void)

{

xitong_haomiao++;

if(xitong_haomiao%20==0)//20ms扫描一下按键

Key=KEY_Scan(0);

}

//注意此函数有响应优先级,WK_UP>KEY1>KEY2>KEY3

//按键处理函数

//返回按键值

//mode:0,不支持连续按;1,支持连续按;

//-1,没有任何按键按下

//0,WK_UP按下 WK_UP

//1,KEY1按下

//2,KEY2按下

//3,KEY3按下

u8 KEY_Scan(u8 mode)

{

static u8 flag=0;

static s8 key_up=1;//按键按松开标志

if(Key==KEY_NO_PRES)

{

if(mode)key_up=1;  //支持连按

if(flag==0)

{

if(key_up&&(KEY_UP==0||KEY_DOWN==0))

flag=1;

else if(KEY_UP==1&&KEY_DOWN==1)

key_up=1;

}

else if(flag==1)

{

key_up=0;

flag=0;

if     (KEY_UP==0)    return KEY_UP_PRES;

else if(KEY_DOWN==0)  return KEY_DOWN_PRES;

}

return KEY_NO_PRES;// 无按键按下

}

return Key;

}

这样用滴答定时器的好处是main里面可以实现简单调度,也减少delay的使用

if(xitong_haomiao-haomiao_old>=500)//delay_ms(500);

{

haomiao_old=xitong_haomiao;

LED13=~LED13;

}

c语言按键怎么用中断防抖,按键外部中断的时候如何防抖?相关推荐

  1. 51单片机——中断系统、外部中断、定时器中断、串口通信C语言入门编程

    目录 中断系统: 外部中断: 1.外部中断0.1:当触发时,LED状态取反 定时器中断: 1.定时器0.1:LED以1S为周期闪烁 串口通信: 1.串口中断:通过串口发送什么数据给单片机,单片机再通过 ...

  2. DSP28335笔记 ———— 中断系统 之 外部中断

    DSP28335笔记 ---- 中断系统 之 外部中断 我用的开发板是"硬汉DSP28335开发板",文中对于硬件的描述可以说是没有,而且我还没有附上电路图希望在看的朋友不要喷我. ...

  3. 蓝桥杯单片机比赛学习:5、中断系统之外部中断的基本原理

    中断的基本概念 百度百科上是这样说的,当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作 ...

  4. STM32 中断原理及外部中断的实现

    STM32 中断原理及外部中断的实现 NVIC 中断优先级管理 中断寄存器 库函数配置 小结 STM32 外部中断 基础知识 库函数配置 外部中断配置示例 小结 内容较充实,作为个人的学习记录 NVI ...

  5. 51单片机学习笔记(郭天祥版)(3)——引脚讲解、数码管静态显示、中断系统(外部中断,定时器中断)...

    学习引脚的功能 9引脚 复位管脚,当给2个机器周期(24个时钟振荡周期)的高电平时会复位,单片机正常工作时会给0.5v的低电平 VPD备用电源的输入端,当主电源VCC发生故障降低到某一规定的低电平时, ...

  6. 51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管

    设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序). #inc ...

  7. c语言51单片机外部中断,51单片机外部中断0实例详解

    今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法. 1 51单片机的中断源 51单片机共有5个中断源,分别为:外部中断0 定时器0中断 外部中断1 定时器1中断 串口中断 每一个中断 ...

  8. GD32F303课程【3】中断控制器和外部中断

    目录如下,持续更新~~ [1]星空派GD32F303开发板介绍 与 文章目录 1. 中断源 GD32F303有16个内核中断和68个可屏蔽中断中断源,具体见文件"gd32f30x.h&quo ...

  9. 51单片机:中断系统(外部中断,定时器中断,串口通信)

    目录 中断系统简介: 中断的优先级和嵌套: 8个中断请求源及其优先级: 中断的分别介绍: 1.外部中断0:INT0 2.外部中断1 3.T0和 T1:定时计数器的功能 4.串口中断(串口为什么使用定时 ...

  10. nmi中断配置_外部中断NMI中断.ppt

    外部中断NMI中断.ppt * 1.先看其引脚结构再看功能1. 可编程的含义:通过对芯片编程,使芯片实现不同的功能. 中断比较多的情况下,使用中断控制器来管理中断. 用来管理系统的硬件中断. * 1. ...

最新文章

  1. 自己动手用gensim 生成句子的word2vec 向量
  2. ExtJs自学教程(1):一切从API開始
  3. day07 数据类型间的相互转化及字符编码
  4. join 高性能_内置的数据无法实现高性能
  5. 杭十四计算机教室,杭十四中学生做了个图书馆智能机器人
  6. 自学转行学AI人工智能怎么样?
  7. 微软Azure的access control - IAM
  8. 算法题目——Problem A 二进制(北邮机试)
  9. Android连接相机WiFi,安卓手机使用佳能相机机身wifi传输拍摄的操作
  10. php oci8 11,linux下为php开启oci8扩展(ubuntu14亲测可用)
  11. tomcat 之 tomcat实例配置
  12. SI9000阻抗计算安装教程
  13. 高并发高可用高性能的解决方案
  14. 重学React基础知识整理——组件间的另类通信“插槽”(五)
  15. 亚马逊Alexa即将推出基于AI的耳语模式
  16. 零代码组态搭建的水泥生产工艺流程
  17. 申报须知,2022年滁州市各区县高新技术企业奖励政策变化,明光市
  18. 清华山维EPS三维测图无法进行OSGB格式转换问题(实测)
  19. 多边形对角线交点个数
  20. Linux下修改EXT2/EXT3/EXT4文件系统的磁盘卷标的方法

热门文章

  1. 宫廷中式风格和园林中式风格的区别
  2. 嵌入式图形用户界面中的非触摸式手势交互
  3. 如何快速查询多个UPS国际快递包裹到哪了
  4. 关于LinearLayout属性android:layout_marginRight的错误
  5. BUG库——程序员的铜人阵
  6. 找出3~100以内所有的素数
  7. 深入理解System.arraycopy内部原理
  8. 【老生谈算法】matlab绘制温度场原理——温度场原理
  9. Insomnia 简单使用方法
  10. 【复试练习】九度OJ