C51单片机实验总结报告

HEFEI  UNIVERSITY

单片机实验报告

系   别       电子信息与电气工程系

专   业                 

班      级                     

学      号        

姓   名              

指导  老师                       

完成  时间                  


实验一  构建单片机最小系统和实验环境熟悉

一、预习要求

1.构建单片机最小系统,熟悉51单片机的结构及编程方法

2.按照程序流程图编写出程序

二、实验目的

1.熟悉星单片机最小系统的组成和工作原理,熟悉Keil C51集成环境软件的使用方法。

2.熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。

三、实验内容

单片机最小系统实验:

1、熟悉单片机最小系统的组成和工作原理,熟悉Keil C51集成环境软件的安装和使用方法。

2、作出单片机最小系统的组成原理图,分析其各构成单元的工作原理。

存储单元数据传输实验

1、熟悉MCS51汇编指令。

2、进行存储单元数据传输实验,编写程序。

3、运行程序,验证译码的正确性。

四、实验原理

1、作出单片机最小系统的组成原理图

2.最小系统版的组成:

时钟电路,复位电路,电源电路。

3.软件编译环境的熟悉

实验中我们使用keilC环境编译程序。其窗口界面如下:

4.测试程序

;将从外部RAM3000H单元开始连续存放的

;50个单字节数据传送到内部RAM30H单元的50个单元中。

ORG 0000H

MOV R0,#32H    ;计数初值50

MOV A,#78H     ;(A)=78H送外部3000H--3050H

MOV DPTR,#3000H    ;外部数据存储器首地址3000H送DPTR

LOOP0:   MOVX @DPTR,A       ;送78H到外部数据存储区3000H

INC DPTR       ;外部数据存储区地址增一

DJNZ R0,LOOP0      ;循环次数减一不为零转LOOP0

SETB P1.2

CLR P1.3

CLR P1.4       ;74HC138输入为100,使CS2=0选中62256

MOV R0,#32H    ;循环次数50送R0

MOV R1,#30H    ;内部数据存储区首址30H送R1

MOV DPTR,#3000H    ;外部数据存储区首址3000H送DPTR

LOOP:    MOVX A,@DPTR       ;读外部数据存储区3000H内容送A

MOV @R1,A      ;累加器A的内容送内部数据存储区30H

INC DPTR       ;外部数据存储区地址增一

INC DPTR       ;内部数据存储区地址增一

INC R1

DJNZ R0,LOOP

SJMP $

END

五、实验仪器、设备

   1、单片机最小系统

   2、Keil C51集成环境软件

六、实验注意事项

1.注意在星研集成环境下如何进行程序调试

     2.注意保护实验箱

七、实验方法及步骤

     1、调试单片机最小系统板。

     2、安装Keil C51集成环境软件。

八、思考题 

1、在单片机最小系统的构建中,应注意哪些因素。

答:1、时钟设计遵循硬件手册的设计规范,一般MCU手册都有,遵循走线最短原则。

2、复位电路要加上上电复位。

4、IO引线要方便外部使用等。

九、实验总结

本次实验是单片机实训的基础,从构建单片机的最小系统,到亲手焊接最小系统板。这这个过程中我们知道了构成一个单片机最小系统的需要时钟电路,复位电路,电源电路还有就是AT89S52芯片。了解了这些最基础也是最重要的知识,对最基本的单片机加以熟悉,了解其内部构造及各个寄存器的使用方法可以对其他芯片进行类比,其原理都相似,为我们以后的实验打下了夯实的基础。


实验二  跑马灯实验及74HC138译码器

一、预习要求

1.熟悉51单片机的结构及编程方法

2.按照程序流程图编写出程序

二、实验目的

1.熟悉集成环境软件或熟悉Keil C51集成环境软件的使用方法。

2.熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。

三、实验内容

跑马灯实验:

1、熟悉集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。

2、照接线图编写程序:使用P1口控制G6区的8个指示灯,循环点亮,瞬间只有一个灯亮。

3、观察实验结果,验证程序是否正确。

74HC138译码器实验:

1、设计74HC138接口电路,编写程序:使用单片机的P1.0、P1.1、P1.2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。

