搜索
bottom↓
回复: 6

74HC165扩展8按键4旋转编码问题 很棘手

[复制链接]

出0入0汤圆

发表于 2008-7-13 15:00:23 | 显示全部楼层 |阅读模式
如原理图所示   2片HC595组成静态数码管驱动 1片HC165组成静态键盘及编码开关驱动

center>
(原文件名:未命名.jpg) </center>

电路功能描述:  用HC595与HC165分别担当数码管以及键盘编码开关的静态方式驱动,即在无键按下时CPU不对这部分电路进行扫描,IO线上没有任何变化信号
               减小干扰

键盘部分硬件电路:
               旋转开关公共端以及按键开关公共端分别接至51的P1.6 P1.7端口,作为按键按下检测线,网络名RTINT以及SWINT,所有旋转开关其余两脚以及8
               只按键开关的引脚分别接到74HC165的8条数线上,网络名CTRL1-CTRL8另有8只4148管的阳极分别与HC165的8条数据线相连,阴极连在一起引出
               一条线与CPU P2.5,,相连,作为辅助触发端网络名SWTRG,
键盘电路工作流程:
               上电后,SWTRG(扫描触发辅助)线置0,SWINT RTINT置1,,当键盘或者旋转编码按下后,对应的SWINT线(键盘扫描触发)或RTINT线(旋转开关扫描
               触发)会以为二极管的作用被SWTRG下拉为0,CPU读到SWINT或RTINT口线为0后,将SWTRG线(扫描触发辅助)置1,并驱动HC165读出8条数据线上的
               数据,(如果SWINT为0,则认为按键开关按下,如果RTINT为0,则是旋转开关接触)  ,随后数据与CPU内以设置好的功能数据比较 ,与哪个相同,就
               执行哪个功能程序.
               现在为了测试方便 对应功能程序用LED代替

出现的问题:    HC165跟HC595象有冲突一样   如果165读完数据后 不调用一次595的显示程序  165就会读出错误数据,读出的全是1,,,如果按照读165 写595
               这样的循环,就没有问题,,,,,,,奇怪了


汇编程序:LCLK EQU P1.4
CLK  EQU P1.0
SDA  EQU P1.1
SWSD EQU P3.5
SWLD EQU P1.5
SWINT EQU P1.7
RTINT EQU P1.6
SWTRG EQU P2.5
LED1 EQU  P2.3
LED2 EQU  P2.2
LED3 EQU  P2.1


               ORG  0000H
               LJMP  INIT
               ORG  0030H

;================================================
  INIT:       CLR SWLD
               CLR LCLK
               CLR CLK
               SETB SWINT
               SETB RTINT
               CLR  SWTRG
               MOV 30H,#11111111B
               MOV 31H,#11111111B
               ACALL DISPLAY
;===============================================
  GETKEY:      JNB RTINT,ROSW
               JNB SWINT,PBSW               
               AJMP GETKEY
;===============================================
  ROSW:        ACALL READKEY
               MOV 30H,A
               ACALL KEYVOL
               AJMP GETKEY
  PBSW:        ACALL READKEY
               MOV 31H, A
               ACALL DISPLAY
               CLR SWTRG
               AJMP GETKEY
;==============================================
  KEYVOL:      MOV A,30H
               CJNE A,#10000000B,OP1
               ACALL DISPLAY
               CLR   SWTRG

KEYVOL1:       ACALL READKEY
               CJNE A,#11000000B,OP2
               ACALL DISPLAY
               CLR   SWTRG

KEYVOL2:       ACALL READKEY
               CJNE A,#00000000B,OP3
               ACALL DISPLAY
               CLR   SWTRG
               CPL LED2
               RET
  OP1   :      ACALL DISPLAY
               CLR   SWTRG
               RET
  OP2   :      ACALL DISPLAY
               CLR   SWTRG
               AJMP  KEYVOL1
  OP3   :      ACALL DISPLAY
               CLR   SWTRG
               AJMP  KEYVOL2
;==============================================
  READKEY:     CLR  A
               CLR  C
               SETB SWTRG
               NOP
               NOP
               SETB SWLD
               NOP
               NOP
               CLR  SWLD
               NOP
               NOP
               SETB SWLD
               MOV R1,#8
  KEYLOOP:     setb  CLK
               NOP
               NOP
               clr   CLK
               NOP
               NOP
               MOV  C,SWSD
               RRC  A
  DJNZ         R1    ,KEYLOOP
               CLR    SWLD
               RET
               
;==============================================
  DISPLAY:      
                CLR   LCLK          ;禁止数据进入锁存器
                SETB  CLK         ;使串行口无数据输出
                ACALL SOUT
                NOP
                SETB  LCLK
                NOP
                NOP
                CLR   LCLK
               
                RET
               
                       
  SOUT:         MOV R0,#08H        ;寄存器送立即数
                MOV A ,30H         ;将字符"A."二进制编码送累加器
                ACALL OUT          ;调用串行数据输出子程序
                MOV R0,#08H        ;寄存器送立即数
                MOV A ,31H
                ACALL OUT
                RET                ;返回主程序
               



  OUT:                RRC       A         ;将A中数据进行通过进位位CY的右移
                MOV  SDA ,C         ;将进位位CY的数据送p00做为一位串行数据输出
                CLR  CLK            ;拉高移位时钟线形成时钟上升沿
                NOP        
                SETB CLK            ;拉低移位时钟线形成时钟下降沿
                NOP
                DJNZ R0,OUT        ;检查R0数,据减1不为零则跳转回OUT继续移位
                RET                ;返回主程序

;=====================================================

  DELAY:        MOV R7,#255
  D2:           MOV R6,#255
                DJNZ R6,$
                DJNZ R7,D2
                RET
  
               
  
END                                ;程序结束

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2008-7-13 15:21:16 | 显示全部楼层
还有 PROTEUS 仿真不了  二极管一接上去 按下开关后显示的就是悬浮电平 跟实际电路跟本不一样 不知道什么缘故

出0入0汤圆

 楼主| 发表于 2008-7-13 19:21:09 | 显示全部楼层
没人知道么

出0入0汤圆

 楼主| 发表于 2008-7-13 19:21:10 | 显示全部楼层
没人知道么

出0入0汤圆

发表于 2011-3-15 17:21:02 | 显示全部楼层
路过 不懂汇编

出0入0汤圆

发表于 2012-5-14 21:48:28 | 显示全部楼层
有意思 值得一看

出0入0汤圆

发表于 2012-5-15 00:31:38 | 显示全部楼层
抽空研究下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表