课程设计带有LCD显示的音乐倒数计数器设计

上传人:仙*** 文档编号:29640256 上传时间:2021-10-08 格式:DOC 页数:44 大小:1,002.52KB
收藏 版权申诉 举报 下载
课程设计带有LCD显示的音乐倒数计数器设计_第1页
第1页 / 共44页
课程设计带有LCD显示的音乐倒数计数器设计_第2页
第2页 / 共44页
课程设计带有LCD显示的音乐倒数计数器设计_第3页
第3页 / 共44页
资源描述:

《课程设计带有LCD显示的音乐倒数计数器设计》由会员分享,可在线阅读,更多相关《课程设计带有LCD显示的音乐倒数计数器设计(44页珍藏版)》请在装配图网上搜索。

1、 惠州学院单片机课程设计带有LCD显示的音乐倒数计数器惠州学院HUIZHOU UNIVERSITY 单片微型计算机与接口技术 课程设计 项 目_带有LCD显示的音乐倒数计数器 拓 展 万年历、闹钟 年级班别_ 姓名学号 指导教师 老师 2012年12月 目 录摘要 1一 前言 2 1.1 设计概括 2 1.2 设计要求 2二 系统设计 3 2.1 方案选择 3 2.2 系统框图设计 4三 硬件设计 4 3.1 整体硬件电路图 5 3.2 STC89C51单片机6 3.2.1 STC89C51单片机主要性能参数 6 3.2.2 STC89C51单片管脚说明7 3.2.3 单片机时钟电路 10 3

2、.2.4 单片机复位电路 10 3.2.5 本设计所使用功能 11 3.3 STC15F104单片机 11 3.4 STC15F104单片机 13 3.5 gdm 1602 LCD 14四 系统控制及软件设计 15 4.1 系统控制流程图 15 4.2 控制操作及功能 15 4.2.1 控制说明 15 4.2.2 设置万年历 16 4.2.3 设置闹钟 17 4.3对应功能编程 17 4.3.1 STC89C51主函数 17 4.3.2 LCD功能的头文件 17 4.3.3 按键调整的头文件 19 4.3.4 万年历运行头文件 27 4.3.5 闹钟运行头文件 30 4.5.7 STC15F1

3、04主函数 33五 调试和烧录35 5.1 编程工具C51语言35 5.2 程序调试工具KEIL 35 5.3 单片机仿真软件在线调试PROTEUS 35 5.4 调试总结 36 六 制作感想 36 七 参考文献 37摘 要本设计是以STC89C52单片微型计算机为中心,及STC15F104单片微型计算机为辅的简单电路设计,通过按键输入,GDM1602LCD显示器及扬声器输出,实现万年历、可调定时闹钟、音乐闹铃等功能。LCD显示为可切换的万年历模式和闹钟模式,万年历模式为显示年、月、星期、日、时、分、秒;闹钟模式为显示万年历对应的时、分、秒和设定时常倒数的时、分、秒。闹铃为可编程的世上只有妈妈

4、好音乐频率。主要辅助工具:编程:Keil uVision2;仿真:proteus;程序烧:PZISP;实物调试:普中科技单片机开发实验仪HC6800EM3。关键字:万年历;可调定时闹钟;音乐闹铃;STC89C52;STC15F104; GDM1602LCD;Keil uVision2;proteus;HC6800EM3;一、前言1.1 设计概述20世纪末,电子技术获得了飞速的发展。在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化程度。同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。随着科技的发展和社会的进步,人们对数字钟的要求越来

5、越高,多功能数字钟不管在性能还是在样式上都发生了质的变化。数字钟实际上是一个对标准频率进行计数的计数电路,走时精度高,稳定性好,使用方便,不需要经常调校。单片计算机即单片微型计算机,是集CPU,RAM,ROM,定时/计数和多种接口于一体的微控制器。它体积小成本低,功能强,广泛应用于智能产品和工业自动化上。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超多老式钟表,钟表的数字化给人们生产生活带来了极大地方便,而且大大的扩展了钟表原先的报时功能,诸如定时自动报警、0按时自动打铃、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是

6、以数字化为基础的,因此研究数字钟及扩大其应用有着非常现实的意义。本设计是以STC89C52单片微型计算机为中心电路,及STC15F104单片微型计算机为辅助电路的简单电路设计,通过按键输入,GDM1602LCD显示器及扬声器输出,实现万年历、可调定时闹钟、音乐闹铃等功能。LCD显示为可切换的万年历模式和闹钟模式,万年历模式为显示年、月、星期、日、时、分、秒;闹钟模式为显示万年历对应的时、分、秒和设定时常倒数的时、分、秒。闹铃为可编程的世上只有妈妈好音乐频率。当设置好的倒数时间,倒数到零的时候,STC89C52单片微型计算机将连续输出一低电平信号,触发STC15F104单片微型计算机,使其输出一

