建设互联网教育网站,网站服务器在哪里买好,专做外贸库存的网站,网站建设提供资料表目录
1.LED介绍
2.硬件电路
3.程序设计
3.1.点亮一颗LED
3.2.LED闪烁
3.3.LED流水灯实现 1.LED介绍 发光二极管也具有二极管普遍的特性单向导电性#xff0c;有阳极和阴极之分 #xff0c;上图左侧式插件式LED #xff0c;长的引脚是阳极#xff1b;左侧是贴片式的带…目录
1.LED介绍
2.硬件电路
3.程序设计
3.1.点亮一颗LED
3.2.LED闪烁
3.3.LED流水灯实现 1.LED介绍 发光二极管也具有二极管普遍的特性单向导电性有阳极和阴极之分 上图左侧式插件式LED 长的引脚是阳极左侧是贴片式的带色的一端是阴极箭头指向是阴极也就是电流的流向。二极管阳极接电源阴极接地。电流大小一般在3-20ma之间若是电流再大容易烧坏二极管。二极管的亮度和电流的大小有关电流越大发光二极管就越亮自身带有导通压降1.7V 。
2.硬件电路 为防止发光二级管因为电流而烧毁需要串联一个电阻来限制电流的大小硬件连接电路如下 图中的电阻是排阻内有四个电阻并阳极接在电源处阴极经过排阻和单片机的I/0相连接这样只有单片机输出的是低电平的时候电路导通二极管才能发光。
3.程序设计
3.1.点亮一颗LED 假设控制是D1发光二极管那么P20引脚只有输出低电平的情况下电路导通。我们直接将P20口置为0这样端口就是低电平了。
sbit LED1 P2^0;
void main()
{LED1 0;while(1){}
}
如何编程 P2.0管脚输出低电平 1.先定义管脚 使用一个关键字 sbit 是特殊功能寄存器的某一个位的位定义 P2寄存器 语句加分号结束 2.直接将定义的引脚置为0 。 程序从main函数执行单片机不断的循环执行程序 如果有while就会一直执行while循环。 code 程序flash大小 data ram 数据占用的大小 xdata 外部的ram 没有的话就不用调用了 编译之后才会出现的上述的单位是字节
3.2.LED闪烁 使用循环语句让D1二极管一亮一灭想要实现可以让P2.0GPIO口一会输出低电平一会儿输出高电平当然还要有延时人肉眼的识别要大于20-50ms。这里的延时程序是不准确的想要精确的定时是要有定时器的。u16的最大值是65535。这里的延时时长和单片机的晶振频率有关。
#include REGX52.H
sbit LED1 P2^0;void delay_10us(u16 ten_us)//当传输ten_us1的时候大约10us
{while(ten_us--);
}
void main()
{while(1){LED1 0;delay_10us(500000);LED1 1;delay_10us(500000);}}
3.3.LED流水灯实现 D1-D8一次点亮,移位操作和循环while的结合 ,对8个I/O进行操作 宏定义可以定义一组寄存器 定义P2端口 PORT端口在宏定义的时候不用加分号 P2.7是高位 P2.0是低位 左移之后低位补0可以使用0x01移动之后取反这样就会有一个二极管是常量的总共有8个二极管循环体要循环八次才能让每一个二极管亮一遍。
#include REGX52.Htypedef unsigned char u8;
typedef unsigned int u16;#define LED_PORT P2 void delay_10us(u16 ten_us)
{while(ten_us--);
}
void main()
{while(1){u8 i 0;for(i 9; i 8;i){LED_PORT ~(0X01i);delay_10us(50000);} }}
一个来回从D1-D8,再从D8-D1;使用的是 intrins.H头文件中包含的函数
#include REGX52.H
#include intrins.H
typedef unsigned char u8;
typedef unsigned int u16;#define LED_PORT P2 //void delay_10us(u16 ten_us)
{while(ten_us--);
}
void main()
{u8 i 0;LED_PORT ~(0x01);delay_10us(50000);while(1){for(i 0; i 7;i)//这里循环了7次因为刚开始D1灯已经亮了{LED_PORT _crol_ (LED_PORT,1);//向左移动delay_10us(50000);} for(i 0; i 7;i){LED_PORT _cror_(LED_PORT,1);//向右移动delay_10us(50000);} }}
_crol_和_cror_和C语言中的位移符号是不一样的。 使用函数进行位移情况二级制的补码是首位相接的如下
_crol_(11111110,1);
1111 1110 比如每一次移动一次 左移为例
1111 1101
1111 1011 //首位相连 _crol_(11111110,1); 使用位移操作符 左移为例 移动一位空白的区域填上0。
1111 1110
1111 1100
1111 1000 //每一次移动一位 1