基于单片机的万历设计毕业论文(单片机的电子万年历设计论文)

1.单片机的电子万年历设计论文

基于单片机的多功能数字万年历

摘 要

随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。

本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。

本系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。可以显示时间、公农历日期、星期、温度、节气,天干地支和当天日出日落时间,并有闹铃和智能控制家用电器功能。

关键词 单片机;万年历; 液晶技术 ; 农历查询

目 录

摘 要 I

Abstract II

第一章 绪 论 1

1.1 课题开发背景 1

1.2 设计意义 1

1.3 设计目标 2

1.4 论文结构 2

第二章 硬件设计 3

2.1 硬件设计框图 3

2.2 系统硬件详细设计图 4

2.3 各芯片介绍 4

2.3.1 SM89516单片机应用设计 4

2.2.2 点阵液晶控制器T6963C 5

2.2.3 SD2000A时钟芯片 9

2.2.4 AT24C16可读写存储器 14

2.2.5 DS18B20单总线数字温度计 15

第三章 系统软件设计 18

3.1系统功能模块图及各功能介绍 18

3.2 主程序流程图 19

3.3 程序算法设计 23

第四章 调 试 41

4.1 硬件调试 42

4.2 软件调试 42

4.3 综合调试 44

结 论 45

致 谢 46

参考文献 47

附录1 48

附录2 外文文献 49

附录3 (系统使用说明书) 55

2.单片机课程设计

这有一篇,给你参考:

?1308581933

万年历程序 *

;*****************************

;67H(高两位年)66H(低两位年)65H(月)64H(星期)

;63H(日)62H(小时)61H(分)60H(秒)57H(农历月)56H(农历日)

;显示缓冲单元7CH~7BH(4CH~4BH)年低位,7AH~79H(4AH~49H)月,

;78H(48H)星期,77H~76H(47H~46H)日,75H~74H(45H~44H)时,

;73H72H(43H~42H)分,71H~70H(41H~40H)秒,5EH~5DH(55H~54H)农历年

;5CH~5BH(53H~52H)农历月,5AH~59H(51H~50H)农历日

;闰年标志为F0,定时器T1为调整时候闪烁用;************************************

主程序 * ;************************************

START: SETB EA

MOV SCON,#00H ;串行输出,方式0

MOV TMOD,#10H ;计数器1,方式1

MOV TL1,#00H

MOV TH1,#00H

MOV DS1302_ADDR,#8EH

MOV DS1302_DATA,#00H ;允许写1302

LCALL WRITE

MOV DS1302_ADDR,#90H

MOV DS1302_DATA,#0A6H ;1302充电,充电电流1.1mA

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

