单片机课程设计.doc_第1页
单片机课程设计.doc_第2页
单片机课程设计.doc_第3页
单片机课程设计.doc_第4页
单片机课程设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录第一章 引 言1.1 多功能LED数据钟系统概述 1.2 本设计任务及要求 第二章 硬件电路设计 2.1 单片机控制系统原理2.2 模块电路设计与比较2.3 硬件设计及实现 2.3.1 MCS-51单片机控制系统 2.3.2 复位电路 2.3.3 实时时钟模块 2.3.4 键盘模块 2.3.5 电源供电电路 2.3.6液晶模块 2.3.7蜂鸣器电路第三章 系统软件设计 3.1 系统主程序设计3.2 闹铃调时子程序3.3 定时中断子程序第四章 结束语附图一 系统结构原理图附图二 多功能数据钟PCB图附录 C语言程序源代码第一章 引 言近年来,随着我国科技的不断发展,我国经济发展的支柱产业电子产业获得长足发展,近年来各种电子产品琳琅满目,且各具特色,款式新颖的电子产品不断问世。多功能数据钟便是这一发展趋势中的代表,LED数据钟是采用数字电路实现时,分,秒数字显示的计时装置,适合单位、会议、礼品屋及人们生活用品实用。清晰色彩显示的时间以及附带的闹钟可实现时间显示、闹钟设置、秒表显示,报警模块由报警蜂鸣器和带音乐芯片的扬声器等可实现闹铃控制,秒表显示等功能更加体现了人性化的设计特点,使您无论远近,都能快速准确看清时间,一目了然,在繁忙的学习时间里,多功能数据钟几乎是我们不可或缺的一件物品。数据钟的设计及实现1虽然简单,但却可以巩固和加强所学课程的理论知识,培养独立分析问题和解决问题的能力以及创新能力和创新思维。由此可见,诸如此类的课题设计对于本科生是具有多么重要的意义。1.1 多功能数字钟系统概述本设计以单片机MCS-C51为控制核心,由27128扩展芯片,实时时钟模块、人机接口模块、报警模块等部分组成。其中实时时钟采用DS12887可实现年月日时分秒等时间信息的采集和闹钟功能。人机接口模块由44键盘和LED点阵液晶组成,1.2 本设计任务及要求1.2.1 系统硬件要求:1、 配置单片机的外部程序ROM空间,容量为16K(使用27128芯片)。2、 使用51单片机内部时钟信号为系统提供计时信号。3、 配置LED数码管或液晶显示器显示时间,设置操作按键。1.2.2 系统功能要求:1、 在LED数码显示器或液晶显示器上显示:时:分:秒。2、 按键功能自定义,实现按键调整时间功能。3、 具有闹钟功能(选做)。4、 具有秒表功能(选做)。 第二章 系统主要硬件电路设计2.1 单片机控制系统原理采用 MCS-51单片机来实现系统的控制。外部扩展用16KB27128芯片、键盘用芯片7289控制,时钟芯片采用DS12887。此系统硬件简洁,将复杂的硬件功能用软件实现,因此系统控制灵活,能很好地满足本题的基本要求和扩展要求。此方案基本原理框图如下图所示。 图2-1系统总体设计框图2.2 模块电路设计与比较1.时钟方案选择:方案一:要求显示小时和分钟,因此可以用门电路组合构成时钟发生器,但此方案硬件复杂,稳定性低,且不易控制。 方案二:采用带 RAM的时钟芯片DS12887。该芯片可以进行时分秒的计数,具有100年日历,可编程接口,还具有报警功能和掉电保存功能,并且可以对其方便的进行程序控制,能很好的符合要求。故采用方案二。2.显示模块的选择:方案一:采用数码管显示。数码管亮度高、体积小、重量轻,但其显示信息简单、有限,在本题目中应用受到很大的限制。 方案二:采用液晶显示。液晶显示功耗低,轻便防震。采用液晶显示界面友好清晰,操作方便,显示信息丰富。 其他设计的考虑: 由于单片机接口线有限,我们采用一片 8255扩展口线,做相应的控制。闹铃响采用带音乐芯片的扬声器,为实现题目中非接触止闹功能,我们可以采用接近开关或无线接收发送模块通过单片机控制闹铃停止。 2.3 硬件设计及实现本设计以单片机AT89C51为控制核心,由实时时钟模块、人机接口模块、语音报警模块等部分组成。可实现时间显示、闹钟设置、等功能。报警模块由报警蜂鸣器和带音乐芯片的扬声器等可实现闹铃控制和电网电压的过压、欠压报警功能。键盘用芯片7279控制,时钟芯片采用DS12887。硬件设计是整个系统的基础,要考虑的方方面面很多,除了实现此设计基本功能以外,主要还要考虑如下几个因素:系统稳定度;器件的通用性或易选购性; 软件编程的易实现性;系统其它功能及性能指标;因此硬件设计至关重要。现从各功能模块的实现逐个进行分析探讨。2.3.1 MCS-51单片机控制系统单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。它由单片机、时钟电路、复位电路等组成。为了简化电路、降低成本、提高可靠性.MCS-51单片机作为其中具有代表性的一种,是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器(SFR)的集中控制方式。本系统采用MCS-51作为主控制器,为达到设计要求,扩展一片27128ROM芯片。单片机最小系统包括: 1、 单片机MCS-C512、 27128扩展ROM3、 键盘模块4、 可编程外围并行接口芯片81555、 4*4键盘6、液晶模块。2.32 复位电路 MCS-C51是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。上电复位:上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。电路图如下: 上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。2.3.3实时时钟模块时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用的是内部时钟方式。电路图如下:MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。2. 3. 4键盘模块系统四个独立键盘均采用查询方式,S3用于设置年,月,日,时,分,秒,星期的数值加,以及闹钟开,S4用于设置年,月,日,时,分,秒,星期的数值减,以及闹钟关,S5用于具体设置时钟位的切换,S6用于设置闹钟,电路图如下 图2-8 键盘显示电路图2.3.5 电源供电电路我们采用外接USB端口的方式为单片机供电,LPOW1为电源显示灯,当按键S2按下,显示灯亮,表示给单片机供+5V电压。其电路如图2.4所示2.3.6 液晶模块液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件本次采用的LED液晶组是一款具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。2.3.7 蜂鸣器电路 当AT89C51单片机给蜂鸣器一个低电平时,三极管导通,蜂鸣器发出声音作为闹铃。其电路如图2.6所示: 第三章系统软件设计硬件平台结构一旦确定,大的功能框架即形成。软件在硬件平台上构筑,完成各部分硬件的控制和协调。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是本系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。同时,对软件进行全面测试也是检验错误排除故障的重要手段。由于编程多涉及到数值运算,比较复杂,还有LED的菜单界面设计都是需要多重选择判断,用我们平时常用的汇编语言编程是很难实现的,这里我们选用了移值性好、结构清晰、能进行复杂运算的C语言来实现编程。3.1 系统主程序设计为实现系统功能,系统软件共设4个运行状态和一个中断处理程序(SR)。各部分功能描述如下: S1:时钟日期显示状态,89c51从ds12887循环读取时间日期值并显示;时间值与闹钟设置值比较,若定时到,则进入闹铃状态。S3用于设置年,月,日,时,分,秒,星期的数值加,以及闹钟开,S4用于设置年,月,日,时,分,秒,星期的数值减,以及闹钟关,S5用于具体设置时钟位的切换,S6用于设置闹钟。SR:中断服务程序。读取键盘按键值并根据系统所处的不同的状态设置标志位。 为了保证系统的可靠运行,必须要有良好的软件相配合,而且要有友好的人机对话功能,鉴于以上要求,该系统软件部分主要由主程序、中断子程序、延时子程序、提示音产生子程序等几大模块组成。 系统结构流程图如下:3.2闹铃调时子程序:图3-2 校时调时子程序由系统结构框图可以看出,数字钟显示通过AT89C51的IO口来控制。89c51从ds12887循环读取时间日期值并显示,时间值与闹钟设置值比较,若定时到,则进入闹铃状态,显示选择菜单,可选择闹钟开、闹钟开、闹钟时间设置。读取键盘按键值并根据系统所处的不同的状态设置标志位。为了保证系统的可靠运行,必须要有良好的软件相配合,而且要有友好的人机对话功能。3.3 定时中断子程序为了保证系统的可靠运行,在主程序之外还增加了定时中断程序。如果用户在设定的时间内没有任何操作,就自动挂机,防止系统陷入死等。由于定时中断程序的挂机操作是从中断处理程序中直接跳转到主程序中,没有清除中断标志位,这使得主程序不能正常执行。因此,监控程序使用了一项技术,将需要跳转的程序地址压入堆栈,并重新调用RETI从一个不存在的中断程序中退出,使单片机清除中断标志位,并从刚压入堆栈的地址开始执行。程序流程图如图3-3所示。图3-3 定时中断流程图第四章 结 束 语经过近一个星期的努力,课程设计终于完成了。在本设计中尽量做到了硬件电路简单稳定,减小电磁干扰和其他环境干扰,充分发挥软件编程的优点,减小因元器件精度不够引起的误差。回顾这次设计过程,我的心情无比的激动。通过对单片机的编程,我进一步了解了单片机的内部结构,掌握了其编程的方法,学到了很多课本上没有的东西,激发了我们学习单片机的兴趣,课外做一些小东西的兴趣。同时也为了大四的毕业设计积累了不少的财富。由于时间有限和本身知识水平的发挥,我认为本系统还有需要改进和提高的地方,例如选用更高精度的元器件,硬件电路更加精确稳定,软件测量算法进一步的改进与完善等。通过这次的制作,我们的能力提高了不少,同时也希望老师给我们的作品多提点意见,让我能掌握更多的东西。附图一:系统结构原理图附图二:多功能数据钟PCB图:附录 程序源代码:Main.C#include #include lcd.h#include /*宏定义*/#define uchar unsigned charsbit speak=P20;uchar flag=0;uchar key_down=0;uchar flag_day=0;uchar flag_mon=0;uchar flag_year=0;/*全局变量*/uchar counter=0;uchar counter_10ms;uint mic;uchar second;uchar min=30;uchar hour=10;uchar day=9;uchar mon=7;uint year=2007;uchar foucs=8;char ster=1;uchar direct=0x83;uchar flag_direct=0;uchar flag_one=0;uchar line117;uchar line217;uchar flag_c=1;uchar clock=0xFF;uchar c_min=31;uchar c_hour=10;void delay_ms(uchar n) uchar i,j; for(i=n;i0;i-) for(j=248;j0;j-) _nop_();_nop_(); /*定时器0中断程序*/void timer0(void) interrupt 1 using 2TL0=(65535-10000)%256; TH0=(65535-10000)/256; counter+; if(key_down=0xFF)/ counter_10ms+; if(counter_10ms=100) counter_10ms=0; mic+; if(mic=1000) mic=0; if(counter=100) counter=0; second+; void init(void)TMOD=0x01; /16位定时器 EA=1; ET0=1; TH0=(65535-10000)/256; TL0=(65535-10000)%256; TR0=1;/*时间处理*/void proccess(void) if(second=60) second=0; min+; /* if(min=60) min=0; if(hour=10)/*if(mon12) mon=0;if(day31) day=0;if(hour24) hour=0;if(min60) min=0;*/if(flag_direct=0) dis_time();/*/if(flag_direct=1)&(flag_one=1) / flag_one=0;/ flag_direct=0; lcd_com(direct); lcd_com(0x0D);/开闪烁/else/ lcd_com(0x0C);/关闪烁if(P1!=0xFF)&(flag=1) flag=0; delay_ms(2); if(flag_c=1) clock=0;/有键按下,关闹铃 switch(P1) case 0xFE:foucs+;flag_direct=1;flag_one=1;break;/ case 0xFD:ster=-1;set_time();break;/设置减 case 0xFB:ster=1;set_time();break;/设置加 case 0xF7:lcd_com(0x0C);flag_direct=0;flag_one=1;second=0;break;/确定,关闪烁/flag_direct=0;break; case 0xDF:key_down=key_down;break;/开跑秒与停跑秒 case 0xEF: if(key_down=0) counter_10ms=0;mic=0;/清跑秒 else key_down=key_down; break;/如果在跑则先停止 default:break; if(foucs8)/5 foucs=0; if(foucs=5) dis_time();/重显一次 else dis_ling(); lcd_dis(line1,0x80); lcd_dis(line2,0xC0); switch(foucs) case 0:direct=0x83;break;/huangqin 2007.7.6 case 1:direct=0x86;break; case 2:direct=0x89;break; case 3:direct=0xC1;break; case 4:direct=0xC4;break; case 5:direct=0xC7;break; case 6:direct=0xC1;break; case 7:direct=0xC4;break; case 8:direct=0x8E;break; default:break; if(P1=0xFF)&(flag=0) delay_ms(2); flag=1; if(clock=0xff)&(c_hour=hour)&(c_min=min) flag_c=1;/闹铃 else flag_c=0;if(flag_c=1)&(counter0;m-) /for(n=15;n0;n+)for(f=248;f0;f-)/*/ 函数名: 模拟串行数据发送函数 功能: 将要发送的数据转成串行数据 返回值: 注意: 这里使用164芯片转换/*/*-*/* corr(uchar dat) /uchar ADS,n; ADS=dat; for(n=8;n0;n-) TD=0; RDat=ADS&0x80; TD=1; ADS=ADS1; */ /*/ 函数名: 液晶显示器的命令发送函数 功能: 将要显示的字符在液晶上的地址发到液晶显示器还有显示的初此化数据 返回值: 注意:/*/ lcd_co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论