单片机实验2实验报告

时间:2024.3.31

实验二 交通灯程序设计

谢鑫  20100740123

一  实验题目

交通灯控制系统设计

二   实验目的

1、学会用8051单片机开发简单的计算机控制系统;

2、学会用汇编语言和C语言开发系统软件;

3、学会8051单片机开发环境wave或Keil uVision3软件的使用;

4、学会Proteus软件的使用方法,会用Proteus单片机系统进行仿真;

5、学会Protel软件的使用方法,会用Protel绘制电气原理图和印制板图;

6、熟悉七位数码管显示的使用方法;

7、了解交通灯控制系统的基本组成。

三   实验要求

交通灯处在十字路口上。它有红﹑黄﹑绿三种颜色的灯组成。红灯亮时道路上的车辆停止运行;黄灯是一种过渡用的信号灯,当它亮时,表示道路上的红绿色信号灯即将进行转换。下面拿东西南北四个方向来说明。当东西方向允许行车(或者左转)的时候,南北方向就禁止行车,即此时东西方向的绿灯亮红灯灭,而南北方向的绿灯灭红灯亮。反之当南北方向允许行车(或者左转)的时候,东西方向就禁止行车,即此时南北方向的绿灯亮红灯灭,而东西方向的绿灯灭红灯亮。交通灯配置示意图如图1所示。同时当有特殊的情况发生时,能手动控制各个方向的信号灯。设计任务就是将这一电路用单片机来实现具体的控制。

图1  十字路口交通灯配置示意图

设计内容与原理

为了在后面的分析中便于说明,将南北方向允许直行命名为状态1,南北方向允许左转命名为状态2,南北方向行车到东西方向行车的转换阶段命名为状态3,将东西方向允许直行命名为状态4,东西方向允许左转命名为状态5,东西方向行车到南北方向方向行车的转换阶段命名为状态6。

假定直行绿灯点亮的时间为25s,左转绿灯点亮的时间为20s,黄灯点亮的时间为5s,则对方红灯的点亮时间为50秒。黄灯每隔500ms亮一次,之后灭500ms(亮灭一次叫作闪烁一次),一共闪烁5次,持续5s。各个状态之间的变换情况如下:

文本框: 状态1   状态2   状态3   状态4   状态5   状态6   状态1

具体显示周期如下:

图2交通信号灯点亮时间图

设计电路中每个路口的控制信号灯应有四个,即绿灯两个、黄灯、红灯各一个,同时需要七段数码管一个。因此,本电路的设计中应用到绿灯八个,黄灯四个,红灯四个,七段数码管两个(东西方向相同,南北方向相同,为节省空间可省略一对)。

五 电路设计分析

根据前面的设计内容与原理分析,电路设计中应有控制模块(单片机电路)、显示模块(十六个信号灯和两个七段数码管)本电路的设计,将发光二极管作为16个信号灯的材料。电源将采用5V的直流电源。东西两个方向的绿灯是同时亮的,为了简化电路可以让这两个灯接同一个引脚。同理,东西方向的黄灯、红灯也可以分别接同一个引脚。南北方向同上。这样我们可以用一个8位口控制16盏信号灯。

各信号灯均是共阴极接法,LED负极均接地,正极通过保护电阻接单片机P1口。这样单片机引脚的输出一个高电平时,相应的信号灯就被点亮。七段数码管经过8位排阻RESPACK-8连接。

单片机中应包括复位电路和晶振电路。本设计中,采用上电复位形式,由于本系统应用的机器周期为lms,所以晶振选择为12MHz,根据调试电容选择30pF.

图3:复位电路

图4:晶振电路

六 硬件原理图

程序流程

本程序的程序流程图如图所示

