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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

万年历显示课设.docx

1、万年历显示课设 任务书一. 实现的功能 。 1.用89c52单片机和时钟芯片DS12C887设计一个万年历显示在液晶模块上。2.可以用独立的触发式按键可以调节年、月、日、及时、分、秒信息。二. 主要元器件: STC89C52 , DS12C887 , 12864 前 言 单片机技术作为计算机技术的一个分支,广泛地应用于工业控制,智能仪器仪表,机电一体化产品,家用电器等各个领域。“单片机原理与应用”在工科院校各专业中已作为一门重要的技术基础课而普遍开设。学生在课程设计,毕业设计,科研项目中会广泛应用到单片机知识,而且,进入社会后也会广泛接触到单片机的工程项目。鉴于此,提高“单片机原理及应用”课的

2、教学效果,让学生参与课程设计实习甚为重要。单片机应用技术涉及的内容十分广泛,如何使学生在有限的时间内掌握单片机应用的基本原理及方法,是一个很有价值的教学项目。为此,我们进行了“单片机的学习与应用”方面的课程设计,锻炼学生的动脑动手以及协作能力。 单片机课程设计是针对模拟电子技术,数字逻辑电路,电路,单片机的原理及应用课程的要求,对我们进行综合性实践训练的实践学习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课设报告等实践内容。通过此次课程设计实现以下三个目标:第一,让学生初步掌握单片机课程的试验、设计方法,即学生根据设计要求和性能约束,查阅文献资料,收集、分析类似的相关题目,并通过元

3、器件的组装调试等实践环节,使最终硬件电路达到题目要求的性能指标;第二,课程设计为后续的毕业设计打好基础,毕业设计是系统的工程设计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐引向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。第三,培养学生勤于思考乐于动手的习惯,同时通过设计并制作单片机类产品,使学生能够自己不断地学习接受新知识(如在本课设题目中存在智能测温器件DS18B20,就是课堂环节中不曾提及的“新器件”),通过多人的合作解决现实中存在的问题,从而不断地增强学生在该方面的自信心及兴趣,也提高了学生的动手能力,对学生以后

4、步入社会参加工作打下一定良好的实践基础。目 录任务书2前 言3目 录4第一章 单片机的介绍 各应用芯片的简介第二章 方案的设计与规划 1.整体方案的设计与构思2.硬件方案的设计与选择3.软件方案的设计与选择第三章 调试过程第四章 实验程序第五章 总结与体会第六章 致谢附录 一: 参考文献附录 二: 原器件清单第一章 单片机的介绍一单片机的简介。单片机是一种可通过编程控制的微处理器,单片机芯片自身不能单独运用于某项工程或产品上,它必须靠外围数字器件或模拟器件的协调才可发挥其自身的强大功能。单片机属于控制类数字芯片,目前其应用领域已非常广泛:1. 工业自动化。如数据采集、测控技术。2. 智能仪器仪

5、表。如数字示波器、数字信号源、数字万用表、感应电流表等。3. 消费类电子产品。如洗衣机、电冰箱、空调机、电视机、微波炉、IC卡、汽车电子设备等。4. 通信方面。如调制解调器、程控交换技术、手机、小灵通等。5. 武器装备。如飞机、军舰、坦克、航天飞机、智能武器等。目前国内外用得最多的还是以51内核扩展出的单片机,51单片机是8位单片机,随着现代技术的发展16位,32位也已应用于各行各业。二课程设计的芯片简介。本次课程设计我们用的主要元器件有:(1)主核单片机STC89c52RCSTC89c52RC是STC公司生产的8位单片机有4KB的片内ROM、有4个8位并行I/O口、5个中断源、2个16位定时

6、器/计数器等功能部件,共有40个管脚。(2)时钟芯片DS12C887 DS12C887时钟芯片能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部有锂电池,外部断电后其内部时间信息还可以保持10年之久。时间有12和24小时制,还有闹钟设置等。(3)液晶显示12864 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;低电压低功耗,其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

7、可以显示84行1616点阵的汉字. 也可用于图形显示. 第二章 方案的设计与规划1.整体方案的设计与构思先搭建好单片机的最小系统即复位电路、电源电路和晶振电路(11.0592MHz),把P0口用来和液晶12864及时钟芯片DS12C887的数据接口,为了增强P0口的驱动能力必须加一个10K的上拉排阻,液晶12864的控制口分别由P2.0P2.2口来控制,而DS12C887得控制口则如下边的硬件所述。 因为DS12C887 芯片具有自动产生世纪、年、月、日、时、分、秒等时间信息的功能所以单片机则不需要产生时间,只需把它的时间信息读过来显示在液晶上,即可完成精确的计时。 2.硬件方案的设计与选择A