2、运行程序,验证译码的正确性。

四、实验原理  

1、作出单片机最小系统的组成原理图

2、分析单片机最小系统的工作原理

   3、进行存储单元数据传输实验,观察实验结果,验证程序是否正确。                      

五、实验仪器、设备

    1、单片机最小系统。

    2、Keil C51集成环境软件

六、实验注意事项

1.注意在集成环境下如何进行程序调试

     2.注意保护实验箱

七、实验方法及步骤

1、单片机P1.0口控制的跑马灯实验

 (1)程序流程图:

        

(2)软件仿真图:

(3) 实验程序:

ORG 0000H

AJMP START1

ORG 0030H

 START1:

CLR P3.4

SETB P3.3

MOV A,#7FH   ;顺时依次点亮

MOV P1,A

MOV R0,#15

LOOP:

RL A

MOV P1,A

ACALL DELAY2

DEC R0

CJNE R0,#7,LOOP

LOO:        ;逆时依次点亮

RR A

MOV P1,A

ACALL DELAY2

DEC R0

CJNE R0,#0,LOO

MOV R0,#16

LOOP1:      ;顺时间隔点亮

RL A

RL A

MOV P1,A

ACALL DELAY2

DEC R0

CJNE R0,#8,LOOP1

LOO1:       ;逆时间隔点亮

RR A

RR A

MOV P1,A

ACALL DELAY2

DEC R0

CJNE R0,#0,LOO1

AJMP  START1

RET

DELAY2:                             ;0.2s延时

      MOV R7,#04H

DL1:

    MOV R6,#74H

DL2:

    MOV R5,#0D6H

    DJNZ R5,$

    DJNZ R6,DL2

    DJNZ R7,DL1

    NOP

    RET

END

2.利用74LS138译码器的流水灯实验

(1)程序流程图:

 

(2) 74LS138控制流水灯软件仿真图如下:

(3) 74LS138控制流水灯实验程序:

 ORG 0000H

AJMP START1

ORG 0030H

 START2:

SETB P3.4

CLR P3.3

MOV P1,#0

MOV R2,#14

ACALL DELAY2

NEXT:           ;顺时依次点亮

INC P1

ACALL DELAY2

DEC R2

CJNE R2,#7,NEXT

;DJNZ R2,NEXT

NEXT1:         ;逆时依次点亮

DEC P1

ACALL DELAY2

DEC R2

CJNE R2,#0,NEXT1

;DJNZ R2,NEXT1

AJMP START2

RET

DELAY2:                             ;0.2s延时

      MOV R7,#04H

DL1:

    MOV R6,#74H

DL2:

    MOV R5,#0D6H

    DJNZ R5,$

    DJNZ R6,DL2

    DJNZ R7,DL1

    NOP

    RET

END

八、实验总结:

本次实验利用两种控制方式实现了流水灯功能。单片机P1.0口主要是利用基本的数据传输指令实现了流水灯功能,利用的是简单的循环结构;74LS138控制流水灯实验主要是利用138的片选,根据输入不同的A、B、C选中不同的输出端口,进而驱动LED显示。进行本次实验需要知道基本的数据传输指令以及74LS138的真值表,此次实验还是比较简单的。

九、思考题 

1、在单片机系统中,74HC138通常用来产生片选信号,请考虑一下,应如何处理。

答:取三根底地址线,接到138译码器的输入端,则可译码产生8个使能控制信号,从而实现片选。

 

 

 

 

 

 

实验三   8255控制交通灯实验

一、预习要求

1.熟悉51单片机的结构及编程方法

2.按照要求画出流程图及程序

二、实验目的

1、 了解8255芯片的工作原理,熟悉其初始化编程方法以及输入、输出程序设计技巧。学会使用8255并行接口芯片实现各种控制功能,如本实验(控制交通灯)等。

2、 熟悉8255内部结构和与单片机的接口逻辑,熟悉8255芯片的3种工作方式以及控制字格式。

3、尝试自行编写程序,填写实验报告。

三、实验内容

1、设计8255接口电路,编写程序:使用8255的PA0..2、PA5..7控制LED指示灯,实现交通灯功能。

