×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-27 发布时间:
|

问题:做了一个小设计,用的是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。 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容