码迷,mamicode.com
首页 > 其他好文 > 详细

Keil C51学习 2 点亮LED灯

时间:2021-01-30 12:15:50      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:字符型   闪烁   ide   while   ++   一段   src   变亮   延时   

P0口联接8个LED灯,P1^0~P1^7;

 

点亮一个LED

技术图片
 1 #include<reg52.h> //包含头文件,一般情况不需要改动,
 2                   //头文件包含特殊功能寄存器的定义
 3 
 4 sbit LED=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,
 5               //LED是自己任意定义且容易记忆的符号
 6 /*------------------------------------------------
 7                     主函数
 8 ------------------------------------------------*/
 9 void main (void)
10 {
11                   //此方法使用bit位对单个端口赋值
12     LED=1;            //将P1.0口赋值 1,对外输出高电平
13     LED=0;            //将P1.0口赋值 0,对外输出低电平
14 
15   while (1)         //主循环
16   {                  //主循环中添加其他需要一直工作的程序
17        LED=0;
18         //将P1.0口赋值 0,对外输出低电平
19   }
20 }
点亮一个LED

点亮多个LED

技术图片
#include<reg52.h> //包含头文件,一般情况不需要改动,
                  //头文件包含特殊功能寄存器的定义

sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,
sbit LED1=P1^1;//LED是自己任意定义且容易记忆的符号
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  //此方法使用bit位对单个端口赋值
LED0=0;            //将P1.0口赋值 0,对外输出低电平
LED1=1;
LED2=0;
LED3=1;
LED4=0;
LED5=1;
LED6=0;
LED7=1;
while (1)         //主循环
  {
                  //主循环中添加其他需要一直工作的程序
  }
}
点亮多个LED

如果像上面那样一个个赋值就太累了,下面是简单方法

//此方法使用1个字节对单个端口赋值
P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉,
//ff换算成二进制是 1111 1111

P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮
//0xfe是16进制,0x开头表示16进制数,
//fe换算成二进制是 1111 1110

 

P0口是开路漏极只能输出低电平,不能正常输出高电平。

全部取反,主函数中的代码修改为

 LED=~LED;      

在一个时钟周期内闪烁一次,这个时间太短,难以观察。

这样就引入延时需要,简单方法就是执行一个循环一段时间。

技术图片
 1 void main (void)
 2 {
 3   while (1)         //主循环
 4   {                  //主循环中添加其他需要一直工作的程序
 5        LED=~LED;           
 6         //将P1.0口赋值 0,对外输出低电平
 7             delay(100);//执行100次
 8   }
 9 }
10 void delay(int time)//延时函数
11 {
12      int i=0;
13      while(time--)
14      {
15          i=4000;
16          while(i--);
17      }
18 }
延时闪烁
技术图片
 1 void delay(int time)//延时函数
 2 {
 3      int i=0;
 4      while(time--)
 5      {
 6          i=4000;
 7          while(i--);
 8      }
 9 }
10 void main (void)
11 {
12   while (1)         //主循环
13   {                  //主循环中添加其他需要一直工作的程序
14               
15     unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
16     //P1=0xfe;           //赋初始值
17         for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
18         {
19             P1<<=1;
20             delay(100);//执行100次
21         }
22   }
23 }
延时左移
技术图片
 1 void delay(int time)//延时函数
 2 {
 3      int i=0;
 4      while(time--)
 5      {
 6          i=4000;
 7          while(i--);
 8      }
 9 }
10 void main (void)
11 {
12                    
13 unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
14 delay(100);
15 P1=0xfe;           //赋初始值
16     while (1)         //主循环
17   {
18  for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
19   {
20    delay(100);
21    P1<<=1;
22    P1=P1|0x01;     //左移后,最右端自动赋值0,所以需要该语句赋值1
23   } 
24   P1=0xfe;           //重新赋初始值
25   //主循环中添加其他需要一直工作的程序
26   }
27 }
循环左移
技术图片
 1 sbit LED0=P1^0;
 2 void delay(int i)//延时函数
 3 {
 4          while(i--);
 5 }
 6 void main (void)
 7 {
 8                        
 9 unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
10 while (1)         //主循环
11   {
12  LED0=1;
13  delay(60000);        //特意加延时,可以看到熄灭的过程
14  for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低
15  //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
16 
17            LED0=0;        //点亮LED  
18            delay(PWM_LOW);//延时长度,600次循环中从1加至599
19            LED0=1;        //熄灭LED
20           delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1
21      
22    }
23  LED0=0;
24  for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //与逐渐变亮相反的过程
25 
26            LED0=0;
27            delay(PWM_LOW);
28            LED0=1;
29           delay(CYCLE-PWM_LOW);
30    }
31                      //主循环中添加其他需要一直工作的程序
32   }
33 }
呼吸灯

 

Keil C51学习 2 点亮LED灯

标签:字符型   闪烁   ide   while   ++   一段   src   变亮   延时   

原文地址:https://www.cnblogs.com/bymeet/p/14347715.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!