历史上的今天
返回首页

历史上的今天

今天是:2024年12月07日(星期六)

2020年12月07日 | 单片机32位心形流水灯课程设计

2020-12-07 来源:51hei

1.设计背景

1.1 流水灯在生活中的应用

随着现代科学技术的持续进步和发展以及人们生活水平的不断提高,以大规模、超大规模集成电路为首的电子工艺技术的使用也越来越广泛,结合单片机技术设计的电子电路也层出不穷。 LED彩灯由于其丰富的灯光色彩、低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。利用控制电路可使彩灯按一定的规律不断的改变状态,不仅可以获得良好的观赏效果,而且可以省电。

彩灯的运用已经遍布于人们的生活中,从歌舞厅到卡拉OK包房,从节日的祝贺到日常生活中的点缀,这些不仅说明了我们对生活的要求有了质的飞跃,也说明科技在现实生活中的运用有了较大的发展。在这一设计中我们将运用单片机技术,与单片机芯片STC89C52的功能,对心形流水灯系统进行设计,来实现流水灯的多种亮与灭的循环,给人带来美感。


1.2单片机在生产及生活中的应用

单片微计算机自20世纪70年代问世以来,已对人类生活产生了巨大的影响。尤其是美国Intel公司生产的MCS-51系列单片机,由于其具有集成度高、可靠性强、系统结构简单、价格低廉、易于使用等优点,在世界范围内已经得到了广泛的普及和应用。也正是由于单片机的这些特点,它的出现是集成电路技术与微型计算机技术高速发展的产物,给工业自动化等领域带来了一场重大的革命。


单片机体积小,很容易嵌入到系统之中,以实现各种方式的检测、计算或控制,而一般的微型计算机无法做到。由于单片机本身就是一个微型计算机,因此只要在单片机的外部适当的增加一些必要的外围扩展电路,就可以灵活的构成各种应用系统,如工业自动检测监控系统、数据采集系统、自动控制系统、智能仪器仪表等。除此之外,单片机在家用电器中的应用也很普及,例如,洗衣机、电冰箱、空调机、电风扇、电视机、微波炉、加湿机、消毒柜等,在这些设备中嵌入了单片机之后,其功能和性能大大提高,并可实现智能化和最优化控制。


2.设计方案

2.1 方案对比

1、单片机芯片的比较与选择

单片机作为该电路的主要控制器芯片,即整个系统的控制核心部分,主要是负责控制LED灯的不同变化速度以及变化效果。因此对单片机芯片的选择,必须要求其功耗低、数据转换速率快。


方案一:采用STC89C52单片机。STC89C52单片机是一种低耗、可编程、高性能的8位微控制处理器,其内部包括微处理器、具有8K的系统可编程Flash存储器、 看门狗定时器、输入/输出口、中断系统等,其具有价格低廉、技术成熟、操作简单等特点,满足本系统的要求。

方案二:选择TI公司生产的MSP430F149系列单片机系统。此款单片机具有低电压、超低功耗的特点,工作电压在3.6-1.8V之间,具有强大的功能和高效的运算处理能力。

方案选择:由于STC89C52芯片价格便宜,支持在线下载程序而且MSP430F149系列单片机的功能已经远远高于我们本系统,操作不便。


综合考虑,我们选择方案一。


2、LED灯控制方式的比较与选择

方案一:选用单片机I/O口一对一直接控制LED灯,正好控制32个LED灯。

方案二:采用74HC573锁存器控制LED灯,当运用两片74HC573锁存器就可以控制32个LED灯,只占用了单片机的10个I/O口,这样可以减少I/O口数量。

为了操作方便,减少复杂的步骤,我们采取方案一。


2.2  STC89C52芯片功能