心得体会

    这次系统实验历时一个月的时间,在这实验过程里我们巩固了从编程、软件使用到调试的专业知识,逻辑思维和动手能力都得到了很大的提高。

   要解决的主要问题就是程序的设计和仿真,虽然初期在设计和布局、编程时思路比较清晰,但是到了细节处,也出了不少问题,而且很难被检查出来,如在定时器使用方面出了一些错误。但是最后经过不断努力,还是写出来正确的代码。

   通过这次系统实验,对以前学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力,同时提高了对专业的认识及兴趣,对于我们工科生来说,对以后就业很有帮助。

附录  程序代码:

#define    uchar  unsigned char

#define    uint   unsigned int

#include   <reg52.h>

/*****定义控制位**********************/

sbit   EW_LED2=P2^3; //东西数码管个位

sbit   EW_LED1=P2^2; //东西数码管十位

sbit   SN_LED2=P2^1; //南北数码管个位

sbit   SN_LED1=P2^0; //南北数码管十位_

sbit    SN_Yellow=P1^6;//南北黄灯

sbit    EW_Yellow=P1^2;//东西黄灯

sbit    EW_Red=P1^3;//东西红灯

sbit    SN_Red=P1^7;//南北红灯

sbit       Busy_Btton=P3^4;

bit     Flag_SN_Yellow; //南北黄灯标志位

bit     Flag_EW_Yellow;//东西黄灯标志位

char   Time_EW;//东西方向倒计时单元

char   Time_SN;//南北方向倒计时单元

uchar EW=50,SN=25,EWL=20,SNL=20; //程序初始化赋值

uchar EW1=50,SN1=25,EWL1=20,SNL1=20;//用于存放修改值的变量1-9段选码

uchar

code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90  };

uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码

/**********************延时子程序************************/

void   Delay(uchar   a)

    {

        uchar  i;

        i=a;

        while(i--){;}

    }

/*****************显示子函数**************************/

void   Display(void)

    {

        char h,l;

        h=Time_EW/10;

        l=Time_EW%10;

        P0=table[l];

        EW_LED2=1;

        Delay(200);

        EW_LED2=0;

        P0=table[h];

        EW_LED1=1;

        Delay(200);

        EW_LED1=0;

        h=Time_SN/10;

        l=Time_SN%10;

        P0=table[l];

        SN_LED2=1;

        Delay(200);

        SN_LED2=0;

        P0=table[h];

        SN_LED1=1;

        Delay(200);

        SN_LED1=0;

       

}

/**********************T0中断服务程序*******************/

    void timer0(void)interrupt 1 using 1

{

    static uchar count;

    TH0=(65536-50000)/256;

    TL0=(65536-50000)%256;

    count++;

   

    if(count==10)

    {

      if(Flag_SN_Yellow==1) //南北黄灯标志位

      {SN_Yellow=~SN_Yellow;}

      if(Flag_EW_Yellow==1)  //东西黄灯标志位

      {EW_Yellow=~EW_Yellow;}

    }

    if(count==20)

    {

    Time_EW--;

    Time_SN--;

    if(Flag_SN_Yellow==1)//南北黄灯标志位

    {   Time_SN=Time_EW;

        {

        SN_Yellow=~SN_Yellow;}

            }

    if(Flag_EW_Yellow==1)//东西黄灯标志位

    {   Time_EW=Time_SN;

        {

        EW_Yellow=~EW_Yellow;

}

        }

    count=0;

    }

   

}

void   main(void)

