資源簡介
AT89C51的矩陣鍵盤、跑馬燈和呼吸燈設計.rar

代碼片段和文件信息
#include?“reg52.h“ ?//此文件中定義了單片機的一些特殊功能寄存器
typedef?unsigned?int?u16; ??//對數據類型進行聲明定義
typedef?unsigned?char?u8;
sbit?d1=P0^0; //16個LED燈:D1-D16
sbit?d2=P0^1;
sbit?d3=P0^2;
sbit?d4=P0^3;
sbit?d5=P0^4;
sbit?d6=P0^5;
sbit?d7=P0^6;
sbit?d8=P0^7;
sbit?d9=P2^0;
sbit?d10=P2^1;
sbit?d11=P2^2;
sbit?d12=P2^3;
sbit?d13=P2^4;
sbit?d14=P2^5;
sbit?d15=P2^6;
sbit?d16=P2^7;
sbit?P32=P3^2; ????????//P3.2引腳是外部中斷INT0的信號
sbit?xintiaodeng=P3^3; //P3.3引腳作為心跳燈的控制信號
int?a[]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f};//順序流水燈數組
int?b[]={0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe};//倒序流水燈數組
int?c[]={0xfe0xfc0xf80xf00xe00xc00x800x000x800xc00xe00xf00xf80xfc0xfe0xff};?//順序逐盞點亮逐盞滅掉數組
int?d[]={0x7f0x3f0x1f0x0f0x070x030x010x000x010x030x070x0f0x1f0x3f0x7f0xff};??//倒序逐盞點亮逐盞滅掉數組
u8?KeyValue; //用來存放讀取到矩陣鍵盤的鍵值
u8?k;???????????//定義循環變量k
void?delay(u16?i) ?//?delay延時函數 ???i=1時,大約延時10us
{
while(i--);
}
void?KeyDown(void) ???//該函數用于檢測是否有按鍵按下并讀取鍵值
{
char?a=0;
P1=0x0f; //高四位為0,低四位為1,當按鍵被按下后,會有某個低四位變為0
if(P1!=0x0f)//讀取按鍵是否按下
{
delay(100);//延時10ms進行消抖
if(P1!=0x0f)//再次檢測鍵盤是否按下
{
//測試列
P1=0X0F;
switch(P1) ??//按鍵被按下后,會有某個低四位變為0
{
case(0X07): KeyValue=0;break; //P1.3=0,即第一列有某個按鍵被按下
case(0X0b): KeyValue=1;break; //P1.2=0,即第二列有某個按鍵被按下
case(0X0d):?KeyValue=2;break; //P1.3=0,即第三列有某個按鍵被按下
case(0X0e): KeyValue=3;break; //P1.4=0,即第四列有某個按鍵被按下
}
//測試行
P1=0XF0;
switch(P1)
{
case(0X70): KeyValue=KeyValue;break; ?//P1.7=0,即第一行有某個按鍵被按下
case(0Xb0): KeyValue=KeyValue+4;break; ?//……每行相差4,因此為+4
case(0Xd0):?KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(P1!=0xf0)) ?//檢測按鍵松手檢測
{
delay(100);
a++;
}
}
}
}
void?zoumadeng2(void) //D1-D8,單點循環一次,長按無限循環?
{
for(k=0;k<8;k++)
{
P0=a[k];
delay(30000);
}
P0=0XFF;
}
void?zoumadeng3(void) //D8-D1,單點循環一次,長按無限循環
{
for(k=0;k<8;k++)
{
P0=b[k];
delay(30000);
}
P0=0XFF;
}
void?zoumadeng4(void) //D9-D16,單點循環一次,長按無限循環
{
for(k=0;k<8;k++)
{
P2=a[k];
delay(30000);
}
P2=0XFF;
}
void?zoumadeng5(void) //D16-D9,單點循環一次,長按無限循環
{
for(k=0;k<8;k++)
{
P2=b[k];
delay(30000);
}
P2=0XFF;
}
void?zoumadeng6(void) //D1-D16,單點循環一次,長按無限循環
{
for(k=0;k<8;k++)
{
P0=a[k];
delay(30000);
}
P0=0xff;
for(k=0;k<8;k++)
{
P2=a[k];
delay(30000);
P2=0xff;
}
}
void?zoumadeng7(void) ////D16-D1,單點循環一次,長按無限循環
{
for(k=0;k<8;k++)
{
P2=b[k];
delay(30000);
}
P2=0xff;
for(k=0;k<8;k++)
{
P0=b[k];
delay(30000);
}
P0=0xff;
}
void?zoumadeng8(void) ////D1-D8順序逐盞點亮逐盞滅掉數組單點循環一次,長按無限循環
{
for(k=0;k<16;k++)
{
P0=c[k];
delay(30000);
}
}
void?zoumadeng9(void) ////D8-D1倒序逐盞點亮逐盞滅掉數組單點循環一次,長按無限循環
{
for(k=0;k<16;k++)
{
P0=d[k];
delay(30000);
}
}
void?zoumadeng10(void) ////D9-D16順序逐盞點亮逐盞滅掉數組單點循環一次,長按無限循環
{
for(k=0;k<16;k++)
{
P2=c[k];
delay(3000
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????23462??2019-11-15?14:01??Backup?Of?new51.pdsbak
?????文件??????22759??2019-11-16?20:15??Last?Loaded?new51.pdsbak
?????文件??????18641??2019-11-16?20:14??new51
?????文件???????8586??2019-11-16?20:13??new51.c
?????文件???????4754??2019-11-16?20:14??new51.hex
?????文件?????????27??2019-11-16?20:14??new51.lnp
?????文件??????18504??2019-11-16?20:14??new51.LST
?????文件??????22893??2019-11-16?20:14??new51.M51
?????文件??????22056??2019-11-16?20:14??new51.OBJ
?????文件??????22784??2019-11-16?20:21??new51.pdsprj
?????文件???????3152??2019-11-16?20:32??new51.pdsprj.LAPTOP-4TU8EL4B.win10.workspace
?????文件????????337??2019-11-16?20:14??new51.plg
????.......?????55217??2019-11-16?20:14??new51.uvopt
????.......?????13227??2019-11-15?14:38??new51.uvproj
????.......?????55217??2019-11-16?20:13??new51_uvopt.bak
????.......?????????0??2019-11-15?14:05??new51_uvproj.bak
-----------?---------??----------?-----??----
???????????????291616????????????????????16
- 上一篇:Hyperion-2.3.1.zip
- 下一篇:信息隱藏技術及其攻擊方法
評論
共有 條評論