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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

ygf单片机课程设计.docx

1、ygf单片机课程设计单片机原理及应用课程设计报告定时闹钟设计专 业: 电子信息工程 班 级: 电子1112 姓 名: 虞阁飞 学 号: 1120106221 指导教师: 2014年6 月 6 日1.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。2.课程设计要求使用AT89C51单片机结

2、合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。定时闹钟的基本功能如下:显示格式为“时时:分分”。由LED闪动来做秒计数表示。一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00”,按下操作键K1K4动作如下:(1) K1设置现在的时间。(2) K2显示闹钟设置的时间。(3) K3设置闹铃的时间。(4) K4闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。设置当前时间或闹铃时间如下。(1) K1时

3、调整。(2) K2分调整。(3) K3设置完成。(4) K4闹铃时间到时,发出一阵声响,按下本键可以停止声响。本项目的难点在于4个按键每个都具有两个功能,以最终实现菜单化的输入功能。3. 硬件设计3.1 设计思想硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。3.2主要元器件介绍1.单片机:AT89C522.LCD一个(LM016L)3.PNP型三极管1个4.普通电容2个(20uF),电解电容1个(10uF)5.晶振1个(1MHZ)6.开关4个(button)7.电阻1个(2k)8.电源3个(5V)3.3 功能电路介绍

4、主电路主电路主要就是芯片的运行,加载程序后,在外部时钟的作用下,将按照程序运行,从而可以实现设计的要求,进行时钟时间和定时时间的调整,并且能够在到达定时时间后控制蜂鸣器发出声响。 蜂鸣器及按键控制按键可以对时间进行调整,蜂鸣器可以在到达定时的时间时提醒我们。 内部时钟电路单片机内部有一个用于构成振荡器的高增益反向放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器。时钟频率可以影响单片机的速度。单片机的各功能部件的运行都以时钟控制信号为基准 总体电路图LCD显示屏:1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示

5、区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点。晶模块内部的控制器共有11条控制指令,如表所示:表3-1:控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRA

6、M)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S: 屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电 平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示F:低电平时显示57的点阵字符。

7、 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。4. 软件设计4.1软件流程图4.2 源程序(程序用C编写,LCD驱动程序网上查找)#include#define uchar unsigned char#define uint unsigned intuchar code table1=00:00:00;sbit lcden=P26 ;/位定义sbit lcdrw=P25;sbit lcdrs=P24;sbit s1=P30;sbit s2=P31;sbit s3=P32;sbit beep=P37;/定义蜂鸣器uchar nu

8、m,count,s1num;/显示的位数;响应中断数;按键次数;uint i;char shi,fen,miao,shi1,fen1,miao1;void delay(uint z)/延时程序 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void write_com(uchar com)/控制指令 lcdrs=0; /低电平时选择指令寄存器 lcdrw=0;/ 低电平时进行写操作 delay(5); lcden=1; /E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令 P0=com; delay(5); lcden=0;void write_

9、data(uchar date)/数据指令 lcdrs=1; lcden=1; /均为高时是读出数据的内容 delay(5); P0=date; delay(5); lcden=0;void init()/初始化 lcdrw=0; lcden=0; delay(15); write_com(0x38);/设置为4位总线,单行显示 delay(5); write_com(0x38); delay(5); write_com(0x38); write_com(0x38);/重复多次以确定可以正确设置 write_com(0x08);/无光标正常显示 write_com(0x01);/清显示 wri

10、te_com(0x06);/光标和显示模式设置 d1 I/D:光标移动方向,高电平右移 d0 S:屏幕上所有文字是否左移或者右移。低电平表示光标闪烁 write_com(0x0c);/ 显示开关控制。d2 D:控制整体显示的开与关,高电平表示开显示 d1 C:控制光标的开与关,低电平表示无光标 B:控制光标是否闪烁,低电平不闪烁 write_com(0x80+1);/d7为高时,显示数据存储地址TMOD=0x11;/工作方式3 TH0=(65536-50000)/256;/定时时间为50ms TL0=(65536-50000)%256; EA=1;/开总中断 ET0=1;/打开定时器 TR0=

11、1;/启动定时器 write_com(0x80+4);/秒的设定 for(num=0;num8;num+) write_data(table1num); delay(20); write_com(0x80+0x40+4); for(num=0;num8;num+) write_data(table1num); delay(20); void write_sfm(uchar add,uchar date)/调整时间 uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add);/控制指令,0x40:字符发生器RAM地址设置进行加

12、write_data(0x30+shi);/数据指令,功能设置命令 d4 DL:高电平时为4位总线 d3 N:低电平时单行显示 d2 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。write_data(0x30+ge);void write_shedingsfm(uchar add1,uchar date1)/设定定时时间 uchar shi1,ge1; shi1=date1/10; ge1=date1%10; write_com(0x80+add1);/控制指令 write_data(0x30+shi1); write_data(0x30+ge1);void keysc