{

    IT0=1; //INT0负跳变触发

    TMOD=0x01;//定时器工作于方式1

    TH0=(65536-50000)/256;//定时器赋初值

    TL0=(65536-50000)%256;

    EA=1; //开中断总允许

    ET0=1;//开定时中断

    EX0=1;//开外部INTO中断

    TR0=1;//启动定时

     while(1)

{               /*******状态1**********/

                Flag_EW_Yellow=0;     //EW关黄灯显示信号

                Time_EW=EW;  

                Time_SN=SN;      

                while(Time_SN>0)

                {P1=S[0]; //SN通行,EW红灯

                 Display();}

           

                /*******状态2**********/

                Flag_SN_Yellow=0; //SN关黄灯显示信号

                Time_SN=SNL;

                while(Time_SN>0)

                {P1=S[2];//SN左拐绿灯亮,EW红灯

                 Display();}

              /*******状态3**********/

                P1=0x00;

                while(Time_EW>0)

               {Flag_SN_Yellow=1;    //SN开黄灯信号位

              

                EW_Red=1;      //SN黄灯亮,等待停止信号,EW红灯

                 //SN_LED1=EW_LED1;

                  //SN_LED2=EW_LED2;

               Display();

                }

               /***********赋值**********/

                EW=EW1;

               SN=SN1;

                EWL=EWL1;

                SNL=SNL1;

            /*******状态4**********/

                Flag_SN_Yellow=0;  //SN关黄灯显示信号

                Time_EW=SN;

                Time_SN=EW;

                while(Time_EW>0)

                {P1=S[4]; //EW通行,SN红灯

                 Display();}

               

                /*******状态5**********/

                Flag_EW_Yellow=0;     //EW关黄灯显示信号

                Time_EW=EWL;

                while(Time_EW>0)

                {P1=S[6];//EW左拐绿灯亮,SN红灯

                 Display();}

                /*******状态6**********/

                P1=0X00;

                while(Time_SN>0)

               {Flag_EW_Yellow=1; //EN开黄灯信号位

                SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯  

                Display();}

           

                /***********赋值**********/

                EW=EW1;

                SN=SN1;

                EWL=EWL1;

                SNL=SNL1;

            }

    }


第二篇:单片机实验报告2


单片机原理及应用

实验报告

班级:电子0911 

学号:0720106114 

姓名:征安杰

20##年12月

实验一 P1口输入/输出实验

一、实验目的

1、掌握P1口简单使用,程序的简单编程。

2、学习延时程序的编写和使用。

二、实验内容

P1口做输出口,编写程序,使P1口接的8个发光二极管L1—L8按16进制加一方式点亮发光二极管。

三、实验说明

1P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知:当P1口作为输入口时,必须先对它置高电平,使内部MOS管截止,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

2延时子程序的延时计算问题。对于延时程序

    DELAY :MOV  R6, #00H

    DELAY1:MOV  R7, #80H

    DJNZ  R7, $

     DJNZ  R6, DELAY1

查指令表可知MOV、DJNZ指令均需用两个机器周期,而一个机器周期时间长度为12/ 6.0MHZ,所以该段指令执行时间为:((80+1)×256+1)×2×(12÷6000000)=132.1ms

四、实验步骤

 ①P33用插针连至K1, P10—P17用插针连至L1—L8。

 ②从起始地址0540H开始连续运行程序(输入0540后按EXEC键)。

 ③开关K1每拨动一次,L1—L8发光二极管按16进制方式加一点亮。〖LM〗

五、实验原理图

六、实验程序

ORG 0540h

HA1S:   MOV A,#00H

HA1S1:  JB P3.3,HA1S1

    MOV R2,#20H

    LCALL DELAY

    JB P3.3,HA1S1

HA1S2:  JNB P3.3,HA1S2

    MOV R2,#20H

    LCALL DELAY

    JNB P3.3,HA1S2

    INC A

    PUSH ACC

    CPL A

    MOV P1,A

    POP ACC

    AJMP HA1S1

DELAY:  PUSH 02H

DELAY1:  PUSH 02H

DELAY2: PUSH 02H

DELAY3: DJNZ R2,DELAY3

    POP 02H

    DJNZ R2,DELAY2

    POP 02H

    DJNZ R2,DELAY1

    POP 02H

    DJNZ R2,DELAY

    RET

    END

七、实验感想

通过本实验,我掌握了P1口简单使用,程序的简单编程以及学会了延时程序的编写和使用。实验中,当P1口用作输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据不一定正确。

实验二外部中断实验

一、实验目的

