首页 > 编程语言 >51单片机程序框架之LED闪烁_方法1

51单片机程序框架之LED闪烁_方法1

时间:2024-05-01 21:11:18浏览次数:54  
标签:CNT LED void 51 Timer 单片机 Flag Time

/******************************************************************************
此程序是依据吴坚鸿程序框架,在普中51 A2单片机开发板上的程序练习
程序目标:LED以1HZ的频率闪烁
*******************************************************************************/
#include<REG51.H>
#define Main_Fosc 12000000L //默认系统时钟12Mhz
#define T1MS  (65536-Main_Fosc/12/1000)  //12分频下1ms定时器的装载值,n=t/T=t/(12/f)=0.001*f/12=f/12/1000
#define T1MS_CNT 1000   //1000个1ms累加产生1S
sbit LED=P2^0;     //LED为P21口,低点亮
unsigned int LED_Timer_CNT=0;
unsigned char Time_Lock_Flag=0;
void LED_Flicker();  //LED闪烁函数
void Sys_Init();    //系统初始化
void Delay_Long();   //长延时,等待系统稳定
void Perpherial_Init();  //端口初始化

void main()
{
    Sys_Init(); 
    Delay_Long();
    Perpherial_Init();
    while (1)
    {
        LED_Flicker();
    }
    
}

void Sys_Init()
{
    TMOD=0X01; //定时器0模式1
    TL0=T1MS;
    TH0=T1MS>>8;
}

void Delay_Long()
{
    unsigned char i,j;
    for(i=0;i++;i<220)
    {
        for(j=0;j<220;j++)
        ;
    }
}

void Perpherial_Init()
{
    ET0=1;
    TR0=1;
    EA=1;
}

void Timer0_ISR() interrupt 1   //定时器0中断函数
{
    TL0=T1MS;
    TH0=T1MS>>8;
    if ((1==Time_Lock_Flag)&&(LED_Timer_CNT>0))
    {
        LED_Timer_CNT--;
    }
}

void LED_Flicker()
{
    static unsigned char  LED_Status_Flag=0;
    switch (LED_Status_Flag)
    {
    case 0:
       if (0==LED_Timer_CNT)
       {
        LED=0;
        Time_Lock_Flag=0;
        LED_Timer_CNT=T1MS_CNT;
        Time_Lock_Flag=1;
        LED_Status_Flag=1;
       }
        break;
    
    case 1:
        if (0==LED_Timer_CNT)
        {
            LED=1;
            Time_Lock_Flag=0;
            LED_Timer_CNT=T1MS_CNT;
            Time_Lock_Flag=1;
            LED_Status_Flag=0;
        }
        break;
        
    }
}




标签:CNT,LED,void,51,Timer,单片机,Flag,Time
From: https://www.cnblogs.com/boliuXun/p/18169644

相关文章

  • STC89C52以1HZ频率闪烁LED
    /*此程序是依据吴坚鸿程序框架,在普中51A2单片机开发板上的程序练习程序目标:LED以1HZ的频率闪烁*/include<REG51.H>defineMain_Fosc12000000L//默认系统时钟12MhzdefineT1MS(65536-Main_Fosc/12/1000)//12分频下1ms定时器的装载值,......
  • [atcoder 351] [F Double Sum] [线段树]
    解法,使用线段树。请看代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.math.BigInteger;importjava.util.StringTokenizer;publicclassMain{staticclassSegmentNode{intleft;......
  • ES Validation Failed: 1: this action would add [1] shards, but this cluster c
    [2024-05-01T08:56:52,606][ERROR][o.e.x.i.IndexLifecycleRunner][tools]policy[ilm-history-ilm-policy]forindex[.ds-ilm-history-5-2024.03.28-000001]failedonstep[{"phase":"hot","action":"rollover","name&qu......
  • ABC351F
    F-DoubleSum题意简述Justit.思路1发现很像求正序对,但是需要具体数字计算。只考虑\(A_j-A_i>0\),那么我们把\(A_j,-A_i\)分开计算。考虑\(A_j\)被计算的清形,其实就是以它结尾的正序对个数。考虑\(-A_i\)被计算的清形,其实就是以它开头的正序对个数,翻转序列,转化为以......
  • ABC351E
    E-JumpDistanceSum题意简述Justit.思路兔子斜着走->国际象棋里的象->黑象只能到达黑格,白象只能到达白格(横纵坐标相加的奇偶性)。将点分成两组,则每组内的点之间都有答案。可以发现可以先朝着那个方向斜着走,然后超出的部分向着那个方向迂回是最优的。如图不难发现距离是......
  • ABC351讲解
    ABC351A:题意思路:直接按题意模拟,求出\(\SigmaA\)和\(\SigmaB\)再相减便是差,因为要获胜所以再\(+1\)即可。代码B:题意思路:直接按照题意\(N^2\)枚举即可。代码C:题意思路:直接按照题意模拟即可。代码D:请lrx讲解。F:题意思路:题意十分简单,就是求\(\Sig......
  • CF1951I Growing Trees
    MyBlogsCF1951IGrowingTrees首先考虑确定了\(x_i\)如何判定是否合法。可以很容易的找出这样一个必要条件:\(\foralli,x_i\leqk\)。这是两个点的情况,考虑点数更多的情况。手玩之后可以推广到:对于任意导出子图,要求其内部的边数\(\leqk(|S|-1)\)。这个条件也是充分的,证明......
  • MATLAB运行simulink模型显示找不到库Failed to load library
    MATLAB运行simulink模型显示找不到库Failedtoloadlibrary‘原因上述的错误即提示加载某一个库失败了,原因就是MATLAB需要在其设定的setpath中寻找。设置paths查看paths添加成功后再次打开MATLAB的setpath,可以看到相关文件及库被添加进来了。点击save进行保存,重新运......
  • 高德Signature verification failed
    记录一个高德API的问题: 最近业务需求需要调用高德API,遇到了返回签名错误的问题,但其他API是可以调用通的,经过问题排查,发现是参数类型错误,修改之后成功调用。高德返回code4签名错误问题时:1.可能真的是你签名错误2.你的参数格式类型错误(个人感觉是个bug,因为文档错误码上一个......
  • Atcoder ABC 351 全题解
    乾岩我:G题来咯!!!大火:这G题,大家都不敢做,说是有人在里面放了毒瘤。我:做,做,为什么不做!不做也别想活着!!!(两天后)我:我的G题完成辣!!!!!!AB不讲C显然$2^a*2=2^{a+1}$。考虑用一个栈存球的大小是$2$的多少次方,每次插入球后,不断取出后面两个球,大小相同则合并,否则插入下一个......