单片机跑马灯实验

实验一、输入输出实验

实验目的:

1、体验单片机的程序编写和运行过程

2、掌握汇编语言的设计编译和运行

实验内容:

用P0端口作输入,P1端口做输出。程序循环从P0端口读入数据,从P1端口输出。输出用LED灯显示。

实验步骤和方法:

1、      搭电路。输入端口的6个口接开关接口,输出6个接口接LED灯。

2、      编写程序

3、      调试程序

实验要求:

1、先用proteus软件搭建电路,编写程序作仿真。

2、在软件里验证好程序再上实验平台验证


I/O实验程序:

        ORG  0000H

MAIN:  MOV  P0,#0FFH

LOOP:  MOV  A,P0    

        MOV  P1,A  

        LJMP  LOOP 

END


实验二、跑马灯

实验目的:

1、掌握单片机的输出

2、掌握子程序的调用方法

3、掌握定时的设置方法

实验内容:

8个LED灯轮流点亮,点亮间隔为1秒。

定时方法采用子程序调用,延时子程序已经编写好。

实验步骤和方法:

1、搭电路。P1作输出端口,接LED灯。

2、编写程序

3、调试程序

实验要求:

1、先用proteus软件搭建电路,编写程序作仿真。

2、在软件里验证好程序再上实验平台验证。

附:延时子程序

DELAY:       MOV     R3,#20         ;延时0.2s

D1: MOV     R4,#20

D2: MOV     R5,#248

       DJNZ    R5,$

       DJNZ    R4,D2

       DJNZ    R3,D1

       RET      


跑马灯 延时子程序

       ORG   00H

        JMP   MAIN

       ORG   30H

MAIN:

       MOV   A,#0FFH

        CLR   C

       MOV   R2,#08H     ;循环八次

LOOP: 

       RLC   A           ;带进位左移

       MOV   P2,A

       MOV   R7,#05H

LOOP1:

      CALL   DELAY

      DJNZ   R7,LOOP1

      DJNZ   R2,LOOP      ;反复循环

       JMP   MAIN

DELAY:                    ;延时0.2s子程序

      MOV   R3,#20  

D1:   MOV   R4,#20

D2:   MOV   R5,#248

     DJNZ   R5,$

     DJNZ   R4,D2

     DJNZ   R3,D1

      RET

END
          实验三、跑马灯

实验目的:

1、掌握单片机的输出

2、掌握定时器中断和查询的使用方法

实验内容:

8个LED灯轮流点亮,点亮间隔为1秒。

定时方法采用8051定时器,分别使用查询和中断编写两个程序。

实验步骤和方法:

1、搭电路。P1作输出端口,接LED灯。

2、编写程序

3、调试程序

实验要求:

1、先用proteus软件搭建电路,编写程序作仿真。

2、在软件里验证好程序再上实验平台验证。

下面的亮灯顺序12 …… 7812 ……

跑马灯 中断程序

    ORG  0000H

    LJMP  MAIN

    ORG  000BH

    LJMP  T0_INT

    ORG  0050H

MAIN:

    MOV  TMOD, #01       ;令T0定时方式1 

    MOV  TH0, #3CH

    MOV  TL0, #0B0H      ;50ms@12MHz

    SETB  TR0             ;启动T0

    MOV  IE,  #82H       ;允许中断

    MOV  R7,  #20

    MOV  A,   #7FH

    MOV  P2,  A

M_LOOP:                  ;主程序, 空循环

    SJMP  M_LOOP

T0_INT:                  ;50ms执行一次

    MOV  TL0, #0B0H

    MOV  TH0, #3CH

   DJNZ  R7, T0_END      ;中断20次?

   MOV  R7,  #20        ;才到1s

     RR  A

   MOV  P2,  A

T0_END:

   RETI

END

跑马灯 查询程序

    ORG  0000H

    LJMP  MAIN

ORG  0050H

MAIN:

    MOV  TMOD, #01       ;令T0定时方式1    

    MOV  TH0, #3CH

    MOV  TL0, #0B0H      ;50ms@12MHz

    SETB  TR0             ;启动T0 

    MOV  R7,  #20

    MOV  A,   #7FH

    MOV  P2,  A

M_LOOP:

    JNB  TF0, M_LOOP     ;T0没有溢出,就在此循环不止 

    CLR  TF0

   MOV  TL0, #0B0H

   MOV  TH0, #3CH

   DJNZ  R7, M_LOOP      ;溢出20次?

   MOV  R7,  #20        ;才到1s

     RR   A

   MOV  P2,  A

   SJMP  M_LOOP

END

