欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機矩陣鍵盤掃描仿真加源代碼
[打印本頁]
作者:
謝之
時間:
2017-6-12 17:25
標題:
單片機矩陣鍵盤掃描仿真加源代碼
鍵盤掃描仿真原理圖如下(proteus的仿真工程文件可以到附件中下載):
0.png
(19.84 KB, 下載次數: 53)
下載附件
2017-6-12 17:43 上傳
0.png
(59.03 KB, 下載次數: 63)
下載附件
2017-6-12 17:43 上傳
51單片機源代碼如下:
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P2
#define outk P1
#define N 3
void delayms(uint);
uchar scan(void);
void main(void)
{
uchar key,i;
while(1)
{
key=scan();
if(key!=0xff) {
switch(key) {
case 0:
for(i=0;i<N;i++) {out=0xfe; delayms(100);
out=0xff; delayms(100);
} break;
case 1: for(i=0;i<N;i++) {out=0xfd; delayms(100);
out=0xff; delayms(100);
} break;
case 2: for(i=0;i<N;i++) {out=0xfb; delayms(100); out=0xff; delayms(100);
}break;
case 3: for(i=0;i<N;i++) {out=0xf7; delayms(100);out=0xff; delayms(100);
} break;
case 4: for(i=0;i<N;i++) {out=0xef; delayms(100);out=0xff; delayms(100);
} break;
case 5: for(i=0;i<N;i++) {out=0xdf; delayms(100); out=0xff; delayms(100);
}break;
case 6: for(i=0;i<N;i++) {out=0xbf; delayms(100);out=0xff; delayms(100);
} break;
case 7: for(i=0;i<N;i++) {out=0x7f; delayms(100);out=0xff; delayms(100);
} break;
case 8: for(i=0;i<N;i++) {out=0xfc; delayms(100);out=0xff; delayms(100);
} break;
case 9: for(i=0;i<N;i++) {out=0xf3; delayms(100);out=0xff; delayms(100);
} break;
case 10: for(i=0;i<N;i++) {out=0xcf; delayms(100);out=0xff; delayms(100);
} break;
case 11: for(i=0;i<N;i++) {out=0x3f; delayms(100); out=0xff; delayms(100);
}break;
case 12:
for(i=0;i<N;i++) {out=0x00; delayms(100);
out=0xff; delayms(100);
} break;
case 13: for(i=0;i<N;i++) {out=0xf8; delayms(100); out=0xff; delayms(100);
}break;
case 14: for(i=0;i<N;i++) {out=0xf0; delayms(100); out=0xff; delayms(100);
}break;
case 15: for(i=0;i<N;i++) {out=0x0f; delayms(100);out=0xff; delayms(100);
} break;
}}
}
}
// 延遲
void delayms(uint j)
{
uchar i;
for(;j>0;j--)
{
i=250;
while(--i);
i=249;
while(--i);
}
}
//鍵盤掃描函數
//行線為0 掃描列
uchar scan(void)
{
uchar k=16,m,n,in,a;
outk=0x0f; //行線為0 掃描列
a=outk&0x0f; //讀入列線值
if(a!=0x0f) //檢測有無鍵按下
{
delayms(100); //去抖
}
if(a!=0x0f) { //檢測有無鍵按下
for(m=0;m<4;m++) //m為列號
{
outk=~(0x10<<m); //按位左移
for(n=0;n<4;n++)
{
in=outk;
in=in>>n; //按位右移
if((in&0x01)==0)
{
delayms(10);
if((in&0x01)==0){k=4*n+m;break;}
}
}
if(k!=16){break;}
}
}
return(k);
}
/*
// 列線為0 掃描行
uchar k=16,m,n,in,a;
outk=0xf0; //列線為0 掃描行
a=outk&0xf0; //讀入行線值
if(a!=0xf0) //檢測有無鍵按下
{
delayms(100); //去抖
}
if(a!=0xf0) { //檢測有無鍵按下
for(m=0;m<4;m++) //m為行號
{
outk=~(0x01<<m); //按位左移
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
鍵盤掃描.zip
(44.67 KB, 下載次數: 20)
2017-6-12 17:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
假想敵
時間:
2018-9-19 10:37
樓主分享的很有用,
作者:
18779582598
時間:
2018-9-19 15:24
感謝分享
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1