51单片机实验案例2018.3
- 格式:docx
- 大小:1.74 MB
- 文档页数:31
单片机实验实验一:开发环境的应用(1)将数据存储器的40H-4FH的内容复制成00H-0FH,并将40H-4FH 的内容整体复制到外部数据存储器的1050H-105FH.(2)P1口接八只二极管,使二极管逐个循环点亮ORG 0000HAJMP STARTORG 0100HSTART:MOV A,#00HMOV R0,#40HLOOP:MOV @R0,AINC AINC R0CJNE A,#10H,LOOPSECOND:MOV DPTR,#1050HMOV R1,#40HCOPY:MOV A,@R1MOVX @DPTR,AINC DPTRINC R1CJNE R1,#50H,COPYSJMP $END实验二:外部中断(1)用单脉冲信号申请中断,在中断服务程序中对输出信号进行翻转(可通过P1.0接一二极管观察)ORG 0000HLJMP STARTORG 0003HLJMP INTORG 0100HSTART:SETB EX0SETB PX0SETB IT0SETB EASJMP $INT:CPL P1.0RETIEND(2)用单脉冲信号申请中断,要求对中断进行累加计数,并将计数结果显示在二极管上ORG 0000HLJMP STARTORG 0003HLJMP INTORG 0100HSTART:MOV A,#00HMOV P1,ASETB EX0SETB PX0SETB IT0SETB EASJMP $INT:MOV P1,AINC ARETIEND实验三:定时器实验(1)用定时器1的方式1定时,P1.0节发光二极管,使二极管每秒闪烁五次ORG 0000HLJMP MAINORG 001BHLJMP INTORG 0100HMAIN:MOV TMOD,#10HMOV TH1,#3CHMOV TL1,#0B0H ;50ms × 2 = 100msMOV R2,#2SETB EASETB ET1SETB TR1SJMP $INT:DJNZ R2,NEXTCPL P1.0MOV R2,#2NEXT:MOV TH1,#3CHMOV TL1,#0B0HSETB TR1RETIEND(2)用定时器1的方式2计数,T1引脚接单脉冲,用P1口接二极管显示计数。
51单片机p1口转弯灯实验实验报告实验 P1口转弯灯实验一、实验内容P1.0 接开关5V,右转弯灯闪亮,P1.1接开关5V时左转弯灯闪亮,P1.0,P1.1同时接5V或接地时,转弯灯均不闪亮。
二、实验步骤P1.0 接K1,P1.1接K2,P1.4,P1.7接L1、L4、L7、L10,连续运行本程序,应看到转弯灯正确闪亮,在用单步方式调试本程序时需修改延时子程序,(例可把延时程序第一个字节改成返回指令22H),以便观察。
三、实验原理图, 实验程序框图:, 实验接线图:四(实验程序清单ORG 0000HLJMP PX00ORG 0C30HPX00: MOV P1,#0FFH ;初始化PX03: MOV A,P1MOV B,AANL A,#03HCJNE A,#01H,PX01 ;满足只是P1.0为高条件? JB 00H,PX04 ;闪烁标志位CLR P1.4CLR P1.5 ;开右灯SETB P1.6SETB P1.7 ;关左灯MOV R2,#20HLCALL DELY ;延时SETB 00H ;置标志位LJMP PX03 ;继续查找状态PX04: SETB P1.4SETB P1.5SETB P1.6 ;关灯SETB P1.7MOV R2,#20HLCALL DELY ;延时CLR 00H ;清标志位AJMP PX03 ;继续查找状态PX01: CJNE A,#02H,PX02 ;满足只是P1.1为高条件吗? JB 01H,PX05 ;判标志位SETB P1.4SETB P1.5 ;开左灯CLR P1.6CLR P1.7 ;关右灯MOV R2,#20HLCALL DELY ;延时SETB 01H ;置标志位LJMP PX03 ;继续查找PX05: SETB P1.4SETB P1.5SETB P1.6 ;关灯SETB P1.7MOV R2,#20HLCALL DELY ;延时CLR 01H ;清标志位LJMP PX03 ;继续查找状态PX02: SETB P1.4SETB P1.5SETB P1.6 ;关灯SETB P1.7LJMP PX03 ;继续DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DELYRETEND五、实验总结1、通过实验进一步了解P1口的使用,学习汇编语言编程方法及调试技巧。
微机原理及单片机应用实
验
实验报告
实验P1亮灯
一、实验内容
P1口输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
二、实验步骤
P1.0~P1.7用插针连至L1~L8,运行程序后,观察发光二极管闪亮移位情况。
三、实验原理图
实验程序框图:
实验接线图:
四.实验程序清单
ORG 0000H
LJMP SE18
ORG 0790H
SE18: MOV P1,#0FFH ;送P1口
LO34: MOV A,#0FEH ;L1发光二极管点亮LO33: MOV P1,A
LCALL SE19 ;延时
RL A ;左移位
SJMP LO33 ;循环
ORG 07A0H
SE19: MOV R6,#0A0H
LO36: MOV R7,#0FFH
LO35: DJNZ R7,LO35
DJNZ R6,LO36 ;延时
RET
END
五、实验总结
1、通过实验我们熟悉了51单片机的仿真开发系统,熟悉了编译连接的过程。
2、通过实验了解了P1口的工作原理,通过程序编写调试使LED灯循环点亮。
1.闪烁灯1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#20 2个 2D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498DJNZ R6,D1 2个2×20=4010002因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void) {while(1){L1=0;delay02s();L1=1;delay02s();}2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==单片机实验报告 (1000字)单片机实验报告实验二并行口输入输出实验——循环彩灯控制任务一1. 实现的功能:P1 口接 8 个开关,P0 口接 8 个灯,每个开关对应一个灯,实时读取开关状态,开关闭合时,灯亮。
开关断开时,灯灭。
2. 硬件原理图:3. 流程图:4. 程序:ORG 0000H //程序入口AJMP MAIN //跳转到主程序ORG 0040H //主程序初始地址MAIN: MOV P1,#0FFH //将P1口设置成输入状态MOV P0,P1 //将P1口输入的状态传输给P0口输出AJMP MAIN //返回主程序,循环执行主程序,保证实时 END //结束任务二1.实现的功能:用 5 个开关 K0-K4,控制 P2 口所接 8 个灯的循环,各开关的功能要求如下:(1)K1,K2 分别选择灯的四种闪动方式;(2)K3 用于控制灯的循环方式(顺时针或逆时针);(3)K4 用于选择灯的两种循环速度(4)K0 用于引发外部中断,在外部中断子程序中,读取通过 K1-K4 所设定的循环彩灯的工作方式,并按所设定的工作方式控制彩灯运行。
2.硬件原理图:3.流程图:4.程序:ORGLJMPORGLJMPORGMAIN: MOVSETBSETBSETBMOVJBJB 0000H MAIN 0003H PINT0 0100H SP,#40H EA EX0 IT0 P1,#0FFH P1.0,MP1.1,M2 //外部中断0入口 //设置栈底 //打开中断允许位 //打开外部中断0允许位 // //将P1口设置成输入状态 //判断P1.0(K1)和P1.1(K2)状态选择闪动方式 //M1: MOVAJMPM2: MOVAJMPM: JBM3: MOV AJMPM4: MOV NEXT1: MOV MOVMOVMOVNEXT2: JB L: MOVRLMOVAJMPR: MOVRRMOVNEXT3: JB LCALLS2: LCALL SJMPORGPINT0: JB JBMO1: MOVAJMPMO2: MOVAJMPMO: JBMO3: MOVAJMPMO4: MOVNEXT4: MOVMOVMOVMOVRETIDELAY: MOVLOOP1: MOVLOOP2: MOVLOOP3: NOP P2,#01H NEXT1 P2,#03H NEXT1 P1.1,M4 P2,#07H NEXT1 P2,#0FH C,P1.2 PSW.2,C C,P1.3 PSW.6,C PSW.2,R A,P2 A P2,A NEXT3 A,P2 A P2,A PSW.6,S2 DELAY DELAY NEXT2 0200H P1.0,MO P1.1,MO2 P2,#01H NEXT4P2,#03H NEXT4 P1.1,MO4 P2,#07H NEXT4 P2,#0FH C,P1.2 PSW.2,C C,P1.3 PSW.6,CR5,#05H R6,#64H R7,#0FFH //闪动方式1,1个灯循环移动 // //闪动方式2,2个灯循环移动 // // //闪动方式3,3个灯循环移动 // //闪动方式4,4个灯循环移动 // //将P1.2(K3)的状态送给PSW.2 // //将P1.3(K4)的状态送给PSW.6 //判断PSW.2(K3)状态选择循环方向 // // // // // // // //判断开关PSW.6(K4)状态选择闪动速度 // // //循环执行闪动程序 //中断程序 //判断P1.0(K1)和P1.1(K2)状态选择闪动方式// //闪动方式1,1个灯循环移动 // //闪动方式2,2个灯循环移动 // // //闪动方式3,3个灯循环移动// //闪动方式4,4个灯循环移动 // //将P1.2(K3)的状态送给PSW.2 // //将P1.3(K4)的状态送给PSW.6 //返回主程序 //延时程序,延时0.5sNOP DJNZ DJNZ DJNZ RET END R7,LOOP3 R6,LOOP2 R5,LOOP1 //返回实验三七段LED数码管控制实验1.实现的功能:实验采用 4 位一体的数码管,用 P1 口通过驱动芯片控制段码输出信号线,P0 口通过驱动芯片控制位选线,自主选择驱动芯片,设计实现电路,并实现以下功能:(1)当开关 K0 接低电平时,第一位依次显示 0~F,然后第二位、第三位、第四位,再循环回第一位。
51单片机实验报告
根据所提供的信息,我可以为您提供一个基本的51单片机实验报告的样例。
以下是一个可能的实验报告结构:
实验名称:51单片机的基本使用
实验目的:掌握51单片机的基本使用方法和功能。
实验器材:51单片机开发板、USB接口线、计算机、电源。
实验步骤:
1. 连接电源,将开发板与计算机连接。
2. 打开软件IDE,新建一个工程。
3. 在工程中编写代码,实现将LED灯进行亮灭交替的功能。
4. 将编写好的代码下载到51单片机开发板中。
5. 检查电路连接是否正确,确保没有问题。
6. 启动51单片机开发板,观察LED灯的亮灭情况。
7. 记录实验结果。
8. 关闭开发板和计算机。
实验结果:
通过编写的代码,成功地实现了LED灯的亮灭交替功能。
LED灯每隔一段时间亮起,然后又灭掉,不断循环。
实验分析:
实验结果表明,51单片机因其高性价比和广泛应用领域,可以使用简单的代码实现一些基本功能。
在这个实验中,我们使
用了51单片机的GPIO口控制LED灯的亮灭,通过不断循环的方式实现了交替闪烁的效果。
实验总结:
通过这次实验,我了解了51单片机的基本使用方法,学会了如何编写简单的代码来控制外部设备。
这对于我以后的学习和应用起到了很好的基础作用。
51单片机实验报告一、引言51单片机是一种广泛应用于嵌入式系统开发的微控制器芯片。
本实验旨在通过对51单片机的实验研究,加深对该芯片的理解和应用。
二、实验一:LED灯闪烁控制本实验通过编写程序,控制51单片机上的LED灯以特定的频率闪烁。
为了实现这个目标,我们首先需要了解51单片机的引脚布局,确定LED灯的连接方式。
然后,通过编写相应的汇编程序,控制引脚的电平变化,从而实现LED灯的闪烁。
三、实验二:数码管显示数码管是一种常见的输出设备,通过控制引脚的输出来显示特定的数字。
本实验中,我们通过编写程序,实现通过51单片机控制数码管的显示。
通过对数码管的驱动原理和编程的学习,我们可以灵活地控制数码管的显示内容和频率。
四、实验三:蜂鸣器发声蜂鸣器是一种常见的声音输出设备,通过控制引脚的输出来产生特定的声音。
本实验中,我们通过编写程序,实现通过51单片机控制蜂鸣器的发声。
通过学习蜂鸣器的驱动原理和编程,我们可以根据需要产生不同频率和节奏的声音。
五、实验四:温湿度检测温湿度检测是一种常见的环境监测需求。
本实验中,我们通过引入温湿度传感器,实现通过51单片机获取环境的温度和湿度信息。
通过编写程序和读取传感器的数据,我们可以实时监测环境的温湿度,并进行相应的控制和反馈。
六、实验五:红外遥控红外遥控是一种常见的无线通信方式,通过发送和接收红外信号来实现远程控制。
本实验中,我们通过引入红外发射和接收模块,实现通过51单片机进行红外遥控。
通过编写相应的程序,设置红外遥控的编码和解码方式,我们可以实现对外部设备的遥控操作。
七、实验六:定时器应用定时器是51单片机中的重要模块,它可以实现定时和计数等功能。
本实验中,我们通过学习定时器的工作原理和编程,实现通过51单片机进行定时和计数的应用。
通过编写相应的程序和设置定时器的参数,我们可以实现不同的定时和计数功能,满足各种需要。
八、实验七:串口通信串口通信是一种常见的数据通信方式,通过串口接口发送和接收数据。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==51单片机实验指导书篇一:51单片机实验指导书软件实验部分浙江求是科教设备有限公司实验一Keil C51软件的使用Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。
下面介绍Keil C51软件的使用方法进入 Keil C51 后,屏幕如下图所示。
几秒钟后出现编辑界。
启动Keil C51时的屏幕进入Keil C51后的编辑界面简单程序的调试1.建立一个新工程单击Project菜单,在弹出的下拉菜单中选中New Project选项2.然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51,如下图所示,然后点击保存。
3.这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定。
4.完成上一步骤后,屏幕如下图所示5.在下图中单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。
注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。
然后,单击“保存”按钮。
6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单篇二:51单片机实验指导书-标准版1目录一、PIO口基础控制类实验(个) ____________________________________41.1 实验任务______________________________________________________________ 41.2 实验电路______________________________________________________________ 41.3 实验步骤______________________________________________________________ 51.4 程序流程图_____________________________________________________________ 51.5 C 语言源程序___________________________________________________________ 61.6 知识点________________________________________________________________ 6 实验二: LED 流水灯 _________________________________________________ 72.1 实验任务______________________________________________________________ 72.2实验电路_______________________________________________________________ 82.3 实验步骤______________________________________________________________ 82.4 程序流程图_____________________________________________________________ 82.5 C 语言源程序_________________________________________________________ 92.6 知识点_______________________________________________________________ 10 实验三:蜂鸣器控制 _______________________________________________ 163.1 实验任务_____________________________________________________________ 163.2 实验电路_____________________________________________________________ 163.3 实验步骤_____________________________________________________________ 163.4程序流程图____________________________________________________________ 163.5 C语言源程序__________________________________________________________ 173.6 知识点_______________________________________________________________ 18 实验四数码管静态显示 _____________________________________________ 184.1 实验任务_____________________________________________________________ 184.2 实验电路_____________________________________________________________ 194.3 实验步骤_____________________________________________________________ 194.4 程序设计_____________________________________________________________ 194.5 程序流程图____________________________________________________________ 204.6 C 语言源程序__________________________________________________________ 204.6 知识点_______________________________________________________________ 22 实验五数码管动态显示 _____________________________________________ 235.1 实验任务_____________________________________________________________ 235.2 实验电路_____________________________________________________________ 245.3 实验步骤_____________________________________________________________ 245.4 程序设计_____________________________________________________________ 245.5 程序流程图____________________________________________________________ 255.6 C 语言源程序__________________________________________________________ 255.6 数码管动态扫描原理简介________________________________________________ 26 实验六独立按键识别 _______________________________________________ 276.2 实验电路_____________________________________________________________ 276.3 实验步骤_____________________________________________________________ 28。
51单片机流水灯实验报告竭诚为您提供优质文档/双击可除51单片机流水灯实验报告篇一:51单片机流水灯实验报告51单片机流水灯试验一、实验目的1.了解51单片机的引脚结构。
2.根据所学汇编语言编写代码实现LeD灯的流水功能。
3.利用开发板下载hex文件后验证功能。
二、实验器材个人电脑,80c51单片机,开发板三、实验原理单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LeD灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的p2端口,对8个LeD灯进行控制,要实现逐个亮灯即将p2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。
使用rl或rra实现位的转换。
A寄存器的位经过rra之后转换如下所示:然后将A寄存器转换一次便送给p2即moVp2,A便将转换后的数送到了p2口,不断循环下去,便实现了逐位置一操作。
四、实验电路图五、通过仿真实验正确性代码如下:oRg0moVA,#00000001bLoop:moVp2,ARLAAcALLDeLAYsJmpLoopDeLAY:moVR1,#255DeL2:moVR2,#250DeL1:DJnZR2,DeL1DJnZR1,DeL2ReTend实验结果:六、实验总结这次试验我通过proteus仿真实现对流水灯功能的实现。
受益匪浅,对80c51的功能和结构有了深层次的了解,我深刻的明白,要想完全了解c51还有一定距离,但我会一如既往的同困难作斗争。
在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写好程序的却总出错,不知道什么原因,原来没有生成hex文件。
这些错误令我明白以后在试验中要步步细心,避免出错。
篇二:实验(:51单片机流水灯实验报告)一51单片机流水灯实验实验报告“流水灯”实验报告一、实验目的1.了解单片机I/o口的工作原理。
2.掌握51单片机的汇编指令。
3.熟悉汇编程序开发,调试以及仿真环境。
二、实验内容通过汇编指令对单片机I/o进行编程(本实验使用p0口),以控制八个发光二极管以一定顺序亮灭。
51单片机实验报告51单片机是一种广泛应用于控制领域的微型处理器。
本文将介绍我所进行的两个基础实验,包括实验目的、实验内容、实验原理和实验结果。
实验一——点亮LED灯实验目的:了解51单片机的基本接口和编程方法;学会使用单片机的开发工具和调试器;掌握51单片机控制LED灯的方法。
实验内容:将LED灯连接至51单片机的P1.0引脚,并进行控制。
编写程序,使得LED灯能稳定地点亮。
实验原理:单片机可通过其IO口控制外部设备,使用高低电平来控制LED灯的开关。
P1.0是51单片机的一个输出端口,可通过赋予其电平状态从而控制LED的点灯与熄灭。
当单片机输出高电平时,LED灯会点亮,否则会熄灭。
实验结果:经过编写程序和调试后,成功实现了LED灯的点亮和熄灭。
按下按键即可改变LED的状态。
实验二——数码管计数器实验目的:了解51单片机的数字口和中断响应机制;掌握编写定时器中断程序的方法;学会使用键盘进行输入和外接数码管进行输出。
实验内容:通过对8位数码管控制台的编程,实现对数字的控制,使用定时器中断实现计数器功能,加深对51单片机中断响应机制的理解。
实验原理:单片机中断请求源包括外部中断源、定时器/计数器中断源以及串口中断源。
本次实验使用定时器中断,可实现一定时间间隔内数字的加减;使用键盘进行输入,采用P3口中断请求源实现按键响应,输出则通过数码管接口外设实现。
实验结果:通过定时器计数器、中断响应和数码管接口外设,成功实现一组数字的计数。
按下按键即可进行数字的加减,并通过数码管显示出来。
结语:本文所述实验为51单片机的基础操作,相信可以为读者提供实用的参考和帮助,帮助大家更加深入地理解51单片机的基础知识和使用方法。
实验3 定时器实验——循环彩灯一、实验目的1)学习8031内部计数器的使用和编程方法2)进一步掌握中断处理程序的编写方法二、实验设备PC机、星研Star16L仿真器系统+仿真头PODPH51(DIP)、EL-Ⅱ型通用接口板实验电路,PROTEUS仿真软件。
三、实验内容由8031内部定时器1按方式1工作,即作为16位定时器使用,每0.1秒钟T1溢出中断一次。
P1口的P1.0~P1.7分别接发光二极管的L1~L8。
要求编写程序模拟一循环彩灯。
彩灯变化花样可自行设计。
例程给出的变化花样为:①L1、L2、…L8依次点亮;②L1、L2、…L8依次熄灭;③L1、L2、…L8全亮、全灭。
各时序间隔为0.5秒。
让发光二极管按以上规律循环显示下去。
四、实验电路五、实验程序及注释基本内容:ORG 0000HLJMP STARTORG 001BH ;定时器/计数器1中断程序入口地址LJMP INTAORG 0100HSTART:MOV A,#01H ;首显示码MOV R1,#0H ;R1是彩灯花式表偏移量指针MOV DPTR,#TABE ;彩灯花式表头地址送DPTRMOV R0,#5H ;05是计数值MOV TMOD,#10H ;定时器置为方式1MOV TL1,#0AFH ;装入时间常数MOV TH1,#03CHORL IE,#88H ;CPU中断开放标志位和定时器1溢出中断允许位均置位SETB TR1 ;开始计时LOOP1:CJNE R0,#00,LOOP1MOV R0,#5H ;R0计数计完一个周期,重置初值INC R1 ;表地址偏移量加1CJNE R1,#36,LOOP2MOV R1,#0H ;如到表尾,则重置偏移量初值LOOP2:MOV A,R1 ;从表中取显示码入累加器MOVC A,@A+DPTRMOV P1,A ;将取得的显示码从P1口输出显示JMP LOOP1INTA:CLR TR1 ;停止计时DEC R0 ;计数值减一MOV TL1,#0AFH ;重置时间常数初值MOV TH1,#03CHSETB TR1 ;开始计数RETI ;中断返回TABE: DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFHDB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00HDB 0FFHDB 00H,0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFHDB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEHDB 00H,0FFH,00HEND拓展内容:;NAME T5_TIME_DPTR ;定时器实验ORG 0000HLJMP STARTORG 001BH ;定时器/计数器1中断程序入口地址LJMP INTAORG 0100HSTART:MOV A,#01H ;首显示码MOV R1,#0H ;R1是彩灯花式表偏移量指针MOV DPTR,#TABE ;彩灯花式表头地址送DPTRMOV R0,#10H ;10是计数值MOV TMOD,#10H ;定时器选定为方式1MOV TL1,#0AFH ;装入时间常数MOV TH1,#03CHORL IE,#88H ;CPU中断开放标志位和定时器1溢出中断允许位均置位SETB TR1 ;开始计时LOOP1:CJNE R0,#00,LOOP1MOV R0,#10H ;R0计数计完一个周期,重置初值INC R1 ;表地址偏移量加1CJNE R1,#28,LOOP2MOV R1,#0H ;如到表尾,则重置偏移量初值LOOP2:MOV A,R1 ;从表中取显示码入累加器MOVC A,@A+DPTRMOV P1,A ;将取得的显示码从P1口输出显示JMP LOOP1INTA:CLR TR1 ;停止计时DEC R0 ;计数值减一MOV TL1,#0AFH ;重置时间常数初值MOV TH1,#03CHSETB TR1 ;开始计数RETI ;中断返回TABE: DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFHDB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00HDB 0FFH,00HDB 01H,04H,10H,40H,80H,20H,08H,02HDB 0FFH,00HEND六、实验结果仿真结果跟实验结果相同:原程序:8个LED灯以0.5秒为间隔时间分别按照设定得花样亮灭:L1~L8依次点亮→L1~L8依次熄灭→L1~L8全亮→L1~L8全灭→L1~L8按顺序依次熄灭,每次只熄灭一个灯,其余灯均保持发光状态→L8~L1按顺序依次熄灭,每次只熄灭一个灯,其余灯均保持发光状态→循环修改后的程序:8个LED灯以1秒为间隔时间分别按照设定得花样亮灭:L1~L8依次点亮→L1~L8依次熄灭→L1~L8全亮→L1~L8全灭→L1、L3、L5、L7、L8、L6、L4、L2按顺序点亮,每次只亮一个灯→循环。
实验题1、由按键S1产生外部中断1,S1按一次L0、L2、L4、L6亮,再按一次L1、L3、L5、L7亮。
2、由按键S1产生外部中断1控制T0启停,T0产生100ms定时,使4个数码管循环显示0中的一段,每段显示时间为1S。
3、T1工作于方式2,产生250uS精确定时,产生0~9秒计时,并显示在数码管上。
4、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的任何字符,都立刻转发给PC。
5、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘0’~‘9’,回送0~9,当收到‘a’~‘z’时回送‘A’~‘Z’。
6、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘1’,回送字符串“Start”,并启动T0产生1S的方波控制L0~L7闪烁,当收到‘2’时回送字符串“Stop”,并停止控制L0~L7。
7、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘Start’,回送字符串“Ok1”,并启动T0产生1S的方波控制L0~L7闪烁,当收到‘Stop’时回送字符串“Ok2”,并停止控制L0~L7。
8、当S1工作于独立按键方式时(需考虑按键抖动,软件滤波),按第1次,L0~L3以0.5秒为周期闪烁,串口以9600bps波特率发送字符‘1’一次,按第2次,L4~L7以1秒为周期闪烁,串口以9600bps波特率发送字符‘2’一次,按第3次,L0~L7以2秒为周期闪烁,串口以9600bps波特率发送字符‘3’一次。
再按一次回到第一次的模式,如此循环。
本人自己写的示例程序,验证可用,仅供参考学习用:附部分原理图:1、#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit P33=P3^3;sbit P35=P3^5;bit flag=1;void delay_115(int x) //延时函数{int i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void main(){EA=1; //中断总允许位IT1=0; //设置外部中断1的触发方式为电平触发EX1=1; //开外部中断P35=0;P1=0xaa; //初始化P1,方法二中必须写这句while(1);}void t1_115() interrupt 2{/* delay_115(20); //按键消抖while(!P33); //当松开按钮时程序才往下执行,否则一直停留在此处delay_115(20); //按键消抖*///方法一:/* if(P1==0x55)P1=0xaa;elseP1=0x55; *///方法二:(若使用方法二则给P1初始化为0xaa或0x55)// P1=~P1; //取反if(P33==0){delay_115(15);if(P33==0){if(flag){P1=~P1;flag=0;}}else{// key=0;flag=1;}}else{// key=0;flag=1;}}2、#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit P33=P3^3;sbit P35=P3^5;uchar count_115=0;void delay_115(int x) //延时函数int i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void main(){uchar temp_115=0xfe;EA=1; //中断总允许位TMOD=0x01; //设置T0的工作方式为方式1IT1=0; //设置外部中断1的触发方式为电平触发EX1=1; //开外部中断ET0=1; //开定时器T0TR0=1; //定时器T0启动TH0=0x3C; //设置初值TL0=0xB0;P35=0;P0=0x10; //打开4位数码管while(1){if(count_115==20) //该变量每50ms加1,当count_115等于20时,即时间间隔为1s{count_115=0; //将计数变量重置为0,以便开始下1s的定时P1=temp_115;temp_115=temp_115<<1; //左移一位temp_115=temp_115+0x01; //最低位补1}if(temp_115==0xbf) //由于只需要点亮最外圈的六个管子,故此处重置temp_115为0xfetemp_115=0xfe;}}void t0_115() interrupt 1{TH0=0x3C; //装入初值此处为50ms执行一次中断TL0=0xB0;count_115++; //每执行一次中断,该变量加1void t1_115() interrupt 2{delay_115(20); //按键消抖while(!P33); //当松开按钮时程序才往下执行,否则一直停留在此处delay_115(20); //按键消抖TR0=~TR0; //暂停或启动定时器T0}3、此题过于简单,略。
51单片机实验报告范文51单片机实验报告实验一点亮流水灯实验现象Led灯交替亮,间隔大约10ms。
实验代码#include〈reg51、h>voidDelay10ms(unsignedintc);voidmain(){)1(elihwﻩ{ﻩP0=0x00;Delay10ms(50);;ffx0=0Pﻩﻩ;)05(sm01yaleDﻩ}}voidDelay10ms(unsignedintc){unsignedchara,b;for(;c>0;c-—){)——b;0〉b;83=b(rofﻩ{ﻩﻩfor(a=130;a〉0;a--);}ﻩﻩ}}实验原理WWhiile(1)表示一直循环。
循环体内首先将P0得所有位都置于零,然后延时约550*10=500ms,接着0P0位全置于11,于就是DLED全亮了。
接着循环,直至关掉电源..延迟函数就是通过多个forr循环实现得。
实验2流水灯(不运用库函数)实验现象起初led只有最右面得那一个不亮,半秒之后从右数第二个led也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程#includemain(){unsignedcharLED;LED=0xfe;while(1){ﻩ;DEL=0PﻩDelay10ms(50);;1〈〈DEL=DELﻩ)00x0==0P(fiﻩ{ﻩ;efx0=DELﻩ}ﻩ}ﻩ}voidDelay10ms(unsignedintc){unsignedchara,b;for(;c>0;c-—){ﻩﻩﻩ)—-b;0〉b;83=b(rofﻩ{;)--a;0>a;031=a(rofﻩ}ﻩ}ﻩ}实验原理这里运用了C语言中得位运算符,,位运算符左移,,初始值得二进制为11111110,之后左移一次变成111111000,当变成000000000时通过fif语句重置1111111110、延迟函数在第一个报告已经说出了,不再多说..实验3流水灯(库函数版)实验现象最开始还就是最右边得一个不亮,然后不亮得灯转移到最右边得第二个,此时第一个恢复亮度,这样依次循环.实验代码#include〈reg51、h>#include〈intrins、h〉voidDelay10ms(unsignedintc);voidmain(void){unsignedcharLED;;EFx0=DELﻩ)1(elihwﻩ{ﻩP0=LED;;)05(sm01yaleDﻩﻩ;)1,DEL(_lorc_=DELﻩ}ﻩ}voidDelay10ms(unsignedintc){ unsignedchara,b;for(;c〉0;c——){ﻩfor(b=38;b〉0;b—-){ﻩﻩ;)-—a;0〉a;031=a(rofﻩ}ﻩ}}实验原理利用头文件中得函数,_crol_(,,),可以比位操作符更方便得进行22进制得移位操作,,比位操作符优越得就是,该函数空位补全时都就是用那个移位移除得数据,,由此比前一个例子不需要fif语句重置操作..数码管实验实验现象单个数码管按顺序显示0-9与A-F。
51单片机课程设计实例一、引言51单片机是一种广泛应用于嵌入式系统的微控制器。
它具有低功耗、高性能、易编程等特点,因此在电子设计领域得到了广泛的应用。
本文将介绍一个基于51单片机的课程设计实例,通过该实例可以帮助读者更好地理解51单片机的应用。
二、实例背景假设我们要设计一个温度检测系统,能够实时监测环境的温度,并根据一定的温度范围进行报警。
这样的系统在很多场景下都有实际应用价值,比如温室大棚的温度控制、电子设备的温度监测等。
三、硬件设计1. 硬件电路我们可以通过使用温度传感器将环境的温度转化为电压信号,然后将该信号输入到51单片机的模拟输入引脚。
同时,我们需要连接一个蜂鸣器来进行报警。
2. 电路图以下是该系统的简化电路图:(不要输出图片链接)四、软件设计1. 程序框架我们可以通过编写嵌入式C语言程序来实现该系统的功能。
以下是程序的基本框架:```#include <reg51.h>sbit buzzer = P1^0; //定义蜂鸣器控制引脚void delay(unsigned int time){unsigned int i, j;for(i = time; i > 0; i--)for(j = 110; j > 0; j--);}void main(){while(1){//读取温度传感器的模拟输入值unsigned int temperature = ADC_Read(0);if(temperature > 30) //如果温度超过30摄氏度{buzzer = 1; //蜂鸣器报警delay(1000); //延时1秒buzzer = 0; //关闭蜂鸣器delay(1000); //延时1秒}}}```2. 程序说明程序首先定义了一个蜂鸣器控制引脚,并编写了一个延时函数。
在主函数中,通过循环不断读取温度传感器的模拟输入值,并进行比较。
如果温度超过30摄氏度,则蜂鸣器报警,持续1秒钟,然后关闭蜂鸣器并延时1秒钟。
51单片机数码管显示实验实验内容:1)编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复。
2)C语言程序#include<reg52.h>#define uint unsigned intvoid display();void num();int i;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表void delayms(uint);void main(){while(1){num();display();}}void display(){P2=0xff;//消隐P0连接段选,P1节位选P1=0x00;//8个数码管同时显示P2=table[i];//数码管显示数码0 delayms(1000);//延时5ms}void num(){if(i<9)i++;elsei=0;}void delayms(uint x){uint i,j;for(i=0;i<x;i++)for(j=0;j<110;j++);}3)汇编语言:ORG 0000HLJMP MAINORG 0100H;P2连接段选,P1节位选MAIN: MOV P1,#00H ;所有的数码管都显示MOV R2,#00H ;从0开始显示LOOP: MOV A,R2 ;为下面的基址加变址寄存器寻址方式做准备MOV DPTR,#TAB1 ;把数组的首地址赋给DPTRMOVC A,@A+DPTR ;取数组中的数字MOV P2,A ;把取得的值送给P0口显示ACALL DELAY ;延时一会INC R2 ;为取下一个数加一CJNE R2,#10,LOOP ;只要数小于10就继续循环显示MOV R2,#00H ;如果加到10后重新从0开始LJMP LOOP ;进入循环函数;****************************************** TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H; 数组DB 92H,82H,0F8H,80H,90HRET;****************************************** DELAY: MOV R3,#3 ;延时函数DE1: MOV R4,#0FFHDE2: MOV R5,#0FFHDJNZ R5,$DJNZ R4,DE2DJNZ R3,DE1RET;*************************************************END(3)编写程序学习数码管的动态显示,让8只数码管从从左往右显示1、2、3……8。