登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 单片机定时1S的往复LED流水灯

[复制链接]
发表于 2022-1-8 10:14:26 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 暂无安排
开始时间: 2022-01-08
结束时间: 2022-01-08
                                                                        本次的帖子是关于单片机控制LED实现定时1S往复流水的效果的。主要原理如下首先定义两个变量cnt和dir。一个用来定时计数,一个用来判断小灯循环是否够8次。开始时初始化定时器和LED引脚。进入主循环,判断TF0是否等于1,是的话初始化TF0和定时器。否的话继续执行空程序,直到定时20s。定时1s后、判断小灯是左移还是右移。初始化的时候小灯是右移动。每当定时1s后小灯右移动。当移动8次后,改变dir的值,使下次小灯往左移动。
#include <reg52.h>

sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;

void main()
{
    unsigned char cnt = 0;   
    unsigned char dir = 0;   
    unsigned char shift = 0x01;  

    ENLED = 0;   
    [media=x,500,375][/media]
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
    TMOD = 0x01;  
    TH0  = 0x2A;   
    .TL0  = 0xAB;
    TR0  = 1;     

    while (1)  
    {
        P0 = ~shift;      
        while (TF0 == 0);  
        TF0 = 0;           
        TH0 = 0x2A;        
        TL0 = 0xAB;
        cnt++;            
        if (cnt >= 50)     
        {
            cnt = 0;
            if (dir == 0)            
            {
                shift = shift << 1;  
                if (shift == 0x80)   
                {
                    dir = 1;
                }
            }
            else                     
            {
                shift = shift >> 1;  
                if (shift == 0x01)   
                {
                    dir = 0;
                }
            }
        }
    }
}






IMG20220108100531.jpg
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表