void ds1302_limit(void) //初始化 { ds1302_writeenable(); ds1302_oscenable(); for(ds1302_b=0;ds1302_b<7;ds1302_b++) ds1302_sendbyte(ds_sec+2*ds1302_b,d1302[ds1302_b]); //赋值初始化 } uchar ds1302_read(uchar address) //读时钟 { uchar dat; ds1302_writeenable(); switch(address) {case 0:dat=ds1302_receivebyte(ds_sec+1); break; case 1:dat=ds1302_receivebyte(ds_min+1); break; case 2:dat=ds1302_receivebyte(ds_hour+1); break; case 3:dat=ds1302_receivebyte(ds_day+1); break; case 4:dat=ds1302_receivebyte(ds_week+1); break; case 5:dat=ds1302_receivebyte(ds_month+1); break; case 6:dat=ds1302_receivebyte(ds_year+1); break; } ds1302_writedisable(); return(dat); } void ds1302_write(uchar address,uchar dat) { ds1302_writeenable(); switch(address) { case 0:ds1302_sendbyte(ds_sec,dat); break; case 1:ds1302_sendbyte(ds_min,dat); break; case 2:ds1302_sendbyte(ds_hour,dat); break; case 3:ds1302_sendbyte(ds_day,dat); break; case 4:ds1302_sendbyte(ds_week,dat); break; case 5:ds1302_sendbyte(ds_month,dat); break; case 6:ds1302_sendbyte(ds_year,dat); break; } ds1302_writedisable(); } ds1302pro() //读出数据 { nian01=ds1302_receivebyte(ds_year+1); yue01=ds1302_receivebyte(ds_month+1); ri01=ds1302_receivebyte(ds_day+1); xiaoshi01=ds1302_receivebyte(ds_hour+1); sec01=ds1302_receivebyte(ds_sec+1); //读秒信息 min01=ds1302_receivebyte(ds_min+1); //读分信息 zhouxingqi=ds1302_receivebyte(ds_week+1); d1302_transfer(); //数值处理提取出待显示的值 } void ds1302_sendbyte(uchar command,uchar xmtdat) // 发送数据程序,发送1个字节给被控器ds1302 { uchar i; rst=0; _nop_(); sclk=0; _nop_(); rst=1; for(i=0;i<8;i++) { io_data= (bit)(command&0x01); command = command >> 1; sclk=1; _nop_(); sclk=0; } for(i=0;i<8;i++) { io_data= (bit)(xmtdat&0x01); xmtdat = xmtdat >> 1; sclk=1; _nop_(); sclk=0; } rst=0; } uchar ds1302_receivebyte(uchar command) // 接收数据程序;从被控器ds1302 接收1个字节数据 { uchar i, rcvdat=0; rst=0; _nop_(); sclk=0; _nop_(); rst=1; for(i=0;i<8;i++) { io_data= (bit)(command&0x01); command = command >> 1; sclk=1; _nop_(); sclk=0; } for(i=0;i<7;i++) { if(io_data)rcvdat|=0x80; rcvdat= rcvdat >> 1; sclk=1; _nop_(); sclk=0; } if(io_data)rcvdat|=0x80; rst=0; return rcvdat; } void ds1302_writeenable(void) //允许数据写入寄存器 { ds1302_sendbyte(ds_com,00); } void ds1302_writedisable(void) //禁止数据写入寄存器 { ds1302_sendbyte(ds_com,0x80); } void ds1302_oscenable(void) //起动时钟操作 { ds1302_sendbyte(ds_sec,0x00); } void ds1302_oscdisable(void) //停止时钟操作 { ds1302_sendbyte(ds_sec,0x80); } void d1302_transfer(void) //数据转换函数 { nian02=nian01&0x0f; nian01=nian01>>4; yue02=yue01&0x0f; yue01=yue01>>4; ri02=ri01&0x0f; ri01=ri01>>4; xiaoshi02=xiaoshi01&0x0f; xiaoshi01=xiaoshi01>>4; min02=min01&0x0f; min01=min01>>4; sec02=sec01&0x0f; //取miao信号的低四位 sec01=sec01>>4; //取高四位 } void delay1302(int i) //延时函数 { uchar x,j; for(x=0;x

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

