找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1659|回复: 6
收起左侧

单片机程序 按键不占用中断 不使用延时 没有死循环 不占用任何资源

  [复制链接]
ID:492633 发表于 2024-5-3 18:59 | 显示全部楼层 |阅读模式
坛友的不占用中断 不使用延时  没有死循环!!!不占用任何资源。亲测可用

1.png

单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit LED1= P3^4;
  6. sbit LED2 = P3^5;
  7. sbit LED3= P3^6;
  8. sbit LED4  = P3^7;
  9. sbit key1 =P1^4;
  10. sbit key2 =P1^5;

  11. /*不占用中断 不使用延时  没有死循环!!!不占用任何资源
  12. 这个按键检测程序我在20年前网上看到过。当时没有试用。今又看到这个单片机代码。于是决定测试一下*/
  13. unsigned char num,trg1=0, trg2=0,cont1=0,cont2=0;//一定是全局变量
  14. //unsigned char


  15. unsigned key1scan()
  16. {
  17. unsigned char a=!key1;//网上是异或运算a=key1^0x01,对于一位按键可以直接写成取反
  18. trg1= a&(a^cont1);
  19. cont1=a;
  20. if(trg1&!key1) //网上是(trg1&key1)实际测试不能使用!!因为任何时候都不可能为真。只有改成(trg1&!key1)才可以完美执行!!!
  21. //return 1;//返回等于1 表示按键按下。
  22. {
  23. //此处可以是自己需要执行的程序。(去掉前面的返回)
  24.         LED1=~LED1;//按一次亮按一次灭
  25. }

  26. }


  27. unsigned key2scan()
  28. {
  29. unsigned char a=!key2;//网上是异或运算a=key2^0x01,对于一位按键可以直接写成取反
  30. trg2= a&(a^cont2);
  31. cont2=a;
  32. if(trg2&!key2)  
  33. //return 1;//返回等于1 表示按键按下。
  34. {
  35. //此处可以是自己需要执行的程序。(去掉前面的返回)
  36.         LED2=~LED2; //按一次亮按一次灭
  37. }

  38. }

  39. void main()
  40. {
  41.         P3=0XFF;
  42.         P1=0XFF;
  43. while(1)
  44. {
  45.   key1scan(); //每次按下按键只会执行一次,按键不放开绝对不会重复执行。
  46.   {
  47.     //自己的程序。
  48.   }

  49.   key2scan(); //每次按下按键只会执行一次,按键不放开绝对不会重复执行。
  50.   {
  51.   }

  52. }

  53. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:465279 发表于 2024-5-3 22:54 来自手机 | 显示全部楼层
有时间试试
回复

使用道具 举报

ID:513213 发表于 2024-5-3 23:02 | 显示全部楼层
P13接地看不懂!
回复

使用道具 举报

无效楼层,该帖已经被删除
ID:1065749 发表于 2024-5-4 08:06 | 显示全部楼层
lsh04 发表于 2024-5-3 23:02
P13接地看不懂!

P13接地,K14  K15按键开关就接地了。
回复

使用道具 举报

ID:688460 发表于 2024-5-4 09:58 | 显示全部楼层
lsh04 发表于 2024-5-3 23:02
P13接地看不懂!

P14.P15.P6.P17这4个按键做独立按键使用
回复

使用道具 举报

ID:492633 发表于 2024-5-4 10:22 | 显示全部楼层
18689719961 发表于 2024-5-4 08:06
P13接地,K14  K15按键开关就接地了。

是的,懒得放开关了直接放一个地线端子,这样子1.4/1.5/1.6/1.7按钮就是低电平有效,我只用了1.4/1.5
回复

使用道具 举报

8#
无效楼层,该帖已经被删除
ID:76027 发表于 2024-6-2 17:12 | 显示全部楼层
请教一下,如果分长按和短按,怎么操作。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表