5 AT89S52单片机开发入门:流水灯实验
单片机跑马灯(流水灯)控制实验报告

单片机跑马灯(流水灯)控制实验报告实验目的:本实验旨在通过使用单片机对LED灯进行控制,实现跑马灯(流水灯)的效果,同时熟悉单片机编程和IO口的使用。
实验器材:1)STC89C52单片机2)最基本的LED灯3)面包板4)若干跳线实验过程:1.硬件连接:将单片机的P2口与面包板上的相应位置连接,再将LED灯接入面包板中。
2.编写程序:按照题目要求编写所需程序。
3.单片机烧录:将程序烧录进单片机中,即可实现跑马灯效果。
程序详解:1. 由于LED灯是呈现亮灭效果,我们要编写程序来控制LED的亮灭状态。
2. 在程序中,我们通过P2口控制LED灯的亮灭状态。
例如,若要让LED1亮,我们就将P2口的第一个引脚设置为低电平(0),此时LED1就会发光。
同样地,若要LED2,LED3等依次点亮,则需要将P2口的第二个、第三个引脚设置为低电平,依此类推即可。
3. 接下来,我们要实现每个LED灯的亮灭时间间隔,并实现跑马灯的效果。
4. 在本实验中,我们采用了计时器中断的方式来实现灯光的控制,即在定时器中断函数中对P2口进行控制,这样可以方便地控制灯亮灭时间和亮度。
通过改变定时器中断的时间,可以改变LED灯的亮灭时间;通过改变P2口的控制顺序,可以实现跑马灯效果。
5. 整个程序比较简单,具体的代码实现可以参考以下程序:#include <REG52.H>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void Delay1ms(uchar _ms); void InitTimer0();sbit led1=P2^0;sbit led2=P2^1;sbit led3=P2^3;sbit led4=P2^4;sbit led5=P2^5;sbit led6=P2^6;sbit led7=P2^7;void InitTimer0(){TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1;}void Timer0() interrupt 1 {static uint i;TH0=(65536-50000)/256; TL0=(65536-50000)%256;i++;if(i%2==0){led1=~led1;}if(i%4==0){led2=~led2;}if(i%6==0){led3=~led3;}if(i%8==0){led4=~led4;}if(i%10==0){led5=~led5;}if(i%12==0){led6=~led6;}if(i%14==0){led7=~led7;}}void Delay1ms(uchar _ms){uchar i;while(_ms--){i=130;while(i--);}}实验总结:通过本次实验,我们掌握了单片机控制跑马灯(流水灯)的方法,对单片机编程和IO 口的使用有了更深入的了解。
单片机流水灯实验报告

单片机流水灯实验报告1. 实验目的本实验旨在通过使用单片机控制LED灯的亮灭来实现流水灯效果,以加深对单片机控制原理的理解,并培养学生动手实践的能力。
2. 实验器材•单片机开发板•面包板•LED灯•连接线•电源3. 实验原理流水灯是一种常见的LED灯效果,通过控制多个LED灯的亮灭顺序和速度,形成流动的效果。
在本实验中,我们使用单片机通过改变IO口的输出电平来控制LED灯的亮灭。
4. 实验步骤第一步:准备工作•将单片机开发板连接到电脑上,并确保单片机开发环境已经正确安装。
•将面包板连接到单片机开发板上的IO口。
•将LED灯连接到面包板上,确保连接正确。
第二步:编写程序在单片机开发环境中,编写下列代码:#include <reg52.h>sbit LED1=P1^0;sbit LED2=P1^1;sbit LED3=P1^2;sbit LED4=P1^3;void delay(int t) {int i, j;for(i=t;i>0;i--) {for(j=110;j>0;j--);}}void main() {while(1) {LED1=0;delay(1000);LED1=1;delay(1000);LED2=0;delay(1000);LED2=1;delay(1000);LED3=0;delay(1000);LED3=1;delay(1000);LED4=0;delay(1000);LED4=1;delay(1000);}}第三步:烧录程序将编写好的程序烧录到单片机开发板上,确保烧录成功。
第四步:实验测试•将单片机开发板连接到电源上,并打开开关。
•观察LED灯的亮灭情况,是否能够形成流水灯效果。
•如果效果与预期一致,则说明实验成功。
5. 实验结果分析经过实验测试,LED灯能够按照程序中设定的流水灯顺序亮灭,形成了流水灯效果。
说明通过单片机控制IO口输出电平能够实现对LED灯的控制,并且通过改变控制程序中的延时时间可以调整流水灯的速度。
单片机流水灯实验原理

