3895|10

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求个单片机问题 [复制链接]

求个单片机编程问题,可简化为:用3号键控制1、2灯 按下3号 1、2两灯谁亮灭谁 抬开恢复原先状态 这个怎么编
此帖出自51单片机论坛

最新回复

这个可以定义成数组吗?  详情 回复 发表于 2012-7-25 15:17

点评

这是个歧义句,可以理解为: 1、把亮度较高的灯熄灭。 2、把已被点亮的灯熄灭。 如是后者,3号键就是个灯的电源总开关而已。  详情 回复 发表于 2012-7-24 16:52
点赞 关注
 

回复
举报

3138

帖子

0

TA的资源

裸片初长成(初级)

沙发
 

谁亮灭谁?

这是个歧义句,可以理解为:
1、把亮度较高的灯熄灭。
2、把已被点亮的灯熄灭。

如是后者,3号键就是个灯的电源总开关而已。
此帖出自51单片机论坛

点评

三号按键的作用是 按下时把已经点亮的灯熄灭 抬手时恢复按前状态  详情 回复 发表于 2012-7-25 00:11
不是歧义句  详情 回复 发表于 2012-7-24 17:23
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

给你个参考

假设你的按键子函数为 bit key(uchar key_num);去抖神马的都写好了,key_num是按键号,你不是3号键么,按下的话就返回1,没按返回0。LED1为你控制灯1的单片机口,LED2为你控制灯2的单片机口,我不知道你具体电路怎么样的,这里假设LED1= 1,灯1亮,LED2 = 1,灯2量
不管你前面函数怎么写的,在主函数循环里面加入以下语句
bit LED1_buf,LED2_buf,LED_change_sign;
if((key(3) == 0) && (LED_change_sign == 0))    //在LED1,LED2状态没变的时候存入缓存,LED_change_sign为LED状态变化标志位。
{
  LED1_buf = LED1;
  LED2_buf = LED2;
}
if(key(3) == 1)
{
  if(LED1 == 1)
  {
    LED1 = 0;
    LED_change_sign = 1;   
  }
  if(LED2 == 1)
  {
    LED2 = 0;
    LED_change_sign = 1;
  }
}
else
{
  LED1 = LED1_buf;
  LED2 = LED2_buf;
  LED_change_sign = 0;
}

[ 本帖最后由 yipengjiusui 于 2012-7-24 17:21 编辑 ]
此帖出自51单片机论坛

点评

这是我编的程序::: #include #define uchar unsigned char #define uint unsigned int sbit key(1)=P3^0; sbit key(2)=P3^1; sbit key(3)=P3^2; sbit key(4)=P3^3; sbit key(5)=P3^4  详情 回复 发表于 2012-7-25 02:32
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

4
 
定义个变量记录灯的状态。根据记录灯的状态进行按键处理
此帖出自51单片机论坛
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

5
 
按下3号 1、2两灯谁亮灭谁
太复杂了,简单点吗。按下3号就是 1、2两灯全灭
此帖出自51单片机论坛

点评

不复杂的  详情 回复 发表于 2012-7-24 17:22
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 ltbytyn 的帖子

不复杂的
此帖出自51单片机论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 沙发 仙猫 的帖子

不是歧义句
此帖出自51单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 沙发 仙猫 的帖子

三号按键的作用是 按下时把已经点亮的灯熄灭 抬手时恢复按前状态
此帖出自51单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 板凳 yipengjiusui 的帖子

这是我编的程序:::


#include
#define uchar unsigned char
#define uint unsigned int

sbit key(1)=P3^0;                          
sbit key(2)=P3^1;   
sbit key(3)=P3^2;   
sbit key(4)=P3^3;
sbit key(5)=P3^4;
sbit key(6)=P3^5;
sbit LED1=P1^2;
sbit LED2=P1^3;
sbit LED3=P1^4;
sbit LED4=P1^5;
sbit LED5=P1^6;
sbit LED6=P1^7;
void delayms(uint);

