用查表方式控制的流水灯程序

2010-05-26 14:14   出处:互联网   编辑:HSZ 我要点评

  区别于前面的跑马灯方式是此程序控制的灯可以随意更改亮灭方式

  只要修改输出表格中的二进制数为相应的输出即使用了亮灭灯的控制

  $MOD51 ;实际的流水灯系统。

  ORG 000 ;程序从0地址开始

  START: MOV DPTR,#TAB ;将DPTR指向编码表位置

  LOOP: CLR A ;清空ACC

  MOVC A,@A+DPTR ;根据ACC的内容取出编码表里的编码'

  CJNE A,#0FFH,SHOW ;若ACC的内容不等于0FFH,则跳至SHOW处执行

  AJMP START ;跳到START处执行

  SHOW: MOV P1,A ;让P1口输出ACC的内容

  ACALL DELAY

  ACALL DELAY

  ACALL DELAY ;调用延时子程序

  INC DPTR ;将DPTR寄存器的内容加15

  AJMP LOOP ;跳到LOOP处执行

  ;延时子程序=====================================================

  DELAY: MOV R5,#2 ;R5寄存器加载2次

  D0: MOV R7,#250 ;R7寄存器加载250次数

  D1: MOV R6,#250 ;R6寄存器加载250次数

  D2: DJNZ R6,D2 ;D2循环执行R6次

  DJNZ R7,D1 ;D1循环执行R7次

  DJNZ R5,D0 ;D0循环执行R5次

  RET ;返回主程序

  TAB: ;流水灯花样可以任意编写

  =====================================================

  DELAY: MOV R5,#2 ;R5寄存器加载2次

  D0: MOV R7,#250 ;R7寄存器加载250次数

  D1: MOV R6,#250 ;R6寄存器加载250次数

  D2: DJNZ R6,D2 ;D2循环执行R6次

  DJNZ R7,D1 ;D1循环执行R7次

  DJNZ R5,D0 ;D0循环执行R5次

  RET ;返回主程序

  TAB: ;流水灯花样可以任意编写

  DB 10010101B

  DB 01101010B

  DB 10100101B

  DB 01010101B8

  DB 10001010B

  DB 01101000B

  DB 10110101B

  DB 01000010B

  DB 10000000B

  DB 01000000B

  DB 00100000B

  DB 00010000B

  DB 00001000B

  DB 00000100B

  DB 00000010B

  DB 00000001B

  DB 00000000B

  DB 11111111B

  DB 11111111B

  DB 11111111B

  DB 11111111B

  DB 11111111B

  DB 00000001B

  DB 00000010B

  DB 00000100B

  DB 00001000B

  DB 00010000B

  DB 00100000B

  DB 01000000B

  DB 10000000B

  DB 11011101B

  DB 11101011B

  DB 11101101B

  DB 11101011B

  DB 11011011B

  DB 10111111B

  DB 01111011B

  DB 10111011B

  DB 11011111B

  DB 11101011B

  DB 10110101B

  DB 11011011B

  DB 01101101B

  DB 0FFH

  END ;主程序结束


用户点评: (共0条)
发表点评