单片机流水灯实验原理
单片机流水灯实验原理:
流水灯是一种基本的电子实验,通过使用单片机控制多个
LED 灯的亮灭来实现灯光在各个灯珠之间流动的效果。
流水
灯实验原理如下:
1. 硬件连接:将多个 LED 灯和适当的电流限制电阻连接到单
片机的不同输出引脚上。
每个 LED 灯的阴极与电流限制电阻
连接到负极(GND),而阳极连接到单片机的 IO 引脚。
需要
注意的是,单片机的 IO 引脚的输出电压应该能够点亮 LED 灯。
2. 软件设计:使用单片机的 GPIO(通用输入输出)功能,设
置相应的输出引脚作为流水灯的控制引脚。
通过对这些引脚进行高低电平控制,实现不同 LED 灯的点亮和熄灭。
3. 流水灯效果:为了实现流水灯的效果,我们将需要在不同的时间间隔内控制不同的 LED 灯点亮。
可以使用一个循环来实
现这种效果,循环中通过更新和改变控制引脚的电平状态来控制流水灯的亮灭顺序。
4. 控制顺序:通过改变控制引脚的电平状态的顺序,可以改变流水灯的流动顺序。
可以通过在循环中使用延迟函数来控制灯的变换速度,或者使用计数器等其他方法来实现更复杂的流水灯效果。
通过以上原理,我们可以实现单片机流水灯实验并观察到灯光在不同的 LED 灯之间流动的效果。
单片机流水灯实验报告

单片机流水灯实验报告本实验旨在通过单片机控制LED灯的亮灭,实现流水灯效果。
通过对实验的设计、搭建和调试,我们可以更深入地理解单片机的工作原理和掌握相应的编程技巧。
实验器材和元件:1. 单片机,我们选用了STC89C52单片机作为控制核心;2. LED灯,我们使用8个LED灯作为实验的输出设备;3. 电阻,为了限流,我们使用了适当的电阻;4. 连接线、面包板等。
实验步骤:1. 搭建电路,首先,我们按照电路图将单片机、LED灯和电阻连接在一起,并将电路连接到电源上;2. 编写程序,接下来,我们使用C语言编写单片机的控制程序,实现LED灯的流水灯效果;3. 烧录程序,将编写好的程序通过烧录器烧录到单片机中;4. 调试程序,将烧录好的单片机连接到电路上,进行程序的调试和验证;5. 完善电路,根据实际调试情况,对电路进行必要的调整和完善,确保LED 灯能够按照预期的流水灯效果工作。
实验结果:经过反复调试和完善,我们成功实现了单片机控制LED灯的流水灯效果。
在程序控制下,8个LED灯按照顺序依次亮起并熄灭,形成了流水灯的效果。
整个实验过程非常顺利,取得了预期的效果。
实验心得:通过本次实验,我们对单片机的控制原理有了更深入的理解,也掌握了一定的C语言编程技巧。
在实验的过程中,我们遇到了一些问题,如LED灯未按预期工作、程序逻辑错误等,但通过分析和调试,最终都得到了解决。
实验不仅提高了我们的动手能力,也培养了我们的分析和解决问题的能力。
总结:本次实验不仅让我们熟悉了单片机的控制方法,也让我们体验了从实验设计到调试完善的整个过程。
通过这次实验,我们不仅学到了专业知识,也培养了动手能力和解决问题的能力。
希望在以后的学习和实践中,能够更好地运用所学知识,不断提升自己的能力。
以上就是本次单片机流水灯实验的报告内容,希望对大家有所帮助。
基于AT89S52的流水灯控制(word文档良心出品)

电子工程学院课外学分设计报告题目:基于AT89S52的循环彩灯控制姓名:宋建军学号:22专业:自动化实验室:开放实验室班级:电子A1032班设计时间:2013 年02月15 日——2013年03月20 日评定成绩:审阅教师:李卫华1. 专业综合设计任务1.1项目的背景当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
学习单片机的最有效方法就是理论与实践并重,现在我把单片机流水灯设计作为一个毕业课程设计,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
1.2项目的任务设计彩灯控制电路,使连接在该电路上的8个发光二极管按顺序以次闪烁。
2. 方案设计与论证实现此功能有两种方案,一种是使用传统的模拟电路,另一种是用单片机控制的电路。
我们选择单片机控制系统。
其中系统工作原理为:在上个程序中我们是逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。
我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现循环闪烁效果啦。
由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样就可以实现循环闪烁效果。
单片机实验报告花样流水灯

