基于AT89C52单片机的流水灯
设计实训报告
学 院: 班 级: 学 号:
信息工程学院 12级电子信息工程本科班
姓 名: 指导教师:
2014年 12月29日
目 录
前言 ............................................................................................................. 1 一、总体设计 ............................................................................................. 2
1.1 总体设计框图 .............................................................................. 2 1.2 硬件具体原理图 .......................................................................... 3 二、设计内容 ............................................................................................. 3
2.1 设计要求....................................................................................... 3 2.2 硬件设计....................................................................................... 3 2.3 软件设计....................................................................................... 5
2.3.1 Keil的使用步骤: ........................................................... 5 2.3.2 程序流程 ............................................................................ 8 2.3.3 程序代码 ............................................................................ 9
三、最小系统板的焊接及调试流程 ...................................................... 12
3.1 最小系统板电路焊接流程: .................................................... 12
3.1.1焊前准备: ....................................................................... 12 3.1.2焊接步骤: ....................................................................... 12 3.2 调试及问题解决方法 ................................................................ 13
3.2.1仿真.................................................................................... 13 3.2.2下载.................................................................................... 14 3.2.3问题及解决方法 ............................................................... 14
四、总结体会 ........................................................................................... 15
前言
随着社会的进步和发展和人们生活水平的不断提高单片机技术已经成为当今各种新技术的载体各个应用领域的工程技术人员都应掌握单片机应用术。
同时,它所给人带来的方便也是不可否定的。其中,数码管就是一个典型的例子。但人们对它的要求越来越高要为现代人工作、科研、生活、提供更好的方便的设施,就需要从单片机技术入手,一切向着数字化控制、智能化控制方向发展。
单片机应用的意义不仅在于它的广阔范围及所带来的经济效益。更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。单片微型计算机就是将CPU、RAM、ROM、时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。我们周围有许多广告牌。通过单片机的控制,我们可以把城市的夜晚装饰的更漂亮。
通过对单片机的系统学习,对一些广告灯的设计做了一些必要的改进。同时对自己的改进也做了真实的仿真。达到了预期的目的。
1
一、总体设计
1.1 总体设计框图
外围供 电电源 LED 流 水 灯 AT89S52最小系统 图1.1 流水灯总体设计框图
本次LED流水灯主要基于STC89C52最小系统而设计的。89C52内置8位中央处理单元、256字节内部数据存储器RAM、8K片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40PIN)和PLCC(44PIN)两种封装形式。
89C51的管脚VCC为供电电压,GND为接地。P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地
2
址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
本次流水灯的设计采用使用外部晶振,即外接一个晶体振荡器与内部的差分放大器组成一个时钟电路,再由其产生时钟脉冲为整个电路提供计时等。本次设计使用P1的八个引脚控制流水灯,8个LED灯采用共阴极接法。
1.2 硬件具体原理图
图1.2 硬件原理图
二、设计内容
2.1 设计要求
项目名称:8位LED流水灯设计。 项目特点:思路简单、条理清晰,成本低。
实现功能要求:通过编程控制8个LED灯,实现流水的花样变换 。
2.2 硬件设计
1、电路图
3
图2.1 单片机最小系统
2、选取的原件:(所用所用元件清单) 名称 AT89C52单片机 电阻 排阻 电容 电容 晶振 导线 规格 10kΩ 100uF 10uF 12MHz 数量 1 2 1 1 1 1 3 名称 复位按键 LED USB接口 串行接口 芯片插槽 开关 规格 9孔 数量 1 9 1 1 1 1 3、单片机最小系统PCB图
图2.2 最小系统PCB图
4
2.3 软件设计
2.3.1 Keil的使用步骤:
(1)新建项目文件。点击Project菜单,选择弹出的下拉式菜单中的New Project。在“文件名”中输入第一个工程名称,“LED”。“保存”后的文件扩展名为.uvproj。
(2)选择所要的单片机,常用Ateml公司的AT89C52。
5
(3)在工程中创建新的程序文件。
(4)点击保存新建的程序,led.c,保存在项目所在的目录中。 (5)将程序文件加到项目中。
6
(6)设定创建HEX文件选项。
7
(7)编译运行,调试无误;
2.3.2 程序流程
程序框图如图2.2所示:
8
图2.2 程序流程图
2.3.3 程序代码
#include /*********函数功能:延时一段时间*****************/ void delay(uint k) // { unsigned char a,b; for(;k>0;k--) for(b=142;b>0;b--) for(a=2;a>0;a--); } /*******函数功能:主函数(C 语言规定必须有也只能有1 个主函数)***********/ void main(void) { uint i,j,k,temp,text=0x00; Uint b[8]={0x01,0x04,0x10,0x40,0x80,0x20,0x08,0x02}; Uint a[15]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80}; Uint c[4]={0x81,0x42,0x24,0x18}; 9 Uint d[2]={0xaa,0x55}; while(1) //无限循环 { temp=0x01; //0000 0001<< for( i=8;i>0 ;i-- ) { } //1000 0000>> P1=temp; delay(500); P1=text; delay(500); P1=temp; delay(500); temp=temp<<1; temp=0x80; for( j=8;j>0 ;j-- ) { P1=temp; delay(300); temp=temp>>1; } //0000 0111<< temp=0x07; for( i=8;i>0 ;i-- ) { P1=temp; delay(300); temp=temp<<1; } // 1110 0000>> temp=0xe0; for( j=8;j>0 ;j-- ) 10 { P1=temp; delay(300); temp=temp>>1; } for(k=0;k<=14;k++) //从左到右依次全部点亮 { temp=a[k]; P1=temp; delay(1000); } for(k=0;k<=14;k++) { temp=a[14-k]; P1=temp; delay(1000); } for(j=0;j<=7;j++) { temp=b[j]; P1=temp; delay(1000); } temp=0x00; for( j=4;j>0 ;j-- ) { P1=c[j]; P1=temp; delay(300); } temp=0x00; for( j=0;j<4 ;j++ ) //从左到右依次全部熄灭 //从左到右奇数闪过去,偶数闪回来//从两边闪烁到中间 //从中间闪烁到两边 11 { P1=c[j]; P1=temp; delay(300); } temp=0x00; for(i=0;i<2;i++) //奇数闪一下,偶数闪一下 { P1=d[i]; delay(300); P1=temp; delay(300); } } } 三、最小系统板的焊接及调试流程 3.1 最小系统板电路焊接流程: 3.1.1焊前准备: (1)对照电路图和元件清单仔细查对元器件。 (2)仔细分析电路图,预设各个元器件的摆放位置和焊接顺序。 (3)准备好制作工具,万用表、镊子、吸锡器、斜口钳、剥线钳、烙铁、焊锡等。 (4)插上烙铁,预热。并将烙铁头镀上焊锡以防止烙铁头氧化。 3.1.2焊接步骤: (1)首先要观察电路板的整体结构,形成初步的焊接框架,然后选取小型的元件进行焊接、先把三条引线进行焊接,主要是实现电路的通路功能,注意的是焊接口一定要选择正确。 (2)焊接电阻。焊接的两个电阻大小是10k,焊接前一定要测试电阻值是否正确。 12 (3)焊接晶振。晶振的频率大小为12MHz。 (4)焊接二极管LED指示灯。一定要认清楚正负极,以免出现错误导致指示灯不亮; (5)焊接电解电容。看清正负极。两个30pF电容池加上一个20uF的电容。 (6)焊接电源线和电源插口。 (7)焊接开关和复位器。 (8)焊接单排插针。对于排针的焊接,要有一定耐心,以防针有时对应不齐,所以要多加注意。 (9)焊接排阻。 (10)焊接其余元器件。 (11)管脚修整,剪断已焊接元件多余的引脚,并检查是否所有的器件均焊接完成。 注意的事项: (1)焊接是注意器件的正负极,led灯长正,短负,阴影地方为负,另一半为正。还有二极管,电容等。 (2)芯片焊接时,先固定一个管脚,然后在固定对角线上的管脚,这样再焊接其他的管脚。 (3)焊接时不要造成虚连。焊接时要把整个电路板斜放15度。焊接时先要电略铁把针弄热,在将锡放上。 3.2 调试及问题解决方法 3.2.1仿真 (1)对于设计好的程序要用仿真软件进行调试。方法为双击AT89C51芯片,出现对话框,单击文件夹图标,找到keilec中生成的.hex文件单击,然后点击‘确定’关闭对话框。 13 (2)点击开始按钮,并看LED灯亮的顺序是否和自己编写的程序一致,测试无误。 3.2.2下载 通过prosign.exe软件下载程序到主板。 (1)点击擦除,进行识别USB设备,通过此设备下载到主板上。 (2)点击装flash按钮,选择已经编译好的 流水灯.hex 文件 (3)点击””编程按钮。 (4)程序下载成功。 程序成功下载到芯片中之后,8个LED灯按照预期的设计方案进行闪烁,设计成功。 3.2.3问题及解决方法 电路板焊接完成后,在下载程序和调试的过程中发现,单片机不能正常下载程序,通过仔细检查电路及连接线路,观察发现电路焊接时有某处短路,并且共地线在用杜邦线连接时插错了位置。按正确线路连接后就可以下载程序并能完成特定的功能了。 调试程序的时候发现,引脚不按自己预想的方式闪烁,通过对编程软件检查,发线不是软件配置的问题,通过keilc里的端口调试发现,是自己的软件 14 编写有误,经组员共同协力完成了对既定方式的编写。 四、总结体会 本次实训的目的是焊接单片机最小系统,并编程实现8个LED的花样点亮,在实训的同时学习产品设计的一般步骤。通过这次实训使我了解到了在制作产品时要有足够的职业素养和耐心。 通过综合运用本专业所学课程的理论基础和生产实际实现单片机实训工作的实际训练,从而培养和提高学生独立工作的能力。巩固与扩充了单片机课程所学的内容,掌握单片机实训的方法和步骤。与此同时,了解了单片机的基本结构,提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。 当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次设计遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。 15 因篇幅问题不能全部显示,请点此查看更多更全内容