找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21029|回复: 5
收起左侧

51单片机和PIC 按键按一次灯亮,再按一次灯灭 程序源码

[复制链接]
ID:103513 发表于 2016-1-17 02:35 | 显示全部楼层 |阅读模式

这个是我自己diy的单片机开发板:http://www.51hei.com/bbs/dpj-42590-1.html

  1. //--------------------------------下面为板上运行通过的,更为简洁--------------------------------------------------------------

  2. //这个程序适用于天祥、淘宝上面买的开发板,我自已做的板子也是和它们的脚位一样,好处是立马可以20181031    18:05

  3. /*按一下灯亮再一下灯灭+松手检测*/
  4. #include<reg52.h>
  5. #define uchar unsigned char
  6. sbit P10=P1^0;
  7. void delay(int x)
  8. {
  9. int a,b;
  10. for(a=x;a>0;a--)
  11. for(b=110;b>0;b--);
  12. }
  13. void main()
  14. {
  15. uchar temp=0;
  16. P10=0;
  17. while(1)
  18. {
  19. if(T0==0)
  20.   {
  21.   delay(5);   //延时去抖
  22.   if(T0==0)     //确实被按下了
  23.    {
  24.    temp=!temp;
  25.    P10=temp;    //灯的状态取反了
  26.    while(!T0);    //松手检测,灯取反后就停在这里了直到松手T0=0后退出循环
  27.    delay(500);    //灯持续亮500ms以便我们肉眼观察
  28.    }
  29.   }
  30. }
  31. }


复制代码


  1. /*此为自已写的,
  2. 功能:实现按一次按键灯亮,再按一次灯灭
  3. 欢迎仿问我的空间里头有好多单片机C语言代码
  4. 2018年10月24于厦门软件园二期
  5. */
  6. #include <pic.h>  //此为pic的代码
  7. #define uint unsigned int
  8. #define uchar unsigned char
  9. void delay(uint x)  //延时函数
  10. {
  11. uint a,b;
  12. for(a=x;a>0;a--)
  13.   for(b=110;b>0;b--);
  14. }

  15. void main()   //主函数
  16. {
  17. static bit temp; //定义一个静态的位变量,注意得放在第一行,否则会提示一堆的错误
  18. TRISB=0;PORTB=0xff;
  19. TRISD=0;PORTD=0x00;
  20. temp=RD0;   //把RD0 LED灯的当前状态赋给变量temp
  21. while(1)
  22. {
  23. if(RB0==0)  //判断按键是否有被按下,有则为0
  24.   {
  25.   delay(10); //去抖
  26.   if(RB0==0) //去抖完得再判断一次
  27.    {
  28.    temp=!temp;  //每按一次,位变量temp取反一次
  29.    while(!RB0)  //松手检测,按下时为0取反为1,一直循环直至松手为1取反后为0退出循环
  30.    RD0=temp;  //把取反后的temp值赋给RD0即LED灯
  31.    }
  32.   }
  33. }
  34. }



  35. //-----------------------下面为51的代码----------------------------------------------------
  36. /*
  37. #include <reg52.h>  //此为51单片机的代码
  38. #define uint unsigned int
  39. #define uchar unsigned char
  40. void delay(uint x)  //延时函数
  41. {
  42. uint a,b;
  43. for(a=x;a>0;a--)
  44.   for(b=110;b>0;b--);
  45. }

  46. void main()   //主函数
  47. {
  48. static bit temp; //定义一个静态的位变量,注意得放在第一行,否则会提示一堆的错误
  49. sbit RD0=P1^1;  //定义LED灯为RD0
  50. sbit RB0=p3^2;  //定义INT0为RB0(按键)
  51. temp=RD0;   //把RD0 LED灯的当前状态赋给变量temp
  52. while(1)
  53. {
  54. if(RB0==0)  //判断按键是否有被按下,有则为0
  55.   {
  56.   delay(10); //去抖
  57.   if(RB0==0) //去抖完得再判断一次
  58.    {
  59.    temp=!temp;  //每按一次,位变量temp取反一次
  60.    while(!RB0)  //松手检测,按下时为0取反为1,一直循环直至松手为1取反后为0退出循环
  61.    RD0=temp;  //把取反后的temp值赋给RD0即LED灯
  62.    }
  63.   }
  64. }
  65. }
  66. */
复制代码





回复

使用道具 举报

ID:160143 发表于 2017-1-5 15:39 来自手机 | 显示全部楼层
感谢楼主,能不能把开发版的制作给我发一个,谢谢,56155909@qq.com.楼主辛苦了…
回复

使用道具 举报

ID:160143 发表于 2017-1-5 15:40 来自手机 | 显示全部楼层
能不能把开发区分制作给我发一个?56155909@qq.com
回复

使用道具 举报

ID:183120 发表于 2017-4-15 21:02 | 显示全部楼层
请问T0指的是按键吗?
回复

使用道具 举报

ID:113894 发表于 2017-4-22 13:26 | 显示全部楼层
彬Lsl 发表于 2017-4-15 21:02
请问T0指的是按键吗?

你看下手册上的P3^4端口
回复

使用道具 举报

ID:183120 发表于 2017-4-22 13:46 | 显示全部楼层
兰亭序 发表于 2017-4-22 13:26
你看下手册上的P3^4端口

原来如此
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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