本人初学单片机,现请求各位大侠,有没有MCS51机的外部中断法4X4键盘扫描汇编语言程序

P1.0~P1.3为行线,p1.4-1.7为列线,列线上接有上拉电阻和VCC,同时用与门接到INT0,求一个汇编程序,用外部中断法判断键值,如果有多个键被同时按下,不做处理,只有一个键被按下的时候才做处理,把判断处的键值送到60H。
我今天去逛图书馆,看了很多这些书,都明白那些算法了,怎样扫描也明了,只不过书本上的硬件图跟我的也一样,我用的程序也跟书上的一样,仿真出来还是不对,书上的方法,跟我自己写的也差不多一个思想,我自己写的也仿真不出来,书上的也仿真不出来,我看是我Proteus的问题了……不过谢谢你ismile2003 ,感谢分享,你做的那个汇编程序,正好我也是搞数码管研究一下~不过这只是我最终目标的一部分而已~我现在只是为了判键值,往后是为了按不同的键值来播放不同的歌,即音乐盒……,另外我还用了LCD来显示时间,网上找出来的,那个有很多错误,现在只能自己一块一块的研究出来,最终组合起来了……唉,蛋疼。对于laujc ,你的这个我有看到过,不过这个是C语言的,不是单片机的汇编语言。目前我们只学了一部分的C,还不会用这个~这个要看学校什么时候能教C先了……自学的话无激情……

这个是我以前做的扫描法,电路如图所示,程序附上。

    ORG  00H

    LJMP  MAIN

    ORG  30H

MAIN:  LCALL  LOOP1

       LCALL  DELAY

       LCALL  LOOP1

       LCALL  LOOP2

       LCALL  LOOP3

       LJMP  MAIN

LOOP1: MOV  P2,#0F0H;判断有键按下?

       MOV  A,P2

       MOV B,A

       MOV  P2,#0FH

       MOV  A,P2

       ORL  A,B

       MOV  30H,A

       CJNE  A,#0FFH,LOOP11

       LJMP  MAIN

LOOP11:  RET    

LOOP2:MOV R3,#00H;比较计算得出键值

LOOP21:MOV  A,R3

      INC  R3

      MOV  DPTR,#TAB

      MOVC A,@A+DPTR

      CJNE A,30H,LOOP21

      RET

LOOP3:MOV  A,R3 ;数码管显示

      MOV  DPTR,#TAB1

      MOVC A,@A+DPTR

      MOV  P1,A

      ;MOV P1,#0F1H

      RET

DELAY:   ;延时R5×10MS

           MOV  R6,#50

DELAY1:    MOV  R7,#100

           DJNZ  R7,$

           DJNZ  R6,DELAY1

           RET

TAB:

    DB  0EEH,0EDH,0EBH,0E7H 

    DB  0DEH,0DDH,0DBH,0D7H  

    DB  0BEH,0BDH,0BBH,0B7H

    DB  07EH,07DH,07BH,077H 

       

TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

     DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH

    END

这个是我以前做的扫描法,电路如图所示,程序附上。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-01
这个程序好多呀,网上搜下吧。
给你个参考网址:http://wenku.baidu.com/view/c765dd4733687e21af45a92f.html
相似回答