单片机学习小组
直播中

fejlkel

8年用户 1067经验值
擅长:制造/封装
私信 关注

怎样利用c语言编程单片机去实现led灯顺序点亮和熄灭呢

怎样利用c语言编程单片机去实现led灯顺序点亮和熄灭呢?

回帖(1)

周密

2022-2-25 14:54:47
现象一:(采用移位函数)实现按s1,led顺序点亮,按s2,led顺序熄灭。

我实现的是一个一个顺序点亮,一个一个顺序熄灭

#include
#include

typedef int u16;
typedef char u8;

#define uint unsigned int
#define uchar unsigned char

***it s1 = P4^4;      //定义一个独立按键      
***it s2 = P1^6;      //定义一个独立按键
***it led =P0^7;      //定义0.7口的灯

void delay(u16 i){
    while(i--);
}
void main(void){  
        uchar led_data=0xfe;   
      
        uchar led_dataa =0x00;  
      
   while(1){
               
                  if(s1==0)
                        delay(50000);
                if(s1==0){
                        while(!s1);
                        delay(50000);           //延时
               
                P0=led_data;    //P0 1111 1110
        led_data=led_data<<1;        //实现按一次亮一个,且保持前面的状态
                                 
                 }
         
          if(s2==0)
                        delay(50000);
                  if(s2==0){
                        while(!s2);
                        delay(50000);           //延时0.5s
               
                P0=led_dataa;     //P0 0000 0000
                led=1;            //令0.7灭
                led_dataa -=0x80; //变成负数右移
                led_dataa=led_dataa>>1;   //实现按一次灭一个,且保持前面的状态
         }
                           
   }  
}

现象二:(采用循环移位函数)实现按s1,led顺序点亮,按s2,led顺序熄灭。


我实现的是一次亮一个,一次灭一个。

#include
#include

typedef int u16;
typedef char u8;

#define uint unsigned int
#define uchar unsigned char

***it s1 = P4^4;//定义一个独立按键      
***it s2 = P1^6;//定义一个独立按键
***it led =P0^7;

void delay(u16 i){
    while(i--);
}
void main(void){  
        uchar led_data=0xfe;   
      
        uchar led_dataa =0x80;  
      
   while(1){
               
                  if(s1==0)
                        delay(50000);
                if(s1==0){
                        while(!s1);
                        delay(50000);           //延时0.5s
               
                P0=led_data;    //P0 1111 1110

      //移位函数,使led_date向左循环移动1位
          led_data=_crol_(led_data,1);   //实现每次亮一个
                                             
                 }
         
          if(s2==0)
                        delay(50000);
                  if(s2==0){
                        while(!s2);
                        delay(50000);           //延时0.5s
               
                P0=led_dataa;     //P0 0000 0000
               
                //移位函数,使led_dataa向右循环移动1位
                led_dataa=_cror_(led_dataa,1); //实现每次灭一个
         }
                           
   }  
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分