文章目录
- 1、点亮8个蓝色LED灯
- 2、实现8个蓝色LED流水灯数组方式
- 3、实现8个蓝色LED流水灯位移方式
- 4、小灯闪烁
1、点亮8个蓝色LED灯
1.1效果图
![]()
1.2代码块
#include<reg51.h>// 包含头文件sbit LED1=P0^0;// P0.0 连接 D1sbit LED2=P0^1;// P0.1 连接 D2sbit LED3=P0^2;// P0.2 连接 D3sbit LED4=P0^3;// P0.3 连接 D4sbit LED5=P0^4;// P0.4 连接 D5sbit LED6=P0^5;// P0.5 连接 D6sbit LED7=P0^6;// P0.6 连接 D7sbit LED8=P0^7;// P0.7 连接 D8voidmain(){LED1=0;// 使 P0.0 低电平,点亮 D1LED2=0;// 使 P0.1 低电平,点亮 D2LED3=0;// 使 P0.2 低电平,点亮 D3LED4=0;// 使 P0.3 低电平,点亮 D4LED5=0;// 使 P0.4 低电平,点亮 D5LED6=0;// 使 P0.5 低电平,点亮 D6LED7=0;// 使 P0.6 低电平,点亮 D7LED8=0;// 使 P0.7 低电平,点亮 D8while(1);// 保持运行}
2、实现8个蓝色LED流水灯数组方式
2.1效果图
![]()
2.2代码块
#include<reg51.h>// 包含头文件#defineucharunsignedchar// 简单的延时循环voiddelay(unsignedinttime){unsignedinti,j;for(i=0;i<time;i++)for(j=0;j<120;j++);}// 定义一个流水灯模式的数组(从左往右点亮)unsignedchartable[]={0xFE,// 1111 1110 -> 点亮 P1.00xFD,// 1111 1101 -> 点亮 P1.10xFB,// 1111 1011 -> 点亮 P1.20xF7,// 1111 0111 -> 点亮 P1.30xEF,// 1110 1111 -> 点亮 P1.40xDF,// 1101 1111 -> 点亮 P1.50xBF,// 1011 1111 -> 点亮 P1.60x7F// 0111 1111 -> 点亮 P1.7};voidmain(){uchar i;while(1){for(i=0;i<8;i++){P0=table[i];// 从数组中取出模式delay(200);// 延时}}}
3、实现8个蓝色LED流水灯位移方式
3.1效果图
![]()
3.2代码块
#include<reg51.h>// 包含51单片机的特殊功能寄存器定义#defineucharunsignedchar// 定义 uchar 为 unsigned char 类型,方便使用#defineuintunsignedintuchar a;// 定义全局变量 a,用来保存当前灯的状态// 延时函数 约50ms @ 12MHz晶振voiddelay(unsignedinttime){unsignedinti,j;for(i=0;i<time;i++){for(j=0;j<120;j++){// 空循环体}}}// ------------------------------// 主函数:main()// 作用:以移位方式控制 P0 口实现流水灯// ------------------------------voidmain(){a=0xFE;// 初始状态:1111 1110,P0.0点亮(低电平有效)while(1)// 无限循环{// 方法1:左移流水(从上往下)P0=a;// 将当前状态输出到P0口delay(500);// 延时约0.5秒(10*50ms=500ms)a=(a<<1)|0x01;// 左移一位,最低位补1(保持低电平有效)// 当a变成0xFF时(全灭),重置为0xFE重新开始if(a==0xFF){a=0xFE;}}}
4、小灯闪烁
4.1效果图
![]()
4.2代码块
#include<reg51.h>// 包含头文件// 定义单个 LED 的端口映射【sbit 变量名 = 端口^位号;】sbit LED1=P0^0;// 延时函数voiddelay(unsignedinttime){unsignedinti,j;for(i=0;i<time;i++)for(j=0;j<120;j++);}// 主函数voidmain(){while(1){LED1=0;// 让第1个LED亮delay(500);LED1=1;// 让第1个LED熄灭delay(500);}}