基于51单片机的万年历设计.docx

基于51,52单片机的电子万年历设计(经典)

收藏

压缩包内文档预览:(预览前20页/共48页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:30366705    类型:共享资源    大小:7.46MB    格式:ZIP    上传时间:2019-12-11 上传人:遗**** IP属地:湖北
20
积分
关 键 词:
基于 5152 单片机 电子 万年历 设计 经典
资源描述:
基于51,52单片机的电子万年历设计(经典),基于,5152,单片机,电子,万年历,设计,经典
内容简介:
基于51单片机的电子万年历的设计报告第五小组2012.2.221、 项目概述 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计是数据采集及处理,键盘控制,显示系统及报警系统与单片机有效结合,本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。2、 项目要求 具有年、月、日、星期、时、分、秒等功能; 具有温度计功能; 具备年、月、日、星期、时、分、秒校准功能;3、 系统设计1、 框图设计AT89C51主控模块Ds12864液晶显示Ds1302时钟电路按键扫描Ds18b20实时环境温度采集电路报警提示电路2、 知识点(1) 时钟芯片DS1302的工作原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2) DS1302的控制字节DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR 表-1 DS1302的控制字格式(3) 数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-4所示 图-4 DS1302读/写时序图(4) DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。 表-2 DS1302的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 4、 硬件设计 本电路是由AT89S51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;1、 电路原理图2、 元件清单名称型号数量 单片机AT89SC511 液晶显示器JHD12864F1 电阻10k(1/4w)5电阻1k5电阻200欧姆5电阻4.7k5 电阻4.7k5 电位器10k1 电容10u/16V1 电容30p4 三极管90131 轻触按键小(尺寸66mm5.5)4 蜂鸣器5 V1 晶振12M(小体积)1 底座8脚1 底座40脚1 发光二极管 红1 发光二极管绿1 时钟芯片DS13021 纽扣电池及底座3V(大)1 液晶插槽20孔1 单排针3排120 杜邦线及杜邦头1股40 电路板AOA515、 软件设计本系统的软件系统主要分为主程序、液晶程序、时钟程序。1.程序流程图开始 初始化读、写日期、时间和温度分离日期时间温度显示值显示子程序日期、时间修改子程序返回 主程序框图 设置流程图2程序清单(1).主程序:#include #include #include ds1302.h#include ds18b20.h#include lcd12864.h /按键定义sbit KEY0 = P23; /设置sbit KEY3 = P24; /退出sbit KEY1 = P25; /减sbit KEY2 = P26; /加sbit LED1=P30;sbit LED2=P31;sbit LED3=P32;unsigned char w = 0; /调时标志位/键盘函数所要用到的变量unsigned char key_operate = 0;/设置模式unsigned char timer =0;unsigned char key_flag;unsigned int counter=0;unsigned char Lcd_t = 0; /LCD刷新间隔unsigned char ss; /全局变量unsigned int v,getdata,getdataa;static unsigned char menu = 0; /定义静态小时更新用数据变量static unsigned char keys = 0; /定义静态小时更新用数据变量static unsigned char timecount = 0; /定义静态软件计数器变量unsigned int flag = 0;/定义并初始化flagunsigned char DS = 10; /定义并初始化DSunsigned char DSS = 1; /定义并初始化DSSunsigned char flag1=0;unsigned char flag2=0;unsigned char flag3=0;unsigned char flag4=0;void lcd_dispwendu(void);/函数声明/*/void InitTimer0(void)/产生10ms时间间隔 TMOD = (TMOD & 0XF0) | 0X01; /定时器0工作在模式1,16Bit定时器模式 TH0 = (65536 - 8000)/256; TL0 = (65536 - 8000)%256; TR0 =1; ET0 =1;/开启定时器和中断 EA = 1;/开始总中断void INIT_Clock(void) /初始化万年历 InitLCD(); /初始12864 ClearScreen(0);/清屏 SetStartLine(0);/显示开始行 Initial_DS1302();/初始化ds1302Init_DS18B20();/初始化ds18b20InitTimer0();/调转到10ms的定时器中断函数/*/void DelayMM(unsigned int a)/延时函数 1MS/次while( a- );/*/ Displayen(2,0,0*8,t1);/ Displayen(1,0,63*8,3);/(1右半屏,0第1行,63第63列*8 数字,3第3个数字)/ Display (2,1,1*16,1); /(2左半屏,1第2行,1 第2 列*16汉字,1第1个汉字)/*/*显示时间*/void lcd_disptime(SYSTEMTIME *Time) unsigned char s1,s2,f1,f2,m1,m2; /定义时间映射局部变量(专用寄存器) if(Time-Second != ss)/判断是否需要更新ss = Time-Second; /更新数据 if(flag!=0)DS-;if(DSHour/10;s2=Time-Hour%10;f1=Time-Minute/10;f2=Time-Minute%10;m1=Time-Second/10;m2=Time-Second%10; Displayen(2,2,0*8,s1); Displayen(2,2,1*8,s2); Displayen(2,2,2*8,11); /: Displayen(2,2,3*8,f1); Displayen(2,2,4*8,f2); Displayen(2,2,5*8,11); /: Displayen(2,2,6*8,m1); Displayen(2,2,7*8,m2);/*显示日期*/void lcd_dispdate(SYSTEMTIME *Time) unsigned char n1,n2,n3,n4,n5,n6,n7,n8,n9; /定义局部变量 n1=Time-YearH/10; n2=Time-YearH%10; n3=Time-Year/10; n4=Time-Year%10; n5=Time-Month/10; n6=Time-Month%10; n7=Time-Day/10; n8=Time-Day%10; n9=Time-Week%10; Displayen(2,0,0*8,2); /2 Displayen(2,0,1*8,0); /0 Displayen(2,0,2*8,n3); Displayen(2,0,3*8,n4); Display (2,0,10*16,8); /年 Displayen(2,0,6*8,n5); Displayen(2,0,7*8,n6); Display (1,0,0*16,9); /月 Displayen(1,0,2*8,n7); Displayen(1,0,3*8,n8); Display (1,0,2*16,7); /日 Display (1,2,9*16,10 ); /星 Display (1,2,10*16,11); /期 Display (1,2,11*16,n9); /日/*调整状态显示*/void tiaozheng() switch (key_operate) case 1:/分钟Displayen(2,6,2*8,12 ); /- Displayen(2,6,3*8,12 ); /- Display (2,6,0*16,25 ); /- Display (2,6,2*16,18); /调 Display (2,6,3*16,19); /整 Display (1,6,0*16,21); /分 Display (1,6,1*16,22); /钟Displayen(1,6,4*8,12 ); /- Displayen(1,6,5*8,12 ); /- Display (1,6,3*16,24); /+ break; case 2: /小时 Display (2,6,0*16,25 ); /- Display (2,6,2*16,18); /调 Display (2,6,3*16,19); /整 Display (1,6,0*16,23); /小 Display (1,6,1*16,33); /时 Display (1,6,3*16,24); /+ break; case 3: /日期 Display (2,6,0*16,25 ); /- Display (2,6,2*16,18); /调 Display (2,6,3*16,19); /整 Display (1,6,0*16, 7); /日 Display (1,6,1*16,11); /期 Display (1,6,3*16,24); /+ break; case 4: /月份 Display (2,6,0*16,25 ); /- Display (2,6,1*16,32); Display (1,6,7*16,32); Display (2,6,2*16,18); /调 Display (2,6,3*16,19); /整 Display (1,6,0*16, 9); /月 Display (1,6,1*16,20); /份 Display (1,6,3*16,24); /+ break; case 5:; /年份 Display (2,6,0*16,25 ); /- Display (2,6,2*16,18); /调 Display (2,6,3*16,19); /整 Display (1,6,0*16, 8); /年 Display (1,6,1*16,20); /份 Display (1,6,3*16,24); /+ break; case 6: /星期Display (2,6,0*16,25 ); /- Display (2,6,2*16,18); /调 Display (2,6,3*16,19); /整 Display (1,6,0*16,10); /星 Display (1,6,1*16,11); /期 Display (1,6,3*16,24); /+ break; default: break; /*显示温度*/void lcd_dispwendu() unsigned char i=0;unsigned char a=0,b=0,c=0;/unsigned char td; i=ReadTemperature(); /读温度并送显 / td=1;if(i=0) LED2=0; LED1=LED3=1; if(i=40) LED2=0;LED1=LED3=1; a=i/1000; /千位 b=i/100%10; /百位 c=i/10%10; /十位 if(i 10) /从DS1302中得到时间 if(key_operate = 0) DS1302_GetTime(&CurrentTime); else DS1302_SetTime(&CurrentTime); /写时间 例如:12-12-12 lcd_disptime(&CurrentTime);/显示时间 /写公历日期 例如:09-01-01 lcd_dispdate(&CurrentTime);/显示日期 tiaozheng();/调整状态显示 if(!KEY3) Lcd_t = 0; void Timer_0(void)interrupt 1 EA = 0; TH0 = (65536 - 8000)/256; TL0 = (65536 - 8000)%256; Lcd_t +;/显示定时计数器,当为10时进行显示,时间10ms if(!KEY0)|(!KEY1)|(!KEY2)|(!KEY3)&(key_flag=0) timer=0;/清除不按键计数器 key_flag = 10; /设计 while(-key_flag);/延时去抖动 key_flag = 1; if(!KEY0) /Modle键,进入调时模式 if(key_operate=0) key_flag = 0;/允许按键长按 w =1; /调时标志位,为1时进入调时 if(counter+50) /Modle键要长按1S生效 key_operate+; key_flag = 1;/不允许按键长安 else key_operate+; if(key_operate 6) key_operate = 1; else if(!KEY1 & w = 1)/减1调整 switch (key_operate) case 1:/分钟 if(CurrentTime.Minute- =0) CurrentTime.Minute = 59; break; case 2:/小时 if(CurrentTime.Hour- =0) CurrentTime.Hour = 23; break; case 3: /日 if(CurrentTime.Day- =1) CurrentTime.Day = 31; break; case 4: /月 if(CurrentTime.Month- =1) CurrentTime.Month = 12; break; case 5: /年 if(CurrentTime.Year- =0) CurrentTime.Year = 99; break; case 6: /年(高位) if(CurrentTime.Week- =1) CurrentTime.Week = 7; break; default: break; else if(!KEY2 & w = 1)/加1调整 switch (key_operate) case 1:/分钟 if(+CurrentTime.Minute59) CurrentTime.Minute=0; break; case 2:/小时 if(+CurrentTime.Hour23) CurrentTime.Hour=0; break; case 3:/日 if(+CurrentTime.Day31) CurrentTime.Day=1; break; case 4:/月 if(+CurrentTime.Month12) CurrentTime.Month=1; break; case 5:/年 if(+CurrentTime.Year99) CurrentTime.Year=0; break; case 6:/年(高位) if(+CurrentTime.Week7) CurrentTime.Week=1; break; default: break; else if(!KEY3)/判断退出键是否按下 key_operate=0;/设计模式为0 counter=0;/定时中断计数为0 w=0; /调时标志位,为0时退出调时 else if(timer+1000)/长期不按键,自动回到走钟状态 timer=0; key_operate=0; counter=0; if(KEY0)&(KEY1)&(KEY2)&(KEY3) key_flag = 0; EA = 1; (2).lcd12864模块/总线驱动模式电路连接 DB7-0接数据总线 RS、RW、CS接地址总线 E接读写控制总线,采用与非门匹配时序#ifndef _LCD12864_H_#define _LCD12864_H_#include #define DATA P0 /LCD12864数据线sbit RS=P20; / 数据指令 选择sbit RW=P21; / 读写 选择sbit EN=P22; / 读写使能sbit cs1=P12; / 片选1sbit cs2=P13; / 片选2 unsigned char code logo= /*- 文字: -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -0-*/0x00,0x06,0x09,0x09,0xE6,0xF0,0x18,0x08,0x08,0x08,0x18,0x30,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,/*- 文字: 一 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -1-*/0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*- 文字: 二 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -2-*/0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,/*- 文字: 三 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -3-*/0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xC4,0x86,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,/*- 文字: 四 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -4-*/0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,0x00,0x7F,0x20,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,/*- 文字: 五 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -5-*/0x00,0x04,0x84,0x84,0x84,0x84,0xFC,0x84,0x84,0x84,0x84,0xC4,0x86,0x84,0x00,0x00,0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x60,0x40,0x00,/*- 文字: 六 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -6-*/0x20,0x20,0x20,0x20,0x20,0x22,0x2C,0x38,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x40,0x20,0x18,0x06,0x03,0x00,0x00,0x00,0x01,0x02,0x0C,0x38,0x70,0x00,0x00,/*- 文字: 日 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -7-*/0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFF,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,0x00,0x00,/*- 文字: 年 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -8-*/0x00,0x20,0x10,0xCC,0x47,0x44,0x44,0xFC,0x44,0x44,0x44,0x64,0x46,0x04,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,/*- 文字: 月 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -9-*/0x00,0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x00,0x00,0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,0x00,/*- 文字: 星 -*/*- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 -10-*/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,/*- 文字: 期 -*/*- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 -11-*/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,0x00,0x40,0x42,0x5C,0x48,0x40,0x40,0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00,0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00, /*当,12*/0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08,0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00,0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00,0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00,/*前,13*/0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,/*温,14*/0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,/*度,15*/*- 文字: 倒 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -16-*/0x40,0x20,0xF8,0x17,0x62,0x52,0xCE,0x42,0xE2,0x42,0x00,0xF0,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x42,0x42,0x7F,0x22,0x22,0x22,0x00,0x4F,0x80,0x7F,0x00,0x00,/*- 文字: 计 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -17-*/0x20,0x21,0x2E,0xE4,0x00,0x00,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0x08,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,/*- 文字: 调 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -18-*/0x20,0x21,0xEE,0x04,0x00,0x00,0xFF,0x29,0xA9,0xBF,0xA9,0xA9,0x01,0xFF,0x00,0x00,0x00,0x00,0x1F,0x88,0x44,0x30,0x0F,0x00,0x0F,0x04,0x04,0x4F,0x80,0x7F,0x00,0x00,/*- 文字: 整 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -19-*/0x00,0x04,0x74,0xD4,0xFF,0xD4,0x74,0x04,0x10,0x0C,0xB7,0x44,0xB4,0x0C,0x04,0x00,0x00,0x42,0x43,0x7A,0x43,0x42,0x43,0x7E,0x4B,0x4B,0x4A,0x4A,0x42,0x43,0x01,0x00,/*- 文字: 份 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -20-*/0x80,0x40,0xE0,0x98,0x47,0xA2,0x98,0x87,0x82,0x80,0x87,0x89,0xB0,0x60,0x20,0x00,0x00,0x00,0x7F,0x00,0x40,0x40,0x20,0x18,0x07,0x00,0x20,0x60,0x3F,0x00,0x00,0x00,/*- 文字: 分 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -21-*/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,/*- 文字: 钟 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -22-*/0x40,0x30,0x2C,0xEB,0x28,0x28,0x00,0xF8,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x01,0x01,0x01,0xFF,0x41,0x21,0x00,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x00,0x00,/*- 文字: 小 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -23-*/0x00,0x00,0x00,0xC0,0x70,0x20,0x00,0xFF,0x00,0x10,0x20,0xC0,0x80,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x00,/*- +: -*/*- 宽度x高度=16x16 -24*/0x00,0xF8,0x08,0x08,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x01,0x01,0x01,0x1F,0x1F,0x01,0x01,0x01,0x20,0x20,0x3F,0x00,/*- -: -*/*- 宽度x高度=16x16 -25*/0x00,0xF8,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x20,0x20,0x3F,0x00,0x08,0x04,0x93,0x92,0x96,0x9A,0x92,0xFA,0x94,0x93,0x92,0x96,0xFA,0x02,0x02,0x00,0x40,0x40,0x47,0x24,0x24,0x14,0x0C,0xFF,0x04,0x04,0x24,0x44,0x24,0x1C,0x00,0x00,/*第,26*/0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,/*五,27*/0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,/*小,28*/0x20,0x30,0xAC,0x63,0x30,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,0x22,0x67,0x22,0x12,0x12,0x40,0x40,0x7F,0x42,0x42,0x42,0x42,0x7F,0x40,0x40,0x00,/*组,29*/0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00,0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00,/*设,30*/0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,/*计,31*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/320x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00,/*时,0*/;/*/* 定义ASCII字库8列*16行*/*/unsigned char code Ezk=/*- 文字: 0 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*0,0*/*- 文字: 1 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*1,1*/*- 文字: 2 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*2,2*/*- 文字: 3 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*3,3*/*- 文字: 4 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*4,4*/*- 文字: 5 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*5,5*/*- 文字: 6 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*6,6*/*- 文字: 7 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*7,7*/*- 文字: 8 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*8,8*/*- 文字: 9 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*9,9*/*- 文字: - -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*-,10*/*- 文字: : -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*:,11*/*- 文字: : -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*:,12*/*- 文字: . -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*.,13*/*- 文字: D -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*D,14*/*- 文字: C -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*C,15*/*- 文字: V -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,/*V,16*/*- 文字: - -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*-,17*/*- 文字: + -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,/*+,18*/ ;/sbit CS1=P23;/sbit CS2=P24;/sbit RST=P25;/sbit DI=P20;/sbit RW=P21;/sbit ALE=P22; /*状态检查,LCD是否忙*/void CheckState() unsigned char dat;/状态信息(判断是否忙) RS=0; / 数据指令选择,D/I(RS)=“L” ,表示 DB7DB0 为显示指令数据 RW=1; /R/W=“H” ,E=“H”数据被读到DB7DB0 do DATA=0x00; EN=1;/EN下降源 _nop_(); /一个时钟延时 dat=DATA; EN=0; dat=0x80 & dat; /仅当第7位为0时才可操作(判别busy信号) while(!(dat=0x00); /*写命令到LCD中*/SendCommandToLCD(unsigned char com) CheckState();/状态检查,LCD是否忙 RS=0; /向LCD发送命令。RS=0写指令,RS=1写数据 RW=0;/R/W=“L” ,E=“HL”数据被写到 IR 或 DR DATA=com; /com :命令 EN=1;/EN下降源 _nop_(); _nop_(); EN=0; /*设置页 0xb8是页的首地址*/void SetLine(unsigned char page) page=0xb8|page; /1011 1xxx 0=page=7 设定页地址-X 0-7,8行为一页64/8=8,共8页 SendCommandToLCD(page); /*设定显示开始行,0xc0是行的首地址*/void SetStartLine(unsigned char startline) startline=0xc0|startline; /1100 0000 SendCommandToLCD(startline); /设置从哪行开始:0-63,一般从0 行开始显示 /*设定列地址-Y 0-63 ,0x40是列的首地址*/void SetColumn(unsigned char column) column=column &0x3f; /column最大值为64,越出 0=column=63 column= 0x40|column; /01xx xxxx SendCommandToLCD(column); /*开关显示,0x3f是开显示,0x3e是关显示*/void SetOnOff(unsigned char onoff) onoff=0x3e|onoff; /0011 111x,onoff只能为0或者1SendCommandToLCD(onoff);/*写显示数据 */void WriteByte(unsigned char dat) CheckState();/状态检查,LCD是否忙 RS=1; /RS=0写指令,RS=1写数据 RW=0;/R/W=“L” ,E=“HL”数据被写到 IR 或 DR DATA=dat;/dat:显示数据 EN=1; /EN下降源 _nop_(); _nop_(); EN=0;/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/void SelectScreen(unsigned char screen) switch(screen) case 0: cs1=0;/全屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; case 1: cs1=0;/左屏 _nop_(); _nop_(); _nop_(); cs2=1; _nop_(); _nop_(); _nop_(); break; case 2: cs1=1;/右屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; /*清屏screen: 0-全屏,1-左屏,2-右*/void ClearScreen(unsigned char screen) unsigned char i,j; SelectScreen(screen); for(i=0;i8;i+) /控制页数0-7,共8页 SetLine(i);SetColumn(0); for(j=0;j64;j+) /控制列数0-63,共64列 WriteByte(0x00); /写点内容,列地址自动加1 /*延时程序*/voiddelay(unsigned int z)unsigned int i,j;for(i=0; iz; i+)for(j = 0; j 110; j+); /*向上滚屏*/*这里用做滚动显示*/*voidlcd_rol() uint i;for(i = 0; i 64; i+)cs1=0; / 片选1SendCommandToLCD(0xc0+i);cs1=1; cs2=0;/ 片选2SendCommandToLCD(0xc0+62-i);cs2=0; / 片选2delay(6);*/*初始化LCD*/void InitLCD() CheckState();SelectScreen(0);SetOnOff(0); /关显示SelectScreen(0);SetOnOff(1); /开显示SelectScreen(0);ClearScreen(0);/清屏SetStartLine(0); /开始行:0/*显示全角汉字*/void Display(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)int i;/选屏参数,pagr选页参数,column选列参数,number选第几汉字输出SelectScreen(ss);column=column&0x3f;SetLine(page);/写上半页SetColumn(column); /控制列for(i=0;i16;i+) /控制16列的数据输出WriteByte(logoi+32*number); /i+32*number汉字的前16个数据输出SetLine(page+1); /写下半页SetColumn(column); /控制列 for(i=0;i16;i+) /控制16列的数据输出WriteByte(logoi+32*number+16);/i+32*number+16汉字的后16个数据输出 /*显示半角汉字和数字和字母*/*-将传来的对应数字(1个字)点阵式在 某行(h)并以某列(l)为开始列 的位置 (16行*8列)-*/*显示半角汉字和数字和字母*/void Displayen(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)unsigned int i;/选屏参数,pagr选页参数,column选列参数,number选第几汉字输出SelectScreen(ss);column=column&0x3f;SetLine(page);/写上半页SetColumn(column); for(i=0;i8;i+)WriteByte(Ezki+16*number);SetLine(page+1);/写下半页SetColumn(column); for(i=0;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;DelayDS18B20(4);return(dat);/*/void WriteOneChar(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;DelayDS18B20(5);DQ = 1;dat=1;/*/unsigned int ReadTemperature(void)/读取温度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器a=ReadOneChar(); /读低8位b=ReadOneChar(); /读高8位t=b;t0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于51,52单片机的电子万年历设计(经典)
链接地址:https://www.renrendoc.com/p-30366705.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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