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

/******************************************************************************
此程序是依据吴坚鸿程序框架,在普中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;
}
}
posted @   硬软  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示