void delayms(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void main(void)
{


   
    while(1)
    {
        if(key(1)==1)                       
        {
            delayms(10);              
            if(key(1)==1)                  
            LED1=0; LED3=0; LED2=1;LED4=1;            
                          
            delayms(250);            
        }        
         if(key(2)==1)      
        {
            delayms(10);                    
            if(key(2)==1)                  
            LED=0;LED4=0;LED1=1;LED3=1;            
                         
                        delayms(250);
        }      
    bit LED1_buf,LED2_buf,LED_change_sign;

if((key(3) == 0) && (LED_change_sign == 0))    //在LED1,LED2状态没变的时候存入缓存,LED_change_sign为LED状态变化标志位。
{
  LED1_buf = LED1;
  LED2_buf = LED2;
}
if(key(3)==1)      
        {
            delayms(10);
if(key(3) == 1)
{
  if(LED1 == 0)
  {
    LED1 = 1;
    LED_change_sign = 1;   
  }
  if(LED2 == 0)
  {
    LED2 = 1;
    LED_change_sign = 1;
  }
}
else
{
  LED1 = LED1_buf;
  LED2 = LED2_buf;
  LED_change_sign = 0;
}


bit LED3_buf,LED4_buf,LED_change_sign;

if((key(4) == 0) && (LED_change_sign == 0))    //在LED1,LED2状态没变的时候存入缓存,LED_change_sign为LED状态变化标志位。
{
  LED1_buf = LED1;
  LED2_buf = LED2;
}
if(key(4)==1)      
        {
            delayms(10);
if(key(4) == 1)
{
  if(LED3 == 0)
  {
    LED3 = 1;
    LED_change_sign = 1;   
  }
  if(LED4 == 0)
  {
    LED4 = 1;
    LED_change_sign = 1;
  }
}
else
{
  LED3 = LED3_buf;
  LED4 = LED4_buf;
  LED_change_sign = 0;
}

   
                 if(key(5)==1)
        {
             delayms(10);                    
            if(key(5)==1)                  
            LED5=~LED5;               
                        while(key(5)==1);  
                        delayms(250);
        }        
                if(key(6)==1)
        {
             delayms(10);                    
            if(key(6)==1)                  
            LED1=1;LED2=1;LED3=1;LED4=1;               
                        while(key(6)==1);  
                        delayms(250);
        }               
        }  
       
               
                }
                }
                }

但下面显示:
Build target 'Target 1'
assembling STARTUP.A51...
compiling 12345.c...
12345.C(5): error C141: syntax error near '(', expected '='
12345.C(6): error C141: syntax error near '(', expected '='
12345.C(7): error C141: syntax error near '(', expected '='
12345.C(8): error C141: syntax error near '(', expected '='
12345.C(9): error C141: syntax error near '(', expected '='
12345.C(10): error C141: syntax error near '(', expected '='
Target not created



跪求解答
此帖出自51单片机论坛

点评

sbit key(1)=P3^0; sbit key(2)=P3^1; sbit key(3)=P3^2; sbit key(4)=P3^3; sbit key(5)=P3^4; sbit key(6)=P3^5; 把他们的括号给我去掉。。。。。。 后面的一样子改掉!  详情 回复 发表于 2012-7-25 10:41
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 9楼 kk9101042 的帖子

sbit key(1)=P3^0;                          
sbit key(2)=P3^1;   
sbit key(3)=P3^2;   
sbit key(4)=P3^3;
sbit key(5)=P3^4;
sbit key(6)=P3^5;
把他们的括号给我去掉。。。。。。
后面的一样子改掉!
此帖出自51单片机论坛

点评

这个可以定义成数组吗?  详情 回复 发表于 2012-7-25 15:17
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼 yipengjiusui 的帖子

这个可以定义成数组吗?
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表