找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2197|回复: 1
打印 上一主题 下一主题
收起左侧

单片机4个独立按键控制4led输出状态源码

[复制链接]
跳转到指定楼层
楼主
ID:295154 发表于 2018-3-21 18:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. /*-----------------------------------------------
  2.   名称:4个独立按键控制4led输出状态
  3.   内容:按一次按键,led点亮,再按一次熄灭,以此循环
  4. ------------------------------------------------*/
  5. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  6. sbit KEY1=P3^1;   //定义led输出端口     
  7. sbit KEY2=P3^2;
  8. sbit KEY3=P3^3;
  9. sbit KEY4=P3^4;

  10. sbit LED1=P1^0;
  11. sbit LED2=P1^1;
  12. sbit LED3=P1^2;
  13. sbit LED4=P1^3;

  14. void DelayUs2x(unsigned char t);//函数声明
  15. void DelayMs(unsigned char t);
  16. /*------------------------------------------------
  17.                     主函数
  18. ------------------------------------------------*/
  19. void main (void)
  20. {

  21. KEY1=1;
  22. KEY2=1;
  23. KEY3=1;
  24. KEY4=1;     //按键输入端口电平置高
  25. while (1)         //主循环
  26.   {

  27.   if(!KEY1)  //如果检测到低电平,说明按键按下
  28.     {
  29.          DelayMs(10); //延时去抖,一般10-20ms
  30.      if(!KEY1)     //再次确认按键是否按下,没有按下则退出
  31.            {
  32.         while(!KEY1);//如果确认按下按键等待按键释放,没有释放则一直等待
  33.                {
  34.                LED1=!LED1;//释放则执行需要的程序
  35.                          }
  36.            }
  37.         }
  38.   if(!KEY2)  //如果检测到低电平,说明按键按下
  39.     {
  40.          DelayMs(10); //延时去抖,一般10-20ms
  41.      if(!KEY2)     //再次确认按键是否按下,没有按下则退出
  42.            {
  43.         while(!KEY2);//如果确认按下按键等待按键释放,没有释放则一直等待
  44.                {
  45.                LED2=!LED2;//释放则执行需要的程序
  46.                          }
  47.            }
  48.         }
  49.   if(!KEY3)  //如果检测到低电平,说明按键按下
  50.     {
  51.          DelayMs(10); //延时去抖,一般10-20ms
  52.      if(!KEY3)     //再次确认按键是否按下,没有按下则退出
  53.            {
  54.         while(!KEY3);//如果确认按下按键等待按键释放,没有释放则一直等待
  55.                {
  56.                LED3=!LED3;//释放则执行需要的程序
  57.                          }
  58.            }
  59.         }
  60.     if(!KEY4)  //如果检测到低电平,说明按键按下
  61.     {
  62.          DelayMs(10); //延时去抖,一般10-20ms
  63.      if(!KEY4)     //再次确认按键是否按下,没有按下则退出
  64.            {
  65.         while(!KEY4);//如果确认按下按键等待按键释放,没有释放则一直等待
  66.                {
  67.                LED4=!LED4;//释放则执行需要的程序
  68.                          }
  69.            }
  70.         }
  71.         //主循环中添加其他需要一直工作的程序
  72.       
  73.   }
  74. }
  75. /*------------------------------------------------
  76. uS延时函数,含有输入参数 unsigned char t,无返回值
  77. unsigned char 是定义无符号字符变量,其值的范围是
  78. 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  79. 长度如下 T=tx2+5 uS
  80. ------------------------------------------------*/
  81. void DelayUs2x(unsigned char t)
  82. {   
  83. while(--t);
  84. }
  85. /*------------------------------------------------
  86. mS延时函数,含有输入参数 unsigned char t,无返回值
  87. unsigned char 是定义无符号字符变量,其值的范围是
  88. 0~255 这里使用晶振12M,精确延时请使用汇编
  89. ------------------------------------------------*/
  90. void DelayMs(unsigned char t)
  91. {

  92. while(t--)
  93. {
  94.      //大致延时1mS
  95.      DelayUs2x(245);
  96.          DelayUs2x(245);
  97. }
  98. }


复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:112693 发表于 2018-8-31 23:12 | 只看该作者
谢谢分享!@!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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