找回密码
 立即注册

QQ登录

只需一步,快速开始

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

一个按键控制LED开关和延时进行模式切换 Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit s1=P3^4;
  5. sbit led=P3^3;//


  6. /*****************按键扫描用的**********************/
  7. #define  short_key 5     
  8. #define  short_small_key  4   
  9. #define  long_key  100

  10. bit button1_shortflag=0;
  11. bit button1_longflag=0;
  12.   uchar flag=2;



  13.   void time_init()
  14.   {
  15.   TMOD=0x01;//方式1
  16.   TH0=-10000/256;
  17.   TL0=-10000%256;//10ms
  18.   ET0=1;//开定时器0中断
  19.   TR0=1;//开定时器
  20.   EA=1;//开总中断
  21.   }

  22. /****************************************/


  23. void getkey_number()
  24. {
  25. static uchar button1_time=0;
  26. static uchar button1_time1=0;
  27.         if(s1==0)
  28.         {
  29.            button1_time>=short_key?(button1_time=short_key):button1_time++;//
  30.                  button1_time1>=long_key?(button1_time1=long_key):button1_time1++;//
  31.         }
  32.     else
  33.                 {
  34.                         if(button1_time1==long_key)
  35.                         {   button1_time1=0;
  36.                             button1_time=0;
  37.                                  button1_longflag=1;        
  38.                         }
  39.                  if(button1_time==short_key)
  40.                  {
  41.                           button1_time=0;
  42.                          button1_time1=0;
  43.                          button1_shortflag=1;
  44.                  }
  45.                 }

  46. }



  47. void main()
  48. {
  49.         static uchar k;
  50. time_init();//定时器开启
  51.    while(1)
  52.    {           
  53.          
  54. if(button1_shortflag==1)
  55. {
  56.         button1_shortflag=0;
  57.         flag=2;
  58.         if(led==0) led=1;
  59.         else led=0;
  60. }

  61. if(button1_longflag==1)
  62. {
  63. button1_longflag=0;
  64.         if(++k>=2) k=0;
  65.    if(k==0) {flag=1;}
  66.                  else  {flag=0;}
  67. }
  68.    }
  69. }


  70. /****************************************/
  71. void time0() interrupt 1
  72. {
  73. static uchar time=0;
  74.         static uchar m;
  75. TR0=0;

  76. /*************用于按键扫描******************/
  77. if(++time>=2)                          
  78. {  time=0;
  79.   getkey_number();
  80. }        
  81. if(flag!=2)
  82. {
  83. if(flag==0)
  84. {
  85.         if(++m>=40)
  86.         {
  87.         m=0; led=!led;
  88.         }
  89. }
  90.         if(flag==1)
  91.         {
  92.         led=0;
  93.         }
  94. }


  95.   TH0=-10000/256;
  96.   TL0=-10000%256;
  97.   TR0=1;



  98. }
复制代码

仿真程序51hei提供下载:
一个按键控制LED开关和延时切换模式.rar (96.23 KB, 下载次数: 13)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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