掌握工业顺序控制程序的简单编程,中断的使用。

二、实验内容

8032的P10—P16控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,低电平启动。P3.3为外故障输入模拟开关,P3.3为0时不断告警。P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。

三、实验说明

    实验中用外部中断0,编中断服务程序的关键是:

   1保护进入中断时的状态,并在退出中断之前恢复进入的状态。

   2必须在中断程序中设定是否允许中断重入,即设置EX0位。

一般中断程序进入时应保护PSW、ACC以及中断程序使用但非其专用的寄存器,本实验中未涉及。

四、实验步骤

   ①P3.4连K1,P3.2连K2,P1.0—P1.6分别连到L1—L7,P1.7连SIN(电子音响输入端)。

 ②K1开关拨在上面,K2拨在上面。

 ③用连续方式从起始地址0580H开始运行程序(输入0580后按EXEC键),此时应在等待开工状态。

 ④K1拨至下面(显低电平),各道工序应正常运行。

   ⑤K2拨至下面(低电平),应有声音报警(人为设置故障)。⑥K2拨至上面(高电平),即排除故障,程序应从刚才报警的那道工序继续执行。

五、实验原理图

六、实验程序


   


ORG 0013H

    LJMP HA2S3

    ORG 0580H        

HA2S:   MOV P1,#07FH

    ORL P3,#00H

HA2S1:  JNB P3.4,HA2S1

    ORL IE,#84H

    ORL IP,#04H

    MOV PSW,#00H

    MOV SP,#53H

HA2S2:  MOV P1,#07EH

    ACALL HA2S7

    MOV P1,#07DH

    ACALL HA2S7

    MOV P1,#07BH

    ACALL HA2S7

    MOV P1,#077H

    ACALL HA2S7

    MOV P1,#06FH

    ACALL HA2S7

    MOV P1,#05FH

    ACALL HA2S7

    MOV P1,#03FH

    ACALL HA2S7

    SJMP HA2S2

HA2S3:  MOV B,R2

HA2S4:  MOV P1,#07FH

    MOV 20H,#0A0H

HA2S5:  SETB P1.7

    ACALL HA2S6

    CLR P1.7

    ACALL HA2S6

    DJNZ 20H,HA2S5

    CLR P1.7

    ACALL HA2S6

    JNB P3.2,HA2S4

    MOV R2,B

    RETI

HA2S6:  MOV R2,#06H

    ACALL DELAY

    RET

HA2S7:  MOV R2,#30H

    ACALL DELAY

    RET

DELAY:  PUSH 02H

DELAY1: PUSH 02H

DELAY2: PUSH 02H

DELAY3: DJNZ R2,DELAY3

    POP 02H

    DJNZ R2,DELAY2

    POP 02H

    DJNZ R2,DELAY1

    POP 02H

    DJNZ R2,DELAY

    RET

    END

七、实验感想

通过本实验,我掌握了工业顺序控制程序的简单编程,中断的使用。学会了外部中断技术的基本使用方法,以及学会中断处理程序的编程方法。并按要求修改了程序代码,改变触发方式后也能正常工作。一开始程序中出现错误,在和同学商讨并结合书本后才找出问题所在。


实验三 定时器实验

一、实验目的

    掌握单片机定时器/计数器的工作方式和编程原理。

二、实验内容

8253A的0通道工作在方式3产生方波。

三、实验步骤

    ①用插针把8253的CLK0插孔和分频输出端T2插孔相连。

    ②8253的GATE0插孔和+5V插孔相连。

    ③8253的片选信号8253CS和译码输出端Y4相连。

    ④KBB拨在左边OFF位置。

    ⑤用排线将SIO区的D0—D7连到BUS2区XD0—XD7。

    ⑥在“P.....”状态下,从起始地址08C0H开始连续运行程序,用示波器测8253的0通道输出端OUTO,应有方波产生。

四、实验原理图

五、实验程序

   


