原创 流水灯程序集合

2010-3-28 12:15 4004 5 5 分类: MCU/ 嵌入式

由于本人的电脑坏了,硬盘彻底报废,所以很伤心了一阵。在这里也提醒大家,记得硬盘备份或者把一些重要的资料刻录在光盘中保存,这样就不会出现我这种很无助的状况了。几年下来的,资料全没了,连那些照片都没了,现在真的后悔当初为什么不备份。想对她说,爱你,但是没东西给你。


好了不说闲话了,在这里发布几个年前做过的小程序。流水等实验是大学里最基本的程序,这里集合了一下几个,有c语言的和汇编的。大家可看看不同程序之间的共同点和区别。
;1、广告流水灯程序
ORG 00H
MOV P2,#80H
START:MOV A,#0FFH    ;赋初值
      CLR C
      MOV R2,#8
LOOP:RRC A           ; 带进位右移
     MOV P1,A
     CALL DELAY
     DJNZ R2,LOOP
     MOV R2,#7
LOOP1:RLC A          ;  带进位左移
      MOV P1,A
      CALL DELAY
      DJNZ R2,LOOP1
      JMP START
DELAY:MOV R3,#20     ;   延时0.2秒
D1:   MOV R4,#20
D2:   MOV R5,#248
      DJNZ R5,$
      DJNZ R4,D2
      DJNZ R3,D1
      RET
      END


内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*------------------------------------------------
                    延时子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
 while(--cnt);
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
 P1=0xfe;           //给初始化值 换算成二进制是1111 1110
 while(1)
      {
    delay(30000);//延时程序
    P1<<=1;      //左移一位 该语句等效于 P1=P1<<1
    P1|=0x01;    //最后一位补1,该语句等效于 P1=P1|0x01 符号"|"表示"或"
    if(P1==0x7f) //检测是否移到最左端?"=="表示检测符号2端的值是否相等
          {
     delay(30000);
        P1=0xfe; //重新赋值
          }
      }
}


 


;项目名称:来回流水灯
;硬件环境:AT89S52
;硬件描述:P0口接八个LED
;功能描述:LED流水实验


;*******************************************************


          ORG 0000H
          AJMP START
          ORG 0030H


START:    MOV P0,#0FFH
          MOV A,#0FEH
AAA:      MOV P0,A
          LCALL DELAY
          JNB P1.3,BBB
          RL A
          AJMP AAA 
BBB:      MOV A,#7FH
CCC:      MOV P0,A
          LCALL DELAY
          JNB P1.0,START
          RR A
          AJMP CCC


DELAY:    MOV R7,#250
DL1:      MOV R6,#100
DL2:      MOV R5,#10
          DJNZ R5,$
          DJNZ R6,DL2
          DJNZ R7,DL1
          RET               
    
          END


 


流水灯--基于单片机-移位法
 ORG 0000H
MAIN:
MOV A,#0A0H
D2:MOV P1,A
CALL DELAY
RR A
LJMP D2


DELAY: MOV   R5,#250
    D1: MOV   R6,#250
        DJNZ  R6,$ 
        DJNZ  R5,D1
        RET


END


 


 


       ;查表法广告流水灯
       ORG   00H
       MOV P2,#80H
START:  MOV   DPTR,#TABLE    ; 将表的地址存入数据指针
LOOP:   CLR   A
        MOVC  A,@A+DPTR      ;到数据指针所指的地址取码
        CJNE  A,#01,LOOP1   ; 取出的码是否01H?否则跳到LOOP1
        JMP   START
LOOP1:   MOV   P1,A
        MOV   R3,#20
        CALL  DELAY
        INC   DPTR
        JMP   LOOP
 DELAY: MOV   R4,#20
 D1:    MOV   R5,#248
        DJNZ  R5,$
        DJNZ  R4,D1
        DJNZ  R3,DELAY
        RET
 TABLE: DB    0FEH,0FDH,0FBH,0F7H  ;左移
        DB    0EFH,0DFH,0BFH,7FH
        DB    0FEH,0FDH,0FBH,0F7H  ;左移
        DB    0EFH,0DFH,0BFH,7FH
        DB    7FH,0BFH,0DFH,0EFH    ;右移
        DB    0F7H,0FBH,0FDH,0FEH
        DB    7FH,0BFH,0DFH,0EFH    ;右移
        DB    0F7H,0FBH,0FDH,0FEH
        DB    00H,0FFH,00H,0FFH     ;闪烁
        DB    01H                   ;结束码
        END

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条