void DS1302_limit(void) //初始化{ DS1302_WriteEnable(); DS1302_OscEnable(); for(ds1302_b=0;ds1302_b<7;ds1302_b++) DS1302_SendByte(ds_sec+2*ds1302_b,d1302[ds1302_b]); //赋值初始化}uchar DS1302_Read(uchar address) //读时钟{ uchar dat; DS1302_WriteEnable(); switch(address) {case 0:dat=DS1302_ReceiveByte(ds_sec+1); break; case 1:dat=DS1302_ReceiveByte(ds_min+1); break; case 2:dat=DS1302_ReceiveByte(ds_hour+1); break; case 3:dat=DS1302_ReceiveByte(ds_day+1); break; case 4:dat=DS1302_ReceiveByte(ds_week+1); break; case 5:dat=DS1302_ReceiveByte(ds_month+1); break; case 6:dat=DS1302_ReceiveByte(ds_year+1); break; } DS1302_WriteDisable(); return(dat);}void DS1302_Write(uchar address,uchar dat){ DS1302_WriteEnable(); switch(address) { case 0:DS1302_SendByte(ds_sec,dat); break; case 1:DS1302_SendByte(ds_min,dat); break; case 2:DS1302_SendByte(ds_hour,dat); break; case 3:DS1302_SendByte(ds_day,dat); break; case 4:DS1302_SendByte(ds_week,dat); break; case 5:DS1302_SendByte(ds_month,dat); break; case 6:DS1302_SendByte(ds_year,dat); break; } DS1302_WriteDisable();}ds1302pro() //读出数据{ nian01=DS1302_ReceiveByte(ds_year+1); yue01=DS1302_ReceiveByte(ds_month+1); ri01=DS1302_ReceiveByte(ds_day+1); xiaoshi01=DS1302_ReceiveByte(ds_hour+1); sec01=DS1302_ReceiveByte(ds_sec+1); //读秒信息 min01=DS1302_ReceiveByte(ds_min+1); //读分信息 zhouxingqi=DS1302_ReceiveByte(ds_week+1); d1302_transfer(); //数值处理提取出待显示的值 }void DS1302_SendByte(uchar Command,uchar XmtDat) // 发送数据程序,发送1个字节给被控器DS1302{ uchar i; RST=0; _nop_(); SCLK=0; _nop_(); RST=1; for(i=0;i<8;i++) { IO_DATA= (bit)(Command&0x01); Command = Command >> 1; SCLK=1; _nop_(); SCLK=0; } for(i=0;i<8;i++) { IO_DATA= (bit)(XmtDat&0x01); XmtDat = XmtDat >> 1; SCLK=1; _nop_(); SCLK=0; } RST=0; }uchar DS1302_ReceiveByte(uchar Command) // 接收数据程序;从被控器DS1302 接收1个字节数据{ uchar i, RcvDat=0; RST=0; _nop_(); SCLK=0; _nop_(); RST=1; for(i=0;i<8;i++) { IO_DATA= (bit)(Command&0x01); Command = Command >> 1; SCLK=1; _nop_(); SCLK=0; } for(i=0;i<7;i++) { if(IO_DATA)RcvDat|=0x80; RcvDat= RcvDat >> 1; SCLK=1; _nop_(); SCLK=0; } if(IO_DATA)RcvDat|=0x80; RST=0;return RcvDat;}void DS1302_WriteEnable(void) //允许数据写入寄存器{ DS1302_SendByte(ds_com,00);}void DS1302_WriteDisable(void) //禁止数据写入寄存器{ DS1302_SendByte(ds_com,0x80);}void DS1302_OscEnable(void) //起动时钟操作{ DS1302_SendByte(ds_sec,0x00);}void DS1302_OscDisable(void) //停止时钟操作{ DS1302_SendByte(ds_sec,0x80);}void d1302_transfer(void) //数据转换函数{ nian02=nian01&0x0f; nian01=nian01>>4; yue02=yue01&0x0f; yue01=yue01>>4; ri02=ri01&0x0f; ri01=ri01>>4; xiaoshi02=xiaoshi01&0x0f; xiaoshi01=xiaoshi01>>4; min02=min01&0x0f; min01=min01>>4; sec02=sec01&0x0f; //取miao信号的低四位 sec01=sec01>>4; //取高四位 }void delay1302(int i) //延时函数{ uchar x,j; for(x=0;x

5.基于单片机控制的电子万年历课程设计

电子万年历

部分源程序

TEMPER_L EQU 40H;用于保存读出温度的高8位

TEMPER_H EQU 41H;用于保存读出温度的低8位

FLAG1 EQU 42H;是否检测到DS18B20标志位

a_bit equ 43h ;数码管个位数存放内存位置

b_bit equ 44h ;数码管十位数存放内存位置

T_RST Bit P3.6 ;实时时钟复位线引脚

T_CLK Bit P3.4 ;实时时钟时钟线引脚

T_IO Bit P3.5 ;实时时钟数据线引脚

SECOND EQU 45H

MINUTE EQU 46H

HOUR EQU 47H

DAY EQU 48H

有的

基于单片机控制的电子万年历课程设计

6.设计一个基于单片机的万年历程序

#include#include"lcd.h"#include"ds1302.h" sbit K1=P3^1; sbit K2=P3^0; sbit K3=P3^2; sbit K4=P3^3; //管脚接线 unsigned char character0[24] = {0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02 ,0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//"月"代码 0x01 0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00,//"日"代码 0x02 }; //年 void Int0Configuration(); void LcdDisplay(); unsigned char SetState,SetPlace; void Delay10ms(void); //误差 0us/******************************************************************************** 函数名 : main* 函数功能 : 主函数* 输入 : 无* 输出 : 无*******************************************************************************/ void main() { unsigned char i,h; Int0Configuration(); LcdInit(); LcdWriteCom(0x40); for (h=0;h<24;h++) { LcdWriteData(character0[h]); } LcdWriteCom(0x80);// Ds1302Init(); while(1) { if(SetState==0) { Ds1302ReadTime(); } else { if(K1==0) //检测按键K1是否按下 { Delay10ms(); //消除抖动 if(K1==0) { SetPlace++; if(SetPlace>=7) SetPlace=0; } while((i<50)&&(K1==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0; } if(K2==0) //检测按键K2是否按下 { Delay10ms(); //消除抖动 if(K2==0) { TIME[SetPlace]++; if((TIME[SetPlace]&0x0f)>9) //换成BCD码。