13、an() if(s1=0) delay(5); if(s1=0) s1num+; while(!s1);/s1按下 if(s1num=1)/按下次数 TR0=0;/停止定时器工作 write_com(0x80+0x40+11);/调整时间设置,控制秒设定 write_com(0x0f); /d3 显示开关控制。d2 D:控制整体显示的开与关,高电平表示开显示 d1 C:控制光标的开与关,高电平表示有光标d0 B:控制光标是否闪烁,高电平闪烁 if(s1num=2) write_com(0x80+0x40+8);/控制分钟设定 write_com(0x0f);/控制光标闪烁 if(s1num=3

14、) write_com(0x80+0x40+5);/控制时设定 write_com(0x0f); if(s1num=4) TR0=1;/启动定时器,定时时间的设定 write_com(0x80+11);/控制秒的设定 write_com(0x0f);/光标显示 if(s1num=5) write_com(0x80+8);/定时分钟的设定 write_com(0x0f); if(s1num=6) write_com(0x80+5);/定时时的显示 write_com(0x0f); if(s1num=7) s1num=0; / 按键次数清零 write_com(0x0c);/显示此时为无光标状态

15、if(s1num!=0)/有按键时 if(s2=0) delay(5); if(s2=0) while (!s2); if(s1num=1) miao+; if(miao=60) miao=0; write_sfm(10,miao);/第10位进行秒的设定 write_com(0x80+0x40+11);/控制秒的设定 if(s1num=2) fen+; if(fen=60) fen=0; write_sfm(7,fen); write_com(0x80+0x40+8); if(s1num=3) shi+; if(shi=24) shi=0; write_sfm(4,shi); write_c

16、om(0x80+0x40+5); if(s1num=4) TR0=1;/定时器启动 miao1+; if(miao1=60) miao1=0; write_shedingsfm(10,miao1); write_com(0x80+11); if(s1num=5) fen1+; if(fen1=60) fen1=0; write_shedingsfm(7,fen1); write_com(0x80+8); if(s1num=6) shi1+; if(shi1=24) shi1=0; write_shedingsfm(4,shi1); write_com(0x80+5); if(s3=0) del

17、ay(5); if(s3=0) while (!s3); if(s1num=1) miao-; if(miao=-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+11); if(s1num=2) fen-; if(fen=-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+8); if(s1num=3) shi-; if(shi=-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+5); if(s1num=4) TR0=1; miao1-; i

18、f(miao1=-1) miao1=59; write_shedingsfm(10,miao1); write_com(0x80+11); if(s1num=5) fen1-; if(fen1=-1) fen1=59; write_shedingsfm(7,fen1); write_com(0x80+8); if(s1num=6) shi1-; if(shi1=-1) shi1=23; write_shedingsfm(4,shi1); write_com(0x80+5); void main()/主函数 init();/初始化函数 while(1) keyscan();/键盘扫描 if(co

19、unt=20)/响应中断20次,时间1s count=0;/清零 miao+;/秒加1 if(miao=60)/60秒时分加1 miao=0; fen+; if(fen=60)/60分时时加1 fen=0; shi+; if(shi=24)/24时时时全为0,从00:00:00开始计时 shi=0; write_sfm(4,shi);/修改时 write_sfm(7,fen);/修改分 write_sfm(10,miao);/修改秒 if(shi=shi1)&(fen=fen1)&(miao=miao1)/蜂鸣器电路的运行 for(i=0;i10;i+) beep=0;/蜂鸣器响 delay(

20、50); beep=1; delay(50); void timer0() interrupt 1/中断函数 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; 5. 调试运行5.1 注:LCD屏比较大,在proteus中必须放大屏幕才能更加清楚看清上面的数字。6. 设计心得体会 通过本次课程设计,进一不熟悉单片机以及proteus的使用,虽然没学过LCD,也不会写LCD的驱动程序,但通过上网查找资料,了解了LCD的各个引脚的功能以及使用,在网上找到一份LCD驱动程序,完成了LCD这个难点,C代码编程也是另一个难点,中断的设置,延时程序的

21、编写,蜂鸣器赋值1响,这些比较好编写,但整个程序的排列以及由于长时间没熟悉C语言对代码的编写还存在写问题。最终通过和同学的讨论以及上网查找写资料都一一解决。本次课程设计把我们所学的专业基础课理论知识运用到实践中去。本次课程设计然我们明白要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。参考书目:1 阎石,数字电子技术基础,北京,高等教育出版社,2004年2 肖金球,单片机原理与接口技术3 倪继峰,单片机C语言程序设计实训100例-基于8051+Proteus仿真4 谭浩强,C程序设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1