讓LED從L1開始流到L8,(間隔1S,使用定時(shí)器)然后全滅LED,然后從L1開始進(jìn)行呼吸燈狀態(tài)。之后L1,L3,L5,L7點(diǎn)亮,然后L2,L4,L6,L8點(diǎn)亮。最后所有LED全亮
#include <REGX52.H>
#include<INTRINS.H>
sbit LED = P2 ^ 0;
unsigned int TOTOTO = 0;
int number = 0;
unsigned int Time;
unsigned int i;
//配置定時(shí)器
void Timer0Init(void)?? ??? ?//定時(shí)器1ms@12.000MHz
{
?? ?TMOD &= 0xF0;?? ??? ?//工作模式寄存器TMOD配置 只配置了定時(shí)器0
?? ?TMOD |= 0x01; ? ? ? // TCON控制寄存器配置中TF1和TR1是定時(shí)器1,TF0和TR0是定時(shí)器0
?? ?TL0 = 0x18;?? ??? ??? ?//是低位寄存器賦初值 提升計(jì)數(shù)器初始時(shí)間
?? ?TH0 = 0xFC;?? ??? ??? ?//是高位寄存器賦初值 ?提升計(jì)數(shù)器初始時(shí)間
?? ?TF0 = 0;?? ??? ??? ?//等于1是產(chǎn)生中斷,清零
?? ?TR0 = 1; ? ? ? ? ? ?//等于1是定時(shí)器0開啟
?? ?ET0 = 1;?? ??? ??? ?//等于1是中斷路線連接
?? ?EA = 1;?? ??? ??? ??? ?//等于1是中斷路線中開關(guān)連接
?? ?PT0 = 0;?? ??? ??? ?//等于0是默認(rèn)等于0 開關(guān)撥下 聯(lián)通
}
//延時(shí)函數(shù)
void Delay(unsigned int t)
{
?? ?while (t--);
}
//主函數(shù)
void main()
{
?? ?Timer0Init();
?? ?while (1)
?? ?{
?? ?}
}
//定時(shí)器0的中斷程序?
void Timer0_Routine() interrupt 1 ?//中斷號(hào)
{
?? ?TL0 = 0x18;?? ??? ??? ?//計(jì)數(shù)器溢出歸0 重新給計(jì)數(shù)器賦初值
?? ?TH0 = 0xFC;
?? ?TOTOTO++;?? ??? ??? ?//進(jìn)入中斷的次數(shù),1ms進(jìn)入1次?
?? ?switch (TOTOTO)?? ??? ?//用定時(shí)器每隔1s LED燈流水
?? ?{
?? ?case 1000:P2 = ~(0x01 << 0);
?? ??? ?break;
?? ?case 2000:P2 = ~(0x01 << 1);
?? ??? ?break;
?? ?case 3000:P2 = ~(0x01 << 2);
?? ??? ?break;
?? ?case 4000:P2 = ~(0x01 << 3);
?? ??? ?break;
?? ?case 5000:P2 = ~(0x01 << 4);
?? ??? ?break;
?? ?case 6000:P2 = ~(0x01 << 5);
?? ??? ?break;
?? ?case 7000:P2 = ~(0x01 << 6);
?? ??? ?break;
?? ?case 8000:P2 = ~(0x01 << 7);
?? ??? ?break;
?? ?}
?? ?//?? ?if(TOTOTO>=1000)
?? ?//?? ?{
?? ?//?? ??? ?
?? ?//?? ??? ?
?? ?//?? ??? ?TOTOTO=0;
?? ?//?? ??? ?P2=~(0x01<<number);
?? ?//?? ??? ?number++;
?? ?//?? ?}
?? ?if (TOTOTO == 9000)?? ??? ?//第九秒LED燈全滅
?? ?{
?? ??? ?P2 = 0xFF;
?? ?}
?? ?if (TOTOTO == 10000)?? ?//第10秒LED1呼吸
?? ?{
?? ??? ?for (Time = 0; Time < 50; Time++)//不斷改變占空比
?? ??? ?{
?? ??? ??? ?for (i = 0; i < 20; i++)//延長(zhǎng)波形變化
?? ??? ??? ?{
?? ??? ??? ??? ?LED = 0;
?? ??? ??? ??? ?Delay(Time);
?? ??? ??? ??? ?LED = 1;
?? ??? ??? ??? ?Delay(50 - Time);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?for (Time = 50; Time > 0; Time--)//從后往前報(bào)數(shù)
?? ??? ?{
?? ??? ??? ?for (i = 0; i < 20; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?LED = 0;
?? ??? ??? ??? ?Delay(Time);
?? ??? ??? ??? ?LED = 1;
?? ??? ??? ??? ?Delay(50 - Time);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?if (TOTOTO == 11000)//第11秒1357燈亮
?? ?{
?? ??? ?P2 = 0x55;
?? ?}
?? ?if (TOTOTO == 12000)//第12秒2468燈亮
?? ?{
?? ??? ?P2 = 0xAA;
?? ?}
?if (TOTOTO == 13000)//第13秒燈全亮
?? ?{
?? ??? ?P2 = 0x00;
?? ?}文章來源:http://www.zghlxwxcb.cn/news/detail-550151.html
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-550151.html
到了這里,關(guān)于51單片機(jī)用定時(shí)器控制流水燈,呼吸燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!