ORG 08C0H      

L8253:  MOV DPTR,#0C003H

    MOV A,#36H

    MOVX @DPTR,A

    MOV DPTR,#0C000H

    MOV A,#00H

    MOVX @DPTR,A

    MOV A,#10H

    MOVX @DPTR,A

   


SJMP $

    END


六、实验感想

通过本实验,我掌握单片机定时器/计数器的工作方式和编程原理。本次试验比较简单,通过8253A的0通道工作在方式3产生方波。只有在仿真时出现了一些小问题,我们需要不断发现,总结,运用,掌握一些技巧可以大大提高实验中连接电路的速度。

实验四:串行通信实验

一、实验目的

1掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。

2了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。

二、实验内容

1利用8031单片机串行口,实现双机通信。

   2本实验实现以下功能,将1号实验机键盘上键入的数字、字母显示到2号机的数码管上。

三、实验说明

    1本实验系统中考虑用户可以方便使用串行口实现双机或和上位机通信,系统设计有用户专用串行接口,只要配上用户专用通信电缆线就可以实现和上位机通信,不影响监控系统和上位机的联机工作。J10就是用户专用串行接口,将J10用用户专用通信线连到上位机的串口上。注意不要和上位机系统用串行口冲突。

    2实验时需将1号机8031串行接收信号线P3.0(RXD)连到2号机8031串行口发送信号线P3.1(TXD)。

四、实验步骤

   1.按图连好线路。

    2.在DVCC实验系统处于"P."状态下。

    3.1号机输入四位起始地址0D00后,按EXEC键连续运行程序。

    4.2号机输入四位起始地址0E30后,按EXEC键连续运行程序。

    5.从1号机上的键盘输入数字键,会显示在2号机的数码管上。

五、实验原理图

六、实验程序


;系统晶振是 6.0 MHz

    ORG 0E30H

START:

    MOV SP,#60H

    mov A,#02H

    MOV R0,#79H

    MOV @R0,A

    INC R0

    MOV A,#10H

    MOV @R0,A

    INC R0

    MOV A,#01H

    MOV @R0,A

    INC R0

    MOV A,#03H

    MOV @R0,A

    INC R0

    MOV A,#00H

    MOV @R0,A

    INC R0

    MOV A,#08H

    MOV @R0,A

    MOV A,#7EH

    MOV DPTR,#1FFFH

    MOVX    @DPTR,A

        MOV SCON,#50H   ;串口 方式 1

    MOV TMOD,#20H   ;T1 方式 1

    MOV TL1,#0CCH   ;波特率 9600 的常数

    MOV TH1,#0CCH

    SETB    TR1     ;开中断

    CLR ET1

    CLR ES

WAIT:

    JBC RI,DIS_REC  ;是否接收到数据

    LCALL   DISP        ;

    SJMP    WAIT        ;

DIS_REC:

    MOV A,SBUF      ;读串口接收到的数据

    LCALL   DATAKEY     ;显示输入的数字(0-F)

    DB 79H,7EH

    AJMP    WAIT

DATAKEY:MOV R4,A

    MOV DPTR,#1FFFH

    MOVX A,@DPTR

    MOV R1,A

    MOV A,R4

    MOV @R1,A

    CLR A

    POP 83H

    POP 82H

    MOVC A,@A+DPTR

    INC DPTR

    CJNE A,01H,DATAKEY2

    DEC R1

    CLR A

    MOVC A,@A+DPTR

DATAKEY1:PUSH 82H

     PUSH 83H

     MOV DPTR,#1FFFH

     MOVX @DPTR,A

     POP 83H

     POP 82H

     INC DPTR

     PUSH 82H

     PUSH 83H

     RET

DATAKEY2:DEC R1

     MOV A,R1

     SJMP DATAKEY1

DISP:   SETB 0D4H

    MOV R1,#7EH

    MOV R2,#20H

    MOV R3,#00H

