本文内容基于蓝桥杯比赛CT107D开发板,部分处理数据的函数不受限于开发板型号可以用于参考与学习
实现单个LED灯从左往右逐个点亮
流水灯电路原理图
编程:
单片机P2.5、6、7脚控制U24芯片74HC138输出Y4,Y4经过U25芯片74HC02反相,选中U6芯片74HC573的使能(U6开始接收数据);
此时单片机P0输出八位数据送入U6的D1-D8,再关掉U6芯片74HC573的使能,U6芯片将P0口的数据更新到其输出口Q1-Q8,从而实现对LED的控制;
U6输出低电平则LED亮。
#include <STC15F2K60S2.H> #define uchar unsigned char #define uint unsigned int //================================================ off_bee()//关闭蜂鸣器 { P2 = (P2&0x1F|0xA0);//后三位设为000xxxxx,再设为101xxxxx P0 = 0x00; //P0设置00000000,送入573 P2 &= 0x1F; //后三位设为000xxxxx } //================================================ void led_write(uchar DATA)//更新led状态 { off_bee(); P2 = (P2&0x1F|0x80); P0 = DATA ;//P0口发送到573的数据 P2 &= 0x1F; //后三位设为000xxxxx } //=============================================== void delay(uint NUM)//延时函数 { uint i ; uchar j ; for(i=0;i<NUM;i++) for(j=0;j<120;j++); } //============================================== main() { uchar WATER = 0x01; while(1) { led_write(~WATER);//反相并输出,00000001变成11111110 WATER<<=1;//左移一位,00000001变成00000010 if(WATER == 0x00)//全部显示过一遍后 WATER = 0X01;//从头开始 delay(800);//等一会 } }