单片机编程

有八个开关,前提:第一个是总开关,假如总开关断开,所有开关都没有用,必须要总开关闭合才能下面操作。。。。在总开关闭合的情况下:闭合第二个开关数码管显示数字1,闭合第三个开关数码管显示2,后面第4,5,6,7,8开关闭合分别显示3,4,5,6,7。。假如第2个开关没有闭合的情况下去闭合第三个开关,数码管还是显示1,(总之,前面开关没断开后面开关就没有用)但是假如你闭合第8个开关显示7,你在第八个开关没断开的时候去闭合第7个开关,数码管会显示6,(总之,后面开关没断开不影响前面开关控制数码管)根据这要求编程,能让图上的实现这个功能

(ORG 0000HSTART:SETD P1 LCALL DELAY CLR P LCALL DELAY LJMP STARTDELAY:MOV R3,#2K3: MOV R2,#250K2: MOV R1,#250)要这个格式编程

ORG 0
START:
mov B,#0 ;预设显示的值0=不显示
Loop:
LCALL Disp_B; ;显示函数:显示B的值
mov P3,#0ffh ;拉高输入点,准备读取输入点
mov A,P3 ;读入输入点

mov B,#0 ;预设显示的值=不显示
RR A;//ACC右移1位->CY中
JC Loop ;总开关未闭合,去显示0
;
RR A;//ACC右移1位->CY中
JC Loop ;Key1未闭合,去显示0
mov B,#1 ;Key1闭合了,准备显示1
;
RR A;//ACC右移1位->CY中
JC Loop ;Key2未闭合,去显示1
mov B,#2 ;Key2闭合了,准备显示2
;
RR A;//ACC右移1位->CY中
JC Loop ;Key3未闭合,去显示2
mov B,#3 ;Key3闭合了,准备显示3
....;自己去复制几次
....;
;
RR A;//ACC右移1位->CY中
JC Loop ;Key6未闭合,去显示5
mov B,#6 ;Key6闭合了,准备显示6
;
RR A;//ACC右移1位->CY中
JC Loop ;Key7未闭合,去显示6
mov B,#7 ;Key7闭合了,准备显示7
LJMP Loop ;去显示7
;显示程序----------------
Disp_B:
mov A,B ;B->A
mov dptr,#Disp_ZK;显示的7段字库
add A,DPL
jnc Disp_B1
inc DPH
Disp_B1:
mov DPL,A
;
movc a,@dptr
mov P1,A
ret
Disp_ZK: db 0f0h,0e3h,072h,043h,011h,025h,033h,066h
;对应0~7显示的7段LED图形码,上面的数据是我瞎写的,自己调整
END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-10
好像是个优先级的测试。
相似回答