课程设计(论文)-基于单片机的电子日历设计.doc_第1页
课程设计(论文)-基于单片机的电子日历设计.doc_第2页
课程设计(论文)-基于单片机的电子日历设计.doc_第3页
课程设计(论文)-基于单片机的电子日历设计.doc_第4页
课程设计(论文)-基于单片机的电子日历设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的电子日历设计基于单片机的电子日历设计一、设计目的和要求单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。单片机是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 通过对一个基于单片机的能实现电子日历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89C51、时钟电路DS1302、显示电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。系统设计要求:电子日历能显示,能调整。基于51系列的单片机进行的电子万年历设计可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。具体实现功能:显示年月日时分秒及星期信息,具有可调整日期和时间功能,与即时时间同步。主要使用到的工具和器件: Keilc51 Protues DS1302 AT89S52 LCD12864二、方案设计每一系统都有几个核心的模块。它对整个系统的性能有非常大的影响。比如系统的主控。2.1 主控芯片选择方案论证方案一:选择51系列的单片机;AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。方案二:选择msp430系列单片机;MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。这些特点保证了可编制出高效率的源程序。MSP430 系列单片机的各系列都集成了较丰富的片内外设。它们分别是看门狗(WDT)、模拟比较器A、定时器A0(Timer_A0)、定时器A1(Timer_A1)、定时器B0(Timer_B0)、UART、SPI、I2C、硬件乘法器、液晶驱动器、10位/12位ADC、16位- ADC、DMA、I/O端口、基本定时器(Basic Timer)、实时时钟(RTC)和USB控制器等若干外围模块的不同组合。其中,看门狗可以使程序失控时迅速复位;模拟比较器进行模拟电压的比较,配合定时器,可设计出A/D 转换器;16 位定时器(Timer_A 和 Timer_B)具有捕获/比较功能,大量的捕获/比较寄存器,可用于事件计数、时序发生、PWM等;有的器件更具有可实现异步、同步及多址访问串行通信接口可方便的实现多机通信等应用;具有较多的 I/O 端口,P0、P1、P2 端口能够接收外部上升沿或下降沿的中断输入;10/12位硬件 A/D 转换器有较高的转换速率,最高可达200kbps ,能够满足大多数数据采集应用;能直接驱动液晶多达 160 段;实现两路的 12 位D/A转换;硬件I2C串行总线接口实现存储器串行扩展;以及为了增加数据传输速度,而采用的DMA模块。MSP430 系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。方案对比: 运算周期:时钟显示最小单位为秒,51和msp430的运算周期都在1秒之内,这一点都满足要求。 IO口是否满足系统设计要求:51有32个IO口,msp430的IO口则更多。这一点都满足要求。 是否需要外加时钟芯片:采用定时器,误差较大。Msp430内部就有时钟RTC单元,51单片机需要外加。选择51单片机作为系统的主控;2.2 显示模块方案选择方案一:用数码管显示:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,并且人站在远处夜能观看到时间。方案二:用LCD显示:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,并且使用串行接口占用IO数比使用数码管少,但是人站在远处观看很难看清时间,且成本较高。方案对比:由于这次是实验式课程设计,采用LCD显示,接线简单且编程简单。2.3 时钟模块选择方案一:用专用时钟模块DS1302:DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。使用DS1302,接线简单,编程简单,并且断电时,可使用电池保持DS1302继续工作,确保时间正确。方案二:用主控芯片的定时器:用定时器最为时钟源,误差大,编程复杂。综上所述:采用51单片机,LCD显示和时钟模块DS1302。三、硬件设计硬件设计包含了对整个系统的组成的描述,清晰地说明它们的工作内容和工作原理。3.1 系统结构框图AT89S52键盘DS1302时钟LCD12864蜂鸣器图3.1 系统结构框图该电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;显示部份由LCD液晶显示屏显示。3.2 最小应用系统设计单片机的最小系统一般有时钟电路、复位电路和电源等组成。图3.2 电源、时钟电路、复位电路3.3 主要应用单元设计主要应用单元包括专用时钟单元和LCD显示单元。3.3.1 DS1302时钟单元图3.3 DS1302时钟电路DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc大于等于2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。图3.4 DS1302寄存器DS1302的工作原理:DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。由图3.4可知:DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。 DS1302的控制字节: DS1302控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。3.3.2 LCD12864显示单元图3.5 DS1302寄存器液晶显示模块是12864点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。采用串口连接LCD和单片机。四、软件设计软件设计包含了主程序设计和模块程序设计。4.1 接口定义P1.0接液晶屏的CS脚,作为串行的片选;P1.1接液晶的SID脚,作为串行的数据口;P1.2接液晶的SCLK脚,作为串行的同步时钟信号;P1.3接时钟芯片的SCLK脚;P1.4接时钟芯片的I/0脚;P1.4接时钟芯片的复位脚;P2.0接矩阵键盘的第一行;P2.1接矩阵键盘的第二行;P2.2接矩阵键盘的第三行;P2.3接矩阵键盘的第四行;P2.4接矩阵键盘的第一列;P2.5接蜂鸣器;单片机的16脚为单片机的复位端;20脚接地;具体如表1所示:表1:单片机引脚说明引脚号引脚名接口说明备注1VCC电源正端2P1.0接液晶的CS(4脚)串行片选线3P1.1接液晶的SID(5脚)串行数据线4P1.2接液晶的SCLK (6脚)串行同步时钟5P1.3接时钟芯片的SCLK脚6P1.4接时钟芯片的I/O脚7P1.5接时钟芯片的复位脚8P2.0接矩阵的第一行9P2.1接矩阵的第二行10P2.1接矩阵的第三行11P2.3接矩阵的第四行12P2.4接矩阵的第一列13P2.5接蜂鸣器16RST复位端20GND电源地4.2 程序流程图4.2.1主函数主函数流程图如图4.2.1所示,在进行I/O口配置和初始化后,通过键盘扫描函数,来改变时钟芯片内部时间和日期寄存器的值,然后单片机从里面把数据读取出来,经过处理后,在12864的液晶显示出来。4.2.2 LCD12864初始化函数液晶屏初始化的流程框图如图4.2所示。写命令,功能设置为基本指令集,写清屏指令,整屏清除,然后写命令设置光标的移动方向,整体显示不移动,整体显示打开,光标不显示且不反白。将液晶的地址归零。写指令:0x30开始写指令:0x0C写指令:0x01写指令:0x06图4.2 12864液晶屏初始化函数流程图结束开始关闭看门狗进行I/O口的配置初始化键盘扫描设定闹钟时间读取时钟芯片内部数据将读得的数据液晶显示结束图4.1 主函数4.2.3 DS1302的读取函数DS1302读数据函数流程如图4.3所示,先是将时钟线,复位线,数据线全部置0,由于时钟芯片DS1302读数据是采用串行通信的,故先发地址,再进行数据的读取。图4.3 DS1302读数据流程图开始复位端拉高启动一次数据传输写命令字节一位SCLK发脉冲是否有8次?SCLK发脉冲读数据字节一位是否有8次?复位端拉低结束4.2.4 键盘扫描函数进行I/O口的配置开始 判断是否为 第一键按下? 判断是否为 第二键按下?判断是否有键 按下按按下次数选择档位 判断是否为 第四键按下?结束还原所有数值 判断第二键 是否按下? 判断是否为 第三键按下? 判断第三键 是否按下?每按一下加1每按一下减1图4.4 按键扫描五、系统仿真5.1 protues介绍Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上可以仿真、分析(SPICE)各种模拟器件和集成电路。该软件的特点是:全部满足我们提出的单片机软件仿真系统的标准并在同类产品中具有明显的优势。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、IC调试器、SPI调试器、键盘和LCD系统仿真的功能。有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。目前支持的单片机类型有ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。支持大量的存储器和外围芯片。总之该软件是一款集单片机和SPICE分析于一身的仿真软件功能极其强大可仿真ARM、51、AVR、PIC。5.2 protues的仿真流程1、绘制原理图;2、用keilc51编写程序;3、把程序与protues连接;4、仿真;5、若发生错误,修改直至成功显示时间;5.3 protues原理图图5.3 protues原理图5.4 protues仿真结果图5.4 protues仿真结果通过按键调节日历的年、月、日、时、分、秒和星期,然后写入时钟芯片DS1302中,启动时钟,时钟正常运转,显示结果如上图所示,系统设计基本要求达到。六、设计中的问题及解决方法问题:对万年历修改时间或日期时,有时LCD液晶显示屏被屏蔽掉造成不亮现象。 解决方法:根据仪器的测试,发现电路的驱动能力不足,最后在DS1302时钟芯片的/CS、SCLK、RET端接入5.1K的上拉电阻后,电路的驱动能力才能满足即可解决不亮现象。七、心得体会和致谢在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了设计,达到了预期的目的,完了最初的设想。对电路的设计、布局要先有一个好的构思,才显得电路图美观、大方。程序编写中由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学讨论,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心不要想着走捷径一步一脚印。也练就了我的耐心,做什么事都在有耐心。此次课程设计中学到了很多很多东西,这是最重要的。总之,此次课设使我的能力得到了全方位的提高,使得我的操作能力和专业技能都有了很大的提高。在做课程设计的日子里得到了老师的悉心指导和同学的帮助,在此向他们致以诚挚的谢意。感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我对这次的设计完成有了信心和动力,我在此深表谢意。八、参考文献1 陈景初.单片机应用系统设计与实践M.北京航空航天大学出版社. 2006年2 徐爱钧. 彭秀华.单片机高级语言编程与uVision2应用实践.电子工业出版社. 2004年3 刘勇.数字电路.电子工业出版社. 2004年4 王法能.单片机原理及应用.科学出版社. 2004年5 何立民.MCS-51系列单片机应用系列设计M.北京航空航天大学出版社. 2006年6 李广弟.朱月秀. 王秀山.单片机基础M.北京航空航天大学出版社.2004年7 马家辰.MCS-51单片机原理与接口技术M.哈尔滨工业大学出版社.2005年8 陈正振.电子电路设计与制作.广西交通职业技术学院信息工程系. 2007年9 杨子文.单片机原理及应用.西安电子科技大学出版社. 2006年10 何立民.MCS-51系列单片机应用系列设计M.航空航天大学出版社.2004年附录1:硬件电路附录2:源程序/*变量定义及函数的声明*/#includemsp430g2553.h#define uint unsigned int#define uchar unsigned char#define cyCS 0 /P1.0,片选信号#define cySID 1 /P1.1,串行数据#define cySCLK 2 /P1.2,同步时钟#define sclk_in P1DIR=BIT3 /P1.3为输入方向#define sclk_out P1DIR|=BIT3 /P1.3为输出方向#define sclk_h P1OUT|=BIT3 /sclk输出高电平#define sclk_l P1OUT=BIT3 /sclk输出低电平#define dio_in P1DIR=BIT4 /P1.4为输入方向#define dio_out P1DIR|=BIT4 /P1.4为输出方向#define dio_h P1OUT|=BIT4 /DIO输出高电平#define dio_l P1OUT=BIT4 /DIO输出低电平#define ce_in P1DIR=BIT5 /p1.5为输入方向#define ce_out P1DIR|=BIT5 /p1.5为输出方向#define ce_h P1OUT|=BIT5 /ce输出高电平#define ce_l P1OUT=BIT5 /ce输出低电平#define BIT(X) (1X) /1左移X位void write_sfm(uchar add,uchar date);void send_command(uchar command_data);void send_data(uchar command_data);void write1302 ( uchar addr,uchar date);uchar read1302 ( uchar add );void delay(uint z);void display_s();void display_g();void display_t();void display_b();void alarm_time();uchar go_bcd(uchar temp);uchar table= :0 :0 ;uchar table1=带队老师:0小法;uchar table2=20 年 月 日;uchar table3=实时时钟:0;uchar shi,fen,miao,s1num,nian,yue,ri;uchar flag;uchar amiao,afen,ashi;unsigned char temp; /*延时子函数*/void delay(uint z) uint i,j; for(i=0;iz;i+) for(j=0;j50;j+);/*蜂鸣器子函数*/void didi() P2OUT|=BIT5;/蜂鸣器开 delay(200);/延时 P2OUT=BIT5;/蜂鸣器关 delay(200);/延时/*液晶写指令函数*/void send_command(uchar command_data) uchar a; uchar a_data; a_data=0xf8; /第一个字节写指令,发送11111000 P1OUT |= BIT(cyCS); /Cs=1 P1OUT=BIT(cySCLK); /SCLK=0 for(a=0;a8;a+) if(a_data0x80) /取字节最高位 P1OUT|=BIT1; else P1OUT=BIT1; P1OUT=BIT(cySCLK); /SCLK=0 P1OUT|=BIT(cySCLK); /SCLK=1 a_data=a_data1; /数据向左移 a_data=command_data; a_data=0xf0; /取第二个字节的高4位,低4位补0 for(a=0;a8;a+) if(a_data0x80) /取字节最高位 P1OUT|=BIT(cySID); else P1OUT=BIT(cySID); P1OUT=BIT(cySCLK); P1OUT|=BIT(cySCLK); a_data=a_data1; a_data=command_data; a_data=4; /将第三个字节的低4位移入高4位的位置 for(a=0;a8;a+) if(a_data0x80) /取字节最高位 P1OUT|=BIT(cySID); else P1OUT=BIT(cySID); P1OUT=BIT(cySCLK); P1OUT|=BIT(cySCLK); a_data=a_data1; P1OUT=BIT(cyCS); /Cs=0 delay(10);/*液晶写数据函数*/void send_data(uchar command_data) uchar a; uchar a_data; a_data=0xfa; /第一个字节写数据11111010 P1OUT |=BIT(cyCS); /Cs=1; for(a=0;a8;a+) if(a_data0x80) /取字节最高位 P1OUT|=BIT(cySID); else P1OUT=BIT(cySID); P1OUT=BIT(cySCLK); /cySCLK=0 P1OUT|=BIT(cySCLK); /cySCLK=1 a_data=a_data1; a_data=command_data; a_data=0xf0; for(a=0;a8;a+) if(a_data0x80) /取字节最高位 P1OUT|=BIT(cySID); else P1OUT=BIT(cySID); P1OUT=BIT(cySCLK); P1OUT|=BIT(cySCLK); a_data=a_data1; a_data=command_data; a_data=4; for(a=0;a8;a+) if(a_data0x80) /取字节最高位 P1OUT|=BIT(cySID); else P1OUT=BIT(cySID); P1OUT=BIT(cySCLK); P1OUT|=BIT(cySCLK); a_data=a_data1; P1OUT=BIT(cyCS); /Cs=0 delay(10);/*12864初始化函数*/void init() /液晶初始化 delay(10); /延时 send_command(0x30); /设置8位数据接口,基本指令模式 send_command(0x02); /清DDRAM send_command(0x06); /游标及显示右移一位 send_command(0x0d); /整体显示开,游标关,反白开 send_command(0x01); /写入空格清屏幕 send_command(0x80); /设定首次显示位置 display_s(); display_g(); display_t(); display_b(); s1num=0; write1302(0x8e,0x00);/写允许 write1302(0x80,0x50); /时间初始化 write1302(0x82,0x17); write1302(0x84,0x16); write1302(0x86,0x01); /日期初始化 write1302(0x88,0x01); write1302(0x8c,0x00); write1302(0x8e,0x80);/写保护/*12864显示字符函数*/void display_s() uchar w; send_command(0x88); /设置显示位置为第3行第1个字符 for(w=0;w9;w+) send_data(tablew); void display_g() uchar w; send_command(0x98); /设置显示位置为第4行第1个字符 for(w=0;w16;w+) send_data(table1w); void display_t() uchar w; send_command(0x90); /设置显示位置为第2行第1个字符 for(w=0;w14;w+) send_data(table2w); void display_b() uchar w; send_command(0x80); /设置显示位置为第1行第1个字符 for(w=0;w10;w+) send_data(table3w); /*刷新时,分,秒函数*/void write_sfm(uchar add,uchar date) uchar shi1,ge; shi1=date/10; /取数据的个位 ge=date%10; /取数据的十位 send_command(0x88+add);/锁定显示地址 send_data(0x30+shi1);/送显示数据 send_data(0x30+ge);/*刷新年,月,日函数*/void write_nyr(uchar add,uchar date) uchar shi1,ge; shi1=date/10; /取数据的个位 ge=date%10; /取数据的十位 send_command(0x90+add);/锁定显示地址 send_data(0x30+shi1);/送显示数据 send_data(0x30+ge);/*十进制转化为十六进制*/uchar go_bcd(uchar temp) return(temp/10)*16+(temp%10);/*设定闹钟函数*/void alarm_time() ashi=read1302(0x85);/读取时的数值 afen=read1302(0x83);/读取分的数值 amiao=read1302(0x81);/读取秒的数值/*按键扫描检测函数*/void keyscand(void) P2DIR|=BIT4; /P2.4的初始化,使其为低电平 P2OUT=BIT4; /初始化的配置语句 temp=P2IN; temp=temp0x0f; if(temp!=0x0f) delay(20); temp=P2IN; /将P2口当前输入的状态赋给临时变量temp temp=temp0x0f; if(temp!=0x0f)/判断是否有按键按下 delay(100); if(temp=0x0e)/判断是否为第一个键按下 s1num+; flag=1; while(temp!=0x0f)/等待按键释放 temp=P2IN; temp=temp0x0f; ; didi(); /蜂鸣器响 switch(s1num) case 1:send_command(0x88+4);/第一个键按下,且按第一下时 send_command(0x0d);/显示游标定位到秒上 break; case 2:send_command(0x88+2);/第一个键按第二下时 send_command(0x0d);/显示游标定位到分的位置 break; case 3:send_command(0x88);/第一个键按第三下时 send_command(0x0d);/显示游标定位到时的位置 break; case 4:send_command(0x90+5);/第一个键按第四下时 send_command(0x0d);/显示游标定位到日的位置 break; case 5:send_command(0x90+3);/第一个键按第五下时 send_command(0x0d);/显示游标定位到分月的位置 break; case 6:send_command(0x90+1);/第一个键按第六下时 send_command(0x0d);/显示游标定位到年的位置 break; case 7:send_command(0x90);/第一个键按第七下时 send_command(0x0d);/显示游标定位到年的位置 break; case 8:s1num=0; send_command(0x0c); write1302(0x8e,0x00); write1302(0x80,go_bcd(miao);/将得到的值,由十进制 write1302(0x82,go_bcd(fen);

温馨提示

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

评论

0/150

提交评论