本帖最后由 haolaishi 于 2013-1-17 17:38 编辑
74HC595扩展矩阵按键,出现检测不到的情况,有经验的赐教
AAA.jpg (390.42 KB, 下载次数: 1)
下载附件
2013-1-17 17:38 上传
//////----代码如下:----//////////////////////////////////////////////////////////////////////////////////////////////////////////
/**************************************
**************************************/
#include "hc595.h"
/**************************************
延时5毫秒(STC12C5A60S2@12M)
不同的工作环境,需要调整此函数
此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同
**************************************/
void Delay20ms(void)
{
unsigned int n = 5000;
while (n--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
/*------------------------------------------------
发送字节程序
------------------------------------------------*/
unsigned char SendByte(unsigned char dat)
{
unsigned char i,a;
a=dat;
// dat=_crol_(dat,1);
for(i=0;i<8;i++)
{
SRCLK=0;
SER=dat&0x80;
dat<<=1;
SRCLK=1;
}
LATCH=0;
LATCH=1;
return a;
}
/*------------------------------------------------
按键扫描程序
------------------------------------------------*/
unsigned char keyscan(void)
{
unsigned char sccode,recode,i;
SendByte(0x00);
if((P4&0x70)!=0x70)
{
Delay20ms();
if((P4&0x70)!=0x70)
{
SendByte(0xfe);
recode=0xfe;
for(i=0;i<5;i++)
{
if((P4&0x70)!=0x70)
{
PutChar(64,28,'c');
sccode=(P4&0x70)|0x8f;
return((~sccode)+(~recode));
}
else
{ //recode=_cror_(0x7f,1);
// recode=_crol_(recode,1); //recode=SendByte(_cror_(0x7f,1));
// SendByte(0x7f);
PutChar(30,28,'b');
}
}
}
}
else
{
PutChar(0,28,'A');
}
return(0);
}
行线用的是STC的IO口,列线才用的扩展
一周热门 更多>