2、连接线路验证8255的功能,熟悉它的使用方法。

四、实验原理

   参考电路原理图

五、实验仪器、设备

   实验室电脑,集成软件

六、实验注意事项

1.注意在集成环境下程序调试的方法

    2.注意保护实验箱

七、实验内容及步骤

实验流程图如下:

1.主程序流程图

             

2.软件仿真图如下:

3.实验总结:

本实验主要实现了基本交通灯工作情况,主要用到并行接口芯片8255A,单片机控制8255A工作,由8255A的PA口驱动LED闪烁, 8255PA口的低三位是南北路口。高三位是东西路口,模拟交通灯工作。一开始初始化时是使交通灯均为红灯,然后再正常运行,本次试验主要是熟悉8055A的PA口操作方式,加了上拉电阻保证在实际操作时电压足够。

4.实验程序如下:

ORG 0000H

AJMP START

ORG 0030H

START:

MOV SP,#60H

MOV DPTR,#0FFFFH

MOV A,#82H        ;A口方式0,输出。B口方式0,输入。C口,输出。

MOVX @DPTR,A

MOV DPTR,#0FCFFH

MOV A,#0EBH       ;东西南北全是红灯。

MOVX @DPTR ,A

ACALL DELAY3

LOOP:

MOV DPTR,#0FCFFH

MOV A,#0EEH      ;东西绿,南北红。

MOVX @DPTR ,A

ACALL DELAY1

MOV  R0,#5

L:

MOV DPTR,#0FCFFH

MOV A,#0EDH      ;东西黄,南北红。

MOVX @DPTR,A

ACALL DELAY

MOV DPTR,#0FCFFH

MOV A,#0EFH     

MOVX @DPTR,A

ACALL DELAY

DEC R0

CJNE  R0,#0,L

MOV DPTR,#0FCFFH

MOV A,#0F3H      ;东西红,南北绿。

MOVX @DPTR,A

ACALL DELAY1

MOV  R0,#5

LL:

MOV DPTR,#0FCFFH

MOV A,#0DBH      ;东西红,南北黄。

MOVX @DPTR,A

ACALL DELAY

MOV DPTR,#0FCFFH

MOV A,#0FBH     

MOVX @DPTR,A

ACALL DELAY

 DEC R0

CJNE  R0,#0,LL

AJMP LOOP

DELAY1:          ;10秒延时。

   MOV R3,#100

DL1:MOV R4,#200

DL2:MOV R5,#248

DJNZ R5,$

DJNZ R4,DL2

DJNZ R3,DL1

RET

DELAY3:          ;2秒延时。

   MOV R3,#40

DL3:MOV R4,#100

DL4:MOV R5,#248

DJNZ R5,$

DJNZ R4,DL4

DJNZ R3,DL3

   RET

DELAY:   ;0.5S

    MOV R7,#17H

DL5:

    MOV R6,#98H

DL0:

    MOV R5,#46H

    DJNZ R5,$

    DJNZ R6,DL0

    DJNZ R7,DL5

    RET

         END

八、思考题

1、如何对8255的PC口进行位操作?

答:写入8255A控制字,即置位复位控制字,即D7为标志位,必须为零,D6,D5,D4为任意值,D3,D2,D1组合为为选择,D0=1为置位,D0=0为复位。所以有

MOV A,#00000011H        ;D7=0,PC0口置1。  

MOV DPTR,#008CH

MOVX @DPTR,A

 

 

 

 

 

实验四   8253方波实验

一、预习要求

1.熟悉51单片机的结构及编程方法

2.按照要求画出流程图及程序

二、实验目的

了解8253的内部结构、工作原理;了解8253与单片机的接口逻辑;熟悉8253的控制寄存器和初始化编程方法,熟悉8253的6种工作模式。

三、实验内容

1、设计接口电路,编写程序:使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。

2、连接线路,验证8253的功能,熟悉它的使用方法。

四、实验原理

参考电路原理图如下:

五、实验仪器、设备

   实验室电脑,集成软件及STAR ES598实验仪

六、实验注意事项

1.注意在集成环境下程序调试的方法

    2.注意保护实验箱

七、实验方法及步骤