DISP1:

    MOV DPTR,#DATACO

    MOV A,@R1

    MOVC A,@A+DPTR

    MOV DPTR,#0FF22H

    MOVX @DPTR,A

        MOV DPTR,#0FF21H

    MOV A,R2

    MOVX @DPTR,A

        LCALL DELAY

    DEC R1

    CLR C

    MOV A,R2

    RRC A

    MOV R2,A

    JNZ DISP1

    CLR 0D4H

    RET

DELAY:  MOV R7,#03H

DELAY0: MOV R6,#0FFH

DELAY1: DJNZ R6,DELAY1

        DJNZ R7,DELAY0

        RET

 DATACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

    DB 88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H,0DEH

    END

七、实验感想

通过本次实验,我掌握了串行口工作方式的程序设计,掌握单片机通信程序编制方法。并了解了实现串行通信的硬环境,数据格式的协议,数据交换的协议。初步了解到实现两机通信的原理和方式,以及计算机的串行通信中数据位、校验位的关系。

更多相关推荐:
单片机实验报告

单片机实验报告学生姓名学号专业指导教师学院信息与电气工程学院20xx年11月单片机实验报告实验一MCS51指令系统实验数据排序1实验目的熟悉MCS51指令系统掌握程序设计方法加深对内部存储器读写的认识熟悉仿真开...

单片机实验报告

通信与信息工程学院20xx20xx学年第二学期实验报告课程名称单片机原理及应用专业班级学号学生姓名指导教师日期20xx年4月15日1实验一单片机汇编语言程序设计一实验目的1学习MedWin或Keilc51仿真软...

单片机实验报告

题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握Keil软件的基本使用12掌握单片机汇编语言基本编程二实验内容1学习用Keil软件...

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

单片机实验报告

海南大学届单片机实验报告4份论文题目学生姓名学号所在院系专业班级授课教师完成时间蜂鸣器实验实验目的1熟悉实验板中蜂鸣器工作原理掌握汇编编程控制蜂鸣器播放音乐2掌握单片机编程控制蜂鸣器发出不同频率声音的方法3了解...

单片机实验报告

单片机课程设计报告实验五系别物理与电子工程学院年级专业班级学号学生姓名指导教师设计时间常熟理工学院课程设计报告目录1题目22实验要求221实验目的222实验内容23总体设计231硬件设计232软件设计44运行结...

51单片机实验报告

08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位...

单片机实验报告

单片机实验报告实验二并行口输入输出实验循环彩灯控制任务一1实现的功能P1口接8个开关P0口接8个灯每个开关对应一个灯实时读取开关状态开关闭合时灯亮开关断开时灯灭2硬件原理图3流程图4程序ORG0000H程序入口...

单片机实验报告

一实验目的1熟练单片机的结构组成及原理2软硬兼施采用硬件电路的焊接搭建和软件的设计调试下载亲自动手对硬件系统加深了解的同时软件编程也能得心应手3了解如何从硬件和软件上分析问题排除故障二实验内容MCS51MCS5...

单片机最小系统实验报告

单片机原理及应用技术设计课题系别专业学号姓名指导老师课程设计报告20xx年6月单片机最小系统流水灯的设计一单片机简介由于单片机技术在各个领域正得到越来越广泛的应用世界上许多记成电路生产家相继推出各种类型的单片机...

单片机实验报告

单片机原理及应用一实验目的实验报告实验要求二实验电路及汇编源程序程序要加注释三仿真结果或硬件调试结果分析实验一存储器读写一实验目的1掌握寄存器存储器读写等汇编指令2掌握编程软件编辑编译调试等基本操作二实验内容1...

单片机实验报告

单片机实验报告四姓名学号时间周一11-13地点计708指导老师:实验题目C51单片机片上资源开发实验一.实验目的与要求?学习单片机片上资源开发技术?研究用片上资源实现自动控制的方案二:实验环境在KeiluVis…

单片机实验报告(42篇)