51单片机流水灯可以通过移位函数_crol_、移位运算符、数组等方法来实现。
看原理图普通的51单片机开发板的LED模块的灯都是通过接电阻与单片机的IO口直接相连,一般连在P2口上也有其他IO口等等,写代码前要先看原理图灯连在哪里。
我的是连在P2上,如图:
图片:
代码如下
#include "reg52.h" #include//包含移位函数的头文件 typedef unsigned char u8; #define led P2 //流水灯要是接在其他IO口就把P2改过去 u8 tap[] = {0xe7,0xdb,0xbd,0x7e}; u8 tap1[] = {0x7e,0xbd,0xdb,0xe7}; static u8 a; void Delay() //延时函数 { u8 i, j; for(i=0;i<255;i++) for(j=0;j<255;j++); } void zuoyi() //左移函数 { for(a=0;a<7;a++) { led=_crol_(led, 1); Delay(); } } void youyi() //右移函数 { for(a=0;a<7;a++) { led=_cror_(led,1); Delay(); } } void zuoyoutonshiyi() //左右同时移动 { for(a=0;a<4;a++) { led = tap1[a]; Delay(); } led = 0xff; Delay(); for(a=0;a<4;a++) { led = tap[a]; Delay(); } led = 0xff; } void pingshan() //八颗灯分别闪两下 { for(a=0;a<2;a++) { led = 0x0f; Delay(); led = 0xf0; Delay(); } } //可以通过主函数改变调用子函数顺序来实现花样流水灯 void main() { P0 = 0x00; //关闭数码管的显示 Delay(); while(1) { led=~0x01; zuoyi(); Delay(); youyi(); Delay(); zuoyoutonshiyi(); Delay(); pingshan(); Delay(); } }



