一、点亮8个LED流水灯(数组、位移)
文章目录1、点亮8个蓝色LED灯1.1效果图1.2代码块2、实现8个蓝色LED流水灯数组方式2.1效果图2.2代码块3、实现8个蓝色LED流水灯位移方式3.1效果图3.2代码块4、小灯闪烁4.1效果图4.2代码块1、点亮8个蓝色LED灯1.1效果图1.2代码块#includereg51.h// 包含头文件sbit LED1P0^0;// P0.0 连接 D1sbit LED2P0^1;// P0.1 连接 D2sbit LED3P0^2;// P0.2 连接 D3sbit LED4P0^3;// P0.3 连接 D4sbit LED5P0^4;// P0.4 连接 D5sbit LED6P0^5;// P0.5 连接 D6sbit LED7P0^6;// P0.6 连接 D7sbit LED8P0^7;// P0.7 连接 D8voidmain(){LED10;// 使 P0.0 低电平点亮 D1LED20;// 使 P0.1 低电平点亮 D2LED30;// 使 P0.2 低电平点亮 D3LED40;// 使 P0.3 低电平点亮 D4LED50;// 使 P0.4 低电平点亮 D5LED60;// 使 P0.5 低电平点亮 D6LED70;// 使 P0.6 低电平点亮 D7LED80;// 使 P0.7 低电平点亮 D8while(1);// 保持运行}2、实现8个蓝色LED流水灯数组方式2.1效果图2.2代码块#includereg51.h// 包含头文件#defineucharunsignedchar// 简单的延时循环voiddelay(unsignedinttime){unsignedinti,j;for(i0;itime;i)for(j0;j120;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(i0;i8;i){P0table[i];// 从数组中取出模式delay(200);// 延时}}}3、实现8个蓝色LED流水灯位移方式3.1效果图3.2代码块#includereg51.h// 包含51单片机的特殊功能寄存器定义#defineucharunsignedchar// 定义 uchar 为 unsigned char 类型方便使用#defineuintunsignedintuchar a;// 定义全局变量 a用来保存当前灯的状态// 延时函数 约50ms 12MHz晶振voiddelay(unsignedinttime){unsignedinti,j;for(i0;itime;i){for(j0;j120;j){// 空循环体}}}// ------------------------------// 主函数main()// 作用以移位方式控制 P0 口实现流水灯// ------------------------------voidmain(){a0xFE;// 初始状态1111 1110P0.0点亮低电平有效while(1)// 无限循环{// 方法1左移流水从上往下P0a;// 将当前状态输出到P0口delay(500);// 延时约0.5秒10*50ms500msa(a1)|0x01;// 左移一位最低位补1保持低电平有效// 当a变成0xFF时全灭重置为0xFE重新开始if(a0xFF){a0xFE;}}}4、小灯闪烁4.1效果图4.2代码块#includereg51.h// 包含头文件// 定义单个 LED 的端口映射【sbit 变量名 端口^位号;】sbit LED1P0^0;// 延时函数voiddelay(unsignedinttime){unsignedinti,j;for(i0;itime;i)for(j0;j120;j);}// 主函数voidmain(){while(1){LED10;// 让第1个LED亮delay(500);LED11;// 让第1个LED熄灭delay(500);}}