1、设计接口电路并分析工作原理。

2、测试实验结果:红蓝灯交替点亮。

1.实验流程图如下:

      


1)主程序流程图

2)软件仿真图如下:

 

                                                                                              

 


                                        

3)实验程序如下:

ORG 0000H

AJMP START

ORG 0030H

START:MOV SP,#60H

 MOV DPTR,#0FFFFH

 MOV A,#35H      ;通道0控制字,先写低字节,后高字节,方式2,BCD计数。    

MOVX @DPTR,A

MOV DPTR,#0FC00H

MOV A,#00H

MOVX @DPTR ,A

MOV A,#01H

MOVX @DPTR,A

MOV DPTR,#0FFFFH

MOV A,#77H     ;通道1控制字,先写低字节,后高字节,方式3,BCD计数。

MOVX @DPTR,A

 MOV DPTR,#0FDFFH

MOV A,#00H

MOVX @DPTR,A

MOV A,#04H

MOVX @DPTR,A  

S:

SETB P1.4

ACALL DELAY5

CLR P1.4

ACALL DELAY5

AJMP  S

DELAY5:   ;10US

    MOV R6,#01H

DL9:

    MOV R5,#02H

    DJNZ R5,$

    DJNZ R6,DL9

    RET

         END

八、实验总结:

此次实验主要是利用8253的计数功能实现对一秒的倒计时,期间选用的是通道0与通道1,对一秒的实现采取的是两个通道的级联,这个以前在8086中学习过,通道0加2MHZ时钟信号,通道0工作在方式2,赋计数初值N0=5000,从OUT0端可得到序列负脉冲,其频率为2MHZ/5000=400HZ,再将信号连到CLK1输入端,并使通道1工作在方式3.为了使OUT1通道输出周期为1s,应取时间常数N1=400HZ/1HZ=400.所以此次实验并没有采取中断。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  实验五  继电器控制实验

一、预习要求

1.了解继电器的原理及应用

2.认真预习本节实验内容,尝试自行编写程序。

二、实验目的

掌握使用继电器控制外设的基本方法和编程。

三、实验内容

继电器控制:

1、预备知识

自动化控制设备中,存在一个电子与电气电路的互连问题,一方面,电子电路需要控制电气电路的执行元件,如:电动机、电磁铁、电灯等;一方面又要为电子电路提供良好的电隔离,以保护电子电路和人身安全,减少干扰源。继电器就起这个桥梁作用。

2、实验过程:设计接口电路,通过继电器使LED灯亮。

四、实验原理

参考电路原理图如下:

                  (继电器控制原理图)

七、实验步骤

继电器控制:

1、设计接口电路,分析工作原理。

2、编写并运行程序,利用拨动开关控制LED灯的亮灭。

1.实验流程图如下:

               

2.实验电路图

3实验程序

ORG 0000H

AJMP START

ORG 0030H

START:MOV SP,#60H

CLR  P2.4

KEYSCAN:

JB P2.5,KEYSCAN   ;不断扫描键是否按下

 START1:

CPL P2.4

AJMP KEYSCAN

DELAY4:          ;2秒延时。

MOV R3,#40

DL5:MOV R4,#100

DL6:MOV R5,#248

DJNZ R5,$

DJNZ R4,DL6

DJNZ R3,DL5

RET

END

八、实验心得

本次实验做的是通过单片机继电器的吸合从而达到控制的效果,效果通过LED的明亮来显示,一开始继电器的实验的完成时比较坎坷的,通过按键控制时总是没有反应,检查线路后发现并不是硬件的问题,改写程序后终于实现了操作,但是还有不足之处,就是在通过按键选择实验项目后无法跳出该运行程序,必须通过复位才能实现,这需要我们进一步改进。

附录:实物图片

 

第二篇:单片机实验总结报告

1

福建农林大学计算机与信息学院

信息工程类

实验报告

2013 年  10  月 28   日


实验项目列表

福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名:             学号:                  实验课程:  单片机技术  

实验室号:_____田C513__        实验时间:  10.26        

指导教师签字:      易金聪                 成绩:                 

实验一  Keil C51 和Proteus 软件的使用

