MCS-51下面这个流程图的原程序???
MCS-51
下面这个流程图的原程序???
主要是怎么比较k0,k1的值:都为0,都为1,一个为0或1,另一个为1或0?
k0,k1分别接着p1.0,p1.1!
k0=k1=1 and k0=k1=0<------k0=? k1=?---->k0=0,k1=1
| | |
| | |
| | |
LED全灭 k0=1,k1=0 L3,L4亮
|
|
L0,L1亮
问题点数:0、回复次数:18Top
1 楼setcdq9801(蓝鸽@我是你.net)回复于 2003-06-04 08:08:51 得分 0
用C还是汇编Top
2 楼Hermit(替地球省氧气,决定每天少呼吸)回复于 2003-06-04 09:24:56 得分 0
思路:
汇编:mov c k0;
jc pro1;
pro2;
我汇编比较烂,记得是先移到C寄存器,然后就可以判断是不是0了。(请老手指正)
C程序: 用 == 就可以解决了。
Top
3 楼wangluyan(我不知道!所以我问!)回复于 2003-06-04 09:26:45 得分 0
用C比较直观些!Top
4 楼angel_rabbit(zj_rabbit)回复于 2003-06-04 12:50:47 得分 0
用汇编!!!Top
5 楼CrazyGentleman(疯狂绅士)回复于 2003-06-05 08:16:07 得分 0
如果想在语句上简单,先用异或指令,再用比较指令,没有问题。
实际运用中,要考虑其他因素的话,难说。。。。。。
Top
6 楼wuchunling(阿玲)回复于 2003-06-05 09:15:30 得分 0
JNB P1.0,KEY0 ;假设为零有效
JNB P1.1,KEY1
KEY0: LCALL DELAY ;延时消抖
KEY1: LCALL DELAY
不太全面,请高手帮忙!!!!Top
7 楼redflag00(子陵)回复于 2003-06-06 00:20:27 得分 0
请语言说明这个流程吧。不太好看。
大体是判断k0,k1两个按键的状态从而控制四个发光二极管亮灭的吧?
再说明一下,给你写出源程序Top
8 楼angel_rabbit(zj_rabbit)回复于 2003-06-06 02:37:49 得分 0
楼上的,你说得很对!!!
这是我们单片机一个实验中,一段程序!我已经看了我们同学的了,他用的这种方法我觉得还 行!程序如下:你看看有没有更好的方法??
-------------------------------------------------
ORG 0000H
MAIN: MOV P1,#3H
MOV A,P1
ANL A,#3H
CJNE A,#1H,PS1 ;〈----- 第一次判断K0是否为1
MOV P1,#0CH
ACALL DELAY
SJMP PS2
PS1: CJNE A,#2H,PS2 ;〈----- 第二次判断K1是否为1
MOV P1,#30H
ACALL DELAY
PS2: MOV P1,#0H
ACALL DELAY
SJMP MAIN
DELAY: MOV R7,#0A3H ;置延时用常数
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2 ;用循环来延时
DJNZ R7,DELAY1
RET
END
------------------------------------------------
顺便问一问,就是下面这种延时程序,R6,R7付怎样的初值,才为延时100ms?
DELAY: MOV R7,#0A3H ;置延时用常数
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2 ;用循环来延时
DJNZ R7,DELAY1
Top
9 楼xybyl(xybyl)回复于 2003-06-06 16:10:08 得分 0
sbit LED12 = P0^0;
sbit LED34 = P0^1;
void main()
{
unsigned char LedState;
while(1)
{
LedState = P1;
switch(LedState & 0x03)
{
case 0:
case 3:LED12 = 0;
LED34 = 0;
break;
case 1:LED12 = 1;
LED34 = 0;
break;
case 2:LED12 = 0;
LED34 = 1;
break;
}
}
}
Top
10 楼angel_rabbit(zj_rabbit)回复于 2003-06-07 11:42:19 得分 0
朋友,用汇编呢?Top
11 楼ldqmoon(ldqmoon)回复于 2003-06-08 10:31:12 得分 0
如果按这为仁兄的程序会出现什么样的情况?
我的思路和他的差不多。
=======================
wuchunling(阿玲) ( ) 信誉:100 2003-06-05 09:15:00 得分:0
JNB P1.0,KEY0 ;假设为零有效
JNB P1.1,KEY1
KEY0: LCALL DELAY ;延时消抖
KEY1: LCALL DELAY
Top
12 楼dds098(dd)回复于 2003-06-08 13:27:11 得分 0
控制延时的时间首先要看你的单片机的频率是多少!
具体的公式很多关于单片机的书上都有说明的!Top
13 楼redflag00(子陵)回复于 2003-06-09 00:23:05 得分 0
有几个问题先搞清楚:
1.k0,k1按下后是0还是1?
2.四个led分别接哪几个管脚?
3.k0按下谁亮谁灭?
k1按下谁亮谁灭?
k0,k1都按下谁亮谁灭?
k0,k1都不按下谁亮谁灭?
至于延时问题,看晶振了。
11.0592的一条指令1.4uS
12的一条指令1uS(建议用它)
以12M晶振来说比较好些
算法明天告诉你。
我的问题你也回答清楚
Top
14 楼redflag00(子陵)回复于 2003-06-09 20:49:35 得分 0
12M晶振
DELAY: MOV R5,#100
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
100*{20*[(2+2*248)+2]+2}=1000.2msTop
15 楼angel_rabbit(zj_rabbit)回复于 2003-06-10 00:59:05 得分 0
有几个问题先搞清楚:
1.k0,k1按下后是0还是1? //是1
2.四个led分别接哪几个管脚? //p1.2--L0 p1.3--L1 p1.4--L3 p1.5--L4
3.k0按下谁亮谁灭? //L0 L1亮
k1按下谁亮谁灭? //L3 L4 亮
k0,k1都按下谁亮谁灭? //全灭
k0,k1都不按下谁亮谁灭?
Top
16 楼angel_rabbit(zj_rabbit)回复于 2003-06-12 00:01:31 得分 0
uping!!11Top
17 楼CrazyGentleman(疯狂绅士)回复于 2003-06-12 00:59:49 得分 0
还没有结贴??Top
18 楼nullisfull(null)回复于 2003-06-12 21:39:14 得分 0
//我学汇编才3天。 我以前不搞这个。 为了讨饭吃。 我改了行。 也来混混。
ORG 0000H
MAIN: MOV P1,#3H
MOV A,P1
ANL A,#3H
CJNE A,#1H,PS1 ;〈----- 判断K0是否为1
MOV P1,#0CH
ACALL DELAY
CJNE A,#1H,MAIN ;〈----- 第二次判断K0是否为1 / 不为1反回。
SJMP PS2
;这里给灯的值。我没时间了。 就这样。
PS1: CJNE A,#2H,PS2 ;〈----- 第二次判断K1是否为1
MOV P1,#30H
ACALL DELAY
PS2: MOV P1,#0H
ACALL DELAY
SJMP MAIN
DELAY: MOV R7,#0A3H ;置延时用常数
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2 ;用循环来延时
DJNZ R7,DELAY1
RET
ENDTop




