mcookie与单片机的关系_8个LED灯循环点亮程序,求助各位老师(给500m币报酬)

写了一个,用定时器的,程序中有具体注释。

//STC89C52

//时钟12M

#include

#include

typedef unsigned char   UINT8;

typedef unsigned int    UINT16;

#define TIMER_PERIOD    10000   //10毫秒

//定义LED端口,低电平点亮

#define LED_PORT    P0

sbit LED1 = P0^0;

sbit LED2 = P0^1;

sbit LED3 = P0^2;

sbit LED4 = P0^3;

sbit LED5 = P0^4;

sbit LED6 = P0^5;

sbit LED7 = P0^6;

sbit LED8 = P0^7;

bit bLedOn;       //控制是否显示

char cGroup;      //组计数

int nTimerCount;    //定时器计数

int nGroupCount;    //控制组的定时器计数

//定时器中断子程序

void Timer0_isr(void) interrupt 1 using 1

{

//重新赋值

TH0 = (65536-TIMER_PERIOD)/256; //设置定时初值

TL0 = (65536-TIMER_PERIOD)%256; //设置定时初值

nTimerCount++;  //定时器计数加

nGroupCount++;  //组计数加

if(cGroup >= 5) //如果4组都显示完了,则等待8分钟后重新开始

{

if(nGroupCount >= 48000)    //480秒,8分钟

{

nGroupCount = 0;

cGroup = 1;

bLedOn = 1;

nTimerCount = 0;

}

else

{

return; //在8分钟等待时间内,直接返回

}

}

//

if(bLedOn)

{

if(nTimerCount <= 600)  //每组的第一个LED显示

{

if(cGroup == 1) LED1 = 0;

else if(cGroup == 2) LED3 = 0;

else if(cGroup == 3) LED5 = 0;

else if(cGroup == 4) LED7 = 0;

}

if(nTimerCount >= 300 && nTimerCount <= 600)    //每组的第二个LED显示

{

if(cGroup == 1) LED2 = 0;

else if(cGroup == 2) LED4 = 0;

else if(cGroup == 3) LED6 = 0;

else if(cGroup == 4) LED8 = 0;

}

}

//

if(nTimerCount > 600 && nTimerCount <= 2100)    //每组显示完后,所有LED熄灭15秒

{

LED_PORT = 0xFF;

bLedOn = 0;

}

if(nTimerCount > 2100)  //间隔15秒后,进行下一组显示

{

cGroup++;

bLedOn = 1;

nTimerCount = 0;

}

//

if(cGroup >= 5) //如果4组都显示完

{

nGroupCount = 0;

bLedOn = 0;

}

}

//定时器设置

void Timer0_Init(void) //@12.000MHz

{

TMOD |= 0x01; //设置定时器模式1, 16位定时器

TH0 = (65536-TIMER_PERIOD)/256; //设置定时初值

TL0 = (65536-TIMER_PERIOD)%256; //设置定时初值

TR0 = 1; //定时器0开始计时

ET0 = 1;    //定时器中断打开

EA  = 1;    //总中断打开

}

//主程序

void main()

{

//变量初始化

bLedOn = 1;

cGroup = 1;

nTimerCount = 0;

nGroupCount = 0;

//定时器设置

Timer0_Init();

while(1)

{

//无限循环

}

}

[attachment=4806685]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值