硬件这样连的: 8个并行输入上拉10K到电源,并联按键到地;1(LOAD)、2(CLK)、9(Qh)分别接单片机P2.0、2.1、2.2;165的7脚空,10(串行输入)、15(时钟抑制)接地。 程序: KDAT = 1 ; KEY = 0 ; /* 变量赋 0 */ KLOAD = 0 ;/*锁存按键状态*/ KLOAD = 1 ; DO N = 0 TO 7 ; IF KDAT = 0 THEN KEY = KEY OR 01H ;;/*读口状态*/ KCLK = 1 ;/*时钟变高*/ KEY = ROL ( KEY , 1 ) ;/*字节左移*/ KCLK = 0 ;;/*时钟变低*/ END ; 现在的问题是:H、E、G有变化(对应位变低),其余均看见在最后变低,而不是在相应位置变低。 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /* 没有键按下,8个连续的‘1’ */
|_| ̄ ̄ ̄ ̄ ̄ ̄ ̄| /* 理想状态H键按下 */
| ̄|_| ̄ ̄ ̄ ̄ ̄ ̄| /* 理想状态G键按下 */
| ̄ ̄|_| ̄ ̄ ̄ ̄ ̄| /* 理想状态F键按下 */
| ̄ ̄ ̄|_| ̄ ̄ ̄ ̄| /* 理想状态E键按下 */
| ̄ ̄ ̄ ̄|_| ̄ ̄ ̄| /* 理想状态D键按下 */
| ̄ ̄ ̄ ̄ ̄|_| ̄ ̄| /* 理想状态C键按下 */
| ̄ ̄ ̄ ̄ ̄ ̄|_| ̄| /* 理想状态B键按下 */
| ̄ ̄ ̄ ̄ ̄ ̄ ̄|_| /* 理想状态A键按下 */ 现在情况: | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /* 没有键按下 */
|_| ̄ ̄ ̄ ̄ ̄ ̄ ̄| /* H键按下 */
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| /* 后几个键任一按下,‘0’被排在后边 */ 哪位出出主意:什么原因、怎么解决?在此致谢。
|