蓝桥杯--单片机--LED

正向普通流水灯:

​
void inittime1()
{
 TMOD=0x01;//0000 0001
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;
 ET1=1;
 TR1=1;
}

void t1() interrupt 3
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 count++;
 if(count==10)
 {
  i++;
  count=0;
 }
 if(i==8) 
 {i=0;}
 P0=~(0x01<<i);hc138(4);hc138(0);

}

​

正向呼吸流水灯:

void t0() interrupt 1
{
 TH0=(65536-100)/256;
 TL0=(65536-100)%256;	   
 count++;
 count1++;

 if(count==pwm)	   //计数值达到所设置的占空比时
 {P0=0xff;hc138(4);hc138(0);}
 if(count==100)	   //计数值一个周期为100份
 {
  count=0;				  //每个亮度等级隔10ms切换一次
  P0=~(0x01<<i);hc138(4);hc138(0);
  pwm++;
 }					    //1份为0.1ms,100份为10ms
 if(pwm==100)		   //占空比达到最大后,清零重新开始
 {
  pwm=0;
 }
 if(count1==10000)	//1s时间到,移位一次
 {
 count1=0;
  i++;
 }
 if(i==8)		  //移位到达最后一位,又重新流水
 {
  i=0;
 } 
}

对于led灯的常规用法:(不存在流水灯状态的情况下均可实用下面写法)

对单个led灯进行操作且不会出现led的显示受到P0口其他数据影响的情况:

​
void led_switch()	 //只要不存在流水灯情况下解决外设冲突LED写法 
{
 P0=0xff;			 //先将P0清零防止干扰

 if(l1_state==0)
 P0&=~0x01;			 //1111 1110
 else
 P0|=0x01;          //0000 0001

 if(l2_state==0)
 P0&=~0x02;        //1111 1101
 else
 P0|=0x02;         //0000 0010

 if(l3_state==0)
 P0&=~0x04;        //1111 1011
 else 
 P0|=0x04;         //0000 0100

 if(l4_state==0)
 P0&=~0x08;		   //1111 0111
 else
 P0|=0x08;		  //0000  1000

 if(l5_state==0)
 P0&=~0x10;       //1110 1111
 else
 P0|=0x10;		  //0001 0000

 if(l6_state==0)
 P0&=~0x20;       //1101 1111
 else
 P0|=0x20;        //0010 0000

 if(l7_state==0)
 P0&=~0x40;			  //1011 1111
 else
 P0|=0x40;        //0100 0000

 if(l8_state==0)
 P0&=~0x80;       //1000 0000
 else
 P0|=0x80;		 //1000 0000
  											
 hc138(4);
 hc138(0);
}

​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值