STC89C52是STC公司生产的一种低功耗、高性能的微控制器,具有8K的系统可编程Flash存储器,其具有传统51单片机不具备的功能,在经典的MCS-51内核上做了很多的改进,使得STC89C52在处理嵌入式控制应用系统时更加高效、灵活。STC89C52具有以下标准功能:4个外部中断、全双工串行口、一个7向量4级中断结构、3个16位定时器/计数器、8K字节Flash、512字节RAM(随机存储器)、看门狗定时器,其12周期和6周期可以任意选择,其工作电压在3V~5.5V之间,工作频率在0~40MHZ,实际工作频率可达48MHZ。其管脚的封装图如图1所示。


图1  单片机管脚封装图

1、电源引脚

(1)VCC(38脚):芯片电源,接+5V;

(2)GND(16脚):接地端;

2、时钟引脚

(1)XTAL1(15脚):片内振荡器反相放大器和时钟发生器电路的输入端。当使用片内振荡器时,该引脚连接外部石英晶体和微调电容;当采用外接时钟源时,该引脚接外部时钟振荡器的信号。

(2)XTAL2(14脚):片内振荡器反相放大器的输出端。当使用片内振荡器时,该引脚连接外部石英晶体和微调电容;当采用外部时钟源时,该引脚悬空。
3、控制引脚
(1)ALE(27脚):用来锁存P0口送出的低8位地址

