-
大小: 55KB文件類型: .rar金幣: 2下載: 0 次發布日期: 2021-05-28
- 語言: 其他
- 標簽:
資源簡介
51單片機 4個按鍵 分別控制流水燈左右兩邊中間移動 具有暫停 切換流水的功能 內有keil程序,和proteus仿真,可以直接調試看效果。

代碼片段和文件信息
#include
#include
????
sbit?key1=P3^2; ?//?按鍵01?的設定
sbit?key2=P3^3; ?//?按鍵02?的設定
sbit?key3=P3^4; ?//?按鍵03?的設定
sbit?key4=P3^5; ?//?按鍵04?的設定
unsigned?char?kjkeynum;
unsigned?char?table0[]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f};?//左移
unsigned?char?table1[]={0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe};?//右移
unsigned?char?table2[]={0x7e0xbd0xdb0xe70x7e0xbd0xdb0xe7};?//往中間移
unsigned?char?table3[]={0xe70xdb0xbd0x7e0xe70xbd0xdb0x7e};?//往兩邊移
void?keyscan(); //???按鍵掃描 ??
void?delayms(unsigned?int?i); // 延時子程序
??
////**************************????主函數???*********************************
void?main()
{
while(1)
{
if(key1==0)
{
delayms(10); ?//??10ms??按鍵消抖
if(key1==0)
{
key=1; ?//?確定?按鍵01?有按下
while(key2||key3||key4) ?// 若沒有其他按鍵?按下?,??則進行?“左移”?功能?
{
keyscan(); ???
}
}
}
if(key2==0)
{
delayms(10); ?//??10ms??按鍵消抖
if(key2==0)
{
key=2; ?//?確定?按鍵02?有按下
while(key1||key3||key4) ?// 若沒有其他按鍵?按下?,??則進行?“右移”?功能?
{
keyscan();
}
}
}
if(key3==0)
{
delayms(10); //??10ms??按鍵消抖
if(key3==0)
{
key=3; ???//?確定?按鍵03?有按下
while(key1||key2||key4) ??// 若沒有其他按鍵?按下?,??則進行?“往中間移”?功能?
{
keyscan();
}
}
}
if(key4==0)
{
delayms(10); ?//??10ms??按鍵消抖
if(key4==0)
{
key=4; ??//?確定?按鍵04?有按下
while(key1||key2||key3) ?// 若沒有其他按鍵?按下?,??則進行?“往兩邊移”?功能?
{
keyscan();
}
}
}
}
}
////****************************?? 按鍵掃描?????***********************
void?keyscan() ??????????????????? ?
{
switch(key)
{
case?1:
???????? while(key2||key3||key4) // 若沒有其他按鍵?按下?,??則進行?“往左移”?功能?
{
for(num=0;num<8;num++)
{
P0=table0[num];
delayms(1000);
??// ?【??動態切換按鍵??】
if(key2==0) ???//? 有按鍵02?按下?,執行相應功能
{ ??
key=2;
keyscan();
}
if(key3==0) ???//? 有按鍵03?按下?,執行相應功能
{
key=3;
keyscan();
}
if(key4==0) ???//? 有按鍵04?按下?,執行相應功能
{
key=4;
keyscan();
}
if(key1==0) ???//??暫停?當前流水燈
{
P0=table0[num];
delayms(1000);
?//???????【?靜態切換按鍵 】
while(key1)
{
if(key2==0) //? 有按鍵02?按下?,執行相應功能
{
key=2;
keyscan();
}
if(key3==0) ???//? 有按鍵03?按下?,執行相應功能
{
key=3;
keyscan();
}
if(key4==0) ???//? 有按鍵04?按下?,執行相應功能
{
key=4;
keyscan();
}
}
}
}
}break;
?case?2: ???// 若沒有其他按鍵?按下?,??則進行?“往右移”?功能?
while(key1||key3||key4)
{
? for(num=0;num<8;num++)
{
P0=table1[num];
delayms(1000);
// ?【??動態切換按鍵】
if(key1==0) ???//? 有按鍵01?按下?,執行相應功能
{ ???
key=1;
keyscan();
}
if
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????93257??2012-06-27?13:32??【led】\Last?Loaded?led.DBK
?????文件???????8668??2012-06-27?21:40??【led】\led
?????文件???????6277??2012-06-27?21:40??【led】\led.c
?????文件??????93226??2012-06-27?15:58??【led】\led.DSN
?????文件???????2189??2012-06-27?21:40??【led】\led.hex
?????文件?????????54??2012-06-27?21:40??【led】\led.lnp
?????文件??????22192??2012-06-27?21:40??【led】\led.LST
?????文件??????14898??2012-06-27?21:40??【led】\led.M51
?????文件???????9281??2012-06-27?21:40??【led】\led.OBJ
?????文件????????191??2012-06-27?22:51??【led】\led.plg
?????文件????????768??2012-06-27?15:58??【led】\led.PWI
?????文件??????56257??2012-06-27?22:51??【led】\led.uvopt
?????文件??????13394??2012-06-24?00:11??【led】\led.uvproj
?????文件??????56249??2012-06-27?21:40??【led】\led_uvopt.bak
?????文件??????????0??2012-06-23?21:55??【led】\led_uvproj.bak
?????文件???????6376??2009-05-07?14:37??【led】\STARTUP.A51
?????文件??????14072??2012-06-27?21:40??【led】\STARTUP.LST
?????文件????????758??2012-06-27?21:40??【led】\STARTUP.OBJ
?????目錄??????????0??2012-06-28?09:00??【led】
-----------?---------??----------?-----??----
???????????????398107????????????????????19
- 上一篇:順序表表示集合,實現集合的交、并、差運算
- 下一篇:規律有序文本生成工具
評論
共有 條評論