首页 > 编程语言 >51单片机程序框架之跑马灯练习

51单片机程序框架之跑马灯练习

时间:2024-05-01 22:11:39浏览次数:20  
标签:Status CNT LED 单片机 T1MS 51 Timer 跑马灯 Flag

/******************************************************************************
此程序是依据吴坚鸿程序框架,在普中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
#define LED P2  //LED为P2口,低点亮
unsigned char code LED_Seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
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中断函数
{
    if (LED_Timer_CNT>0)
    {
        LED_Timer_CNT--;
    }
	TL0=T1MS;
    TH0=T1MS>>8;
}

void LED_Flicker()
{
    static unsigned char  LED_Status_Flag=0;
    switch (LED_Status_Flag)
    {
    case 0:
       if (0==LED_Timer_CNT)
       {
        LED_Timer_CNT=T1MS_CNT;
        LED=LED_Seg[LED_Status_Flag];
        LED_Status_Flag=1;
       }
        break;
    
    case 1:
        if (0==LED_Timer_CNT)
        {
            LED_Timer_CNT=T1MS_CNT;
            LED=LED_Seg[LED_Status_Flag];
            LED_Status_Flag=2;
        }
        break;
    
    case 2:
        if (0==LED_Timer_CNT)
        {
            LED_Timer_CNT=T1MS_CNT;
            LED=LED_Seg[LED_Status_Flag];
            LED_Status_Flag=3;
        }
        break;

    case 3:
        if (0==LED_Timer_CNT)
        {
            LED_Timer_CNT=T1MS_CNT;
            LED=LED_Seg[LED_Status_Flag];
            LED_Status_Flag=4;
        }
        break;   
    case 4:
        if (0==LED_Timer_CNT)
        {
            LED_Timer_CNT=T1MS_CNT;
            LED=LED_Seg[LED_Status_Flag];
            LED_Status_Flag=5;
        }
        break;
    case 5:
        if (0==LED_Timer_CNT)
        {
            LED_Timer_CNT=T1MS_CNT;
            LED=LED_Seg[LED_Status_Flag];
            LED_Status_Flag=6;
        }
        break;
    case 6:
        if (0==LED_Timer_CNT)
        {
            LED_Timer_CNT=T1MS_CNT;
            LED=LED_Seg[LED_Status_Flag];
            LED_Status_Flag=7;
        }
        break;
    case 7:
        if (0==LED_Timer_CNT)
        {
            LED_Timer_CNT=T1MS_CNT;
            LED=LED_Seg[LED_Status_Flag];
            LED_Status_Flag=0;
        }
        break;
    }
}




标签:Status,CNT,LED,单片机,T1MS,51,Timer,跑马灯,Flag
From: https://www.cnblogs.com/boliuXun/p/18169717

相关文章

  • 51单片机程序框架之LED闪烁_方法1
    /******************************************************************************此程序是依据吴坚鸿程序框架,在普中51A2单片机开发板上的程序练习程序目标:LED以1HZ的频率闪烁*******************************************************************************/#include<......
  • [atcoder 351] [F Double Sum] [线段树]
    解法,使用线段树。请看代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.math.BigInteger;importjava.util.StringTokenizer;publicclassMain{staticclassSegmentNode{intleft;......
  • 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)\)。这个条件也是充分的,证明......
  • Atcoder ABC 351 全题解
    乾岩我:G题来咯!!!大火:这G题,大家都不敢做,说是有人在里面放了毒瘤。我:做,做,为什么不做!不做也别想活着!!!(两天后)我:我的G题完成辣!!!!!!AB不讲C显然$2^a*2=2^{a+1}$。考虑用一个栈存球的大小是$2$的多少次方,每次插入球后,不断取出后面两个球,大小相同则合并,否则插入下一个......
  • ABC351E 补题笔记
    批:赛时很快想到切比雪夫后就跳进主席树里出不来了。一个很妙的题。首先分\(x+y\)的奇偶性黑白染色后黑色和白色不可达。然后对于同一个颜色的点易得\(dis=\max(|x1-x2|,|y1-y2|)\),即切比雪夫距离。这个时候就可以直接上主席树了,但太复杂不是正解。最简单的解法是:我们充分......
  • ABC351D
    [ABC351D]GridandMagnet题意简述给定一个\(h\timesw\)的网格,有些网格中有磁铁。你可以向上下左右移动\(1\)格。当这个格子上下左右有磁铁时你不能移动。对于每个没有磁铁的单元格,将其自由度定义为从该单元格重复移动所能到达的单元格数。求网格中所有没有磁铁的单元格......
  • 高性能摩托车灯降压恒流ic全亮/半亮/循环模式短路保护AP5126
    AP5126是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-80V输入的高精度降压LED恒流驱动芯片。输出最大功率可达15W,最大电流1.2A。AP5126可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/循环模式。AP5126工作频率固定在140KHZ,同时内置抖频电路,可以降低对......