易码技术论坛

 找回密码
 加入易码
搜索
查看: 336295|回复: 17

[求助]怎么通过IO实现Password??

[复制链接]
发表于 2005-6-4 15:08:00 | 显示全部楼层
什么叫"通过IO实现"?
明白什么叫IO吗?

11787_20922_4673.rar

12 KB, 下载次数: 236

发表于 2005-6-4 15:49:00 | 显示全部楼层
PASSWORD是靠中断实现的,修改中断就行了,和I/O有什么关系
发表于 2005-6-4 16:45:00 | 显示全部楼层
因为楼主想要在RESET中加入密码框~而RESET时候是SEI的~所以无法使用中断~也无法读键~所以楼主想要知道如何通过I/0控制键盘和如何不用中断刷新屏幕~基本应该就是这个意思……
发表于 2005-6-4 17:49:00 | 显示全部楼层
明白,密码框用一个图就行了,i/o嘛
用199(十进制)就行了吧
然后往lcd上画 * ,不是有一个往任意地方贴任意大小图的子程序么,
再加上那个子程序就行了,不过程序大小应该很可观了
发表于 2005-6-4 17:50:00 | 显示全部楼层
不知道谁有更好的方法??
期待.........
发表于 2005-6-4 20:08:00 | 显示全部楼层
对了,模拟中断行不行
发表于 2005-6-4 20:56:00 | 显示全部楼层
温乱错了!
只要在初始化屏幕之后调用相应中断就可以了.
SEI不会屏蔽掉INT型的中断,不信可以试试(NC1020)
SEI
LDX #$10
LOOP0:
LDA LABEL-1,X
STA $02BF,X
DEX
BNE LOOP0
INT $8A15
CLI
INT $C008
RTS
照样可以显示.
发表于 2005-6-4 21:04:00 | 显示全部楼层
另外,文曲星的IO端口分布于00~3F,就这么多.所以199(十进制)根本就不是IO端口.
发表于 2005-6-4 22:28:00 | 显示全部楼层
同意楼上!
 楼主| 发表于 2005-6-5 00:04:00 | 显示全部楼层
我是说nc2600的纯io控制键盘,就像reset后不能读取键值(199)一样...
好像很负责,预设密码还要转换成IO(不知道列表法可不可行)
QIQI不是写过如何利用IO读取键盘横竖(就是第几行第几列的)吗..?给些建议吧.嘻嘻...

11808_21050_4681.rar

51 KB, 下载次数: 213

11808_21050_4716.rar

49 KB, 下载次数: 255

11808_21050_4722.rar

50 KB, 下载次数: 223

11808_21050_4723.rar

49 KB, 下载次数: 232

发表于 2005-6-5 01:40:00 | 显示全部楼层
键盘的IO控制有两种方法,一种是QIQI的,另一种是下面的:
LDA #$00
STA $09
LDA #$FF
STA $15
LDA #ColumnNum
;取出下表中第一行的数字,可测试它下面对应的键.也可以是不同列的组合.
STA $09
LDA $08
AND #RowNum
;取出下表中最左列的数字,若该位为一,说明与表中对应行的键有被按下的.
BEQ NotThisKey
┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
│08\09│  01  │  02  │  04  │  08  │  10  │  20  │  40  │  80  │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│01    │      │      │ IrDA │      │      │      │      │      │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│02    │ 时间 │ 测验 │ 行程 │ 英汉 │ 名片 │ 计算 │ 网络 │      │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│04    │  F1  │  F2  │  F3  │  F4  │ 报时 │ 发音 │      │      │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│08    │  o   │  l   │  上  │  下  │  p   │ 输入 │下翻页│  右  │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│10    │  q   │  w   │  e   │  r   │  t   │  y   │  u   │  i   │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│20    │  a   │  s   │  d   │  f   │  g   │  h   │  j   │  k   │
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│40    │  z   │  x   │  c   │  v   │  b   │  n   │  m   │上翻页│
├───┼───┼───┼───┼───┼───┼───┼───┼───┤
│80    │ 求助 │中英数│输入法│ 跳出 │  0   │  .   │ 空格 │  左  │
└───┴───┴───┴───┴───┴───┴───┴───┴───┘

发表于 2005-6-5 01:49:00 | 显示全部楼层
以下是引用Mrzeng在2005-6-5 0:04:36的发言:
好像很负责,预设密码还要转换成IO(不知道列表法可不可行)

转换...可以直接使用查表法.跟据我列出的表和每个键的键值(不包括开机键),很容易做出查表法的程序.
 楼主| 发表于 2005-6-5 08:20:00 | 显示全部楼层
是查表法...打错字了,昨天夜里写了草稿
那按一下键盘就显示一个"*"呢?
 楼主| 发表于 2005-6-5 08:25:00 | 显示全部楼层
以下是引用SAILOR-HB在2005-6-4 20:56:22的发言:

温乱错了!

只要在初始化屏幕之后调用相应中断就可以了.

SEI不会屏蔽掉INT型的中断,不信可以试试(NC1020)

SEI
LDX #$10
LOOP0:
LDA LABEL-1,X
STA $02BF,X
DEX
BNE LOOP0
INT $8A15
CLI
INT $C008
RTS

照样可以显示.


那...刷新屏幕的中断....?

密码的中断我用过..由于不能读键值,所以.....
发表于 2005-6-5 09:51:00 | 显示全部楼层
从我的程序里可以看出,CLI用在了INT $C008之前.因为INT $C008即使在SEI的状态下,也可以正常运行,它会一直等待用户按键,但是,它判断有没有键按下的方法是看表示键值的内存的变化.但这个变化是需要IRQ的支持才会出现的,由于已经SEI了,所以IRQ被屏蔽,无论你按什么键,都不会反映到表示键值的内存中去.所以,在SEI的情况下INT $C008会不响应按键,貌似死机.
发表于 2005-6-5 15:35:00 | 显示全部楼层
嗯~原来SEI可以INT啊~没有试过~不晓得的说~
那么就简单了嘛~我想只要知道了键盘I/O的操作方法~有点汇编能力就可以写出来了~
至于你问的按一下键盘显示一个* 这个不难解决吧?有很多方法
比如你可以在每次按键后都送PASSWORD:_______到字符缓存 然后再判断内存中存储的你输入的密码长度从而覆盖同样长度的*到字符缓存 再调用字符刷新中断就OK了~
还有:HB啊……我叫混乱啊……不是温乱啊……哭…………
发表于 2005-6-5 15:53:00 | 显示全部楼层
哦,对不住哦,打错了,多多包涵~嘿嘿
 楼主| 发表于 2005-6-4 13:21:40 | 显示全部楼层 |阅读模式
怎么通过IO实现Password??

        首先在屏幕显示"Passwords:"

             然后输入,输入中,每输入一次键盘就在屏幕上(Password后)显示一个" * "..

如果匹配,进入程序...

如果错误,返回....

      请问怎么实现?
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-24 00:49 , Processed in 0.014253 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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