找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何通过单片机程序实现按下按键led闪烁,松开停止闪烁

[复制链接]
ID:218360 发表于 2017-11-26 21:44 | 显示全部楼层 |阅读模式
       请教下如何通过简单的程序实行按下按键指示灯闪烁,松开停止闪烁,我用是是STC90C516单片机芯片,可以用51来写。我附上源码,请各位指点下,正在学习51单片机


  1. #include <STC90.H>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned char
  5. sbit key=P2^0;
  6. sbit key1=P2^1;
  7. void Delay200ms()                //@12.000MHz
  8. {
  9.         unsigned char i, j, k;

  10.         _nop_();
  11.         _nop_();
  12.         i = 3;
  13.         j = 189;
  14.         k = 92;
  15.         do
  16.         {
  17.                 do
  18.                 {
  19.                         while (--k);
  20.                 } while (--j);
  21.         } while (--i);
  22. }
  23. void Delay40ms()                //@12.000MHz
  24. {
  25.         unsigned char i, j, k;

  26.         _nop_();
  27.         _nop_();
  28.         i = 2;
  29.         j = 95;
  30.         k = 43;
  31.         do
  32.         {
  33.                 do
  34.                 {
  35.                         while (--k);
  36.                 } while (--j);
  37.         } while (--i);
  38. }

  39. void Delay10ms()                //@12.000MHz
  40. {
  41.         unsigned char i, j;

  42.         i = 117;
  43.         j = 184;
  44.         do
  45.         {
  46.                 while (--j);
  47.         } while (--i);
  48. }

  49. void main()
  50. {
  51.          uchar  a;
  52.          P1=0Xff;
  53.         while(1)
  54.         {        
  55.         
  56.                 if(key==0)
  57.                 {
  58.                   Delay10ms();
  59.                   
  60.                   if(key==0)
  61.                   {
  62.                           a++;
  63.                         if(a==9)          //如果a=9,那么就进行清零
  64.                         {
  65.                         a=0;
  66.                         while(key==0);         //循环在按键判断
  67.                   }
  68.                
  69.                  }
  70.         
  71.                 switch(a)
  72.                         {
  73.                                 case 1:P1=0X00;        Delay200ms();break;          //灯全亮
  74.                                 case 2:P1=0X7f;        Delay200ms();break;          //第一亮
  75.                                 case 3:P1=0Xbf;        Delay200ms();break;         //第二个亮
  76.                                 case 4:P1=0Xdf;        Delay200ms();break;
  77.                                 case 5:P1=0Xef;        Delay200ms();break;
  78.                                 case 6:P1=0Xf7;        Delay200ms();break;
  79.                                 case 7:P1=0Xfb;        Delay200ms();break;
  80.                                 case 8:P1=0Xfd;        Delay200ms();break;
  81.                                 case 0:P1=0Xfe;        Delay200ms();break;        //第8个亮
  82.                         
  83.                         }
  84.                
  85.                   
  86.                 }
  87.                 if(key1==0)
  88.                 {
  89.                   Delay10ms();
  90.                   
  91.                   if(key1==0)
  92.                   {
  93.                           P1=0X00;
  94.                         Delay40ms();
  95.                         P1=0Xff;
  96.                         Delay10ms();
  97.                         //while(1);
  98.                         while (key==0);
  99.                         
  100.                   }
  101.                   
  102.                  
  103.                           
  104.                   
  105.                   

  106.                 }
  107.                  
  108.         }
  109. }
复制代码


回复

使用道具 举报

ID:213173 发表于 2017-11-27 07:25 | 显示全部楼层
把key1的代码调整一下即可:
                if(key1==0)
                {
                        Delay10ms();       
                        if(key1==0)
                        {
                                while(!key1)
                                {
                                        P1=0X00;
                                        Delay40ms();
                                        P1=0Xff;
                                        Delay10ms();
                                }
//                                while (key==0);
                        }
                }       
回复

使用道具 举报

ID:218360 发表于 2017-11-27 15:54 | 显示全部楼层
wulin 发表于 2017-11-27 07:25
把key1的代码调整一下即可:
                if(key1==0)
                {

谢谢,晚上回家改下测试下
回复

使用道具 举报

ID:218360 发表于 2017-11-28 21:45 | 显示全部楼层
wulin 发表于 2017-11-27 07:25
把key1的代码调整一下即可:
                if(key1==0)
                {

还是没有解决问题,按下按键,还是不能闪烁,必须要一直按住按键
回复

使用道具 举报

ID:213173 发表于 2017-11-29 07:44 | 显示全部楼层
打杂的 发表于 2017-11-28 21:45
还是没有解决问题,按下按键,还是不能闪烁,必须要一直按住按键

你要的就是:按下按键指示灯闪烁,松开停止闪烁、
回复

使用道具 举报

ID:218360 发表于 2017-11-29 12:22 | 显示全部楼层
wulin 发表于 2017-11-29 07:44
你要的就是:按下按键指示灯闪烁,松开停止闪烁、

是松开按键还是可以闪烁,不是按下闪烁,现在就可以按下闪烁了
回复

使用道具 举报

ID:255144 发表于 2017-11-29 13:40 | 显示全部楼层
按键的程序代码,网上很多,可以下载自己改一下试试。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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