单片机课程设计(可调式中文电子日历).doc_第1页
单片机课程设计(可调式中文电子日历).doc_第2页
单片机课程设计(可调式中文电子日历).doc_第3页
单片机课程设计(可调式中文电子日历).doc_第4页
单片机课程设计(可调式中文电子日历).doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

沈阳理工大学专用纸摘要万年历的功能可实现年、月、日、时、分、秒和星期的显示。随着社会的发展日历的功能越来越强大,精确度越来越高。本次设计的日历采用DS1302时钟芯片,该芯片精确度高,性能可靠。用LCD12864液晶屏,既可以显示数字又可以显示汉字,方便了人们的生活。本设计总体分为硬件部分和软件部分。硬件部分可分为:时钟芯片DS1302、AT89C51和LCD12864等。本设计非常适合家庭使用。电源采用5V电压供电。走时精确,是现代家庭必备的设备之一。关键词:单片机,万年历, DS1302,时钟芯片 1引言可调式电子日历与时钟小巧便于携带,界面清爽,一目了然,方便的知晓当前时间,并可对时间做出修改,实在是居家旅行日常生活之必备用品。在现今的可调式电子日历与时钟具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。2.总体设计2.1基本原理硬件主要涉及到:AT89C51、DS1302、LCD12864等。软件通过框图编写出程序。AT89C51主要功能是存储程序、根据程序的内容对各个端口进行判断并做出相应的处理。LCD12864主要的功能是实现年、月、日、时、分、秒的显示效果。实时时钟DS1302可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。2.2系统总体框图及设计思路主控芯片(单片机)时钟控制显示电路按键控制3.详细设计3.1 硬件设计3.1.1 DS1302芯片及原理介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。 DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 外部引脚分配各引脚的功能为: Vcc1:备用电源;Vcc2:主电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟,输入; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。 内部结构DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如下图。控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。3.1.2 LCD12864液晶屏LCD12864使用KS0108(或其兼容芯片)作为控制器,适配M6800系列时序,具有8位标准数据总线。6条控制线及电源线可显示各种字符及图形。每个KS0108拥有6464位(512字节)的显示RAM,12864显示屏上的6464点,显示RAM中的数据直接作为显示驱动信号。具有操作指令简单,低功耗的特点。主要技术参数和显示特性:电源:VDD 3.3V+5V(内置升压电路,无需负压);显示内容:128列 64行与MCU接口:8位或4位并行/3位串行配置LED背光模块引脚说明:12864引脚说明引脚号引脚名称方向功能说明1VSS-模块的电源地2VDD-模块的电源正端3V0-LCD驱动电压输入端4RS(CS)H/L并行的指令/数据选择信号;串行的片选信号5R/W(SID)H/L并行的读写选择信号;串行的数据口6E(CLK)H/L并行的使能信号;串行的同步时钟7DB0H/L数据08DB1H/L数据19DB2H/L数据210DB3H/L数据311DB4H/L数据412DB5H/L数据513DB6H/L数据614DB7H/L数据715PSBH/L并/串行接口选择:H-并行;L-串行16NC空脚17/RETH/L复位 低电平有效18NC空脚19LED_A-背光源正极(LED+5V)20LED_K-背光源负极(LED-OV)指令功能详解: (1)读状态字(read status)格式BUSY0ON/OFFRESET0000BUSY=1,表示KS0108正在处理计算机发来的指令或数据。此时接口电路被封锁,不能接受除读状态字以外的任何操作。BUSY=0表示KS0108接口控制电路已处于“准备好”状态,等待计算机的访问。ON/OFF:表示当前的显示状态。ON/OFF=1表示关显示状态;ON/OFF=0表示开显示状态。RESET表示当前KS0108的工作状态,即反映RST端的电平状态。当RST为低电平状态时KS0108处于复位工作状态,RESET=1。当RST为高电平状态时,KS0108为正常工作状态,RESET=0。在占领设置和数据读写时要注意状态字中的BUSY标志。只有在BUSY=0时,计算机对KS0108的操作才能有效。因此计算机在每次对KS0108操作之前,都要读出状态字判断BUSY是否为“0”。若不为“0”,则计算机需要等待,直至BUSY=0为止。(2)显示开关(display on/off)格式0011111D该指令设置显示开关/触发器的状态,由此控制显示数据锁存器的工作方式,从而控制显示上的显示状态。D位为显示开/关的控制位。当D=1为显示设置,显示数据锁存器正常工作,显示屏上呈现所许的效果。此时在状态字中ON/OFF=0。当D=0为关显示设置,显示数据锁存器被置零,显示屏呈不显示状态,但显示存储器并没有被破坏,在状态组中ON/OFF=1。(3)显示起始行设置(Display start line)格式11L5L4L3L2L1L0该指令设置了显示起始行寄存器的内容。KS0108有64行显示的管理能力,该指令中L5L0为显示起始行的地址,取值在003FH(164)范围内,它规定了显示屏上最顶一行所对应的显示存储器的行地址。如果定时间隔地,等间距地修改(如加一或减一)显示起始行寄存器的内容,则显示屏将呈现显示内容向上或向下平滑滚动的显示效果。(4)页面地址设置Set page(X address)格式10111P2P1P0该指令设置了页面地址-X地址寄存器的内容。KS0108将显示存储器分成了8页,指令代码中P2P0就是要确定当前所要选择的页面地址,取值范围为0007H,代表第18页。该指令规定了以后的读/写操作将在哪一个页面上进行。执行本指令后,下面的读写操作将在指定页内,直到重新设置。页地址就是DDRAM 的行地址,页地址存储在X地址计数器中,P2-P0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。(5)列地址设置(Set Y address)格式01C5C4C3C2C1C0该指令设置了Y地址计数器的内容,C5C0=03FH(164)代表某一页面上的某一单元地址,随后的一次读或写数据将在这个单元上进行。Y地址计数器具有自动加一功能,在每一次读/写数据后它将自动加一,所以在连续进行读/写数据时,Y地址计数器不必每次都设置一次。页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。(6)写显示数据(Write display data)格式数据该操作将8位数据写入先前已确定的显示存储器的单元内,操作完成后列地址计数器自动加1。(7)读显示数据(Read display data)格式数据该操作将KS0108接口部的输出寄存器内容读出,然后列地址计数器自动加1。3.1.3硬件原理图3.2软件设计3.2.1 程序流程图 开始初始化DS1302LCD12864,显示初始时间按键是否按下时钟正常运行调整时间日期是否3.2.2 程序代码1、 LCD12864显示驱动程序#include #include #define uchar unsigned char#define uint unsigned int#define LCD_DB_PORT P0 / 液晶数据线端口DB0-DB7#define LCD_START_ROW 0xc0 /起始行命令#define LCD_PAGE 0xB8 / 页指令#define LCD_COL 0x40 / 列指令bit Reverse_Display=0; /是否反相显示(白底黑字/黑底白字)sbit DI=P20; /液晶引脚定义sbit RW=P21;sbit E=P22;sbit CS1=P23;sbit CS2=P24;sbit RST=P25;bit LCD_IS_BUSY() /检查LCD是否忙 LCD_DB_PORT=0xFF;RW=1;_nop_();DI=0;E=1;_nop_();E=0;return (bit)(P0&0x80);void Write_Byte_To_LCD(uchar comand) /向LCD写入一个字节(一般用于发送命令) while(LCD_IS_BUSY(); LCD_DB_PORT=0xFF; RW=0; _nop_(); DI=0; LCD_DB_PORT=comand; E=1; _nop_(); E=0;void Write_Data_To_LCD(uchar dat) /向LCD写入数据 while(LCD_IS_BUSY(); LCD_DB_PORT=0xFF; RW=0; _nop_(); DI=1; if(!Reverse_Display) /根据Reverse_Display决定是否反相显示 LCD_DB_PORT=dat; else LCD_DB_PORT=dat; E=1; _nop_(); E=0;void LCD12864_Initialization() /初始化LCD CS1=1; CS2=1; Write_Byte_To_LCD(0x38); Write_Byte_To_LCD(0x0F); Write_Byte_To_LCD(0x01); Write_Byte_To_LCD(0x06); Write_Byte_To_LCD(LCD_START_ROW);void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant /通用显示函数 uchar i;if(L64) CS1=1; CS2=0;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL+L);if(L+W64) for(i=0;iW;i+) Write_Data_To_LCD(ri); else for(i=0;i64-L;i+) Write_Data_To_LCD(ri);CS1=0; CS2=1;Write_Byte_To_LCD(LCD_PAGE+P); Write_Byte_To_LCD(LCD_COL);for(i=64-L;iW;i+) Write_Data_To_LCD(ri); else CS1=0; CS2=1;Write_Byte_To_LCD(LCD_PAGE+P); Write_Byte_To_LCD(LCD_COL+L-64);for(i=0;iW;i+) Write_Data_To_LCD(ri); void Display_char(uchar P1,uchar L1,uchar *M) reentrant / 显示一个816点阵字符 LCD_Show(P1,L1,8,M); LCD_Show(P1+1,L1,8,M+8); void Display_Word(uchar P2,uchar L2,uchar *M) reentrant / 显示一个1616点阵符 LCD_Show(P2,L2,16,M); LCD_Show(P2+1,L2,16,M+16); 2、 DS1302时钟程序 #include #include #include #define uchar unsigned char#define uint unsigned intsbit SDA=P10; /DS1302数据线sbit CLK=P11; /DS1302时钟线sbit RST=P12; / DS1302复位线char Adjust_Index=-1; /当前调节的时间对象:秒,分,时,日,月,年uchar MonthsDays=0,31,0,31,30,31,30,31,31,30,31,30,31; / 一年中每个月的天数,二月/的天数由年份决定uchar DateTime7; /所读取的日期时间void Write_Byte_TO_DS1302(uchar X); / 向DS1302写入一个字节uchar Read_Byte_FROM_DS1302();/从DS1302中读取一个字节uchar Read_Data_FROM_DS1302(uchar addr); /从DS1302指定位置读取数据, 读数据void Write_Data_TO_DS1302(uchar addr,uchar dat); /向DS1302指定位置写入数据,写数据void SET_DS1302(); / 设置时间void GetTime(); / 读取当前时间uchar Is_Leapyear(uint year);/ 判断是否为闰年void Write_Byte_TO_DS1302(uchar X) / 向DS1302写入一个字节 uchar i; for(i=0;i=1; uchar Read_Byte_FROM_DS1302()/从DS1302中读取一个字节 uchar i,byte,t; for(i=0;i=1; t=SDA; byte|=t7; CLK=1; CLK=0; return byte/16*10+byte%16; /BCD码转换 uchar Read_Data_FROM_DS1302(uchar addr) /从DS1302指定位置读取数据, 读数据 uchar dat; RST=0; CLK=0; RST=1; Write_Byte_TO_DS1302(addr); /向DS1302写入一个地址 dat=Read_Byte_FROM_DS1302(); /在上面写入的地址中读取数据 CLK=1; RST=0; return dat; void Write_Data_TO_DS1302(uchar addr,uchar dat) / 向DS1302指定位置写入数据,写数据 CLK=0; RST=1; Write_Byte_TO_DS1302(addr); Write_Byte_TO_DS1302(dat); CLK=1; RST=0; void SET_DS1302() / 设置时间 uchar i; Write_Data_TO_DS1302(0x8E,0x00); /写控制字,取消写保护 for(i=1;i7;i+) / 分,时,日,月,年依次写入 Write_Data_TO_DS1302(0x80+2*i,(DateTimei/104)|(DateTimei%10); Write_Data_TO_DS1302(0x8E,0x80); /写控制字,加写保护 void GetTime() / 读取当前时间 uchar i; for(i=0;i7;i+) DateTimei=Read_Data_FROM_DS1302(0x81+2*i);uchar Is_Leapyear(uint year) / 判断是否为闰年 return (year%4=0&year%100!=0)|(year%400=0) ;void Refresh_Week_Day() / 求自2000.1.1开始的任何一天是星期几? uint i,d,w=5; /已知1999年12.31是星期五 for(i=2000;i2000+DateTime6;i+) d=Is_Leapyear(i)?366:365;w=(w+d)%7; d=0; for (i=1;iDateTime4;i+) d+=MonthsDaysi; d+=DateTime3; DateTime5=(w+d)%7+1; /保存星期,0-6表示星期日,星期一至星期六,为了与/DS1302的星期格式匹配,返回值需要加1void Datetime_Adjust(char X) /年,月,日和时,分+/- switch(Adjust_Index) case 6: /年调整,00-99 if(X=1&DateTime60) DateTime6-; MonthsDays2=Is_Leapyear(2000+DateTime6)?29:28; /获取2月天数 if(DateTime3MonthsDaysDateTime4) DateTime3=MonthsDaysDateTime4; Refresh_Week_Day(); /刷新星期 break; case 4: /月调整 01-12 if(X=1&DateTime41) DateTime4-; MonthsDays2=Is_Leapyear(2000+DateTime6)?29:28; /获取2月天数 if(DateTime3MonthsDaysDateTime4) DateTime3=MonthsDaysDateTime4; Refresh_Week_Day(); /刷新星期 break; case 3: /日调整00-28或00-29或00-30或00-31 MonthsDays2=Is_Leapyear(2000+DateTime6)?29:28; /调节之前首先根据当/前年份得出该年中2月的天数 if(X=1&DateTime30) DateTime3-; Refresh_Week_Day(); /刷新星期 break; case 2: / 时调整 if(X=1&DateTime20) DateTime2-; break; case 1: / 分调整 if(X=1&DateTime10) DateTime1-; break;case 0: / 秒调整 if(X=1&DateTime10) DateTime0-; break;3、 字符汉字显示程序 / 与本程序有关的数字和汉字的点阵编码 DotMatrix.c#include #include #include #define uchar unsigned char#define uint unsigned int/年、月、日、星期、时、分、秒等汉字点阵(1616)uchar code DATE_TIME_WORDS=0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00, /年0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,/月0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,/日0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,/期0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,/时0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,/分0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,/秒0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00 ;/一、二、三、四、五、六和天等汉字点阵(1616)uchar code WEEK_WORDS=0x00,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,/天0x00,0x80,0x40,0x20,0x10,0x08,0x06,0x01,0x02,0x04,0x08,0x10,0x30,0x60,0x20,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,/一0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,/二0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,/三0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,/四0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,/五0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,/六0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00, ;/0-9等数字点阵(816)uchar code Digits= 0x00,0x00,0xF0,0xF8,0x08,0x68,0xF8,0xF0,0x00,0x00,0x07,0x0F,0x0B,0x08,0x0F,0x07, /00x00,0x20,0x20,0x30,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00, /10x00,0x30,0x38,0x08,0x88,0xF8,0x70,0x00,0x00,0x0C,0x0E,0x0B,0x09,0x08,0x08,0x00, /20x00,0x30,0x38,0x88,0x88,0xF8,0x70,0x00,0x00,0x06,0x0E,0x08,0x08,0x0F,0x07,0x00, /30x00,0x00,0xF8,0xF8,0x00,0xE0,0xE0,0x00,0x00,0x03,0x03,0x02,0x02,0x0F,0x0F,0x02,/40x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,/50x00,0xC0,0xE0,0x78,0x58,0xC8,0x80,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,/60x00,0x08,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x0E,0x0F,0x01,0x00,0x00,0x00,/70x00,0x70,0xF8,0xC8,0x88,0xF8,0x70,0x00,0x00,0x07,0x0F,0x08,0x09,0x0F,0x07,0x00,/80x00,0xF0,0xF8,0x08,0x08,0xF8,0xF0,0x00,0x00,0x00,0x09,0x0D,0x0F,0x03,0x01,0x00,/9 ;4、 主程序 #include #include #include #define uchar unsigned char#define uint unsigned intextern void LCD12864_Initialization();extern void Display_char(uchar P1,uchar L1,uchar *M) reentrant;extern void Display_Word(uchar P2,uchar L2,uchar *M) reentrant;extern void Datetime_Adjust(char X);extern void SET_DS1302(); / 设置时间extern GetTime();void Initialization();/初始化函数extern bit Reverse_Display;/是否反相显示(白底黑字/黑底白字)extern uchar code Digits;extern uchar code WEEK_WORDS;extern uchar code Digits;extern uchar code DATE_TIME_WORDS;extern char Adjust_Index; /当前调节的时间对象:秒,分,时,日,月,年(0,1,2,3,4,6)extern uchar MonthsDays; / 一年中每个月的天数,二月的天数由年份决定extern uchar DateTime7; /所读取的日期时间sbit k1=P34; / 选择按键sbit k2=P35; / 加sbit k3=P36; /减sbit k4=P37; /确定uchar tcount=0;uchar H_Offset=10;/水平与垂直偏移uchar V_page_Offset=0;void main() Initialization();while(1) if(Adjust_Index=-1) GetTime(); void Initialization() /初始化函数 IE=0x83;IP=0x01;IT0=0X01;TH0=-50000/256; / 写入初值 TL0=-50000%256; / 写入初值TR0=1;LCD12864_Initialization(); /液晶初始化函数 Display_char(V_page_Offset,0+H_Offset,Digits+2*16); /显示年的前面固定的两位Display_char(V_page_Offset,8+H_Offset,Digits); /在12864屏幕上固定显示汉字:年月日,星期,时分秒 Display_Word(V_page_Offset,32+H_Offset,DATE_TIME_WORDS+0*32); Display_Word(V_page_Offset,64+H_Offset,DATE_TIME_WORDS+1*32); Display_Word(V_page_Offset,96+H_Offset,DATE_TIME_WORDS+2*32); Display_Word(V_page_Offset+3,56+H_Offset,DATE_TIME_WORDS+3*32); Display_Word(V_page_Offset+3,72+H_Offset,DATE_TIME_WORDS+4*32); Display_Word(V_page_Offset+6,32+H_Offset,DATE_TIME_WORDS+5*32); Display_Word(V_page_Offset+6,64+H_Offset,DATE_TIME_WORDS+6*32); Display_Word(V_page_Offset+6,96+H_Offset,DATE_TIME_WORDS+7*32);void T0_INT()interrupt 1 / 定时器0刷新LCD显示函数 TH0=-50000/256; / 写入初值 TL0=-50000%256; / 写入初值 if(+tcount!=2) return; tcount=0; Reverse_Display=Adjust_Index=6; /年(后两位) Display_char(V_page_Offset,16+H_Offset,Digits+DateTime6/10*16); Display_char(V_page_Offset,24+H_Offset,Digits+DateTime6%10*16); Reverse_Display=Adjust_Index=5; /星期 Display_Word(V_page_Offset+3,96+H_Offset,WEEK_WORDS+(DateTime5%10-1)*32); Reverse_Display=Adjust_Index=4; /月 Display_char(V_page_Off

温馨提示

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

评论

0/150

提交评论