找回密码
 立即注册

QQ登录

只需一步,快速开始

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

初学,不知道这个程序能不能实现KEY1控制LED1闪烁,KEY3控制LED3亮灭

  [复制链接]
回帖奖励 10 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:140102 发表于 2018-6-12 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 simas 于 2018-6-12 11:18 编辑

#include <STC15W.h>
#define ulong unsigned long
#define uchar unsigned char     
#define uint unsigned int
sbit LED1 =P3^7;
sbit LED2 =P3^6;
sbit LED3 =P3^3;
sbit BUZZ =P3^2;
sbit KEY1 =P1^1;
sbit KEY2 =P1^2;
sbit KEY3 =P1^3;
sbit KEY4 =P1^4;
char KEY1_T,KEY2_T,KEY3_T;
void delay( unsigned int t)
{
unsigned char i,j;
for(i=t;i>0;i--)
for(j=250;j>0;j--);
}
void led1ss()
{
LED1=1;delay(1500);LED1=0;delay(1500);
}
void led2ss()
{
LED2=1;delay(1500);LED2=0;delay(1500);
}
void key_scan()
{
         if(KEY1==0)                                                        
        {
     delay(10);
                 if(KEY1==0)
                 {
                    if  ( (KEY1 == 0)&&(KEY1_T == 0) )
                         {led1ss();KEY1_T = 1;}
          else  if ( (KEY1 == 0)&&(KEY1_T == 1) )
                         {LED1 = 0;KEY1_T = 0;}
                 }
         }
       if(KEY2==0)                                                        
        {
     delay(10);
                 if (KEY2==0)
                 {
                    if  ( (KEY2 == 0)&&(KEY2_T == 0) )
                         {led2ss();KEY2_T = 1;}
          else  if ( (KEY2 == 0)&&(KEY2_T == 1) )
                         {LED2 = 0;KEY2_T = 0;}
                 }
         }
       if(KEY3==0)                                                        
        {
     delay(10);
                 if(KEY3==0)
                 {
                    if  ( (KEY3 == 0)&&(KEY3_T == 0) )
                         {LED3=1;KEY3_T = 1;}
          else  if ( (KEY3 == 0)&&(KEY3_T == 1) )
                         {LED3 = 0;KEY3_T = 0;}
                 }
         }
       if(KEY4==0)                                                        
        {
     delay(10);
                 if(KEY4==0)
                 {
                    BUZZ=1;
                 }
         }
}   
void main()
{
  LED1=0;
  LED2=0;
  LED3=0;
  BUZZ=0;
  
  
         while(1)
         {
                 key_scan();                                               
        }
}

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

使用道具 举报

沙发
ID:329253 发表于 2018-6-12 12:21 来自手机 | 只看该作者
实验一下就知道了呀
回复

使用道具 举报

板凳
ID:320306 发表于 2018-6-12 12:25 | 只看该作者
KEY3_T,这几个T是做什么的没看懂!!!!!
回复

使用道具 举报

地板
ID:340443 发表于 2018-6-12 12:54 | 只看该作者
可以的
回复

使用道具 举报

5#
ID:140102 发表于 2018-6-12 14:11 | 只看该作者
zsyzdx 发表于 2018-6-12 12:25
KEY3_T,这几个T是做什么的没看懂!!!!!

按键标志
回复

使用道具 举报

6#
ID:140102 发表于 2018-6-12 14:12 | 只看该作者
134849694164151 发表于 2018-6-12 12:21
实验一下就知道了呀

实验后,只有在KEY1,KEY2按着的情况下才闪烁
回复

使用道具 举报

7#
ID:140102 发表于 2018-6-12 16:16 | 只看该作者
如何实现按下key1, led1持续闪烁,再按下熄灭,请各位大师教教我。
回复

使用道具 举报

8#
ID:350274 发表于 2018-6-12 16:35 | 只看该作者
如何实现按下key1, led1持续闪烁,再按下熄灭,请各位大师教教我。
回复

使用道具 举报

9#
ID:350442 发表于 2018-6-12 17:05 | 只看该作者
看程序没有问题,只是还有其他功能,不是太懂,借用别人的代码?
回复

使用道具 举报

10#
ID:350430 发表于 2018-6-12 17:47 | 只看该作者
if  ( (KEY2_T == 0)
                         {led2ss();KEY2_T = 1;}
          else  if ( KEY2_T == 1 )
                         {LED2 = 0;KEY2_T = 0;}
改成这样试试
回复

使用道具 举报

11#
ID:265995 发表于 2018-6-12 18:11 | 只看该作者
看看这个
程序不一定正确,
程序不一定正确,
程序不一定正确,
只是提供一个思路,
每按一次key1,主程序里led1_flash_ctr取反一次,led1_flash_ctr控制led1是否闪烁

#include <STC15W.h>
#define ulong unsigned long
#define uchar unsigned char     
#define uint unsigned int
sbit LED1 =P3^7;
sbit LED2 =P3^6;
sbit LED3 =P3^3;
sbit BUZZ =P3^2;
sbit KEY1 =P1^1;
sbit KEY2 =P1^2;
sbit KEY3 =P1^3;
sbit KEY4 =P1^4;
char KEY1_T,KEY2_T,KEY3_T;
void delay( unsigned int t)
{
unsigned char i,j;
for(i=t;i>0;i--)
for(j=250;j>0;j--);
}
void led1ss(char SW1)
{
    if(SW1=1)
      {  LED1=1;delay(1500);LED1=0;delay(1500);}
    else
        LED1=1;
}

char key1_pressed;
char key2_pressed;
char key3_pressed;
char key4_pressed;
char led1_flash_ctr;


void key_scan()
{
         if(KEY1==0)                                                        
        {
               delay(10);
                 if(KEY1==0)
                 {
                    key1_pressed=1;
                     while(!KEY2);     //检测按键弹起              
                 }
         }
       if(KEY2==0)                                                        
        {
              delay(10);
                 if (KEY2==0)
                 {
                    key2_pressed=1;
                    while(!KEY2);
                 }
         }
       if(KEY3==0)                                                        
        {
               delay(10);
                 if(KEY3==0)
                 {
                    key3_pressed=1;
                    while(!KEY3);
                 }
         }
       if(KEY4==0)                                                        
        {
               delay(10);
                 if(KEY4==0)
                 {
                    key4_pressed=1;
                    while(!KEY4);
                 }
         }
}   
void main()
{
  LED1=0;
  LED2=0;
  LED3=0;
  BUZZ=0;
  
  
         while(1)
         {
                 key_scan();
                 if(key1_pressed)
                 {
                    key1_pressed=0;
                    led1_flash_ctr=!led1_flash_ctr;
                 }
                 if(key2_pressed)
                 {
                    key2_pressed=0;
                    //按下key2的操作
                 }





            led1ss(led1_flash_ctr);


        }
}
回复

使用道具 举报

12#
ID:350540 发表于 2018-6-12 19:41 | 只看该作者
程序太繁长,还乱,程序不是越长越好。程序可以正常运行。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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