51單片機(jī)學(xué)習(xí)筆記,4*4矩陣鍵盤(pán)
今天學(xué)習(xí)了下矩陣鍵盤(pán),
4*4, 分別代表0~F這16個(gè)數(shù)字
我們按了哪個(gè)鍵就顯示到數(shù)碼管上
看完郭老師講解原理后就自己動(dòng)手寫(xiě)了,郁悶的是
在keil軟件中,我在switch-case語(yǔ)句中 少了個(gè)冒號(hào),竟然編譯通過(guò)!
結(jié)果當(dāng)然不正確了,然后我再keil中調(diào)試代碼,那更郁悶了,P3口在掃描到第2行鍵盤(pán)時(shí)就
會(huì)復(fù)位成0xff,怎么賦值都沒(méi)用,其實(shí)是沒(méi)寫(xiě)冒號(hào)啊!
調(diào)了半天都不行,最后不得不將STC89C52RC換上仿真芯片SST89E516,在線調(diào)試后才發(fā)現(xiàn)的錯(cuò)誤,
然后參考書(shū)上的代碼才調(diào)試成功的,表示無(wú)語(yǔ)~~~
mark下
C代碼
#include
#include"MY51.H"
voidshowKey(uint8num);//靜態(tài)顯示
voidkeyScan();
voidmain()
{
showKey(18);//初始顯示的是6個(gè)負(fù)號(hào)
while(1)
{//循環(huán)檢測(cè)
keyScan();
}
}
voidshowKey(uint8num)
{
P0=0xc0;//11000000打開(kāi)6個(gè)數(shù)碼管
wela=open;
wela=lock;
P0=table[num];
dula=1;
dula=0;
}
voidkeyScan()
{
uint8num=0;//定義顯示的數(shù)字
uint8temp=0;//P3口回讀信息
uint8i=0;//定義矩陣鍵盤(pán)行號(hào)索引
for(i=0;i<4;i++)//共4行
{
P3=_crol_(0xfe,i);//掃描的行索引號(hào),從第0行到第3行
temp=P3;//讀取P3口
temp=temp&0xf0;//提取高4位
if(temp!=0xf0)//按鍵了
{
delayms(5);//消抖
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)//真的按鍵了
{
switch(temp)
{
case0xe0://11100000
{
num=0+4*i;
break;
}
case0xd0://11010000
{
num=1+4*i;
break;
}
case0xb0://10110000
{
num=2+4*i;
break;
}
case0x70://01110000
{
num=3+4*i;
break;
}
default:
{
num=18;//18號(hào)索引是負(fù)號(hào)
led7=0;//按了不該按的指示燈
break;
}
}
while(1)//松開(kāi)按鍵檢測(cè)
{
temp=P3;//讀取P3口
temp=temp&0xf0;//提取高4位
if(temp==0xf0)//松開(kāi)按鍵了
{
delayms(5);
temp=P3;
temp=temp&0xf0