蓝桥杯单片机练习 01:流水灯

本文内容基于蓝桥杯比赛CT107D开发板,部分处理数据的函数不受限于开发板型号可以用于参考与学习

实现单个LED灯从左往右逐个点亮

流水灯电路原理图

iPDF_Viewer_2018-12-14_09-43-58

iPDF_Viewer_2018-12-14_09-44-32

编程:

单片机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);//等一会
    }
}

 

猜你喜欢

转载自www.cnblogs.com/netube/p/10118133.html