【微控制器】[LED]:LED 不用頻率閃爍的程式
阿新 • • 發佈:2018-11-01
main.c 程式原始碼:
// =========================== main.c ======================
#include "reg51.h"
#define LED_ON 20
#define LED_OFF 0
#define F_1HZ 1
#define F_2HZ 2
#define F_3HZ 3
#define F_4HZ 4
#define F_5HZ 5
#define F_6HZ 6
#define F_7HZ 7
#define F_8HZ 8
#define F_9HZ 9
#define F_10HZ 10
sbit LED1 = P2.0; // 定義LED IO口
unsigned char g_u8_LedFrequence; // 按鍵值
unsigned char g_flag_10ms_led; // 10ms 計時標誌
//LED 以不同頻率閃爍
//LED 亮的時間是:100ms
//LED 滅的時間是:相應週期 - 100ms
//LED 頻率的範圍:0-10 hz
void LED1_Flash(unsigned char flash_frequence)
{
static byte count, flash_period;
//根據頻率選擇週期
switch(flash_frequence)
{
case F_1HZ : flash_period = 100; break; //1 hz
case F_2HZ : flash_period = 50; break; //2 hz
case F_3HZ : flash_period = 34; break; //3 hz
case F_4HZ : flash_period = 25; break; //4 hz
case F_5HZ : flash_period = 20 ; break; //5 hz
case F_6HZ : flash_period = 17; break; //6 hz
case F_7HZ : flash_period = 14; break; //7 hz
case F_8HZ : flash_period = 12; break; //8 hz
case F_9HZ : flash_period = 11; break; //9 hz
case F_10HZ : flash_period = 10; break; //10 hz
case LED_ON: count = 0; break; //led on
case LED_OFF: count = 9; break; //led off
}
//根據週期閃爍
if(g_flag_10ms_led) //此標誌在中斷服務程式中,每10ms置一一次。
{
g_flag_10ms_led = 0; //清零 led的10ms計數標誌,
count++; //計數器
if(count==1) LED1 = 1; //點亮LED LED亮的時間:1-10
else if(count == 10) LED1 = 0; //熄滅LED LED滅的時間:10-flash_period
else if(count >= flash_period) count = 0; //清零計數
}
}
void LED1_Flash(unsigned char flash_frequence); // 宣告LED flash函式
void T0_Init_10ms(void) // timer0,初始化函式 ,定時時間為 10ms
{
TMOD |= 0x01;
TH0 = (65535 - 10000)/256;
TL0 = (65535 - 10000)%256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
// ================================================ 主函式 ===================================================
void main(void)
{
P1.0 = 1; // P1.0 拉高
T0_Init_10ms(); // 定時器0,初始化,定時10ms
g_u8_LedFrequence = F_3HZ; // 設定LED閃爍的頻率值,3hz
while(1)
{
LED1_Flash(g_u8_LedFrequence); // LED閃爍
}
}
// timer0 中斷服務程式
void IRQ_T0(void) interrupt 1
{
g_flag_10ms_led = 1; // 置位 10ms 定時標誌
}