我想在51hei-5单片机开发板上实现如下的功能:
上电后让8个数码管显示右下角的点。按INTO按键时八个数码管全显示1,按TO按键时,第二位显示二,按S4按键时第三位显示三,按S5按键时第四位显示五。问题如下图
我搞了好久百思不得其解啊.现在连编译都通不过
ORG 000H LJMP MAIN ORG 030H main: setb p2.6 ;上电全显示点 mov p0,#080H clr p2.6 SETB P2.7 mov p0,#00H clr p2.7 lcall ys JNB P3.2,F1 ;等于O转到F1 (八位数码管全显示1) JNB P3.4,F2 ;等于O转到F2 (第二位显示2) JNB P3.6,F3 ;等于0转到F3 (第三位显示3) JNB P3.7,F4 ;等于O转到F4 (第四位显示4) LJMP MAIN F1: SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0FEH CLR P2.7 LCALL YS1S SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0FDH CLR P2.7 LCALL YS1S SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0FBH CLR P2.7 LCALL YS1S SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0F7H CLR P2.7 LCALL YS1S SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0F7H CLR P2.7 LCALL YS1S SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0F7H CLR P2.7 LCALL YS1S SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0F7H CLR P2.7 LCALL YS1S SETB P2.6 ;1 MOV P0,#06H CLR P2.6 SETB P2.7 MOV P0,#0F7H CLR P2.7 LCALL YS1S LJMP MAIN F2: SETB P2.6 ;显示2 MOV P0,#05BH CLR P2.6 SETB P2.7 MOV P0,#0FDH CLR P2.7 LCALL YS1S LJMP MAIN F3: SETB P2.6 ;显示3 MOV P0,#04FH CLR P2.6 SETB P2.7 MOV P0,#0FBH CLR P2.7 LCALL YS1S LJMP MAIN F4: SETB P2.6 ;显示4 MOV P0,#066H CLR P2.6 SETB P2.7 MOV P0,#0F7H CLR P2.7 LCALL YS1S LJMP MAIN YS: MOV R7,#0AH ;延时 YS1: MOV R6,#0FFH YS2: DJNZ R6,YS2 DJNZ R7,YS1 RET YS1S:MOV R5,#0FFH YS1S1:LCALL YS DJNZ R5, YS1S1 RET END
JNB是短转移指令,你那F3离他太远了,够不着哦
你上面的 JNB P3.6,F3 指令,转移的范围在-128~+127字节之内,程序编写大了,超出范围是常有的事。
可以在其范围之内,加个“接力点”,再用LJMP这个长转移指令(64KB范围内)转移一次即可。
你只需要修改为:
JNB P3.2,F11 ;等于O转到F11 (八位数码管全显示1)
JNB P3.4,F22 ;等于O转到F22 (第二位显示2)
JNB P3.6,F33 ;等于0转到F33 (第三位显示3)
JNB P3.7,F44 ;等于O转到F44 (第四位显示4)
F11:Ljmp F1
F22:Ljmp F2
F33:Ljmp F3
F44:Ljmp F4
下面我给你加了四行 这个就是接力点,
还有我烧录这个代码到51hei-5板子上以后,发现你这个还有其他的问题,你并没有循环检测按键,只是在开机的时候检测了一次,所以你必须要在开机前就按住按键不动才能实现你上面说的效果,你还要慢慢改
关于转移指令你可以看看这个帖子:
http://zhidao.baidu.com/question/85590549.html
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |