请单片机高手帮忙看看这个控制电路怎么用C语言来写程序?急急急!!!在线等~~
】 信号灯控制电路如下图(在附件中)所示,其功能是当按下不同的键时发光二极管有不同的亮灭规律。按1号键LED从左到右依次亮,按2号键从右到左依次亮,按3号键闪烁,按4号键呈流水追逐效果。 解:电路图中P1口分别接了4个开关,每个开关都有相对应的功能,当某一开关闭合时,相应的口线变为低电平,而其他口线依然为高电平,因此,可以用4条JNB指令对开关状态进行检测。如果某一按键按下,则跳转执行其所对应的控制功能。八个发光二极管经74LS04接P2口,主要因单片机的驱动能力较差,故用74LS04来加大驱动能力。P2口输出控制信号控制发光规律。
程序设计流程图在附件里
ORG 0000H
MOV SP, #60H
MOV P2, #00H
MOV P1, #0FH
START: JNB P1.0, A0 ; 如P1.0键按下,就跳至A0
JNB P1.1, A1 ; 如P1.1键按下,就跳至A1
JNB P1.2, A2 ; 如P1.2键按下,就跳至A2
JNB P1.3, A3 ; 如P1.3键按下,就跳至A3
SJMP START
********** 左移 *******************************
A0: MOV DPTR, #TAB ; 左移常数表首地址送DPTR
ACALL DISP
SJMP START
********* 右移 ********************************
A1: MOV DPTR, #TAB1 ; 右移常数表首地址送DPTR
ACALL DISP
SJMP START
********* 闪烁 ********************************
A2: MOV DPTR, #TAB2 ; 闪烁常数表首地址送DPTR
ACALL DISP
SJMP START
******** 流水追逐 *****************************
A3: MOV DPTR, #TAB3 ; 流水追逐常数表首地址送DPTR
ACALL DISP
SJMP START
********* LED显示控制子程序 *****************
功能:根据常数表控制P2口的LED发光
入口:常数表的地址送到DPTR
出口:无
********************************************
DISP: CLR A
MOVC A, @A+DPTR
CJNE A,#0AH,LOOP1
RET
LOOP1: MOV P2,A
MOV R3,#20
ACALL DELAY
INC DPTR
JMP DISP
DELAY: MOV R4,#20
D1: MOV R5,#248
DJNZ R5, $
DJNZ R4, D1
DJNZ R3, DELAY
RET
TAB : DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0AH ; 左移
TAB1: DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH,0AH ; 右移
TAB2: DB 0FFH,00H,0FFH,00H,0FFH,00H,0FFH,00H,0AH ; 闪烁
TAB3: DB 01H,02H,06H,08H,10H,20H,60H,80H,0AH ; 流水追逐
END
以上是汇编代码,但是用C语言怎么写啊?
[[it] 本帖最后由 lavigne927 于 2008-5-25 10:06 编辑 [/it]]