7、定的音乐频率控制扬声器,音乐闹铃将响起。1.2 设计要求设计任务:利用89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数, 当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。设计要求:定时闹钟的基本功能如下: 字符型LCD(162)显示器。 显示格式为“TIME 分分:秒秒”。 用4个按键操作来设置当前想要倒计数的时间。 一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。 程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1K4动作如下。(1) K1可调整倒计数的时间160分钟。 (2)K2设

8、置倒计数的时间为5分钟,显示“0500”。(3)K3设置倒计数的时间为10分钟,显示“1000”。(4)K4设置倒计数的时间为20分钟,显示“2000”。复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键,则在LCD上显示出设置画面。此时,若:(1)按操作键K2增加倒计数的时间1分钟。(2)按操作键K3减少倒计数的时间1分钟。(3)按操作键K4设置完成。可扩充功能: 增加时钟及闹铃功能。 增加秒表计数功能。 增加万年历显示“年月日”。 增加多组倒计数功能。 二 系统设计2.1 方案选择方案一直接按要求完成老师的要求。这个方案相对很简单,简简单单的按键控制,相对于40脚多功能的强大STC

9、89C51来说是很大程度上的浪费。对于自己刚刚学到的单片机只是很多都用不上,也造成了实践不到位,从而没无法达到老师期望的理论与实践结合,彻底把握简单的微型计算机的控制。方案二达到老师的要求以外,添加生活上可以利用到的功能,如:万年历、闹钟等等。但出现了个严重问题:非系统性的编程,单片机无法同时进行多种应用运行,也就是只能单步进行。但在闹钟响起的时候,不能让编程跳出万年历运作,执行音乐程序,因此需要外置音乐模块。则再分两个小方案:1)使用外置的固定音乐模块,即直接购买商家做好的模块,这样就减少了制作的难度,但成本高。2)再增加一片微型计算机。经过设计考虑,使用廉价性能好且容易控制的STC15F1

10、04单片微型计算机,经过编程产生音乐频率取代外置音乐模块。2.2 系统框图设计本项目的系统设计框图如图2-1所示:按键控制复位电路GDM1602 定时器电源STC89C52扬声器STC15F104图2-1 系统框图通过方案的选择,设计了上面的系统框图。由系统框图可看出,本设计由单片机AT89C51、STC15F104;LCD液晶显示器、控制键盘、蜂鸣器、复位单路和定时器电路几大模块构成。三 硬件设计本章主要讲以STC89C52单片微型计算机为中心电路,及STC15F104单片微型计算机为辅助电路电路硬件设计。主要硬件电路有:键盘控制电路、显示电路、复位电路、音乐电路等。3.1 整体硬件电路图

11、图3-1 接通电源初始化模式 图 3-2 设置好时间的显示 图3-3 闹钟模式的显示由图3-1我们可以清楚地看到,本电路控制核心是STC89C51芯片。该方案通过九个按键进行控制,采用LCD1602显示,双行显示,位数足够多,并且容易控制,占用CPU的时间少,每次进行使能设置,把一个数据送到外部接口即可。3.2 STC89C51单片机STC89C51是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含4K Bytes的可反复擦写1000次的Flash只读程序存储器,具有标准MCS-51指令系统及80C51引脚结构,芯片内集

12、成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51系列单片机是单时钟/ 机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。3.2.1 STC89C51单片机主要性能参数STC89C51单片机的主要性能特点有:1.具有MCS51产品指令系统2.4字节可重擦写Flash闪速存储器3.1000次擦写周期4.全静态操作:0Hz-24Hz5.三级加密程

13、序存储器6.128*8字节内部RAM7.32个可编程I/O口线,2个16位定时/计数器,6个中断源8.可编程串行UART通道9.低功耗空闲和掉电模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器、串行通信口及中断系统断续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。10.一个全双工串行通信口,片内振荡器及时钟电路STC89C51单片机的引脚封装如图3-2所示。图3-4STC89C51的引脚排列3.2.2 STC89C51单片机管脚说明VCC:供电电压。GND:接地。P0:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电路。当P0