{ TIME[SetPlace]=TIME[SetPlace]+6; } if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //小时只能到23 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //日只能到31 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //月只能到12 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x7)&&(SetPlace==5)) //周只能到7 { TIME[SetPlace]=1; } // if(SetPlace==5) //月只能到12// {// TIME[SetPlace]=;// } } while((i<50)&&(K2==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0; } } LcdDisplay(); } }/******************************************************************************** 函数名 : LcdDisplay()* 函数功能 : 显示函数* 输入 : 无* 输出 : 无*******************************************************************************/ void LcdDisplay() { LcdWriteCom(0x80+0X40); LcdWriteCom(0x0f); LcdWriteCom(0xc0|(2-0x40)); LcdWriteCom(0x0c); Delay10ms(); LcdWriteData('0'+TIME[2]/16); //时 LcdWriteData('0'+(TIME[2]&0x0f)); LcdWriteData(':'); LcdWriteData('0'+TIME[1]/16); //分 LcdWriteData('0'+(TIME[1]&0x0f)); LcdWriteData(':'); LcdWriteData('0'+TIME[0]/16); //秒 LcdWriteData('0'+(TIME[0]&0x0f)); LcdWriteCom(0x80); LcdWriteData('2'); LcdWriteData('0'); LcdWriteData('0'+TIME[6]/16); //年 LcdWriteData('0'+(TIME[6]&0x0f)); LcdWriteData(0x00); LcdWriteData('0'+TIME[4]/16); //月 LcdWriteData('0'+(TIME[4]&0x0f)); LcdWriteData(0x01); LcdWriteData('0'+TIME[3]/16); //日 LcdWriteData('0'+(TIME[3]&0x0f)); LcdWriteData(0x02); LcdWriteCom(0x8D); LcdWriteData('0'+(TIME[5]&0x07)-1); //星期 }/******************************************************************************** 函数名 : Int0Configuration()* 函数功能 : 配置外部中断0* 输入 : 无* 输出 : 无*******************************************************************************/ void Int0Configuration() { //设置INT0 IT0=1;//跳变沿出发方式(下降沿) EX0=1;//打开INT0的中断允许。 EA=1;//打开总中断 }/******************************************************************************** 函数名 : Int0() * 函数功能 : 外部中断0 中断函数* 输入 : 无* 输出 : 无*******************************************************************************/ void Int0() interrupt 0 { Delay10ms(); if(K3==0) { SetState=~SetState; SetPlace=0; Ds1302Init(); } }/******************************************************************************** 函数名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输入 : 无* 输出 : 无*******************************************************************************/ void Delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); }。

基于单片机的万历设计毕业论文

转载请注明出处众文网 » 基于单片机的万历设计毕业论文(单片机的电子万年历设计论文)

资讯

往届生考研看毕业论文(往届的毕业论文在哪看)

阅读(69)

本文主要为您介绍往届生考研看毕业论文,内容包括往届生的毕业论文在什么地方可以找到啊,复试要求提供论文,往届的毕业论文在哪看,用往届生的,外校本科毕业论文会被知网查出来吗。往届的毕业论文直接在校内网就可以进行观看。毕业论文,按一门

资讯

毕业论文最终指导记录(毕业论文指导记录表)

阅读(74)

本文主要为您介绍毕业论文最终指导记录,内容包括毕业论文指导记录表,论文指导记录怎么填写的,毕业论文指导记录表。第 一 次指导主要内容记录老师在授课时于我们分析了论文应该注意的事项,讲述了相关论文的格式和一些有代表性的论题以及阅读

资讯

护士大专毕业论文糖尿病(糖尿病低血糖护理论文范文)

阅读(89)

本文主要为您介绍护士大专毕业论文糖尿病,内容包括糖尿病低血糖护理论文范文,有关于糖尿病患者的护理相关毕业论文资料吗,想写关于糖尿病的护理论文想写关于糖尿病的护理论文,不知道从哪。糖尿病护理 摘要】随着人们生活水平的提高,糖尿病的

资讯

毕业论文及论文设计题目(毕业论文的题目怎么写)

阅读(77)

本文主要为您介绍毕业论文及论文设计题目,内容包括毕业论文的题目怎么写,毕业论文选题,毕业论文及毕业设计题目怎么写。提供一些设计专业毕业论文的题目,供参考。 数码相机的设计报告 2、产品设计中的人机交互探讨 3、绿色设计与世纪未来 4

资讯

毕业论文选题指导教师评语(毕业论文指导教师评语)

阅读(74)

