欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機·的·led燈控制
[打印本頁]
作者:
xiaohuligg
時間:
2019-5-27 23:53
標題:
基于51單片機·的·led燈控制
基于51單片機的led燈控制,
單片機源程序如下:
/*
* @file: led燈控制器.c
* @function: 控制led
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
#include<reg51.h>
sbit key2=P3^0; //定義獨立按鍵端口
sbit key3=P3^2;
sbit key1=P3^1;
sbit key4=P3^3;
unsigned char led2[]={
0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf}; //定義led向右移動
unsigned char led1[]={
0xfe,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd}; //定義led向左移動
unsigned char led3[]={
0xf7,0xe7,0xe3,0xc3,0xc1,0x81,0x80,0x00}; // 模式2led
unsigned char led4[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 模式3led
unsigned char led5[]={
0xfe,0xdf,0xfb,0x7f,0xef,0xfd,0xbf,0xf7}; // 模式3led
/*
* @file: delay(unsigned int z)
* @function: 延時
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void delay(unsigned int z)
{
unsigned int y;
for(;z>0;z--)
for(y=10;y>0;y--);
}
/*
* @file: Timer0Init()
* @function: 定時器初始化
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void Timer0Init()
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
/*
* @file: interface()
* @function: 初始界面
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void interface()
{
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<8;j++)
{
P2=led1[j];
delay(1000);
}
}
i=0; //將ij置0,方便下一次循環
j=0;
for(i=0;i<2;i++)
{
for(j=0;j<8;j++)
{
P2=led2[j];
delay(1000);
}
}
i=0;
j=0;
for(i=0;i<5;i++)
{
P2=0xaa;
delay(2000);
P2=0xff;
delay(2000);
}
for(j=0;j<5;j++)
{
P2=0x55;
delay(2000);
P2=0xff;
delay(2000);
}
}
/*
* @file: pattern1()
* @function: 模式1
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void pattern1()
{
P2=0xaa;
delay(5000);
P2=0x55;
delay(5000);
}
/*
* @file: pattern2()
* @function: 模式2
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void pattern2()
{
int i,j;
for(j=0;j<3;j++)
{
for(i=0;i<8;i++)
{
P2=led3[i];
delay(5000);
}
if(i==8)
{
P2=0xff;
delay(5000);
}
}
}
/*
* @file: pattern3()
* @function: 模式3
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void pattern3()
{
int i,j;
int flag; // 定義向左向右的標志變量
int keyflag; // 定義處理按鍵按下的標志變量
int count;
if(key3==0)
{
delay(10); //延時消抖
if(key3==0)
{
keyflag=1;
TR0=1; //開啟定時器
while(!key3);
TR0=0; //關閉定時器
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
keyflag=2;
TR0=1;
while(!key4);
TR0=0;
}
}
if(keyflag==1) //處理按鍵
{
if(count>=1500) //長按處理程序
{
i++;
if(i>=4)
i=3;
}
else //短按處理程序
{
i++;
if(i>=4)
i=3;
}
keyflag=0; //將標志變量置0;
count=0;
}
if(keyflag==2)
{
if(count>=1500)
{
flag++;
if(flag==2)
flag=0;
}
else
{
flag++;
if(flag==2)
flag=0;
}
keyflag=0;
count=0;
}
switch(i) //對i,進行分類處理,判斷是左移或右移幾位
{
case 0:
if(flag==0)
{
for(j=0;j<8;j++)
{
P2=led4[j];
delay(5000);
}
j=0;
}
if(flag==1)
{
for(j=0;j<8;j++)
{
P2=led1[j];
delay(5000);
}
j=0;
}
break;
case 1:
if(flag==0)
{
for(j=0;j<8;j=j+2)
{
P2=led4[j];
delay(5000);
}
j=0;
}
if(flag==1)
{
for(j=0;j<8;j=j+2)
{
P2=led1[j];
delay(5000);
}
j=0;
}
break;
case 2: //這個算法可以直接定義一個一維數組代替
if(flag==0)
{
for(j=0;j<22;j=j+3)
{
if(j==9)
{
P2=0xfd;
delay(5000);
}
else
{
if(j==12)
{
P2=0xef;
delay(5000);
}
else
{
if(j==15)
{
P2=0x7f;
delay(5000);
}
else
{
if(j==18)
{
P2=0xfb;
delay(5000);
}
else
{
if(j==21)
{
P2=0xdf;
delay(5000);
}
else
{
P2=led4[j];
delay(5000);
}
}
}
}
}
}
j=0;
}
if(flag==1)
{
for(j=0;j<8;j++)
{
P2=led5[j];
delay(5000);
}
j=0;
}
break;
case 3:
if(flag==0)
{
for(j=0;j<8;j=j+4)
{
P2=led4[j];
delay(5000);
}
j=0;
}
if(flag==1)
{
for(j=0;j<8;j=j+4)
{
P2=led1[j];
delay(5000);
}
j=0;
}
break;
}
}
/*
* @file: 主函數
* @function: 主函數
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void main()
{
Timer0Init();
interface();
while(1)
{
int keyflag2;
int k;
int count;
if(key1==0)
{
delay(10);
if(key1==0)
{
keyflag2=1;
TR0=1;
while(!key1);
TR0=0;
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
keyflag2=2;
TR0=1;
while(!key2);
TR0=0;
}
}
if(keyflag2==1)
{
if(count>=1500)
{
pattern1();
}
else
{
pattern1();
}
//keyflag2=0; 注意,這個標志變量不能置0,否則·不會·無限循環
count=0;
}
if(keyflag2==2)
{
if(count>=1500)
{
for(k=0;k<1;k++)
{
pattern2();
}
pattern3();
}
else
{
for(k=0;k<1;k++)
{
pattern2();
}
for(k=0;k<100;k++)
pattern3();
}
keyflag2=0;
count=0;
}
}
}
/*
* @file: Timer0() interrupt 1
* @function: 定時器0的1模式中斷
* @date: 2019.5.22
* @version: v1.0
* @author: xiaohuli
*/
void Timer0() interrupt 1
{
static int i;
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
i++;
}
復制代碼
所有資料51hei提供下載:
led燈控制器.zip
(27.01 KB, 下載次數: 9)
2019-5-27 23:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-5-29 04:53
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1