51单片机 查询法使用定时器控制LED灯闪烁

180it 2022-04-07 AM 544℃ 0条
/**************************************************************************************
*                    定时器  LED闪烁实验                                                  *
实现现象:下载程序后D11指示灯闪烁
注意事项:无                                                                                  
***************************************************************************************/

#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
#include <intrins.h>
typedef unsigned int u16;     //对数据类型进行声明定义
typedef unsigned char u8;

sbit led=P2^0;         //将单片机的P0.0端口定义为led
sfr AUXR =0x8E;   //单片机中AUXR是辅助寄存器


void Timer0Init(void)        //20毫秒@11.989MHz
{
    AUXR &= 0x7F;        //定时器时钟12T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0xF2;        //设置定时初始值
    TH0 = 0xB1;        //设置定时初始值
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
}
/*
void Timer0Init(void)       //20毫秒@12.000MHz
{
    TMOD &= 0xFC;       //设置定时器模式
    TMOD |= 0x01;
    TH0 = 0xB1;     //设置定时 20ms
    TL0 = 0xF4;
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
}
*/

void wait20ms(u8 n)
{
    while (n) {
        if (1 == TF0) {
            n--;
            TH0 = 0xB1;     //设置定时 20ms
            TL0 = 0xF4;
            TF0 = 0;        //清除TF0标志
        }
    }
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能         : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{
 u8 i;
    u8 led = 0x1;

Timer0Init();

    while (1) {
        // D1 - D8  LED流水灯
        for (i = 0; i < 8; i++) {
            P2 = ~led;
            wait20ms(50);   // 等待 20ms × 50  = 1000ms
            led = led << 1;
        }
        led = 0x1;
    }
}

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

51单片机 查询法使用定时器控制LED灯闪烁