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芯片。了解了这些最基础也是最重要的知识,对最基本的单片机加以熟悉,了解其内部构造及各个寄存器的使用方法可以对其他芯片进行类比,其原理都相似,为我们以后的实验打下了夯实的基础。
一、预习要求
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个使能控制信号,从而实现片选。
一、预习要求
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
一、预习要求
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
指导教师签字: 易金聪 成绩:
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.质疑、建议、问题讨论
引脚联系过于复杂,建议使用二合一数码管。
滨江学院微机原理与接口技术综合实验报告题目:简易电子琴设计学号:学生姓名:XXX院系:滨江学院专业:指导教师:二OXX年月日【摘要…
51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机…
08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验…
08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位显…
班级姓名学号单片机实验报告实验一CPU片内外清零1CPU片内RAM清零一实验目的掌握MCS51汇编语言的设计了解单片机的寻址方式以…
福建农林大学计算机与信息学院信息工程类实验报告课程名称:单片机技术姓名:系:电子信息工程系专业:电子信息工程年级:学号:指导教师:…
1福建农林大学计算机与信息学院信息工程类实验报告课程名称姓名系专业年级学号指导教师职称单片机技术詹缓辉电子信息工程系电子信息工程2…
华中科技大学单片机实验报告MCS51系列单片机单片机原理及应用实验根据20xx年电气与电子工程学院单片机实验课程改编专业电气工程及…
实验课程名称自动控制综合实验2》姓名学院自动化学院专业班级学号、班内序号指导教师20##年月单片机部分一、仿真软件的使用以及跑马灯…
单片机实验报告报告人xxx学号20xx211812班号20xx211407指导老师姚燕20xx0615实验一仿真软件的使用以及跑马…
时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。在学习单片机这门课程之前,就早早的听各种任课老师和学长学…