51单片机对两位 BCD拨盘 的读出程序

问题:做了一个小设计,用的是AT89C2051,其中P1口接两位BCD指拨开关,P3.2接了一个开关,P3.3接了一个继电器。
两位BCD指拨开关的具体接法是公共端接P1.1和P1.2口,8421分别接在P1.3~P1.6口。
我想通过开关控制继电器开合。具体要求是:按开关的次数由BCD开关的十位来决定,即BCD上显示的是数字3,则按3次P3.2所接的开关,继电器才开始动作,显示5,则按5次继电器才动作,以此类推;而继电器开合时间由BCD开关的个位控制,如果BCD上显示的是数字3,则继电器开或合3分钟,是5则开或合5分钟。
不知道如何读入的P1口值并分开成两部分,请哪位前辈高手帮忙写个程序,让我学习学习。在此万分感谢。
悬赏分:50 - 解决时间:2009-9-12 14:27
;============================
最佳答案:
利用两个BCD指拨开关,设定了按键次数和延时时间(分钟数);按键输入、继电器输出。
很简单,楼主写的非常清楚。
BCD指拨开关(又称为拨盘、拨码开关),其输出是按照8421形式,但是它有个公共端,输入高电平的时候,输出的8421码是高电平有效。
;----------------------------
;读入BCD(8421)拨码开关:
    SETB P1.1      ;屏蔽一组
    CLR  P1.0      ;P1.0所连接的拨盘有效
    MOV  A, P1     ;读入,低有效
    CPL  A         ;有效值变高
    RR   A
    RR   A
    ANL  A, #0FH   ;留下低四位
    MOV  R7, A     ;存好
    SETB P1.0      ;屏蔽另一组
    CLR  P1.1      ;P1.1所连接的拨盘有效
    MOV  A,   P1   ;读入,低有效
    CPL  A         ;有效值变高
    RR   A
    RR   A
    ANL  A, #0FH   ;留下低四位
    MOV  R6, A     ;存好
;这样,就将两组BCD码,存到了R6和R7。
;----------------------------
回答者: 做而论道 - 五级   2009-9-12 09:03
提问者对于答案的评价:谢谢做而论道,接下来我会试着编写我的小设计,如果再有不懂的,再向您请教!谢谢!!
原题网址:http://zhidao.baidu.com/question/116536682.html
;============================
后记:该网友后来来信,说明了他的设计已经获得成功。
;============================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值