1.实验目的和要求

    1)熟悉Keil C51软件界面,以及编辑、编译、运行程序的步骤;

2)熟悉Proteus软件界面,掌握用Proteus画仿真图的方法。

3)掌握电子电路的设计与仿真调试的方法。

2.实验原理

1)Keil C51软件使用

在Keil C51集成开发环境下,建立一个工程并编辑以下源程序,熟悉Keil C51集成开发环境下各种菜单、命令的使用。

#include "reg51.h"

#define uchar unsigned char

#define uint unsigned int

sbit in=P3^0;

sbit out=P1^0;

void main(void)

{ while(1)

{ in=1;

if(in= =0)out=0;

else

out=1;

     }

}

2)Protues软件使用

下图为利用单片机、1个开关和1个发光二极管,构成一个简单的开关检测系统的仿真电路图。单片机P3.0引脚接按钮开关,P1.0引脚接发光二极管的阴极。当开关闭合时,发光二极管亮;开关打开时,发光二极管灭;按钮开关与发光二极管没有任何电气上的联系。利用Protues仿真软件画出仿真电路图,并进行电气规则检查。

3)Proteus仿真

电路图绘制完毕后,加载“.hex”文件到电路图中的单片机内进行仿真,观察运行结果。注意系统时钟频率的设置

3.主要仪器设备(实验用的软硬件环境)

安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

  1)Keil C51软件使用

(1)建立用户文件夹

(2)建立工程

(3)建立文件并编码。输入以下源程序,并保存在项目所在的目录中

(4)把文件加入工程中

(5)编译工程。编译时观察在界面下方的“Build”页中的到编译错误信息和使用的系统资源情况等。

(6)调试。利用常用调试命令,如复位、运行、暂停、单步、单步跳过、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令进行调试,观察并分析调试结果。

(7)目标代码文件的生成。运行生成相应的.HEX文件。

2)proteus电路设计

(1)建立新文件

(2)设定绘图纸大小

(3)选取元器件并添加到对象选择窗口中

(4)放置、调整元器件位置

(5)放置电源、地(终端)

(6)电路图布线调

(7)电气检测

(8)电路图存盘。

3)Keil C与Proteus连接仿真调试

在Keil C中编译输出*.HEX文件,右键选中工作区中单片机芯片,左键单击打开属性对话框,在弹出的选择文件对话框中选择相应的*.HEX文件。通过运行控制按钮控制程序的执行,观察K1闭合和打开时的程序运行过程。

5.实验内容及实验数据记录

  每当按下K时,LED灯就会发光。

6.实验数据处理与分析

 每当按下K时,in(p3.0)I/O口就会变为低电平,该信号使得CPU给out(p3.0)I/O口发送低电平,使得LED灯发亮。

7.质疑、建议、问题讨论

   1、建议增加延迟函数,因为轻触按键按下的时间短,LED亮的时间就会很短,或者直接换成自锁开关。

   2、建议增加一个判断按键抖动的函数,防止非实验因素。

福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名:      学号:              实验课程:  单片机技术  

实验室号:______田C513_       实验时间:  10.26        

指导教师签字:        易金聪                     成绩:                 

 实验二     单片机I/O接口应用实验—流水灯

1.实验目的和要求

    1)进一步掌握单片机仿真软件的使用方法。

2)掌握单片机最小系统的构成。

3)掌握单片机I/O口的使用方法,如何控制I/O口来驱动LED发光二极管。

4)熟悉C51程序编程和调试方法。

2.实验原理  

利用AT89C51单片机控制8个发光二极管按照要求实现以下各个功能:

(1)点亮板子上的第一个灯D0。

(2)点亮D0、D2、D4、D6灯,与D1、D3、D5、D7灯交替闪烁。

(3)按顺序循环移动点亮。

3.主要仪器设备(实验用的软硬件环境)

安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

1)利用Proteus软件设计以下电路图。

2)源程序设计

分析设计要求,根据任务要求,绘制源程序流程图,然后使用Keil C进行源程序文件的设计与调试,观察并分析程序调试结果。

 3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行流水灯的仿真运行,观察运行结果

代码

(1)

#include<reg52.h>