下面的亮灯顺序12 …… 787 …… 2 12 ……

    ORG  0000H

   LJMP  MAIN

    ORG  000BH

   LJMP  T0_INT

    ORG  0050H

MAIN:

    MOV  TMOD, #01        

    MOV  TH0, #3CH

    MOV  TL0, #0B0H     

   SETB  TR0             

    MOV  IE,  #82H      

    MOV  R7,  #20

    MOV  R2,  #07H

    MOV  R0,  #00H

    MOV  A,   #0FEH

    MOV  P2,  A

    SJMP  $

T0_INT:              

    MOV  TL0, #0B0H

    MOV  TH0, #3CH

   DJNZ  R7, T0_END     

    MOV  R7,  #20

   CJNE  R0,  #0, LOOP

     RL  A

    MOV  P2,  A

   DJNZ  R2,  T0_END

    MOV  R2,  #07H

    MOV  R0,  #01H

   AJMP  T0_END

LOOP:

     RR  A

    MOV  P2,  A

   DJNZ  R2,  T0_END

    MOV  R2,  #07H

    MOV  R0,  #00H

T0_END:

   RETI

END

    ORG  0000H

   LJMP  MAIN

    ORG  0050H

MAIN:

    MOV  TMOD, #01H       

    MOV  TH0, #3CH

    MOV  TL0, #0B0H      

   SETB  TR0              

    MOV  R7,  #20

    MOV  R2,  #07H

    MOV  R0,  #00H   

    MOV  A,   #0FEH

    MOV  P2,  A

M_LOOP:

    JNB  TF0, M_LOOP      

    CLR  TF0

    MOV  TL0, #0B0H

    MOV  TH0, #3CH

   DJNZ  R7, M_LOOP      

    MOV  R7,  #20

   CJNE  R0,  #00H,LOOP

     RL  A

    MOV  P2,  A

   DJNZ  R2,  M_LOOP

    MOV  R2,  #07H

    MOV  R0,  #01H

   SJMP  M_LOOP

LOOP:          

    RR   A

    MOV  P2,  A

   DJNZ  R2,  M_LOOP

    MOV  R2,  #07H

    MOV  R0,  #00H

   SJMP  M_LOOP

END


附录一、实验报告封面与格式

目录

实验一:xxxxxxxxxxxxxxxxxxxxxxxxx

实验二:xxxxxxxxxxxxxxxxxxxxxxxxx

每次实验包含如下内容

一、            实验目的和要求

1、xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2、xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

………………………………………………

二、            实验内容描述

………………………………………………

三、            程序文档说明与程序源代码

四、            实验结果

 

第二篇:(原创)51单片机C语言程序设计--速学教程实例(入门篇)之流水灯(跑马灯)

/******************************************************************//*名称:流水灯(跑马灯)演示程序*//*作者:苏涛*//*时间:2011-01-11*//*单位:安徽建筑工业学院电子与信息工程学院*//*07级电子信息工程专业二班*//******************************************************************/#include<reg52.h>//头文件调用,写程序时都要加上

#include<intrins.h>//cror以及crol函数被此头文件包含,需要加上#defineuintunsignedint//宏定义,为了后面定义变量书写简便#defineucharunsignedchar

/******************************************************************//*名称:延时函数*//*功能:C语言中常用的for循环延时方法*//*延时长短可以通过变量初值来改变*//******************************************************************/voiddelay(void)

{

ucharm,n,s;

for(m=10;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

/******************************************************************//*名称:主函数*//*功能:利用循环左移函数以及循环右移函数*//*对P1端口进行操作,低电平灯亮*//******************************************************************/voidmain(void)

{

uchari,mm;

while(1)

{

mm=0xfe;

P1=mm;

delay();

for(i=0;i<3;i++)

{mm=_crol_(mm,1);P1=mm;delay();}

for(i=0;i<3;i++)

{mm=_cror_(mm,1);P1=mm;delay();}

for(i=0;i<4;i++)

{mm=_cror_(mm,1);P1=mm;delay();}

for(i=0;i<4;i++)

{mm=_crol_(mm,1);P1=mm;delay();}for(i=0;i<15;i++)

{mm=_crol_(mm,1);P1=mm;delay();}for(i=0;i<15;i++)

{mm=_cror_(mm,1);P1=mm;delay();}for(i=0;i<8;i++)

{mm=_crol_(mm,2);P1=mm;delay();}for(i=0;i<8;i++)

{mm=_cror_(mm,2);P1=mm;delay();}P1=0x00;

delay();

P1=0xff;

delay();

P1=0x00;

delay();

P1=0xff;

delay();

}

}

相关推荐