14、口的管脚每一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。P1:P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸引或输出电源)4个PPL逻辑门电路.对端口写”1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信呈拉低时会输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。P2:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动

15、(吸引或输出电源)4个PPL逻辑门电路。对端口写”1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信呈拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX R1指令)时,P2口线上的内容(也即特殊功能寄存器区中R2寄存器的内容),在整个访问期间不会改变。Flash编程或校验时,P2亦接收高位地址和其他控制信号。P3:P3口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸引或输出电源)4个

16、PPL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表3.1所示:表3.1端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外中断0)P3.3/INT1(外中断1)P3.4T0(定时/计数器0)P3.5T1(定时/计数器1)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST:复位输入,当振荡器工作时,RST引脚出现

17、两个机器周期以上高电平将使单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存器允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效

18、。/PSEN:程序储存允许(/PSEN)输出是外部程序存储器的读选通信号,当AT89C51由自问程序存储器取指令(或数据)时,每个机器周期两次/PSEN有次,即输出两个脉冲。在此期间,当访问外部程序存储器时,这两次有次的/PSEN信号不出现。/EA/Vpp:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp。XTAL1:反向振荡放大器的输入及内部时钟工

19、作电路的输入。XTAL2:振荡器反向放大器的输出端。3.2.3 STC89C51单片机最小系统的设计STC89C51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如图3-5所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。结合本设计的要求采用内部振荡方式,所选的晶振为12MHz。第9引脚为复位输入端,接上电容,电阻构成上

20、电复位电路。图3-5 单片机最小系统3.2.3 单片机时钟电路 AT89C52单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在本设计中,采用内部振荡方式。电路见图3-6所示。 图3-6 时钟电路图单片机引脚XTAL1和XTAL2外接晶振12MHz,构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡,并产生振荡时钟脉冲。电容器C1、C2起稳定振荡频率,快速起振作用。电容值一般为5-30pF,内容振荡方式所得时钟信号比较稳定,实用电路中使用较多。3.2.4 单片机复位电路 本设计系统的复位电路见图3-7所示。图3-7复位电路图复位操作完成

21、单片机内电路的初始化,使单片机从一种确定的状态开始运行。当STC89C51单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位电路操作。需要注意的是,如果RST持续为高电平,单片机就会处于循环复位状态,而无法执行程序。因此,要求单片机复位后能够脱离复位状态。本系统的复位电路采用上电开关复位电路。上电后,由于电容充电,使RST持续一段高电平时间。当单片机已经在运行时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择C10-30uF,R10K。3.2.5 本设计所使用功能 在本设计中,使用了单片机的最小系统,复位电路和内部震荡方式。使用了P0端口作为

22、LCD的数据输出端, P2端口作为LCD的使能端选择输出端,使用了P1端口和P2.0接控制按键,实现置数、功能切换等。P3.0作为STC15F104的触发端,使STC15F104得PB.2输出音乐频率。3.3 STC15F104单片机1.1 STC15F100系列单片机简介 STC15F100系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是高速/高可靠/低功耗超强抗干扰的新一代8051单片机。,采用第八代加密技术,加密性超强,指令代码完全兼容传统8051.但速度快6-2倍。内部高度集成R/C时钟,1%温飘,常温下温飘5。5MHz35MHz宽范围可设置,可彻底省掉外部昂贵的晶振。内部

23、高可靠复位,8级可选复位门槛电压,可彻底省掉外部复位电路。1增强型 8051 CPU,1T,单时钟/机器周期,速度比普通805快6-2倍 2 工作电压: STC15F00 系列工作电压:5.5V - 3.8V(5V 单片机) STC15L00 系列工作电压:3.6V - 2.4V(3V 单片机) 3 内部高可靠复位,8级可选复位门槛电压,彻底省掉外部复位电路4 内部高度R/C时钟%温飘(-40oC+85oC)常温下温飘5内部时钟从5MHz 35MHz可选(5.5296MHz / .0592MHz / 22.84MHz / 33.776MHz)5 工作频率范围:5MHz 35MHz,相当于普通8

24、05的60MHz420MHz6 低功耗设计:低速模式,空闲模式,掉电模式/停机模式(可由外部中断唤醒)7 支持掉电唤醒的管脚:INT0/P3.2, INT/P3.3, INT2, INT3, INT4 8 0.5K/K/2K/3K/4K/5K字节片内Flash程序存储器, 擦写次数10万次以上9 片上集成28字节RAM10 有EEPROM功能,擦写次数10万次以上11 ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器12 2个16位可重装载定时器,兼容普通8051的定时器T0/T1并可实现时钟输出和PWM功能。13 可编程时钟输出功能,T0在P3.5输出时钟,T1在P3.4输出时