void main()

{P1=0xfd;(1111 1101)

}

(2)

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

void delay( );

void main( )

{    while(1)

   {   P1=0xaa;(1010 1010)

       delay();

       P1=0x55;(0101 0101)

       delay();  

    }

}

void delay()

{  uint x,y;

   for(x=100;x>0;x--)

       for(y=600;y>0;y--)

 ;

}

(3)

#include<reg52.h>

#include<intrins.h>//此处使用的头文件包含了移位函数_crol_

void delay( )

{  unsigned char i,j;

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

    for(j=0;j<255;j++);

}

void main()

{  P1=0xfe;(1111 1110)

  while(1)

  {    P1=_crol_(P1,1);

   delay();

  }

}

5.实验内容及实验数据记录

    第一个实验使得D1保持常亮;第二个实验的现象为:奇数位数码管D1,D3,D5,D7与偶数位的数码管D0,D2,D4,D6交替发亮。第三个实验现象为:从D0开始向高位跑马灯式的亮。

6.实验数据处理与分析

    (1)

#include<reg52.h>

void main()

{P1=0xfe

}

(2)

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

void delay( );void main( )

{    while(1)

   {   P1=0xaa;      delay();

       P1=0x55;

       delay();       }

}

void delay()//延时程序

{  uint x,y;

   for(x=100;x>0;x--)

       for(y=600;y>0;y--); 

}

(3)

#include<reg52.h>

#include<intrins.h>//此处使用的头文件包含了移位函数_crol_

void delay( ){  unsigned char i,j;

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

    for(j=0;j<255;j++);

}//由于延时函数写在main函数之前,所以不必向上面的程序对延时进行声明

void main()

{  P1=0xfe;//P1=11111110,低电平二极管发光

  while(1)

  {    P1=_crol_(P1,1);  delay();//调用延时程序

  }

}

7.质疑、建议、问题讨论

  

  延时参数的选定是个比较麻烦的事,要不断的实时调试才能找到一个好的延时参数。

 福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名:    实验室号:___田C513____        实验时间:     10.26         

指导教师签字:        易金聪                     成绩:                 

           实验三 中断优先级实验

1.实验目的和要求

  

1)掌握单片机系统中断嵌套及中断优先级的原理和使用方法。

2)掌握中断处理程序的编写方法

2.实验原理

(1)在单片机的P1口上接有8只LED,单片机主程序控制P1口发光二极管进行同亮同灭的闪烁显示,按钮K0接至P3.2/INT0*引脚,按钮K1接至P3.3/INT1*引脚。

(2)当只单击K0按钮时,一个黑灯(8个发光二极管只有一个熄灭,其余为亮)由下向上流水显示一次,然后P1口的发光二极管进行同亮同灭的闪烁显示;当只单击K1按钮时,一个亮灯(8个发光二极管只有一个为亮,其余为暗)由下向上流水显示一次,然后然后P1口的发光二极管进行同亮同灭的闪烁显示;如果先单击K0按钮再单击K1按钮,一个黑灯由下向上流水显示一次后,才能再一个亮灯由下向上流水显示一次,然后再回到8个灯同亮同灭的闪烁显示状态;如果先单击K1按钮后,一个亮灯由下向上流水显示,在亮灯显示没有到达D0显示时,此时再单击K0按钮,则一个黑灯由下向上流水显示,表明执行了外中断0的高优先级中断。一个黑灯向上流水显示完毕时,再执行一个亮灯到D0显示完毕的外中断0中断程序,从而说明高优先级的外部中断0能够把低优先级的外中断1的中断服务程序打断。

3.主要仪器设备(实验用的软硬件环境)

  安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

  

1)利用Proteus软件设计以下电路图。

2)源程序设计

分析设计要去,根据任务要求,绘制源程序流程图,然后使用Keil C51进行源程序文件的设计与调试,观察并分析程序调试结果。

  3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行仿真运行,观察当K0、K1分别按下再松开时的LED显示情况;观察先单击K1按钮后,在亮灯显示没有到达D0显示时,此时再单击K0按钮时的LED显示情况。

5.实验内容及实验数据记录

参考源程序代码如下:

#include<reg52.h>

//近似10ms的延时函数

//注意,理论上使用"for(i=100;i>=0;i--)"类型的循环结构,多数情况下汇编效率要略高于"for(i=0;i>=100;i++)"。

//但由于有时候会软件冲突,Proteus仿真时,使用"for(i=100;i>=0;i--)"类型将会仿真出错。

//因此这里使用"for(i=0;i>=100;i++)"。但在硬件试验下建议使用"for(i=100;i>=0;i--)"。

void delay_10ms(unsigned char delay_ms_num)

{  unsigned int i,j,k;

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

    for(j=0;j<=100;j++)

     for(k=0;k>=100;k++);

}

//中断初始化函数

void tx_init()

{  EA=1;

  PX0=1;(IP=0x01;)//中断优先级设置,打开INIT0口。

  EX0=1;(IE=0x81;)//中断允许设置。

  IT0=1;(SCON=0x01;)//中断请求标志设置。

  EX1=1;

  IT1=1;

}

void main()

{  tx_init();

  P1=0x00;

  while(1)

  { delay_10ms(100);

   P1=~P1;

  }

}

void tx0_func( ) interrupt 0

{  unsigned char i;

  //C51语言中调用循环移位不便,且有时候会与Proteus有冲突,故采用查表实现循环移位。

  unsigned char code table0[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

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

  {    P1=table0[i];

   delay_10ms(255);

   delay_10ms(255);

  }

  P1=0xff;//完成中断后灯全部熄灭

}

void tx1_func()interrupt 2

{  unsigned char i;

  unsigned char code table2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

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

  { P1=table2[i];

   delay_10ms(255);

   delay_10ms(255);

  }

  P1=0x00;//完成中断后灯全部点亮

}

 

6.实验数据处理与分析

   实验现象为:开始两个按键都不按下时,LED灯为交替闪烁,当按下只单击K0按钮时,一个黑灯(8个发光二极管只有一个熄灭,其余为亮)由下向上流水显示一次,然后P1口的发光二极管进行同亮同灭的闪烁显示;当只单击K1按钮时,一个亮灯(8个发光二极管只有一个为亮,其余为暗)由下向上流水显示一次,然后然后P1口的发光二极管进行同亮同灭的闪烁显示;如果先单击K0按钮再单击K1按钮,一个黑灯由下向上流水显示一次后,才能再一个亮灯由下向上流水显示一次,然后再回到8个灯同亮同灭的闪烁显示状态;如果先单击K1按钮后,一个亮灯由下向上流水显示,在亮灯显示没有到达D0显示时,此时再单击K0按钮,则一个黑灯由下向上流水显示

7.质疑、建议、问题讨论

建议增加按键抖动时的判断函数,防止系统误差;建议最好使用白色的LED,这样实验现象会比较明显。


福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名:           学号:                     实验课程:  单片机技术  

实验室号:_____田C513__        实验时间:  10.26      

指导教师签字:        易金聪                     成绩:                 

实验四   60秒倒计时时钟实验

1.实验目的和要求

  

1)掌握单片机定时器中断的使用。

2)了解定时器/计数器各工作模式的区别。

3)掌握定时器/计数器定时模式的使用及编程。

2.实验原理

   利用单片机的定时器/计数器实现60秒倒计时实验,采用两只数码管从59开始静态显示倒计时的秒值,当显示为00时,再从59开始显示倒计时。

3.主要仪器设备(实验用的软硬件环境)

 安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

  

1)利用Proteus软件设计以下电路图。其中,带公共端的共阳极七段绿色数码管为:7SEG-COM-AN-GRN,四输入译码器为:74LS47,电容、电解电容为:CAP、CAP-ELEC。电路采用两片74LS47 BCD-7段数码管译码器/驱动器,即用于将BCD码转化为数码管的显示数字。

2)源程序设计

分析设计要去,根据任务要求,绘制源程序流程图,然后使用Keil C进行源程序文件的设计与调试,观察并分析程序调试结果。

3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行仿真运行,观察七段数码管的显示。

4、参考源程序

#include<reg52.h>

unsigned char second,timer;

void t1_init( )