(2)PSEN(26脚:外部ROM读选通信号。
(3)RST(4脚):复位信号输入端。
(4)EA’/Vpp(29脚):内外ROM选择/片内EPROM编程电源。
4、并行I/O引线

(1)P0口:8位,漏极开路的双向I/O口。

当STC89C52扩展外部存储器及I/O接口芯片时,P0口作为地址总线(低8位)及数据总线的分时复用端口。P0口也可作为通用的I/O口使用,但需要上拉电阻,这时为准双向口。当作为通用的I/O输入时,应先向端口输出锁存器写入1,P0口可驱动8个TTL负载。

(2)P1口:8位,准双向I/O口,具有内部上拉电阻。

P1是专为用户使用的准双向I/O口。当作为通用的I/O口输入时,应先向端口锁存器输入1,P1口可驱动4个LS型TTL负载。

(3)P2口:8位,准双向I/O口,具有内部上拉电阻。

当STC89C52扩展外部存储器及I/O口时,P2作为高8位地址总线用,输出高8位地址。P2口也可作为普通的I/O口使用。当作为普通的I/O口使用时,应先向端口锁存器输入1,P1口可驱动4个LS型TTL负载。

(4)P3口:8位,准双向I/O口,具有内部上拉电阻。

P3口可作为普通的I/O口使用,当作为普通的I/O输入时,应先向端口输出锁存器输入1,P3口可驱动4个LS型TTL负载。P3 口还可提供第二功能,其第二功能定义见表1。

表1   P3 口第二功能定义表

引脚

第二功能

说明

P3.0

RXD

串行数据输入口

P3.1

TXD

串行数据输出口

P3.2

INT0’

外部中断0输入

P3.3

INT1’

外部中断1输入

P3.4

T0

定时器0外部计数输入

P3.5

T1

定时器1外部计数输入

P3.6

WR’

外部数据存储器写选通输入

P3.7

RD’

外部数据存储器读选通输入

      

(4)P4口:可实现位寻址。


2.3 方案论证

按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。STC89C52单片机是本次课程设计运用的主要元件。心形流水灯设计使用一个带有32个发光二极管的单片机最小应用系统,即为发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。如果要让接在P0、P1、P2、P3口的LED灯亮起来,只要将P0、P1、P2、P3口的电平变为低电平就可以了。因此,要实现流水灯功能,要将LED依次点亮、熄灭,32只LED灯便会一亮一暗做流水灯了。由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,在控制LED亮灭的时候应该延时一段时间,否则就看不到"流水"效果了。硬件设计框图如图2所示。





                                    图2  硬件设计框图

  • 方案实施

3.1 电路原理图设计

1、电源电路

本次课程设计,单片机正常工作要求输出电压为稳定的5V,输出电压能够适应所带负载的启动项能。并且电路还必须简单可靠,能够输出足够大的电流,但是不至于会烧坏元器件。我们采用USB取电,4.8V锂电池供电。电源电路如图所示,C1和C2起到滤波作用,R18和R19的作用是平衡电路中的电流,以免在只有1个LED灯亮时烧坏元器件。电源电路如图3所示。

图3  电源电路图

2、时钟电路

单片机内有一个由反相放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入端和输出端。在XTAL1和XTAL2引脚上外接石英晶体和微调电容构成并联振荡回路。晶振频率设置为11.0592MHZ,作用是产生时钟信号。单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。电容值为30pF,可以起到频率微调作用。时钟电路如图4所示。

图4  时钟电路图

3、复位电路

单片机RST接口为复位信号输入端,高电平有效。在该引脚上加上持续时间大于两个机器周期的高电平,就可以使单片机复位。在单片机正常工作时,此引脚应为小于或等于0.5V的低电平。复位电路接单片机RST端口,在RST输入端出现高电平时实现复位和初始化。复位电路如5所示。

图5  复位电路

4、显示电路

    单片机的P0口为8位的漏极开路的双向I/O口,当P0口作为普通的I/O口使用时,需要上拉电阻,这时为准双向口。P1 、P2、 P3 都为8位的准双向口,具有内部上拉电阻。图6为显示电路,单片机I/O口一对一直接控制LED灯,显示电路中的32个电阻既为上拉电阻,也起到电路分压作用,防止烧坏元器件。显示电路如图6 所示。

                                    图6  显示电路图

3.2 程序设计

  • Keil软件介绍

本次课程设计,我们采用Keil软件进行C语言编程。Keil软件是美国Keil Software公司开发的,它适合WindowsXP、Win7等系统,具有可视化操作界面,使用方便简单,并且支持C51语言、汇编语言以及两者混合编程等多种方式的单片机设计,KeilC51在兼容标准C语言的基础上,又增加了很多与51系列单片机硬件相关的编译特性,其生成的程序代码运行的速度快,所需的存储器空间小。

Keil软件已被完全集成到一个功能强大的全新环境中,该开发环境集成了文件编译处理、编译链接、项目管理、工具引用、和仿真软件模拟器等多种功能。Keil软件具有丰富的库函数,同时也带有功能强大的集成开发调试工具,可以自动识别所编写程序的语法错误,编译效率也很高, 能将源文件编译为二进制机器语言代码,其软件调试仿真功能也很强大,能通过单步、设置断点等功能让编程者了解CPU正在进行的程序,并能监控各变量以及各寄存器是否符合编程者的要求。

  • 程序编写

单片机的应用系统由硬件和软件组成,在硬件原理图搭建完成上电之后,暂时还不能看到流水灯循环点亮的现象,还需要编写程序控制单片机管脚电平的高低变化,来实现LED灯的各种亮灭功能。

先将P0、P1、P2、P3全部置1,即通入高电平,用16进制表示为0XFFH,则32个LED灯全部处于熄灭状态。然后给P0口赋值0X7FH,即只有P0.0处于低电平时,LED1灯点亮。使用延时函数delay,并设置延时时间为2秒,延时时间一到P0口的值就变为0X3FH,即P0.0和P0.1都为高电平,LED2也开始点亮,如此循环P0口控制的8个LED灯全部点亮,当高电平变为低电平时,LED灯熄灭。P1、P2、P3口控制的LED灯闪亮和熄灭原理同P0口一样,所以就可以看到LED灯的流水效果了。程序流程图如图7所示。

图7 程序设计流程图

  • 程序调试

    在程序设计好了之后,需要建立工程、写C源文件、连接工程、获得目标代码Hex文件,所以程序的调试就显得至关重要。刚开始程序总是编译出错,请教了老师之后才知道是程序的编写存在语法错误,我们就仔细阅读并检查所编写的程序,发现在给I/O 口的状态赋初值时,多加了一个分号,导致语法错误,编译不能正确通过。经过反复的检查、编译、调试,程序最终没有错误,可以将程序代码文件调入Proteus软件,进行电路功能仿真。

3.3 电路功能仿真

在各部分电路设计的基础上,按照总体电路图在Proteus上一一进行器件选择,并连接。将电路连接好后,为各个器件选择合适的参数,然后调入已编译好的目标代码Hex文件,启动仿真。根据LED灯是否发亮,判断所设计的电路是否可以实现32个LED灯依次点亮、依次熄灭、对角闪亮、对角熄灭、间隔闪亮、间隔熄灭等多种功能。刚开始时,LED灯不亮,仔细检查原来是将LED灯接反了,改正之后LED灯便可以正常发光了。电路仿真的结果为32个LED灯依次发亮、依次熄灭,并可以实现多种亮灭功能。根据仿真结果可知电路原理及程序无误,可以进行PCB设计。

3.4 电路PCB设计

    在原理图及仿真图设计成功的情况下,设置正确的PCB外形和尺寸,按照课程设计所给的要求,设置环境参数。接着向PCB文件中导入网络表及元件的封装等数据,然后设置工作参数。根据要求设置布线规则。在上述准备工作都完成就绪的情况下,对原件进行布局,使尽量少的线重叠,以减少布线时跳线的出现。

3.5 安装与调试

在安装时要考虑LED灯正负极有没有接反,所以安装前,请教了老师怎样辨认正负极。然后安装好所有的元件后,按照电路图逐一检查电路有没有漏焊的问题,接下来用万用表逐一检查有没有虚焊、线路断路或线路短路的问题。在线路没有问题的情况下连接电源调试,加入电源以后, 32个LED灯可以循环点亮、依次熄灭,可以达到预期的效果。

4. 结果与结论

在设计电路图的过程中,经过了多次分析和仿真验证,并结合所给的器件清单最后确定了需要哪些器件来实现电路的功能,并且保证了所需要的元器件在给出的清单范围内。经过Proteus软件多次仿真和修改后,在仿真电路图实现设计要求的前提下确定了最终的原理图。然后在Altium Designer中画出来所对应的原理图,再导入到PCB设计的环境中,进行PCB设计。在经过小组内多次讨论和听取指导老师的意见后确定了PCB的最终布局,布线完成后打印输出制成印刷电路板。将所有的元器件放到相应的封装位置,查无误后进行焊接。焊接完成,接入电源后,心形流水灯实现了32个LED灯依次点亮、依次熄灭,对角点亮、间隔点亮灯多种功能。电路能够正常工作,得到了老师的肯定。

    总体说来,电路布局合理,采用了模块化的布局方式即先布局各个功能模块,再将各个功能模块连接在一起组成最终的电路,但是电路还是存在一定的不合理之处,在布局合理美观方面存在一些冲突,由于布线太过宽松,整体尺寸稍大。

5. 收获与致谢

经过为期两周的课程设计,我收获很多。在本次课程设计中,我们遇到了很多困难,比如电路图画错、编程出现错误、软件不会使用、元器件虚焊断焊以及焊错等。在这期间,我还是努力认真的去检查和修改,虽然这个过程非常艰难,但还是值得我回味的。在整个课程设计过程中,我查阅了相关书籍和文献资料,从中学习了一些单片机的工作原理以及怎样去设计一个电子电路,还参照了一些以前做过的课程设计。这次课程设计,加深了我对以前学过的课本知识的理解和认识,以前有些课本上的理论知识总是弄不懂,这次通过自己亲自动手去实践,很多问题就通俗易懂了。本次课程设计,真正提高了自己的各项能力,比如独立思考解决问题的能力,与人协作的能力,亲自动手实践的能力,真正的提高了自己的实践技能,培养了自己的创新能力,为今后完成更高质量的项目打下了基础。

这次我们能够顺利完成课程设计,是与老师们的辛勤劳动分不开的,所以在此,特别感谢课程设计辅导老师赵路华老师和单片机任课老师丁莹亮老师,感谢他们在设计中的耐心指导和提出的宝贵建议,同时也感谢小组搭档,和我共同度过这为期两周的课程设计。

6. 参考文献

[1] 林志琦.基于Proteus的单片机可视化软硬件仿真[M] .北京:北京航空航天大学出版社,2006.

[2] 何立民.MCS-51单片机应用系统设计[M] .北京:北京航空航天大学出版社,1990.

[3] 张毅刚.单片机原理及应用[M] .北京:高等教育出版社,2004.

[4] 谷树忠,刘文洲,姜航.Altium Designer教程-原理图、PCB设计与仿真.北京:电子工业出版社,2010.

[5] 张阳天,韩异凡.Protel DXP电路设计[M].北京:高等教育出版社,2005.


7. 附件

7.1 元器件清单

    元器件清单如表2所示。

元器件名称

型号规格

数量

备注

单片机

STC89C52

1

贴片

晶振

11.0592MHZ

1



电容


10uF

1

电解电容

30pF

2

瓷介电容

0.1uF

2



      电阻

100

36


10K

4


LED灯


32


USB接口


1



表2 元器件清单表

7.2 电路仿真图

    电路仿真图如图8所示。


图8  电路仿真图

7.3 电路原理图

    电路原理图如图9所示。

图9 电路原理图

7.4 PCB布线图

    PCB布线图如图10所示。


图10  PCB布线图

7.5 实物图

    实物图如图11所示。



图11 实物图

7.6 程序代码


单片机源程序如下:

#include

#include

#define              uint unsigned int

#define              uchar unsigned char

uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个点亮0~7

uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个点亮7~0

uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个灭0~7

uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个灭7~0

void delay(uint t);              //延时

void zg(uint t,uchar a);//两边逐个亮

void qs(uint t,uchar a);//全部闪烁

void zgxh(uint t,uchar a);  // 逆时针逐个点亮

//void zgxh1(uint t,uchar a);  // 顺时针逐个点亮

void djs(uint t,uchar a);  //对角闪

void lbzgm(uint t,uchar a);//两边逐个灭

//void sszgm(uint t,uchar a); // 顺时针逐个灭

void nszgm(uint t,uchar a); // 逆时针逐个灭

void sztl(uint t,uchar a);//顺时逐个同步亮

void nztl(uint t,uchar a);//逆时逐个同步亮

void sztm(uint t,uchar a);//顺时逐个同步灭

void nztm(uint t,uchar a);//逆时逐个同步灭

void hwzjl(uint t,uchar a); //横往中间亮

void hwzjm(uint t,uchar a); //横往中间灭

//void swzjl(uint t,uchar a); //竖往中间亮

//void swzjm(uint t,uchar a); //竖往中间灭

void nzdl(uint t,uchar a); //逆时逐段亮

void nzdgl(uint t,uchar a);   //逆时逐段一个点亮

void jgs(uint t,uchar a);   //间隔闪

void zg(uint t,uchar a)//两边逐个亮

{

              uchar i,j;

      for(j=0;j              {

                              P0=P1=P2=P3=0xff;

                              P0=0x7f;delay(t);

                              for(i=0;i<7;i++)

                              {

                              P0=table1[i+1];

                              P2=table1[i];

                              delay(t);            

                              }

                              P2=0x00;P1=0xfe;

                              delay(t);

推荐阅读

史海拾趣

艾迪沃德公司的发展小趣事
使用万用表检测整流桥和滤波电容是否正常工作,如有损坏需更换。
Aeroflex公司的发展小趣事
检查电源指示灯是否亮起,以初步判断电源是否接通。
Alcatel-Lucent公司的发展小趣事
避免长时间超负荷使用仪器,以免对电源电路造成损坏。
风华(FH)公司的发展小趣事

为了进一步扩大市场覆盖和品牌影响力,福斯特半导体积极寻求战略合作。2023年2月,福斯特半导体与世强先进(深圳)科技股份有限公司签署授权代理协议,借助世强先进在技术分销和互联网推广方面的丰富经验,布局线上和线下功率器件渠道市场。这一合作不仅拓宽了福斯特半导体的产品应用领域,还提升了公司在新能源汽车、储能、照明等市场的知名度。通过世强硬创平台,福斯特半导体的功率MOS和二极管等产品得以快速覆盖目标市场,进一步降低了客户供应链成本。

Brilliance公司的发展小趣事

在国内市场取得一定成功后,Brilliance公司开始将目光投向国际市场。公司制定了详细的国际化战略,积极寻求与国际知名企业的合作机会。通过与国外合作伙伴的共同努力,Brilliance的产品逐渐打入国际市场,并获得了良好的口碑。同时,公司还积极参加国际电子展会和交流活动,提升了品牌知名度和影响力。

AIRPAX公司的发展小趣事

进入21世纪,AIRPAX开始积极拓展全球市场。通过与各国企业的合作与交流,AIRPAX的产品逐渐进入欧洲、亚洲等地区,服务于更多国家的客户。同时,AIRPAX还积极寻求与其他行业领先企业的战略合作,共同推动电气保护技术的发展。这些合作不仅提升了AIRPAX的品牌影响力,也为其带来了更多的商业机会。

问答坊 | AI 解惑

向版主求助

版主 ,发现这里面有很多好东东  可是我的芯币不够啊 总是不能下载 好着急啊  能不能先送我点啊 ?? 我最近刚着手DSP  觉得这个论坛挺好的  里面的东西很多 谢谢斑竹了哦…

查看全部问答>

5KW音频放大器,如何实现

刚刚老板找我谈话.说希望我提出一个方案,实现5KW音频放大其他具体要求没说.只说是用于军舰喊话.我跑了趟西四音响市场.都说没有5KW的,最大只有2X2KW.一般常见只有几百W. 买不到看来只有自己DIY了,我自己提出使用电子管FU81四只来实现推挽输出,功率 ...…

查看全部问答>

STANDARDSDK STANDARDSDK_42有什么区别(新手)

1、用过EVC4.0平台,它上面有STANDARDSDK和STANDARDSDK_42,是不是编真机版时就选前者,跑模拟器就选择后者?它们有什么区别? 2、顺便问问,在用EVC时,比如我选择了STANDARDSDK这个SDK,为什么编译选项Win 32[WCE ARM4V]既可以有release,又可以 ...…

查看全部问答>

verilog hdl的编译器

大虾们,verilog hdl的编译器 有没有只有上10M的 小软件啊,我只需要一个编译器,顶多加上一个语法检测器。因为我用的是上网本,小电脑处理能力很有限,ISE根本装不上去,加上下个ISE估计就要花好几天时间,推荐下 我该下那个编译器 谢谢啊…

查看全部问答>

42394443 广嵌arm9群

42394443 广嵌arm9群 开通请加入…

查看全部问答>

M0的开发板咋挑呀,英蓓特蓝精灵、周立功TinyM0、poweravr的NanoM0

另外还有从坛友签名里翻到的智林Z111xP和龙达电子的 请问主要的区别在哪?硬件的、调试环境的,谢谢啦 在下是brand new的新手,学校里专业是自动化,现在用PLC [ 本帖最后由 krtek 于 2010-9-29 21:06 编辑 ]…

查看全部问答>

哪位有串口联网模块??

来自:电子工程师技术交流(12425841)…

查看全部问答>

DAC7512 电压设置时间问题?

芯片资料说设置时间只要10us,现在有50us,spi接口是用FPGA口模拟出来的,频率是20MHZ,做的是dds正弦波生成,后来把串口频率改成30MHZ,还是50us,求高手指点…

查看全部问答>

MSP430 5438 定时器A TIMER A 新认识

现在的认识:MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB了解了定时器A的用法:定时器A可以分成几个独立的时间周期。这几个时钟周期共用一个计数器TA1R 或TA0R。 在头文件中可以查到: TIMER0 含  TA0CCR0- TA0CCR4 五个TIMER1 含& ...…

查看全部问答>