8、. 51单片机的最小系统如图:B. 时钟芯片DS12C887管脚图 DS12C887的控制接口说明:(1)AD0AD7接单片机的P0.0P0.7口。(2)RW接P2.5口 、 DS 接P2.6口 、 CS 接P2.3口、 AS接 P2.4口、 IRQ接 P3.3口 、 RST接 VCC。(3) MOT 和 Vss接地C. 液晶12864与单片机的接口3.软件方案的设计与选择第三章 调试过程高效稳定的软件程序是本次课设数字时钟运行的基础。在本次课设中我们采用了高效时钟芯片DS12C887作为我们的计数器来产生时间,来确保时间的精准性。我们为了方便起见,在写软件时采用了分模块的方法,来在主函数中调

9、用这些子函数。(1)液晶显示的调试:12864的管脚说明:管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7-14DB0-DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式16NC-空脚17/RESETH/L复位端,低电平有效18VOUT-空脚19A

10、VDD背光源正端(+5V)20KVSS背光源负端了解了12864的管脚后,还要搞清它的操作时序,因为12864具有读写两功能,而我们本次的课设则不需要读操作,所以就没看读操作时序,下图是写操作时序。(写操作时序)1、RS,R/W的配合选择决定控制界面的4种模式:RSR/W功能说明LLMPU写指令到指令暂存器(IR)LH读出忙标志(BF)及地址记数器(AC)的状态HLMPU写入数据到数据暂存器(DR)HHMPU从数据暂存器(DR)中读出数据2、E信号E状态执行动作结果高DRI/O缓冲配合R进行读数据或指令3.指令说明(1)、显示开/关设置CODE: R/W D/I DB7 DB6 DB5 DB4

11、 DB3 DB2 DB1 DB0 L L L L H H H H H H/L 功能:设置屏幕显示开/关。 DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DD RAM)中的内容。 (2)、设置显示起始行 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L H H 行地址(063) 功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。 (3)、设置页

12、地址 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L H L H H H 页地址(07) 功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。(4)、设置列地址 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L H 列地址(063) 功能: DD RAM 的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DD RAM进行读写操作后,Y地址自动加一。 (5)、写显示数据 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L H D7

13、 D6 D5 D4 D3 D2 D1 D0 功能:写数据到DD RAM,DD RAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。D7-D0位数据为1表示显示,数据为0表示不显示。液晶的控制端口为:P20-寄存器选择输入、P21-液晶读/写控制P22-液晶使能控制端首先按照操作时序对其进行了初始化设置,又设定了液晶显示的位置,写了写指令和写数据的模块,具体程序可在源程序中找到。(2)时钟芯片DS12C887的显示:操作时钟芯片DS12C887共需要13条信号线,也必须知道其操作时序,才能应用它的功能来计时。由于它的时序分为Intel和Motorola总线两种时序,共用一个管脚1,当接

14、Vcc时为Motorola模式,接地或悬空时为Intel模式。而我们用的Intel模式。其时序图如下图:具体的操作我们是根据51单片机C语言教程(郭天祥)书中的讲解加上自己的想法和英文资料来写的。具体程序可在源程序中看见。 (3)键盘的添加调试:我们用了3个触发式独立按键来调节时间。分别接P1.1P1.3口,其中P1.1口则控制的是要调节的年、月、日、星期、时、分、秒的位置,共设置8次,首次按下在秒位置上,后面依次向上。P1.2口则是控制加的,当选定位置之后按下P1.2一次,则在选来的基础上加2.P1.3口则是控制减得,当选定位置之后按下P1.3一次,则在选来的基础上减2.第四章 课设源程序/

15、*时间显示带键盘*/#include#define uint unsigned int /宏定义#define uchar unsigned char#define LCD_data P0sbit LCD_RS=P20;/寄存器选择输入sbit LCD_RW=P21;/液晶读/写控制sbit LCD_EN=P22;/液晶使能控制端sbit beep=P10; /蜂鸣器端口定义sbit key1=P11;/按键端口定义sbit key2=P12;sbit key3=P13;sbit key4=P14;uchar code dis1= 陕西理工学院;uchar code dis2= Today I

