標題:
從左到右在從右到左的流水燈
[打印本頁]
作者:
八月初
時間:
2019-11-8 15:25
標題:
從左到右在從右到左的流水燈
#include <reg52.h>
#include <led.h>
u8 T0RH = 0; //T0 重載值的高字節(jié)
u8 T0RL = 0; //T0 重載值的低字節(jié)
u8 flag = 0;//
void led_show()
{
u8 l_cnt = 0;
u8 r_cnt = 0;
bit led_flag = 0;//控制左右移位標志位
while(1)
{
if(flag == 100)//改變flag的大小,可控制等的移動速度
{
if(led_flag == 0)
{
flag = 0;
P0 = ~(0x01 << l_cnt);
l_cnt++;
if(l_cnt >= 8)
{
l_cnt = 0;
led_flag = 1;
}
}
else if(led_flag == 1)
{
flag = 0;
P0 = ~(0x80 >> r_cnt);
r_cnt++;
if(r_cnt >= 8)
{
r_cnt = 0;
led_flag = 0;
}
}
}
}
}
void main()
{
ConfigTimer0(1);//定時1ms
while(1)
{
led_show();
}
}
/* 配置并啟動 T0, ms-T0 定時時間 */
void ConfigTimer0(u16 ms)
{
u32 tmp; //臨時變量
EA = 1;
tmp = 11059200 / 12; //定時器計數(shù)頻率
tmp = (tmp * ms) / 1000; //計算所需的計數(shù)值
tmp = 65536 - tmp; //計算定時器重載值
tmp = tmp + 12; //補償中斷響應(yīng)延時造成的誤差
T0RH = (unsigned char)(tmp>>8); //定時器重載值拆分為高低字節(jié)
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零 T0 的控制位
TMOD |= 0x01; //配置 T0 為模式 1
TH0 = T0RH; //加載 T0 重載值
TL0 = T0RL;
ET0 = 1; //使能 T0 中斷
TR0 = 1; //啟動 T0
}
/* T0 中斷服務(wù)函數(shù),執(zhí)行 100ms 定時 */
void InterruptTimer0() interrupt 1
{
TH0 = T0RH; //重新加載重載值
TL0 = T0RL;
flag++;
}
復(fù)制代碼
使用定時器來實現(xiàn)左右循環(huán)移動的流水燈,請各位幫忙指點
LED流水燈.rar
2019-11-8 15:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
55.06 KB, 下載次數(shù): 5, 下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1