欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī)LED燈多樣控制程序
[打印本頁]
作者:
lqh_fairy
時間:
2021-6-21 20:32
標(biāo)題:
51單片機(jī)LED燈多樣控制程序
51hei圖片20210618101031.png
(76.69 KB, 下載次數(shù): 56)
下載附件
2021-6-21 20:31 上傳
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xfe,0xfc,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0xff};
sbit k1 = P2^0;
sbit k2 = P2^1;
sbit k3 = P2^2;
sbit k4 = P3^2;
sbit k5 = P3^3;
int i;
int a,b,l,led;
uint led1,led2;
void KEY4();
void KEY5();
void delay(uint xms) //延時
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--) ;
}
void KEY1() //流水燈向右
{
if(k1==0)
{
delay(5); //消抖
if(k1==0)
{
ET0 = 0; //關(guān)定時器0中斷
TR0 = 0; //關(guān)閉定時器0
a = 0;
P1 = 0xff;
delay(500);
while(1) //while(1)循環(huán)流水燈向右
{
P1 = table[a];
delay(500);
a++;
if(a==11) //流水燈到尾重新開始
a = 0;
if(k1==0||k2==0||k3==0) //按鍵檢測,退出while(1)循環(huán)
{
delay(5);
if(k1==0||k2==0||k3==0)
break;
}
}
}
}
}
void KEY2() //流水燈向左
{
if(k2==0)
{
delay(5);
if(k2==0)
{
ET0 = 0;
TR0 = 0;
b = 10;
P1 = 0xff;
delay(500);
while(1)
{
P1 = table[b];
delay(500);
b--;
if(b<0)
b = 10;
if(k1==0||k2==0||k3==0)
{
delay(5);
if(k1==0||k2==0||k3==0)
break;
}
}
}
}
}
void KEY3() //閃爍燈
{
if(k3==0)
{
delay(5);
if(k3==0)
{
ET0 = 0;
TR0 = 0;
P1 = 0xff;
delay(500);
while(1)
{
P1 =~ P1; //P1口反轉(zhuǎn)
delay(500);
if(k1==0||k2==0||k3==0)
{
delay(5);
if(k1==0||k2==0||k3==0)
break;
}
}
}
}
}
void init() //初始化函數(shù)
{
P1 = 0xff;
TMOD = 0x01; //定時器0工作在方式1
IP = 0x01; //PX0 = 1; //中斷優(yōu)先級 外部中斷0為高優(yōu)先級中斷
//IP = 0x40 ;(PX1 = 1;)
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
/*TH0 = (計(jì)數(shù)最大值-定時時間)/256
TL0 = (計(jì)數(shù)最大值-定時時間)%256
*/
EA = 1; //開總中斷
EX0 = 1; //開外部中斷0
EX1 = 1; //開外部中斷1
IT0 = 1; //外部中斷0負(fù)跳變中斷
IT1 = 1; //外部中斷1負(fù)跳變中斷
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
void main()
{
init(); //初始化函數(shù)
while(1)
{
KEY1();
KEY2();
KEY3();
}
}
void int0() interrupt 0 //外部中斷0 單個流水燈向右
{
uint i;
led1 = 0xfe;
for(i=0;i<8;i++)
{
P1 = led1;
delay(500);
led1 = _crol_(led1,1);
}
}
void time0_int() interrupt 1 //定時器0
{
TH0 = (65536 - 50000)/256; //50ms
TL0 = (65536 - 50000)%256;
i++;
if(i==10) //定時器0控制開始燈閃爍
{
i = 0;
P1 =~ P1;
delay(400);
}
}
void int1() interrupt 2 //外部中斷1 單個流水燈向左
{
uint i;
led2 = 0x7f;
for(i=0;i<8;i++)
{
P1 = led2;
delay(500);
led2 = _crol_(led2,-1);
}
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1