关于CH452驱动键盘的问题
求助:
小可现在用at89c51驱动CH452键盘功能,程序如下.问题是我按下键,没什么反应.用示波器测中断脚根本没有中断信号,不知道问题出在哪,希望老古的用过CH452的大虾给个指导,不胜感激!用的24M晶振,INT0,12时钟模式
void AT89C51_Init()
{
TCON|=0x01;//中断0下降沿触发;
IP|=0x01;
EA=1;//全局中断允许;
CH452_KEY_INT0_ON;//中断0允许;
}
/*******************************************
*******************************************/
void CH452_Init()
{
Uint CH452_SYS_SET=0;
CH452_KEY_DIN_CLR;
CH452_KEY_DIN_SET;
CH452_KEY_LOAD_SET;
CH452_KEY_DCLK_SET;
CH452_SYS_SET=(CH452_SYS_COM|CH452_KEY_KEYB_ON|CH452_KEY_INTM_ON|CH452_KEY_DISP_ON);//CH452系统参数设置:开显示\键盘功能\边沿中断
WriteCH452(CH452_RESET);
WriteCH452(CH452_SYS_SET);
}
/*******************************************
*******************************************/
void WriteCH452(Uint command)
{
Uchar i;
CH452_KEY_INT0_OFF;//51禁止452产生的中断
CH452_KEY_LOAD_CLR;//LOAD低电平
for(i=0;i <12;i++)
{
if(command&0x0001)CH452_KEY_DIN_SET;
else CH452_KEY_DIN_CLR;
CH452_KEY_DCLK_CLR;
command> > =1;
CH452_KEY_DCLK_SET;
}
CH452_KEY_LOAD_SET;//LOAD上升沿加载命令
NOP;NOP;NOP;NOP;NOP;NOP;NOP;
CH452_KEY_INT0_ON;//51允许452产生的中断
}
/*******************************************
*******************************************/
Uchar ReadCH452()
{
Uchar i,j;
Uchar key=0;
Uchar read;
CH452_KEY_INT0_OFF;
read=CH452_R_COM;//读取键盘命令0111
CH452_KEY_LOAD_CLR;
for(i=0;i <4;i++)
{
if(read&0x01)CH452_KEY_DIN_SET;
else CH452_KEY_DIN_CLR;
CH452_KEY_DCLK_CLR;
read> > =1;
CH452_KEY_DCLK_SET;
}
CH452_KEY_LOAD_SET;//LOAD上升沿加载命令
NOP;
for(j=0;j <7;j++)
{
key < <=1;
key|=DOUT;
NOP;
CH452_KEY_DCLK_CLR;
NOP;
CH452_KEY_DCLK_SET;
}
CH452_KEY_INT0_ON;
return(key);
}
/*******************************************
*******************************************/
void CH452_INT0() interrupt 0
{
key_int_flag=1;
keyboard=ReadCH452();
}
void main()
{
LcdInit();
AT89C51_Init();
CH452_Init();
DelayMs(100);
while(1)
{
if(key_int_flag)//如果有键按下显示:北京欢迎您
{
LcdSendCom(0x01);
Display(0,0,5,"北京欢迎您");
key_int_flag=0;
}
else Display(1,0,4,"没键按下");//如果没键按下显示:没键按下
DelayMs(10);
}
}
发表时间:2009年3月1日11:11:43