摘要
本设计基于8051高性能单片机AT89C52,实现了LED灯的多种动态效果,包括闪烁、亮灭、循环移动、跑马灯。通过C语言程序控制,利用AT89C52的GPIO端口控制LED的状态变化,实现了简单而富有趣味性的光效。在程序中,使用delay函数进行简单的延时,通过控制LED的引脚状态,实现了四种不同的LED灯效。LED1进行简单的闪烁,LED2在亮灭之间切换,LED3呈现循环移动的效果,LED4则表现为跑马灯式的动态。
关键字:8051单片机、C语言编程、LED控制
目录
一、课程设计名称 1
二、设计目的 1
三、设计原理图 1
四、设计内容 2
1硬件电路搭建 2
2软件程序编写 3
3调试测试 4
五、设计步骤与结果 4
1 设计步骤 4
2 设计结果 11
六、总结 12
1 实验当中遇到的问题 12
2实验总结 13
七、附录 13
1 参考文献 13
2 程序代码 13
3结果展示...............................................................................................................................15
课程设计名称
基于8051高性能单片机的LED灯闪烁、亮灭、循环移动、跑马灯设计设计
二、设计目的
(1) 设计目的在于展示如何组织代码、定义引脚、使用循环结构等,从而为日后更复杂的嵌入式开发奠定基础。
(2) 将其应用到实际电路中进行设计;
(3) 培养我们的动手能力和软硬件结合能力。
三、设计原理图
本次实训所需的电路主要由STC89C52单片机、晶振、二极管、电解电容以及排阻等组成。具体电路原理图如下所示:
图1 电路原理图
四、设计内容
本设计主要分为以下几个部分:
1、硬件电路搭建
为实现电路原理图,首先收集原理图上的对应物料,物料列表如图4-1所示:
图2 物料列表图
2、软件程序编写
利用Keil C51集成开发环境,编写相应的程序代码。主要包括等部分的编写
图3代码运行及结果图
图4代码运行结果图
3、调试测试
在电脑中配置好ST-USB设备驱动。将转接线连接在单排针的对应位置上,再将转接线的USB接口连接到电脑,通过软件stc-isp将编写好的.hex代码文件烧录到STC89C52芯片中。
烧录完成后,按下电源按钮,即可看到代码文件的实际运行结果,根据结果对代码进行调整,再重复以上步骤,直到达到预期效果。
五、设计步骤与结果
1、设计步骤
1.1硬件设备准备
收集完毕后,全部元件如下图5所示:
图5 元件实物展示图
1.2搭建硬件电路:
将准备好的元件按照电路原理图以及物料列表中给的位号,将元件焊接在开发板上。小组成员焊接操作图:
图6焊接操作图
将各个元件焊接在对应位置。特别注意元件的正负方向,例如发光二极管较长的引脚为正极,较短的为负极,则要分别对应开发板上标识的正负位置。还要注意,在进行焊接前,对于有方向的元器件先用万用表的电源档进行测试,确定好器件本身无质量问题以及器件的正负方向后,再进行焊接,尽量避免二次加工。全部元件焊接完成的展示图如图7、图8所示:
图7焊接完成电路板背面展示图
图8 焊接完成电路板正面展示图
按照原理图连接各个器件,连接完成后,接上电源进行测试,保证电路工作正常。
1.3软件程序编写
代码编写:
硬件配置和常量定义:在代码开头,首先进行硬件配置和常量定义。这包括定义LED的引脚以及一些常量,如延时时间。
延时函数的定义:在程序的开头,定义一个通用的延时函数,以便在后续的LED效果模块中使用。
LED效果模块的设计:将每个LED效果设计为独立的模块,例如闪烁、亮灭、循环移动、跑马灯。每个模块使用参数来控制LED引脚和延时时间,提高代码的灵活性。
1.4调试测试
将编写好的程序进行编译链接,若无报错,则调试成功。反之,根据报错信息,进行修改代码。直至无报错信息。
1.5上传程序
安装ST-USB驱动
将转接线的USB接入电脑,可在设备管理器界面看到新增设备,如图9所示:
图9 新增设备示意图
在此设备的右键菜单中,选择“更新驱动程序软件”,可看到如下窗口:
图10搜索驱动程序示意图
选择第二项,选中电脑中存储的驱动程序文件,看到图11代表安装成功。
图11驱动安装成功示意图
烧录程序
将已经调试好的程序烧录到STC89C52芯片上。关闭电源开关,停止给单片机供电。打开软件stc-isp准备烧录程序。
图12 stc-isp软件界面
发现串口未自动识别。将转接线的USB重新接入电脑,此时软件可以自动识别端口。
点击“打开程序文件”,选择已编写好的.hex文件。再点击“下载/编程”,结果如图13所示:
图13代码文件下载结果图
最后,将已经调试好的程序烧录到STC89C52芯片上,并且进行整体测试和调试,确保LED灯在控制下能够正常工作。
2、设计结果
设计结果主要涵盖了对LED灯的多种动态效果,包括闪烁、亮灭、循环移动和跑马灯。
LED闪烁效果: LED以固定的时间间隔交替闪烁。
LED亮灭效果: LED以固定的时间间隔从亮到灭,再从灭到亮交替变化。
LED循环移动效果: LED以固定的时间间隔在多个LED之间循环移动。
LED跑马灯效果: 两个LED以固定的时间间隔在不同的位置交替点亮,产生跑马灯效果。
六、总结
1、实验当中遇到的问题
LED不亮或不闪烁:
解决方案: 仔细检查硬件连接,确保LED正确连接到单片机引脚。对于每个LED,可以逐个测试,找出具体有问题的LED。
原因:发现错误的硬件连接,LED引脚接错,正负极接反了。
2、实验总结
在这次基于8051单片机的LED灯动态效果设计实验中,我学到了很多关于嵌入式系统和低级别编程的知识。通过实验,我更深入地理解了嵌入式系统的基本原理,包括单片机与外部硬件的交互,以及程序如何控制硬件执行特定任务。 这次实验让我熟悉了8051单片机的基本编程,包括引脚配置、延时控制等,为将来的嵌入式开发打下了坚实的基础。实验中,我学到了如何编写清晰、模块化的代码,通过将LED效果设计为独立的函数,提高了代码的可读性和可维护性。通过参数化设计,我能够轻松地调整LED效果的延时时间,使得代码更加灵活,适应不同的需求。 在实验过程中,我遇到了硬件连接错误等问题,通过良好的错误处理机制和调试技能,我能够快速找到问题并解决。 通过实验,我学到了设计一个小型嵌入式系统的一般思路,包括硬件配置、模块化设计、参数化和可配置性等。: 实验结果也启发了我对未来可能的扩展和优化方向的思考,例如添加更多的LED效果或通过外部输入设备来控制LED。总的来说,这次实验不仅加深了我对嵌入式系统和8051单片机的理解,还提高了我的编程和调试能力。在将来的学习和项目中,我将继续积累经验,不断改进和拓展我的嵌入式开发技能。
七、附录
1、参考文献
[1] 《计算机硬件系统综合设计》指导手册
[2] ZS5110开发板说明书
2、 程序代码
#include <REG52.H>
void delay(unsigned int count) {
while(count--);
}
void main() {
bit LED1 = P1^0;
bit LED2 = P1^1;
bit LED3 = P1^2;
bit LED4 = P1^3;
while(1) {
LED1 = 1;
delay(50000);
LED1 = 0;
delay(50000);
LED2 = 1;
delay(50000);
LED2 = 0;
delay(50000);
LED3 = 1;
delay(50000);
LED3 = 0;
delay(50000);
LED3 = 1;
delay(50000);
LED3 = 0;
delay(50000);
LED4 = 1;
delay(50000);
LED4 = 0;
delay(50000);
LED3 = 1;
delay(50000);
LED3 = 0;
delay(50000);
}
}
实验结果展示(闪烁、循环移动、跑马灯、亮灭,因无法插入视频,故采取图片展示)