新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机汇编语言编程:汽车转向灯控制器

单片机汇编语言编程:汽车转向灯控制器

作者:时间:2016-02-22来源:网络收藏

  按照题目要求,编写了程序,用 PROTEUS 绘出了仿真电路图。

本文引用地址:http://www.eepw.com.cn/article/201602/287211.htm

  ;=============================================

  ;题目:汽车转向灯控制器的编程

  ;1号键(左转向)按下时 实现P3.6闪亮,P0-P2口左流水;

  ;2号键(右转向)按下时 实现P3.7闪亮,P0-P2口右流水;

  ;3号键(刹车键)按下时 实现P0-P2口同时亮;

  ;4号键(紧急状况键) 按下时 实现P3.6和P3.7同时闪亮。

  ;按键按住时,执行上述程序,按键松开后关闭所有灯。

  ;=============================================

  ;按照题目要求,编写了程序,用 PROTEUS 绘出了仿真电路图,运行起来如下所示:

    

 

  ;程序如下:

  L_T BIT 00H ;按键标志位

  R_T BIT 01H

  S_T BIT 02H

  J_J BIT 03H

  SAME EQU 30H;按键缓冲区

  Runw EQU 31H ;31H 32H,共16位数,当做流水灯

  SP_B EQU 33H ;栈底位置

  ;--------------------------------

  ORG 0000H

  SJMP START

  ORG 000BH

  SJMP T0_INT

  ;--------------------------------

  START:

  MOV TMOD, #01H

  MOV TH0, #4CH ;定时

  MOV R3, #5 ;250ms闪烁一次

  SETB TR0

  MOV IE, #82H ;开中断

  MOV SP, #SP_B

  MOV Runw, #255

  MOV Runw + 1, #0

  ;--------------------------------

  M_LOOP:

  MOV A, P1 ;读一次按键

  ANL A, #0FH

  MOV SAME, A ;保存

  MOV R7, #40 ;延时约20ms

  MOV R6, #0

  DJNZ R6, $

  DJNZ R7, $ - 4

  MOV A, P1 ;再读一次按键

  ANL A, #0FH

  CJNE A, SAME, M_LOOP ;两次不等则是抖动

  CPL A

  MOV C, ACC.3 ;保存按键信息

  MOV R_T, C

  MOV C, ACC.2

  MOV J_J, C

  MOV C, ACC.1

  MOV S_T, C

  MOV C, ACC.0

  MOV L_T, C

  SJMP M_LOOP ;继续去读

  ;--------------------------------

  T0_INT:

  MOV TH0, #4CH ;定时

  PUSH ACC

  DJNZ R3, T0_END ;不到5次就退出

  MOV R3, #5

  ;----------------------;以下每隔250ms执行一次

  LEFT:

  JNB L_T, RIGHT

  MOV A, Runw

  RRC A

  MOV Runw, A

  MOV A, Runw + 1

  RRC A

  MOV Runw + 1, A

  MOV A, Runw

  MOV ACC.7, C

  MOV Runw, A

  MOV P2, Runw

  MOV P0, Runw + 1

  SETB P3.7

  CPL P3.6

  JMP T0_END

  RIGHT:

  JNB R_T, STOP

  MOV A, Runw

  RLC A

  MOV Runw, A

  MOV A, Runw + 1

  RLC A

  MOV Runw + 1, A

  MOV A, Runw

  MOV ACC.0, C

  MOV Runw, A

  MOV P2, Runw

  MOV P0, Runw + 1

  CPL P3.7

  SETB P3.6

  JMP T0_END

  STOP:

  JNB S_T, JINJI

  MOV P2, #0

  MOV P0, #0

  SETB P3.7

  SETB P3.6

  JMP T0_END

  JINJI:

  JNB J_J, NOTHING

  MOV P2, #255

  MOV P0, #255

  CPL P3.7

  CPL P3.6

  JMP T0_END

  NOTHING: ;关闭所有的灯

  MOV P2, #255

  MOV P0, #255

  SETB P3.7

  SETB P3.6

  T0_END:

  POP ACC

  RETI

  ;--------------------------------

  END

  ;试验的时候,应该释放了前一个按键,再按下另一个按键,这才能有理想的结果。



关键词: 单片机 汇编语言

评论


相关推荐

技术专区

关闭