本文主要为您介绍毕业论文选题指导教师评语,内容包括毕业论文指导教师评语,毕业论文(设计)指导教师评语,求毕业设计指导教师评语。优: 论文选题符合专业培养目标,能够达到综合训练目标,题目有较高难度,工作量大。选题具有较高的学术研究(参考)价值(

资讯

忘记密码毕业论文(毕业论文知网登陆密码忘了怎么找回)

阅读(68)

本文主要为您介绍忘记密码毕业论文,内容包括毕业论文知网登陆密码忘了怎么找回,笔记本电脑忘记密码求高手毕业论文在里面,浙江万里学院毕业论文设计设记平台忘记密码后,怎么改密码。知网登陆密码忘记了可以通过其登录界面提供的忘记密码来

资讯

毕业论文老师英语(本科毕业论文中的指导老师英语怎么说)

阅读(178)

本文主要为您介绍毕业论文老师英语,内容包括本科论文的"导师"英语怎么表达,毕业论文导师英语怎么说,毕业论文指导老师用英语怎么说我同学写的。指导老师的英文:adviseradviser 读法 英 [ədvaɪzə] 美 [ədvaɪzɚ] 作名词的意思是: 顾问;劝告

资讯

抽查硕士毕业生论文(20%抽查硕士论文是什么意思)

阅读(67)

本文主要为您介绍抽查硕士毕业生论文,内容包括硕士已毕业,论文被抽检如果论文不合格会有什么后果,毕业后硕士论文抽检,研究生毕业后,硕士学位论文省里抽查,都查些什么什么情况下会撤。就是说检测出的重复率,抄袭率不许高于百分之二十,用万方

资讯

黑大毕业论文查重率(大学本科论文查重率要多少合格)

阅读(73)

本文主要为您介绍黑大毕业论文查重率,内容包括黑龙江大学本科论文查重率多少算抄袭,本科毕业论文查重率一般多少以下算合格,大学本科论文查重率要多少合格。大学本科结业论文的查重率要达到多少才算合格?是很多需求查重的同学都很关心的问题

资讯

往届生考研看毕业论文(往届的毕业论文在哪看)

阅读(69)

本文主要为您介绍往届生考研看毕业论文,内容包括往届生的毕业论文在什么地方可以找到啊,复试要求提供论文,往届的毕业论文在哪看,用往届生的,外校本科毕业论文会被知网查出来吗。往届的毕业论文直接在校内网就可以进行观看。毕业论文,按一门

资讯

毕业论文最终指导记录(毕业论文指导记录表)

阅读(74)

本文主要为您介绍毕业论文最终指导记录,内容包括毕业论文指导记录表,论文指导记录怎么填写的,毕业论文指导记录表。第 一 次指导主要内容记录老师在授课时于我们分析了论文应该注意的事项,讲述了相关论文的格式和一些有代表性的论题以及阅读

资讯

护士大专毕业论文糖尿病(糖尿病低血糖护理论文范文)

阅读(89)

本文主要为您介绍护士大专毕业论文糖尿病,内容包括糖尿病低血糖护理论文范文,有关于糖尿病患者的护理相关毕业论文资料吗,想写关于糖尿病的护理论文想写关于糖尿病的护理论文,不知道从哪。糖尿病护理 摘要】随着人们生活水平的提高,糖尿病的

资讯

毕业论文及论文设计题目(毕业论文的题目怎么写)

阅读(77)

本文主要为您介绍毕业论文及论文设计题目,内容包括毕业论文的题目怎么写,毕业论文选题,毕业论文及毕业设计题目怎么写。提供一些设计专业毕业论文的题目,供参考。 数码相机的设计报告 2、产品设计中的人机交互探讨 3、绿色设计与世纪未来 4

资讯

毕业论文选题指导教师评语(毕业论文指导教师评语)

阅读(74)

本文主要为您介绍毕业论文选题指导教师评语,内容包括毕业论文指导教师评语,毕业论文(设计)指导教师评语,求毕业设计指导教师评语。优: 论文选题符合专业培养目标,能够达到综合训练目标,题目有较高难度,工作量大。选题具有较高的学术研究(参考)价值(

资讯

药学没实验怎么写毕业论文(药学专业的毕业论文怎么写)

阅读(76)

本文主要为您介绍药学没实验怎么写毕业论文,内容包括药学专业的毕业论文怎么写,我是药学专业,怎么写毕业论文啊,没有实验数据怎么写论文。谈怎么写之前,先说写哪一类,我给你分开来说。药学专业毕业论文分综述类、调研类和实验类。药学专科毕