ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:578.16KB ,
资源ID:9191034      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9191034.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计16个LED灯的多样显示控制器.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计16个LED灯的多样显示控制器.docx

1、单片机课程设计16个LED灯的多样显示控制器单片机课程设计-16个LED灯的多样显示控制器信 息 工 程 学 院 课 程 设 计 报 告设计题目: 节日彩灯控制器设计 名 称: 电子信息工程专业综合课程设计(1)班 级: 姓 名: 学 号: 设计时间: 2016.06.22 指导教师: 评 语: 评阅成绩: 评阅教师: 拨码开关、晶振。四、课题分析及设计4.1 设计任务彩灯用16个发光二极管代替;电路具有控制16个LED灯逐个点亮、单数点亮、双数点亮、扩散点亮等功能(用4个按键切换LED显示状态);彩灯两灯移动时间间隔为100ms。4.2 设计方案本课题使用AT89C51单片机时无须外扩存储器

2、。因此,本流水灯实际上就是一个带有16个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。如果要让接在P0.0口和P2.0口的16个LED亮起来,那么只要把P0.0口和P2.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED熄灭,就要把P0.0口的电平变为高电平;同理,接在P0.1P0.7口的其他7个LED的点亮和熄灭的方法同以上LED。因此,要实现流水灯功能,我们只要将发光二极管LED1LED16依次点亮、熄灭,16只LED灯便会一亮一暗的做流水灯或跑马灯了。同样的道理,可以让16个灯上移或下移点亮,全亮、全灭。在此我们还应注

3、意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。4.3 系统硬件设计AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8

4、位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图4.1所示。图4.1 AT89C51单片机芯片引脚4.3.1 单片机最小系统(1)P0口介绍P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义4为数据/地址的低八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻(2)P1口

5、介绍P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。(3)P2口介绍P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时

6、,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。(4)P3口介绍P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口。复位系统(5)上电复位电路AT89C51的上电复位电路如图4.2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端

7、内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1F。上电复位的工作过程是在加电时,复位电路通过电 容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在如图的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生

8、损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。图4.2 上电复位电路(6)手动复位电路手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。如图4-3所示,当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。图4.3 手动复位电路(7)晶振系统晶振是给单片机提供工作信号脉

9、冲的.这个脉冲就是单片机的工作速度.比如12M晶振.单片机工作速度就是每秒12M.单片机内部也有晶振,接外部晶振可以或得更稳定的频率。因为晶振与单片机的脚XTAL0和脚XTAL1构成的振荡电路中会产生偕波(也就是不希望存在的其他频率的波),这个波电路的影响不大,但会降低电路的时钟振荡器的稳定性,如图4.4所示。80C51型单片机内有一高增益反相放大器,按如图连接可构成自激振荡电路,振荡频率取决于石英晶体的振荡频率,范围可取1.212MHz,C01.C02主要起频率微调和稳定作用,电容值可取530Pf。图4.4 晶振电路4.3.2 控制电路介绍(1)按键机械式按键再按下或释放时,由于机械弹性作用

10、的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。抖动时间的长短与开关的机械特性有关,一般为510 ms,如图4.5所示。图4.5 按键控制电路(2)LED电路LED 显示器具有功耗低,接口控制方便等优点,能直接与单片机接口,可方便地实现各种不同的操作。16个发光二极管L1-L16分别接在单片机P0.0-P0.7,P2.0-P2.7。输出“0”,发光二极管亮。图4.6 LED显示电路4.3.3 Proteus电路仿真图图4.7 电路原理图4.4 软件设计4.4.1 程序流程图图4.9 主程序流程图在主程序中,应该尽量的使得任务简化,不要让中断服务程序作过多复杂的任务,而要尽量把这

11、些复杂的任务放到主程序中间去完成。中断流程如图所示。去抖功能:读入键值,存入地址,然后延迟10ms后,也就是一个很短的时间之后,再次读入一个键值,两次键值相比较,如果一样则不是因为外部原因抖动产生按键,如果不一样则说明是别的原因产生的按键抖动。这样的一个程序就可以去除因为抖动产生的错误输入信号。4.4.2 软件程序及分析(1)主要程序分析:#include /定义8051寄存器的头文件#include /定义intrins.h函数#include /定义数学函数#include #define u8 unsigned char /定义无符号字符#define s8 signed char#de

12、fine u16 unsigned short /定义无符号整型#define s16 signed short #define u32 unsigned int /定于无符号整型#define s32 signed int #define fp32 float /定义浮点数#define fp64 double /双倍精度浮点数#define INT8U unsigned char#define INT16U unsigned intsbit K1 = P10;/按键1sbit K2 = P11;/按键2sbit K3 = P12;/按键3sbit K4 = P13;/按键4#define

13、KEY_CHK_TIM 10 /按键检测时间 u8 _g_key_value; /获取到按键的值跑马灯数组:code u16 dispcode16= 0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff, 0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f;双流水灯数组:code u16 dispcode116= 0xfe7f,0xfc3f,0xf81f,0xf00f,0xe007,0xc003,0x8001,0x0000, 0x7ffe,0x3ffc,0x1ff8,0x0ff