{ TMOD=0x10;

  IE=0x88;

  TH1=0x3c;

  TL1=0xb0;

  TR1=1;

}

void main()

{  t1_init();

  second=59;

  timer=0;

  while(1);

}

void t1_func( )  interrupt 3

{  TH1=0x3c;

  TL1=0xb0;

  if(timer<20)

  { timer=timer+1;

    }

  else if(timer==20)

  {   timer=0;

    if(second==0)

    { second=59;

      }

    else

    {  second=second-1;

      }

  }

  P2=second/10;

  P3=second%10;

}

5.实验内容及实验数据记录

 利用单片机的定时器/计数器实现60秒倒计时实验,采用两只数码管从59开始静态显示倒计时的秒值,当显示为00时,再从59开始显示倒计时。

6.实验数据处理与分析

#include<reg52.h>

unsigned char second,timer;

void t1_init( )

{ TMOD=0x10;

  IE=0x88;

  TH1=0x3c;

  TL1=0xb0;

  TR1=1;

}

void main()

{  t1_init();

  second=59;

  timer=0;

  while(1);

}

void t1_func( )  interrupt 3

{  TH1=0x3c;

  TL1=0xb0;

  if(timer<20)

  { timer=timer+1;

    }

  else if(timer==20)

  {   timer=0;

    if(second==0)

    { second=59;

      }

    else

    {  second=second-1;

      }

  }

  P2=second/10;

  P3=second%10;

}

7.质疑、建议、问题讨论

  引脚占用过多,建议采用LED二合一式的。

    福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程    年级:   20##级 

姓名:      学号:    实验课程:  单片机技术  

实验室号: 田c513          实验设备号:        实验时间:  10.26 

指导教师签字:        易金聪                     成绩:              

实验五  4×4矩阵键盘按键识别实验

1.实验目的和要求

 

1)理解掌握矩阵键盘扫描的工作原理。

2)掌握矩阵键盘与单片机接口的编程方法。

2.实验原理

  

利用4×4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管显示键盘按下键的键号。当某个键按下时,可将相应按键值(十进制)在两位数码管上显示出来。

3.主要仪器设备(实验用的软硬件环境)

  安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

1)利用Proteus软件设计以下电路图。其中,带公共端的共阳极七段绿色数码管为:7SEG-COM-AN-GRN,四输入译码器为:74LS47,电容、电解电容为:CAP、CAP-ELEC。电路采用两片74LS47 BCD-7段数码管译码器/驱动器,即用于将BCD码转化为数码管的显示数字。P2口和P3口的低四位通过74LS47与数码管相连;P1口的低四位与键盘的行线相连接,P1口的高四位与键盘的列线相连接。

2)源程序设计

分析设计要去,根据任务要求,绘制源程序流程图,然后使用Keil C进行源程序文件的设计与调试,观察并分析程序调试结果。

3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行仿真运行,分别按下各个键盘观察七段数码管的显示。

5.实验内容及实验数据记录

 

6.实验数据处理与分析

  #include<reg51.h>

void delay_5ms()

{  unsigned char i,j;

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

    for(j=0;j<=200;j++);

}

unsigned char key_scan()

{  unsigned char key_temp0,key_temp1;

  unsigned char key_num=0;

  P1=0x0f;

  key_temp0=P1;

  if(key_temp0!=0x0f)

  { delay_5ms();

   key_temp0=P1;

   if(key_temp0!=0x0f)

   {  P1=0xf0;

     key_temp1=P1;

     if(key_temp0==0x0e)

     {

       switch(key_temp1)

       { case 0xe0: key_num=4;break;

         case 0xd0: key_num=3;break;

         case 0xb0: key_num=2;break;

         case 0x70: key_num=1;break;

         default: key_num=0;break;

       }

     }

     else if(key_temp0==0x0d)

     {

      switch(key_temp1)

       { case 0xe0: key_num=8;break;

         case 0xd0: key_num=7;break;

         case 0xb0: key_num=6;break;

         case 0x70: key_num=5;break;

         default: key_num=0;break;

       }

         }

7.质疑、建议、问题讨论

  引脚联系过于复杂,建议使用二合一数码管。

相关推荐