找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2752|回复: 0
收起左侧

单片机控制发光二级管闪烁

[复制链接]
ID:607747 发表于 2019-9-5 09:28 | 显示全部楼层 |阅读模式
用P1口作为输出口,接8位用作逻辑电平显示的发光二极管。设计程序使发光二极管间
300ms先奇数亮再偶数亮,循环3次;一个发光二极管亮上下循环3次;两个分别从两
边向中间流动
3次;再从中间向两边流动3次;8个全部闪烁3次;关闭全部发光二极管
,停止。综合实验程序:#库定义
#include<reg52.h>
#include<intrins.h>

sbit  led=P1^0;    #位定义
int i,j,k,num,e,p,m;            
void delay(int k)       #定义延时函数
{
while(k--);
}
void timer0()   #定时器0的初始化
{
  TMOD=0X01;    #工作模式
    TR0=1;         
    EA=1;           #开启总中断
    ET0=1;
    TH0=0XDc;       #定时时间  需经过换算
    TL0=0X00;
}
void Pled()     
{
          EA=0;
                        //P1=0xfe;
                //delay(50000);
for(p=0;p<3;p++){               
    P1=0xfe;
    for(num=0;num<8;num++)
    {
   delay(50000);
     P1=_crol_(P1,1);    #_crol_(左移函数)
        if(num==6)
        {
            for(e=0;e<6;e++){
                delay(50000);
    P1=_cror_(P1,1);    #_cror_(左移函数)

}
}

            }
}
}
void flowmiddle()
{
for(m=0;m<3;m++)
{   
  P1=0x7e;
    delay(50000);
    P1=0XBD;
    delay(50000);
    P1=0XDB;
    delay(50000);
    P1=0XE7;
    delay(50000);
}
for(m=0;m<3;m++)
{   
        P1=0XE7;
    delay(50000);
    P1=0XDB;
    delay(50000);
    P1=0XBD;
    delay(50000);
    P1=0x7e;
    delay(50000);
}
  for(m=0;m<3;m++){
            P1=0xff;
            delay(50000);
            P1=0;
            delay(50000);
  }
}
void main()
{
    timer0();
     while(1){
       if(j==7)
         { j=0;
     Pled();
     flowmiddle();
} if(j==0)
{
P1=0xff;
}
     }
}
void time0() interrupt 1    #定时器0中断响应
{
    TH0=0Xdc;
    TL0=0X00;//10ms
    i++;
    if(i==30)
    {  i=0;
        j++;
        if(j%2==0){
        P1=0x55;}
        if(j%2!=0)
        {
     P1=0xaa;
}  
  }
}
实验实现说明:使用定时器0设定一个计时300ms的计时器,通过判断变量j在计时器计时到后是奇偶数,分别亮对应的小灯,当变量到7时,清除变量值,并执行通过左右移操作,以及流向中间的操作。

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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