25、钟在P3.4口还可输出内部高高度R/C时钟IRC_CLK(也可2分频输出IRC_CLK/2)。14 硬件看门狗(WDT)15 串口功能可由P3.0/INT4,P3.结合定时器实现16 先进的指令集结构,兼容普通8051指令集,有硬件乘法/除法指令17 6个通用I/O口,复位后为: 准双向口/弱上拉(普通8051传统I/O口)可设置四种模式:准双向口/上拉,强推挽/弱上拉,仅为输入/高阻,开漏推挽/ 上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过70mA。18 封装:SOP-8, DIP-819 全部75oC 八小时高温烘烤,高品质制造保证。 图3-8 S

26、TC15F104 引脚图3.4 STC15F104单片机 表3-2 STC15F104单片机引脚功能表3.5 GDM1602LCD1602液晶模块内部的控制器共有11条控制指令,如表3-3所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM

27、)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容 表3-3:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电

28、平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。 四 系统控制及软件设计4.1 系统控制流程图 图 4-1 系统控制流程图4.2 控制操作及功能 4.2.1 控制说

29、明本系统是利用STC89C51的时间中断0,每经过1S系统运行一次,在时间中断执行的程序中调用万年历置数、万年历运行、闹钟置数、闹钟运行、音乐触发等子函数。所以,每次按键必须按住,等待LCD数字变化,持续时间0t2S。需要连续调整的,直接按住按键,数字变化间隔为1S,直至对应位显示所需要的时间。4.2.2 设置万年历图 42 万年历显示模式 接通电源,或者按复位键,则会出现图 42 万年历显示模式,这是万年历的设置模式,如果跳过这个模式,需要调整时间,则需要按复位键复位系统。现是处于时、分、秒的设置模式,控制方法:k1、k2、k3、k4、k5、k6设置万年历:时十位、个位、分十位、个位、秒十位

30、、个位。调好,按住K7(持续超过1S)确定。按K7后,进入年份的调试 k1、k2、k3、k4设置万年历年份:年千位、百位、十位、个位。调好,按住K8(持续超过1S)确定。按K8后,进入月份、星期的调试k1、k2、k3、k4、k5设置万年历月份:月十位、个位、日十位、个位、星期调好,按住K7(持续超过1S)确定。进入年历运行。4.2.3 设置闹钟图 4-2 闹钟模式显示在万年历运行的状态按住k9(持续超过1S),进入闹钟置数模式,万年历的时间同样显示在上方。控制方式k1、k2、k3、k4、k5、k6设置闹钟:时十位、个位、分十位、个位、秒十位、个位。调好,按住K7(持续超过1S)确定。按K7后,

31、进入闹钟倒数模式。当闹钟倒数为零时,闹钟音乐世上只有妈妈好将响起。4.3对应功能编程该编程是利用Keil uVision2,设置多个不同功能头文件进行编程。4.3.1 STC89C51主函数#include#include#include /LCD功能的头文件#include /按键调整的头文件#include /万年历运作头文件#include /闹钟运作头文件void main()LCD_init();TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1)while(flag_a) a_

32、main();while(flag_t)t_main();/计数器0中断,50000微妙进行一次t+。void time0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;t+;4.3.2 LCD功能的头文件#ifndef lcd_h#define lcd_hsbit rs = P26;sbit rw = P25;sbit ep = P27;unsigned char shi,ge;unsigned char code dis = 0123456789;/LCD1602位置参考0x0x 0123456789abcdefunsig

33、ned char code dis1 = 2012-01-01 00:00;/ 0x4x 0123456789abcdefunsigned char code dis2 = Hello Sun 00 ;unsigned char code dis374 =Sun,Mon,Tue,Wed,Thu,Fri,Sat;/LCD1602位置参考 0x0x 0123456789abcdefunsigned char code dis4 = Time 00:00:00 ;unsigned char code dis5 = Clock 00:00:00 ;/ 0x4x 0123456789abcdefunsi

