1、单片机作业八课时部分实验一开关状态指示闪烁灯实验目的:1.掌握编译工具keil和单片机模拟器proteus的使用。2.掌握简单位操作指令写法。3.掌握单片机I/O 口的输入输出功能。4.学习延时子程序的编写和使用。实验设备:预装了 keil及proteus的PC机。实验内容:1.在AT89C51单片机的P1.0端口上接一个发光二极管 L1,使L1在不停 地一亮一灭,一亮一灭的时间间隔为 0.2秒。2.监视开关K1 (接在P3.0端口上),用发光二极管L1 (接在单片机P1.0 端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。电路原理图如下图所示:3.AT89C51 单片机的 P
2、1.0- P1.3 接四个发光二极管 L1 - L4, P1.4- P1.7接了四个开关K1 - K4,编程将开关的状态反映到发光二极管上。 (开关闭合,对应的灯亮,开关断开,对应的灯灭)。电路原理图如下图所示:四.实验步骤:1.任务一:使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,观察发光二极管的闪烁情况。2.任务二:使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,合上开关,二极管发光,打开开关,二极管熄 灭。3.任务三:使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,合上开关,对应的二极
3、管发光,打开开关,对 应的二极管熄灭。五.实验要求:1.根据实验任务要求,编写源程序。任务一的代码:ORG 2000HSTART: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYSJMP START END任务三代码:ORG 2200HSTART: MOV A,P1;取开关值;开关对应发光二极管ANL A,#0F0H RR ARR ARR ARR AORL A,#0F0HMOV P1,ASJMP START END2.上机调试程序。六 思考:1.并行输入 /输出接口中 P0、P1、P2、 P3 口各有什么功能?并加以比较对比P0 口不接片外存储器与不扩展I/O
4、口时,可作为准双向I/O 口。接片 外存储器或扩展I/O 口时,P0 口分时复用低8位地址总线和双向数据总线。P1 口可以作为准双向I/O 口使用,另外对于52子系列,P1.0有第二 功能:定时/计数器2的计数脉冲输入端T2; P1.1也有第二功能:定时/计 数器2的外部控制端T2EX。P2 口可以作为准双向I/O 口使用以及高8位地址总线。P3 口可以作为准双向I/O 口,并且每一位都有第二功能。见下表引脚第二功能P3.0RxD:串行口接收数据输入端P3.1TxD:串行口发送数据输出端P3.2INT0:外部中断申请输入端0P3.3INT1:外部中断申请输入端1P3.4T0:外部计数脉冲输入端
5、0P3.5T1:外部计数脉冲输入端1P3.6WR:与外设控制信号输出端P3.7RD:读外设控制信号输出端2.有关端口操作的指令有哪些? 了解这些指令的功能这四个端口均各有一个锁存器(即特殊功能寄存器 P0P3),故可以具 有所有包含直接寻址方式的指令如:数据传送指令 MOV P0 #data, PUSH P0等算术运算指令ADDC A P0等逻辑运算指令ANL A,P0等条件转移指令CJNE A,P0, rel等另外这四个端口可以 按位使用,即每一位均能独立作输入输出用,故 可以使用位操作指令如:位传送指令MOV C P0.1 ;位逻辑操作指令CPL P0.3;位条件转移指 令 JB P0.2
6、,rel 等3.要求任务1中,将延时时间改为1分钟,则改程序将作如何的修改? 由于本题中,设定振荡频率为12MHz,指令周期为1us,而DJNZ指 令为双周期指令,故执行每条该指令需花费2us时间。1分钟为60000000us 故需要执行30000000次DJNZ指令,所以这里可以将代码修改为DELAY: MOV R4,#30D1: MOV R5,#100 涎时子程序,延时60秒D2: MOV R6,#100D3: MOV R7,#100DJNZ R7,$DJNZ R6,D3DJNZ R5,D2DJNZ R4,D1RET实验二 广告灯实验目的:1. 学习 P1 口的使用方法。2.学习延时子程序
7、的设计方法。3.学习移位指令的用法。 实验设备: 预装了 keil 及 proteus 的 PC 机。 实验内容 :1.八个发光二极管 L1L8 分别接在单片机的 P1.0P1.7 接口上,输出 “0” 时,发光二极管亮,开始时 P1.X P1.1 P1.2 P1.3-T P1.7 P1.6-T P1.0亮,重复循环。2. 利用取表的方法,使端口 P1 做单一灯的变化:左移 2 次,右移 2 次, 闪烁 2次(延时的时间 0.2秒)。电路原理图如下图所示:4.实验步骤:1.任务一:使用keil编辑程序,生成hex文件,打开DSN文件,把hex 文件加入到单片机中,观察二极管的闪烁情况是否符合实
8、验要求。2.任务二:使用keil编辑程序,生成hex文件,打开DSN文件,把hex 文件加入到单片机中,观察二极管的闪烁情况是否符合实验要求。5.实验要求:1.根据实验任务要求,编写源程序;任务一的代码:ORG 2000HSTART: MOV R2,#8MOV A,#0FEH ;最开始 L1 亮SETB CLOOP: MOV P1,ALCALL DELAYRLC A ; L2, L8 依次亮DJNZ R2,LOOPMOV R2,#8LOOP1:DELAY:D1:TABLE:MOV DPTR,#TABLECLR AMOVC A,A+DPTRCJNE A,#10H,LOOP ;执行到表中数据为 1
9、0H 时结束JMP STARTMOV P1,AMOV R3,#20LCALL DELAYINC DPTRJMP LOOPMOV R4,#20 ;延时子程序MOV R5,#248DJNZ R5,$DJNZ R4,D1DJNZ R3,DELAYRETDB 0FEH,0FDH,0FBH,0F7H ;按顺序排列码值DB 0EFH,0DFH,0BFH,07FHDB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0
10、FDH,0FEHDB 00H, 0FFH,00H, 0FFHDB 10HEND2.上机调试程序。六 思考:1.修改程序,使发光二极管闪亮时间改变。修改闪亮时间即是将代码中的延时子程序修改,这里修改为 0.1 秒闪亮 1 次,则将延时子程序改为:DELAY: MOV R4,#10D1: MOV R5,#248DJNZ R5,$DJNZ R4,D1DJNZ R3,DELAYRET2.修改程序,使发光二极管闪亮移位方向改变。对于任务一,可以将 RLC A 和 RRC A 的顺序调整,实现发光二极管 自L8L1 L8依次变亮对于任务二,根据如图所示电路,从程序中可以看出发光二极管的移 位方向是自上而下
11、两次,在自下而上两次,最后全亮全灭两次结束。这里 将其修改为自上而下自下而上自上而下自下而上全亮全灭结束将 TABLE 表数据改为:TABLE: DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 00H, 0FFHDB 10HEND试验三报警产生器1.实验目的:掌握利用单片机产生音频信号的方
12、法。2.实验设备:预装了 keil及proteus的PC机。3.实验内容:用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms, 500Hz信号响200ms交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。 55分钟电路原理图如下图所示:使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到 单片机中,运行仿真,报警器产生报警信号,按下 SP1,报警信号停止。五.实验要求:1.根据实验任务要求,编写源程序;ORG 2000HFF BIT P1.5 ;设置频率转换标志位SETB FF ;首先将
13、频率置为1KHzSTART: JB P1.7,START1.要求1KHz信号响200ms, 500Hz信号响100ms,应该如何调整程序?本题中,500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,信号电平每500us变反1次。若要更改程序,达到 1KHz 信号响 200ms, 500Hz 信号响 100ms。只需将程序上半段产生 500Hz 信号的持续时间改为:MOV R2,#100程序下半段产生 1KHz 信号的持续时间改为:MOV R2,#10 DV1 :MOV R1 , #40 DV2: CPL P1.0DJNZ R1,DV2DJNZ R2,DV12.若
14、使两种信号交替有间隔的响,应该如何调整程序?假设间隔为 100 毫秒,则在 FIRST 和 NEXT 之前加入如下程序:MOV R2,#200LOOPO: LCALL DELY500DJNZ R2, LOOP0实验四I/O并行口直接驱动LED显示1.实验目的:1.掌握七段数码管的显示原理。2.掌握通过AT89C51驱动七段数码管的方法。2.实验设备:预装了 keil及proteus的PC机。3.实验内容:利用AT89C51单片机的P0端口的P0.0- P0.7连接到一个共阴数码管的a -h的笔段上,数码管的公共端接地。在数码管上循环显示 0-9数字,时间间 隔0.2秒。四.实验步骤:使用kei
15、l编辑程序,生成hex文件,打开DSN文件,把hex文件加入到 单片机中,运行仿真,数码管循环显示 0-9数字。五.实验要求:1.根据实验任务要求,编写源程序;实验代码为:ORG 2000HSTART:NEXT:MOV R1,#00HMOV A,R1MOV DPTR,#TABLEMOVC A,A+DPTR ;从 0 开始显示MOV P0,ALCALL DELAYINC R1CJNE R1,#10,NEXT ;判断是否显示到 9LJMP STARTDELAY:D2:MOV R5,#20 ;延时子程序MOV R6,#20D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R
16、5,D2RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND2. 上机调试程序。 六 思考:调整程序 ,试让数码管所显示数字递减循环。只需将表TABLE中数据颠倒一下变为从9-0的段选码即可。为:TABLE:DB 6FH,7FH ,07H ,7DH ,6DH,66H,4FH,5BH,06H,3FH实验五 按键识别实验目的:1.了解按键识别的方法。2.掌握一键多功能的原理。实验设备: 预装了 keil 及 proteus 的 PC 机。 实验内容 :1.每按下一次开关SP1,计数值加1,通过AT89C51单片机的P1端口的 P1.0到P1.
17、3显示出其的二进制计数值。2.开关 SP1 接在 P3.7/RD 管脚上,在 AT89C51 单片机的 P1 端口接有四 个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,3.4.实验步骤:1任务一:使用keil编辑程序,生成hex文件,打开DSN文件,把hex 文件加入到单片机中,运行仿真,每次按下开关,计数加一,二极管 都会用二进制形式显示结果。2.任务二:使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,按周实验内容的要求,按下开关, 观察二极管的亮灭是否符合要求。5.实验要求:3.根据实验任务要求,编写源程序;任务一的代码:O
18、RG 2000HSTART:MOV R1,#00H;从0开始计数MOV A,R1CPL AMOV P1,A;送出P1端口由发光二极管显示REL:JNB P3.7,REL;判断SP1是否按下LCALL DELAY;若按下,则延时10ms左右JNB P3.7,RELINC R1MOV A,R1 CPL AMOV P1,AJB P3.7,$SJMP REL DELAY: MOV R6,#20 L1 : MOV R7,#248DJNZ R7,$DJNZ R6,L1RETEND 任务二的代码:FLAG EQU P2.0L1 BIT P1.0L2 BIT P1.1L3 BIT P1.2 L4 BIT P1
19、.3ORG 2000HMOV FLAG,#00H START: JB P3.7,RELLCALL DELAY1JB P3.7,REL INC FLAG MOV A,FLAGCJNE A,#04,RELMOV FLAG,#00HREL: JNB P3.7,$MOV A,FLAGCJNE A,#00H,IS0;计数内容加 1;发光二极管显示;等待 SP1 释放;延时 10ms 子程序;定义标志位;开始时标志位置 0,从 L1 亮起 ;调用延时程序 1 判断是否真的按键 ;每按一次键,二极管移位一次 ;判断是否按到连续按到第五次;按到第 5 次标志位清 0CPL L1 ;按到第一次则执行LCALL
20、DELAYSJMP STARTIS0:CJNE A,#01H,IS1CPL L2;按到第二次则执行LCALL DELAYSJMP STARTIS1:CJNE A,#02H,IS2CPL L3LCALL DELAY SJMP START;按到第三次则执行IS2:CJNE A,#03H,IS3CPL L4LCALL DELAY SJMP START;按到第四次则执行IS3:LJMP START;按到第五次重新开始DELAY1:MOV R6,#20;延时 10 毫秒程序LOOP1:MOV R7,#248DJNZ R7,$DJNZ R6,LOOP1RETDELAY:MOV R5,#20;延时 200
21、毫秒程序LOOP2:LCALL DELAY1DJNZ R5,LOOP2 RETEND4. 上机调试程序。 六 思考:1. 在任务一中,我们做的是加法显示,如果要求是减法显示,应如何调 整程序?减法显示只需将上述程序改为:MOV R1,#0FFHJ J J J J J J JJNB P3.7,REL ;判断 SP1 是否真得按下DEC R1 ;若真按下,计数内容减 12. 在任务二中,如果要求二极管闪烁的顺序颠倒过来,应如何调整程 序?当最开始判断时, CJNE A,#00H,IS0若相等,则 CPL L4F面依次执行CPL L3、CPL L2、CPL L1即可实验六计数器与计时器实验目的:1.
22、学习单片机计数器的使用和编程。2.熟悉计数器中断处理程序的编程。实验设备:预装了 keil及proteus的PC机。实验内容:1.利用AT89C51单片机来制作一个手动计数器,在 AT89C51单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的 P2.0P2.7接一个共阴数码管,作为 00 99计数的个位数显示,用单片机 的P0.0- P0.7接一个共阴数码管,作为 00 99计数的十位数显示。2.在AT89C51单片机的P0和P2端口分别接有两个共阴数码管,P0 口 驱动显示秒时间的十位,而 P2 口驱动显示秒时间的个位。电路原理图如下图所示:四.实验步骤:1任务一:使用ke
23、il编辑程序,生成hex文件,打开DSN文件,把hex 文件加入到单片机中,运行仿真,按照实验要求,按下开关,计数加 一,观察数码管显示数字是否正确。2.任务二:使用keil编辑程序,生成hex文件,打开DSN文件,把hex 文件加入到单片机中,运行仿真,观察数码管是否显示秒表计时,到 达59秒时,是否归零。五 实验要求:1. 根据实验任务要求,编写源程序; 任务一的代码:SP1 BIT P3.7ORG 2000HSTART:MOV R1,#00H ;设初值 0NEXT:MOV A,R1MOV B,#10DIV AB ;得到计数值的十位MOV DPTR,#TABLEMOVC A,A+DPTRM
24、OV P0,AMOV A,B ;得到计数值的个位MOVC A,A+DPTRMOV P2,AWT:JNB SP1,WTWAIT:JB SP1,WAIT ;判断键是否按下LCALL DELY1JB SP1,WAITINC R1 ;计数值加 1MOV A,R1CJNE A,#100,NEXT ;判断是否加到 100LJMP STARTDELY1:MOV R6,#20D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1 RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND任务二的代码:ORG 0START:MOV R0,#00H ;
25、设初值 0NEXT:MOV A,R0MOV B,#10TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND2. 上机调试程序。六 思考:1. 实验电路中只有 2 位数码管,当需要多位数码管时,电路应如何连接? 在这里我们可以 采用动态显示方式 ,将所有位的段选线并接在一个I/O 口上,而利用另一个 I/O 口来选择哪一位显示。这样从段选线 I/O 口 上按位依次分别送显示字符的段选码, 在位选控制口也按相应的次序分别 选通相应的显示位, 选通位显示相应字符, 并保持几毫秒的延时, 未选通 位则不显示字符。 因为人的视觉滞留, 看不出这种变化, 各位显示器能连 续稳定地显示不同的字符。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1