电子工艺学考试作品报告作品名称:花样流水灯姓名:专业班级:电信1105学号:中南大学物理与电子学院目录第一章系统整体概述…………………………………………………………第二章硬件设计………………………………………………………………第三章软件设计………………………………………………………………第四章调试与分析……………………………………………………………第五章制作感受………………………………………………………………【摘要】当今时代的智能控制电子技术,给人们的生活带来了方便和舒适,而每到晚上五颜六色的霓虹灯则把我们的城市点缀得格外迷人,为人们生活增添了不少色彩。
制作流水灯的方法有很多种,有传统的分立元件,由数字逻辑电路构成的控制系统和单片机智能控制系统等。
本设计介绍一种简单实用的单片机花样流水灯设计与制作,采用基于单片机AT89C52和发光二极管、晶振、复位、电源等电路以及必要的软件组成的以AT89C52为核心,辅以简单的数码管等设备和必要的电路,设计了一款简易的流水灯电路板,并编写简单的程序,使其能够自动工作。
本设计用AT89C52单片机为核心自制一款简易的花样流水灯,并介绍了其软件编程仿真及电路焊接实现,在实践中体验单片机的自动控制功能。
该设计具有实际意义,可以在广告业、媒体宣传、装饰业等领域得到广泛应用。
关键字:AT89C52 单片机流水灯数码管AT89C52单片机概述AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程。
单片机流水灯实验报告

单片机流水灯实验报告
单片机流水灯实验报告
本次实验是单片机灯光控制实验,主要目的是培养学生使用突变端口控制灯光的实操能力。
实验分为程序设计、硬件组装、调试调试几个部分。
程序设计:根据实验要求编写了一个流水灯程序,主要利用单片机控制实现开关控制和常开及常闭特性,以及设置灯的渐变和闪烁的速度。
硬件组装:在板子上安装单片机和电路原件,并连接灯光电路,可以把单片机连接到PC,以便烧录程序。
调试调试:将程序烧录到单片机上,使板子上的灯光依次亮起,调整每个灯光闪烁或连续亮起的间隔,使灯光更好地结合实验要求。
本次实验让我深刻体会到用单片机编码语言思考问题的重要性,以及如何解决具体的技术问题。
实验操作让我加深了对单片机现象和面向对象编程的理解,让我更加熟练灵活地运用单片机配合硬件的概念和编程技术,全面提高了自己的应用水平。
单片机流水灯实验总结