34、gned char code dis6 = Hi Alarm Clock ;bit lcd_pd() /判断,指令8,判断是否忙碌,忙碌循环bit result;rs = 0;_nop_();rw = 1;_nop_();ep = 1;_nop_();result = (bit)(P0 & 0x80);ep = 0;return result;void lcd_kz(unsigned char kz)/写入控制指令while(lcd_pd(); /判断LCD是否忙碌rs = 0;rw = 0;ep = 0;_nop_();P0 = kz;_nop_();ep = 1;_nop_();ep =

35、0;void lcd_wz(unsigned char wz)/光标位置lcd_kz(wz | 0x80);void lcd_data (unsigned char dat)/显示内容while(lcd_pd();/判断LCD是否忙碌rs = 1;rw = 0;ep = 0;P0 = dat;_nop_();ep = 1;_nop_();ep = 0;void lcd_two_xs(void)/显示函数lcd_data(disshi);/显示内容lcd_data(disge);void LCD_init() /初始化LCD1602lcd_kz(0x38);_nop_();lcd_kz(0x0c

36、);_nop_();lcd_kz(0x06);_nop_();lcd_kz(0x01);_nop_();#endif4.3.3 按键调整的头文件/按键响应间隔为1S/单步调试时,每个按键按下控制在12S内/连续调试,按住不放就行#ifndef anjian_h#define anjian_hsbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit k5=P14;sbit k6=P15;sbit k7=P16;sbit k8=P17;sbit k9=P20;sbit speaker=P21;/P30unsigned t_flag1=0,t_flag

37、2=0,t_flag3=0,a,b=1;unsigned char t_miao=0,t_fen=0,t_shi=0,t_ri=1,t_week=1,t_yue=1;unsigned int t_nian=2000,i;unsigned char a_miao=5,a_fen=0,a_shi=0; /在没有闹钟显示时的时间设置/初始化后,为 时、分、秒 的设置/k1 k2 k3 k4 k5 k6 设置 时 分 秒六位/时十位 个位分十位 个位 秒十位 个位/调好,按K7确定。按K7后,进入年份的调试/ k1 k2 k3 k4 设置年份/年千位 百位 十位 个位/调好,按K8确定。按K8后,进入

38、月份的调试/ k1 k2 k3 k4 k5置年份/月十位 个位 日十位 个位 星期/调好,按K8确定。按K8后,进入年历运行void t_anjian()if(t_flag1!=1&t_flag2!=1&t_flag3!=1)if(k1=0)t_shi=t_shi+10;if(t_shi/10=3)t_shi=t_shi-30;if(k2=0) a=t_shi/10;t_shi=t_shi+1;if(t_shi/10a) t_shi=t_shi-10;if(t_shi23)t_shi=0;if(k3=0)t_fen=t_fen+10;if(t_fen/10=6)t_fen=t_fen-60;i

39、f(k4=0) a=t_fen/10;t_fen=t_fen+1;if(t_fen/10a) t_fen=t_fen-10;if(k5=0)t_miao=t_miao+10;if(t_miao/10=6)t_miao=t_miao-60;if(k6=0) a=t_miao/10;t_miao=t_miao+1;if(t_miao/10a) t_miao=t_miao-10;if(k7=0)t_flag1=1; if(t_flag1=1&t_flag2!=1&t_flag3!=1)if(k1=0)t_nian=t_nian+1000;if(t_nian/1000=10)t_nian=t_nian

40、-10000;if(k2=0)a=t_nian/1000;t_nian=t_nian+100;if(t_nian/1000a)t_nian=t_nian-1000;if(k3=0)a=t_nian/100%10;t_nian=t_nian+10;if(t_nian/100%10a)t_nian=t_nian-100;if(k4=0)a=t_nian/10%10;t_nian=t_nian+1;if(t_nian/10%10a)t_nian=t_nian-10;if(k8=0)t_flag2=1;if(t_flag1=1&t_flag2=1&t_flag3!=1)if(k1=0)t_yue=t_

41、yue+10;if(t_yue/10=2)t_yue=t_yue-20;if(k2=0) a=t_yue/10;t_yue=t_yue+1;if(t_yue/10a) t_yue=t_yue-10;if(t_yue12)t_yue=1; if(t_yue=1|t_yue=3|t_yue=5|t_yue=7|t_yue=8|t_yue=10|t_yue=12) if(k3=0)t_ri=t_ri+10;if(t_ri/10=4)t_ri=t_ri-40;if(k4=0) a=t_ri/10;t_ri=t_ri+1;if(t_ri/10a) t_ri=t_ri-10;if(t_ri31)t_ri=

42、1; if(t_yue=4|t_yue=6|t_yue=9|t_yue=11) if(k3=0)t_ri=t_ri+10;if(t_ri/10=4)t_ri=t_ri-40;if(k4=0) a=t_ri/10;t_ri=t_ri+1;if(t_ri/10a) t_ri=t_ri-10;if(t_ri30)t_ri=1; if(t_yue=2) if(t_nian%4!=0) if(k3=0)t_ri=t_ri+10;if(t_ri/10=3)t_ri=t_ri-30;if(k4=0) a=t_ri/10;t_ri=t_ri+1;if(t_ri/10a)t_ri=t_ri-10; if(t_r

43、i28) t_ri=1; if(t_nian%4=0) if(k3=0)t_ri=t_ri+10;if(t_ri/10=4)t_ri=t_ri-40;if(k4=0) a=t_ri/10;t_ri=t_ri+1;if(t_ri/10a)t_ri=t_ri-10;if(t_ri29)t_ri=1; if(k5=0) /调整星期函数,以2000.01.01为参考 while(b)for(i=2000;it_nian;i+)if(i%10!=0&i/10%10!=0)if(i%4=0)t_week=t_week+2;elset_week+;else if(i%400=0)t_week=t_week+

44、2;elset_week+;for(i=0;ia) a_shi=a_shi-10;if(a_shi23)a_shi=0;if(k3=0) /分钟设置a_fen=a_fen+10;if(a_fen/10=6)a_fen=a_fen-60;if(k4=0) a=a_fen/10;a_fen=a_fen+1;if(a_fen/10a) a_fen=a_fen-10;if(k5=0) /秒钟设置a_miao=a_miao+10;if(a_miao/10=6)a_miao=a_miao-60;if(k6=0) a=a_miao/10;a_miao=a_miao+1;if(a_miao/10a) a_mi

45、ao=a_miao-10;if(k7=0)a_flag=1; if(a_shi!=0|a_fen!=0|a_miao!=0) /倒数程序 if(a_flag=1)a_miao-;if(a_miao=-1)a_miao=59;a_fen-;if(a_fen=-1)a_fen=59;a_shi-; /显示程序 shi=a_miao/10;ge=a_miao%10;lcd_wz(0x4c); /光标位置lcd_two_xs(); /秒钟内容显示shi=a_fen/10;ge=a_fen%10;lcd_wz(0x49); /光标位置lcd_two_xs(); /分钟内容显示shi=a_shi/10;g

46、e=a_shi%10;lcd_wz(0x46); /光标位置lcd_two_xs(); /小时内容显示/倒数完毕程序 ,LCD1602 出现显示切换else i=0; speaker=0; lcd_wz(0x40); /显示位置 while(dis6i!=0)lcd_data(dis6i);/显示字符i+;#endif4.3.4 万年历运行头文件#ifndef main_t_h#define main_t_hunsigned char shi,ge,j,t;unsigned char flag_t=1,flag_a=0; /* *没有闹钟情况下万年历运转程序* *设置好之后就可以调用,没有初值

47、 * */void t_LCD_init() /初始化LCD1602lcd_wz(0x00);/设置显示位置j = 0;while(dis1j!= 0)lcd_data(dis1j);/显示字符j+;lcd_wz(0x40);/ 设置显示位置i = 0;while(dis2i!= 0)lcd_data(dis2i);/ 显示字符i+; void t_main() t_LCD_init();while(flag_t)if(t=20)t=0;t_anjian();/没闹钟显示的时间控制设置函数,在anjian.h里面if(t_flag1=1&t_flag2=1&t_flag3=1)t_miao+;

48、/和t_miao+一起构成时间表运作程序shi=t_miao/10; ge=t_miao%10; lcd_wz(0x4e); /光标位置 lcd_two_xs(); /秒钟内容显示if(t_miao=60)t_miao=0;t_fen+;shi=t_fen/10; ge=t_fen%10; lcd_wz(0x0e); /光标位置 lcd_two_xs(); /分钟内容显示if(t_fen=60)t_fen=0;t_shi+;shi=t_shi/10; ge=t_shi%10; lcd_wz(0x0b); /光标位置 lcd_two_xs(); /小时内容显示if(t_shi=24)t_shi=0;t_ri+;t_week+;shi=t_ri/10;ge=t_ri%10;lcd_wz(0x08); /光标位置 lcd_two_xs();if(t_week=7)t_week=0; /日内容显示lcd_wz(0x47);i=0;while(dis3t_weeki!= 0)lcd_data(dis3t_weeki);/显示字符 i+;if(t_yue=2) /二月润平年日的计算if(t_nian%10!=0&t_nian/10%10!=0)if(t_nian%4=0)if(t_ri=29)t_ri=0;else if(t_nian%400=

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!