14、0,0x07e0,0x03c0,0x0180,0x0000;定时器初始化函数:void time_init(void) TMOD |= 0x01; TH0 = 0xf8; TL0 = 0x2f; /设定定时器初值(65535-63535)大约60ms TR0 = 1; /打开定时器 ET0 = 1; /开中断 EA = 1; ES = 1; (2)跑马灯运行方式:void disp0(void) /调用前面的跑马灯数组 u8 i; /定义i for(i = 0 ;i8; / P0口运行第二行数组 P2 = dispcodei; /P1口运行第一行数组 delay_ms(100); /延时100

15、ms (3)鸳鸯灯运行方式:void disp1(void) delay_ms(100); /延时100ms P0 = 0xaa; /P0口8个LED单数亮 P2 = 0xaa; /P0口8个LED灯亮 delay_ms(100); P0 = 0x55; /双数灯亮 P2 = 0x55; /双数灯亮 delay_ms(100); /延时100ms(4)双流水灯运行方式:void disp2(void) u8 i; for(i = 0 ;i8; /P0口运行第二行数组,逐个点亮,向中间 P2 = dispcode1i; /P2口运行第一行数组,逐个点亮,向中间 delay_ms(100); fo

16、r(i = 8 ;i8; /向两边亮 P2 = dispcode1i; /向两边亮 delay_ms(100); /延时100ms (5)按键扫描函数:void key_scan(void)static u16 k1_pre_kep_tim = 0; /k1按键按下保持时间static u8 k1_press_flag = 0; /k1按键按下标志static u8 k1_short_press_flag=0; /k1短按触发标志static u16 k2_pre_kep_tim = 0; /k2按键按下保持时间static u8 k2_press_flag = 0; /k2按键按下标志sta

17、tic u8 k2_pre_ctn_tim=0; /按键连续触发的间隔延时计数static u16 k3_pre_kep_tim = 0; /k3按键按下保持时间static u8 k3_press_flag = 0; /k3按键按下标志static u8 k3_pre_ctn_tim=0; /k1短按触发标志static u16 k4_pre_kep_tim = 0; /k4按键按下保持时间static u8 k4_press_flag = 0; /k4按键按下标志if (K1 = 1) /当按键松开为真 k1_pre_kep_tim = 0; /k1按键按下保持时间清零 k1_press_

18、flag = 0; /k1按键按下标志清零if (k1_short_press_flag =1 ) /短按标志为1 k1_short_press_flag = 0; /短按标志清零 _g_key_value = 1; /触发1号短按键 else if (k1_press_flag = 0) k1_pre_kep_tim+; /累加定时中断次数if (k1_pre_kep_tim KEY_CHK_TIM) k1_short_press_flag = 1; /短按标志置1 if (k1_pre_kep_tim 300) k1_pre_kep_tim = 0; /中断计数清零 k1_short_pr

19、ess_flag = 0;/清除按键短按的有效标志 k1_press_flag = 1;/自锁按键置位,避免一直触发 _g_key_value = 11;/触发长按 (6)主程序:if (con_f = 1) disp0(); /只运行跑马灯 if (con_f = 2) disp1(); /只运行鸳鸯灯 if (con_f = 3) disp2(); /只运行双流水 if (con_f = 4) disp0(); /循环以上三种 disp1(); disp2(); 五、组装调试5.1 硬件硬件包括MCS-51单片机,LED发光二极管,晶振,电容,开关,电源,电阻及导线。将所有硬件配齐,按电路

20、原理图组装好电路,在电路板上一一对应,所有硬件准备就绪后,接通电源,软硬结合。首先用烧录软件给单片机芯片加载*.hex文件,等待加载完毕,运行电路。当按下K1时,跑马灯开始,16个LED灯从上到下逐个点亮,第一个灯亮,然后灭,然后每个间隔时间为100ms;当按下K2时,鸳鸯灯开始,16个LED灯先单数亮,然后双数亮,间隔时间也是100ms;当K3按下时 ,双流水灯开始,16个LED灯依次往中间移动,然后再依次往外移动,亮过的灯不熄灭;当K4按下时,循环以上三种亮灯方式。最终实现功能,演示如下图5.1所示。图5.1 实物演示图六、总结经过一段时间的努力,我们顺利的完成了这次单片机课设。这是一个磨

21、练意志的过程。从课题的选择开始,计算器的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Proteus软件画电路图时,然后再转换成一维的WORD中进行编辑,这个过程中让我掌握了计算机辅助的设计技术。当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。需要的是细心和耐心。在很大程度上培养了我拼搏的工作精神。使我受益匪浅,更加明确了自己专业的方向。了解了在单片机系统中扩展简单I/O接口的方法. 外部中断技术的基本使用方法,掌握了中断处理程序的编程方法,掌握51系列单片机的基本硬件结构及工作原理,掌握51系列单片机的C语言及基本程序设计方法;学习并掌握在PROTEUS仿真环境中进行调试的基本方法。顺利如期的完成本次课程设计给了我很大的信心,让我了解专业知识的同时也对本专业的发展前景充满信心,通过对单片机的系统学习。对一些LED的设计做了一些必要的改进。同时对自己的改进也做了真实的仿真。达到了预期的目的。但是在改进的过程里也发现了自己的很多的不足。这会在以后的学习生活里不断提高,逐步完善自己。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2