单片机流水灯实验总结引言流水灯是单片机实验中最基础的实验之一,通过控制单片机的IO口,让灯泡按照一定的顺序或方式依次点亮和熄灭,从而形成灯光的流动效果。
本篇文档将总结单片机流水灯实验的原理、实验步骤和实验结果,并对其中的关键点进行说明和分析。
实验原理单片机流水灯实验的原理主要涉及到两方面:单片机的IO口和时序控制。
单片机的IO口单片机的IO口是其与外部设备进行数据交换和控制的接口,通过设置IO口的电平状态,可以控制外部设备的操作。
在流水灯实验中,我们将使用单片机的多个IO口分别控制多个灯泡的点亮和熄灭。
时序控制流水灯的效果是通过按照一定的时序来依次点亮和熄灭灯泡。
在单片机中,我们可以通过控制程序中的延时和循环来实现灯泡的时序控制。
实验步骤以下将详细介绍单片机流水灯实验的步骤:1.准备材料和工具:单片机、灯泡、电阻、面包板、导线等。
2.连接电路:将单片机和灯泡通过导线连接起来,同时将电阻与灯泡串联,用以限流。
3.编写程序:使用相应的编程软件,编写控制流水灯的程序。
程序主要包括初始化IO口、控制时序、循环控制灯泡的点亮和熄灭等。
4.烧录程序:将编写好的程序烧录到单片机中。
5.调试和测试:将单片机连接到电源,观察灯泡是否按照预定的流水灯效果点亮和熄灭。
如果效果不符合预期,可以通过修改程序和调整电路进行调试。
实验结果经过以上步骤,我们成功搭建了单片机流水灯的实验电路,并编写了控制流水灯的程序。
经过测试,实验效果良好,灯泡按照预定的顺序和方式点亮和熄灭。
实验中的关键点分析在单片机流水灯实验中,有几个关键点需要特别注意:1.IO口的选择:根据需要控制的灯泡个数,选择合适数量的IO口。
如果使用的IO口数量较多,可以考虑使用扩展芯片或IO口拓展模块。
2.电路的设计:在电路设计中,需要合理选择电阻的阻值,以确保灯泡正常工作,并保护单片机和其他电路。
3.程序的编写:程序的编写需要注意控制流水灯的循序和时序,以及延时和循环的设置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图5-1-1 实验1中观察LED的位置
5.2 源程序分析
void main() { unsigned char i,dat; while(1) { dat=0x01; for(i=0;i<8;i++) {P1=~dat; dat=dat<<1; Delay(); } for(i=0;i<8;i++) {P1=~dat; dat=dat>>1; Delay(); } } }
主要内容
1. 2. 3. 4. 5. 6. 程序演示 软件说明&分析 硬件说明 P1 IO口结构 单片机工作原理 汇编语言&执行时间测量
5.1实验操作与实验结果
• 通过USB电缆给单片机板子 供电 • 观察LED D1~D8工作情况: 从左到右依次点亮,然后 从右到左依次点亮 • 其他LED:
– D9点亮:+5V电源指示 – D10闪动:在线编程器 AT89C2051工作正常
表5-1 第一个for循环程序分析
i变量 0 dat 0x01 P1 0xFE=1111 1110b 说明 P1端口除了P1.0为低电平外,其他7个输出均为 高电平;根据第4章我们知道P1口连接了8个LED ,8个LED通过电阻接到了+5V,因此此时只有 P1.0连接的D1点亮,其他7个LED熄灭; 通样道理,此时只有D2点亮,其他7个LED(D1、 D3~D8)熄灭; 此时只有D3点亮,其他7个LED熄灭; 此时只有D4点亮,其他7个LED熄灭; 此时只有D5点亮,其他7个LED熄灭; 此时只有D6点亮,其他7个LED熄灭; 此时只有D7点亮,其他7个LED熄灭; 此时只有D8点亮,其他7个LED熄灭;
4、P1 I/O端口的结构
问题: 1、P1.X中的X是什么意思? 2、什么是内部总线? 3、CP是什么? 4、读引脚和读锁存器的区别? 5、什么是准双向IO口? 6、内部总线是双向的吗? 7、Vcc是什么?
读引脚指令:MOV A,P1 读寄存器:CPL P1.X(读-修改-写)
5、单片机工作原理 AT89S52单片机内部结构&资源
– 20~2FH, – 00~7FH, 16字节 128位
• 用户RAM
– 30H~7FH – 堆栈, 60H(向上增长) – 复位后设置SP<=07H
• 间接寻址RAM (idata)
– 0x80~0xff
编译连接结果
存储器使用情况: 1、data=9:内部数据RAM使用了9个字节; 2、xdata=0:外部数据RAM没有使用; 3、code=71:内部程序存储区(FLASH)使用了71(0x47)个字节
1个机器周期 ;R6不等于0xFF则跳转到0032
1个机器周期 ;R7未到0xFF则跳转到0030执行 2个机器周期 2个机
全部机器周期数为: 2+255*(2+255*(1+2)+1+2)+2=4+255*(5+255*3)=196354个机 器周期。 对应时间为:196354*12/11059200=0.213s
5.6 查表法实现流水灯功能-程序
void main() { unsigned char dat,i; while(1) { for(i=0;i<16;i++) { dat=tab[i]; P1=~dat; Delay(); } }//while }
5.7 课后作业
1.如何设置断点?如何单步执行程序? 2.如何查看、修改变量? 3.如何设置变量的存储位置? 4.修改程序,使流水灯流动的速度增加1倍,并利用 示波器检查结果。 5.修改程序,设D1、D8点亮的时间与其他LED点亮的 时间相同,并利用示波器检查结果。 6.说出这些程序中所用到指令的功能。 7.对实验主循环中后一个for循环对应的汇编程序进 行分析。
• 参照左图 • 理解程序 执行过程
8、Keil C软件使用(3)
• • • • • • • 给项目添加/Байду номын сангаас除文件 仿真执行程序 单步执行、设置断点 查看变量 查看端口 查看特殊寄存器 查看汇编
5.6 查表法实现流水灯功能-定义数据 (表格)
code unsigned char tab[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0 x80,//9 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//8
具体工作波形
具体工作波形(故障)
1、程序写入后,LED(D6)始终点亮,为 什么?哪里的问题?如何验证?硬件?软 件? 2、提示:断电后再上电恢复正常
思考题
1. 2. 3. 4. 5. 6. 7. P1变量在何处定义? P1端口是什么? P1口、触发器、寄存器、锁存器的关系? 如何改变P1的内容? sfr P1 = 0x90; ? 如何改变LED灯流动的速度? D1、D8点亮的时间与其他LED(D2~D6)点亮的 时间相同吗?为什么?修改程序使D1、D7点亮 的时间与其他LED点亮的时间相同。
图5-5-2 利用示波器测试时延长度
汇编部分问题
1、MOV指令的含义? 2、CLR? 3、CJNE? 4、INC? 5、RET? 6、指令长度是什么? 7、指令长度和执行时间有什么关系?
7、深入了解程序执行过程(1)
工程中不包含 Startup.a51程 序时
7、深入了解程序执行过程(2)
工程中包含 Startup.a51 程序时
• • • • • • FLASH 8KB RAM:256B SFR(Special File Register) 4个并口(每个8位) 1个串口(占用P3口的2位) 3个16bit定时器
AT89S52内部存储器资源
应为多少?
程序存储区 地址范围:0x0000~0x1FFF 大小:8K=0010 0000 0000 0000
5.3 对程序进行调试
• 软件仿真 • 硬件仿真 • 调试
– 设置断点F8 – 单步执行F10(step over) – 单步执行F11(step in) – 全速执行F5
图5-3-1 软件仿真调试模式(simulator)
图5-4-1 汇编程序分析——系统复位后
5.5 计算Delay函数延时
3、硬件说明-PCB部分
3、硬件说明-电原理图部分
硬件部分要求
• • • • • 可以使用Protel99SE或Altium Designer 打开电原理图 打开PCB图 能够读懂对应的电路 理解电原理图、PCB图、实物之间的对应关 系
硬件说明-问题
• • • • 问题: 1、阻排是什么? 2、U1的地、电源怎么看不到? 3、LED如何才能点亮?
单片机工作原理相关问题
1. 2. 3. 4. 5. 6. 7. 8. CPU是什么? 时钟电路如何构成?有什么用处? ROM是什么? RAM是什么? 什么是串行接口、并行接口? (后面讲) 什么是中断?(后面讲) 什么是定时器?和计数器的区别? (后面讲) 什么是总线?
AT89S52主要内部资源
5 AT89S52单片机开发入门:流 水灯实验
基础篇 通过通用I/O口控制LED灯的点亮
基本要求
• • • • • • 电路图、PCB编辑软件的使用; 单片机基本概念; P1口的结构; Keil C开发环境的使用; 编程器使用; 单片机工作基本原理;
更高要求
• 汇编指令阅读 • 指令执行时间的计算 • 执行时间测试
循环控制变量R4加1 R4!=8则跳转到地 址0x0007执行
7、深入了解程序执行过程(4)
• 使用了哪9个内部RAM?
– 5个通用寄存器:R0、R4、R5、R6、R7 – A、P1、SP、C(PSW的一位)
• 堆栈深度多少?
– SP初始化为0x07 – 最大值为0x09(SP_MAX)
7、深入了 解程序执行 过程(5)
数据存储区
问题: 1、EA是哪两个单词的缩写? 2、RAM和Flash的区别?
内部RAM构成
• 通用寄存器区(4个组)
– 0区( 00H~07H)1区 (08H~0FH) – 2区(10H~17H3)3区 (18H~1FH) – 由PSW中的RS1,RS0来决定用哪个工作区
• 可位寻址区 (bit、bdata)
Startup.a51代码功能: •对内部RAM清0(范围:0~0x7F) •设置堆栈指针(SP=#07H) •跳到main执行 与不加入startup.a51模块时没有区别
深入了解程序执行过程(3)
-main函数部分
寄存器R5代替变量dat 寄存器R4代替变量i
取反输出 左移1位相对于乘2,这 里用累加器A的相加实现
i dat P1 点亮的LED 0 0000 0001 1111 1110 D1(左边第一个) 1 0000 0010 1111 1101 D2 2 0000 0100 1111 1011 D3 3 0000 1000 1111 0111 D4 … 7 1000 0000 0111 1111 D8(右边第一个) 循环1总结:LED从左到右依次点亮 I dat P1 点亮的LED 0 1000 0000 0111 1111 D8 1 0100 0000 1011 1101 D7 … 7 0000 0001 1111 1110 D1 循环2总结:LED从右到左依次点亮
1 2 3 4 5 6 7
0x02 0x04 0x08 0x10 0x20 0x40 0x80
0xFD=1111 1101b 0xFB=1111 1011b 0xF7=1111 0111b 0xEF=1110 1111b 0xDF=1101 1111b 0xBF=1011 1111b 0x7F=0111 1111b
汇编指令说明及执行时间计算