欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
簡單的單片機按鍵控制流水燈
[打印本頁]
作者:
Danny1710
時間:
2018-4-24 22:27
標題:
簡單的單片機按鍵控制流水燈
按鍵控制流水燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
360截圖18481110123128113.jpg
(107.93 KB, 下載次數: 127)
下載附件
2018-4-24 22:25 上傳
功能:
1.
用8盞LED小燈,實現至少4種彩燈燈光效果(不含全部點亮,全部熄滅);
2.
可以用輸入按鈕在幾種燈光效果間切換;
3.
可以通過按鈕暫停彩燈效果,使小燈全亮,再次按下相同按鈕后繼續之前的效果;
4.
增加自動在幾種效果間切換的功能,并設置一個按鈕可以在自動模式和手動模式間切換;
5.
使用定時中斷延時
(由于仿真圖略大,不能上傳)
源代碼:
#include<reg51.h>
#include<intrins.h>
#define GPIO_LED P0 //led使用P0口
#define GPIO_KEY P1 //獨立鍵盤用P1口
sbitK1=P1^0;
sbitK2=P1^1;
sbitK3=P1^2;
sbitK4=P1^3;
sbitK5=P1^4;
char KeyNum;
unsignedchar state;
unsignedchar change_state;
voidDelay10ms(unsigned int c); //延時10ms
voidLED1();
voidLED2();
voidLED3();
voidLED4();
voidauto_LED();
voidPause();
unsignedchar Key_Scan(); //掃描鍵盤//
voidmain(void)
{
IT0=1;
IT1=1;
EX1=1;
EX0=1;
EA=1;
auto_LED();
while(1)
{
if(1 == state)
{
LED1();
change_state = 0;
}
else if(2 == state)
{
LED2();
change_state = 0;
}
else if(3 == state)
{
LED3();
change_state = 0;
}
else if(4 == state)
{
LED4();
change_state = 0;
}
}
}
voidChange() interrupt 0
{
KeyNum=Key_Scan();
switch(KeyNum)
{
case(0xFe) : //返回按鍵K1的數據
state=1;
change_state=1;
break;
case(0xFD) : //返回按鍵K2的數據
state=2;
change_state=2;
break;
case(0xFB) : //返回按鍵K3的數據
state=3;
change_state=3;
break;
case(0xF7) : //返回按鍵K4的數據
state=4;
change_state=4;
break;
default:
break;
}
}
voidPause() interrupt 1
{
auto_LED();
}
voidDelay10ms(unsigned int c) //誤差 0us
{
unsigned char a, b;
for (;c>0;c--)
{for (b=30;b>0;b--)
{
for (a=100;a>0;a--);
}
}
unsignedchar Key_Scan()
{
unsigned char keyValue = 0 , i; //保存鍵值
//--檢測按鍵1--//
if (GPIO_KEY != 0xFF) /檢測按鍵K1是否按下
{
Delay10ms(1); //消除抖動
if (GPIO_KEY != 0xFF) //再次檢測按鍵
{
keyValue = GPIO_KEY;
i = 0;
while ((i<50) && (GPIO_KEY !=0xFF)) //檢測按鍵是否松開
{
Delay10ms(1);
i++;
}
}
}
return keyValue; //將讀取到鍵值的值返回
}
voidLED1()
{
unsigned char i;
GPIO_LED = 0x01;
for (i=0; i<16; i++)
{
GPIO_LED = _crol_(GPIO_LED, 1);
Delay10ms(100);
if(change_state==2)
break;
if(change_state==3)
break;
if(change_state==4)
break;
if(change_state==5)
break;
}
}
voidLED2()
{
unsignedchar i;
GPIO_LED = 0x80;
for (i=0; i<16; i++)
{
GPIO_LED = _cror_(GPIO_LED, 1);
Delay10ms(100);
if(change_state==1)
break;
if(change_state==3)
break;
if(change_state==4)
break;
if(change_state==5)
break;
}
}
voidLED3()
{
unsigned char i;
GPIO_LED = 0x81;
for (i=0; i<8; i++)
{
GPIO_LED = _cror_(GPIO_LED, 4);
Delay10ms(100);
if(change_state==1)
break;
if(change_state==2)
break;
if(change_state==4)
break;
if(change_state==5)
break;
}
}
voidLED4()
{
unsigned char i;
GPIO_LED = 0x18;
for (i=0; i<8; i++)
{
GPIO_LED = _cror_(GPIO_LED, 3);
Delay10ms(100);
if(change_state==1)
break;
if(change_state==2)
break;
if(change_state==3)
break;
if(change_state==5)
break;
}
}
void auto_LED()
{
LED1();
Delay10ms(100);
LED2();
Delay10ms(100);
LED3();
Delay10ms(100);
LED4();
Delay10ms(100);
}
復制代碼
作者:
發了個哥
時間:
2018-11-13 13:29
請問附件在哪啊?
作者:
bhjyqjs
時間:
2018-11-14 08:58
程序寫的很好!
個人認為,類似
if(1 == state)
{
LED1();
change_state = 0;
}
else if(2 == state)
改成switch語句,更加一目了然。
作者:
產檢簿
時間:
2018-12-2 21:22
請問附件在哪啊?
作者:
玖吟璽
時間:
2019-4-22 21:12
為什么沒有晶振
作者:
MisterM
時間:
2019-10-14 21:58
樓主你這個是自動的 跟按鍵沒關系啊auto_LED就直接運行了啊
作者:
flynn13
時間:
2020-6-16 20:52
87行的大括號少了
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1