16、s ;uchar code dis3=20 年 月 日;uchar code dis4= 时 分 秒;uchar code dis5=一二三四五六日;uchar i; /i为固定显示的定义uchar hour,minute,second,year,mouth,day,week;uchar s1num;/记录按键按下的次数uchar flag;bit flag1;/两个位变量sbit dscs=P23;/DS12C887端口定义sbit dsas=P24;sbit dsrw=P25;sbit dsds=P26;sbit dsirq=P27;void set_time();void delay(u

17、int z) /延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void buzzer() /蜂鸣器函数 beep=0; delay(100); beep=1; delay(100);/*写指令到LCD*/*RS=L,RW=L,E=高脉冲,D0-D7=指令码*/void write_cmd(uchar cmd) LCD_RS=0; LCD_RW=0; LCD_EN=0; P0=cmd; delay(5); LCD_EN=1; delay(5); LCD_EN=0;/*写数据到LCD*/*RS=H,RW=L,E=高脉冲,D0-D7=数据*/void

18、write_dat(uchar dat) LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; delay(5); LCD_EN=1; delay(5); LCD_EN=0; /*设定显示位置*/void lcd_pos(uchar X,uchar Y) uchar pos; switch(X) case 0: X=0x80;break; case 1: X=0x90;break; case 2: X=0x88;break; case 3: X=0x98;break; default: break; pos=X+Y; write_cmd(pos);/显示地址void wr

19、ite_sfm(uchar add,uchar date) char shi,ge; shi=date/10; ge=date%10; write_cmd(0x98+add); write_dat(0x30+shi); write_dat(0x30+ge);void write_nyr(uchar add,char date) char shi,ge; shi=date/10; ge=date%10; write_cmd(0x88+add); write_dat(0x30+shi); write_dat(0x30+ge);void write_week(char we) write_cmd(0

20、x95);/星期显示位置 write_dat(0x20); switch(we) case 0:write_dat(S); delay(5); write_dat(u); delay(5); write_dat(n); break; case 1:write_dat(M); delay(5); write_dat(o); delay(5); write_dat(n); break; case 2:write_dat(T); delay(5); write_dat(u); delay(5); write_dat(e); delay(5); write_dat(s); break; case 3:

21、write_dat(W); delay(5); write_dat(e); delay(5); write_dat(d); write_dat(n); delay(5); write_dat(e); delay(5); break; case 4:write_dat(T); delay(5); write_dat(h); delay(5); write_dat(u); delay(5); write_dat(r); delay(5); write_dat(s); break; case 5:write_dat(F); delay(5); write_dat(r); delay(5); writ

22、e_dat(i); break; case 6:write_dat(S); delay(5); write_dat(a); delay(5); write_dat(t); delay(5); write_dat(u); delay(5); write_dat(r); break; default:break; /*LCD初始化设定*/void lcd_init() / set_time(); /首次初始化时间使用 /*LCD初始化*/ write_cmd(0x30);/基本指令操作 delay(5); write_cmd(0x0c);/显示开关光 delay(5); write_cmd(0x0

23、1);/清除LCD显示内 delay(5); /*固定显示内容*/ lcd_pos(0,0);/设置显示位置为第一行的第一个字符 i=0; while(dis1i!=0) write_dat(dis1i);/显示字符 i+; lcd_pos(1,0);/设置显示位置为第二行的第一个字符 i=0; while(dis2i!=0) write_dat(dis2i);/显示字符 i+; lcd_pos(2,0);/设置显示位置为第三行的第一个字符 i=0; while(dis3i!=0) write_dat(dis3i);/显示字符 i+; lcd_pos(3,0);/设置显示位置为第四行的第一个字

24、符 i=0; while(dis4i!=0) write_dat(dis4i); i+; void write_ds(uchar add,uchar date)/写12C887函数 dscs=0; /按照INTEL时序编写 dsas=1; dsds=1; dsrw=1; P0=add;/写地址 dsas=0; dsrw=0; P0=date; dsrw=1; dsas=1; dscs=1; uchar read_ds(uchar add)/读12C887函数 /按照INTEL时序编写uchar ds_date;dscs=0;dsrw=1;dsds=1;dsas=1;P0=add;/送地址dsa

25、s=0;dsds=0;P0=0xff;/读数据之前要把P0口置为高电平ds_date=P0;dsas=1;dsds=1;dscs=1;return ds_date;void set_time() /DS12C887上电默认时间初始化write_ds(0,0);write_ds(1,0);write_ds(2,36);write_ds(3,0);write_ds(4,10);write_ds(5,0);write_ds(6,2);write_ds(7,28);write_ds(8,12);write_ds(9,10);void keyscan()if(key1=0)delay(5);if(key1=0)flag=1;s1num+;while(!key1) switch(s1num)case 1: write_cmd(0x9d);/秒 write_cmd(0x0f); /光标闪烁 break; case 2: write_cmd(0x9b);/分 break; case 3: write_cmd(0x99);/

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

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