本人使用AT89C51控制CH452,只用到其键盘功能.但程序写好后,一直的不到LOAD产生的中断信号,有能人帮忙解决下吗:<br />//////----------------<br />sbit DCLK=P1^5;<br />sbit DIN=P1^4;<br />sbit LOAD=P1^6;//暂时由P1.6作为CH452的LOAD信号输入<br />sbit DOUT=P3^2;<br />/////------------<br />#define CH452_KEY_LOAD_SET LOAD=1<br />#define CH452_KEY_LOAD_CLR LOAD=0<br />#define CH452_KEY_DIN_SET DIN=1<br />#define CH452_KEY_DIN_CLR DIN=0<br />#define CH452_KEY_DCLK_SET DCLK=1<br />#define CH452_KEY_DCLK_CLR DCLK=0<br />///----------------51初始化<br />void AT89C51_Init()<br />{<br /> TCON|=0x01;//中断0下降沿触发;<br /> EA=1;//全局中断允许;<br /> CH452_KEY_INT0_ON;//中断0允许;<br />}<br />/////////////////////CH452初始化<br />void CH452_Init()<br />{<br /> Uint CH452_SYS_SET=0;<br /> CH452_SYS_SET=CH452_SYS_COM|CH452_KEY_KEYB_ON|CH452_KEY_INTM_ON;//CH452系统参数设置:开键盘功能边沿中断<br /> WriteCH452(CH452_RESET);<br /> WriteCH452(CH452_SYS_SET);<br />}<br />/////////////向CH452发命令<br />void WriteCH452(Uint command)<br />{<br /> Uchar i;<br /> CH452_KEY_INT0_OFF;//51禁止452产生的中断<br /> CH452_KEY_LOAD_CLR;//LOAD低电平<br /> for(i=0;i<12;i++)<br /> {<br /> if(command&0x0001)CH452_KEY_DIN_SET;<br /> else CH452_KEY_DIN_CLR;<br /> //DIN=command&0x0001;<br /> CH452_KEY_DCLK_CLR;<br /> command>>=1;<br /> CH452_KEY_DCLK_SET;<br /> }<br /> CH452_KEY_LOAD_SET;//LOAD上升沿加载命令<br /> NOP;<br /> CH452_KEY_INT0_ON;//51允许452产生的中断<br />}<br />///////////////读CH452<br />Uchar ReadCH452()<br />{<br /> Uchar i,j;<br /> Uchar key=0;<br /> Uchar read;<br /> CH452_KEY_INT0_OFF;<br /> read=CH452_R_COM;<br /> CH452_KEY_LOAD_CLR;<br /> for(i=0;i<4;i++)<br /> {<br /> if(read&0x01)CH452_KEY_DIN_SET;<br /> else CH452_KEY_DIN_CLR;<br /> //DIN=read&0x01;<br /> CH452_KEY_DCLK_CLR;<br /> read>>=1;<br /> CH452_KEY_DCLK_SET;<br /> }<br /> CH452_KEY_LOAD_SET;//LOAD上升沿加载命令<br /> NOP;<br /> for(j=0;j<7;j++)<br /> {<br /> key<<=1;<br /> key|=DOUT;<br /> NOP;<br /> CH452_KEY_DCLK_CLR;<br /> NOP;<br /> CH452_KEY_DCLK_SET;<br /> }<br /> CH452_CLR_INT_FLAG;<br /> CH452_KEY_INT0_ON;<br /> return(key);<br />}<br />/////////////中断处理<br />void CH452_INT0() interrupt 0<br />{<br /> key_int_flag=1;<br /> keyboard=ReadCH452();<br />}<br />///////----main()----忽略 |
|