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。