[求助] 求个单片机问题

kk9101042   2012-7-24 15:27 楼主
求个单片机编程问题,可简化为:用3号键控制1、2灯 按下3号 1、2两灯谁亮灭谁 抬开恢复原先状态 这个怎么编

回复评论 (10)

谁亮灭谁?

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

如是后者,3号键就是个灯的电源总开关而已。
点赞  2012-7-24 16:52

给你个参考

假设你的按键子函数为 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 编辑 ]
点赞  2012-7-24 17:16
定义个变量记录灯的状态。根据记录灯的状态进行按键处理
点赞  2012-7-24 17:18
按下3号 1、2两灯谁亮灭谁
太复杂了,简单点吗。按下3号就是 1、2两灯全灭
点赞  2012-7-24 17:21

回复 5楼 ltbytyn 的帖子

不复杂的
点赞  2012-7-24 17:22

回复 沙发 仙猫 的帖子

不是歧义句
点赞  2012-7-24 17:23

回复 沙发 仙猫 的帖子

三号按键的作用是 按下时把已经点亮的灯熄灭 抬手时恢复按前状态
点赞  2012-7-25 00:11

回复 板凳 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



跪求解答
点赞  2012-7-25 02:32

回复 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;
把他们的括号给我去掉。。。。。。
后面的一样子改掉!
点赞  2012-7-25 10:41

回复 10楼 yipengjiusui 的帖子

这个可以定义成数组吗?
点赞  2012-7-25 15:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复