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

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

基于单片机的多功能数字万年历 摘 要随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。

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

本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。本系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。

系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。可以显示时间、公农历日期、星期、温度、节气,天干地支和当天日出日落时间,并有闹铃和智能控制家用电器功能。

关键词 单片机;万年历; 液晶技术 ; 农历查询目 录摘 要 IAbstract II第一章 绪 论 11.1 课题开发背景 11.2 设计意义 11.3 设计目标 21.4 论文结构 2第二章 硬件设计 32.1 硬件设计框图 32.2 系统硬件详细设计图 42.3 各芯片介绍 42.3.1 SM89516单片机应用设计 42.2.2 点阵液晶控制器T6963C 52.2.3 SD2000A时钟芯片 92.2.4 AT24C16可读写存储器 142.2.5 DS18B20单总线数字温度计 15第三章 系统软件设计 183.1系统功能模块图及各功能介绍 183.2 主程序流程图 193.3 程序算法设计 23第四章 调 试 414.1 硬件调试 424.2 软件调试 424.3 综合调试 44结 论 45致 谢 46参考文献 47附录1 48附录2 外文文献 49附录3 (系统使用说明书) 55。

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

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

摘 要

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

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

本系统以单片机的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

3.求用单片机制做万年历的毕业设计

#includemain(){ for(;;) { int nian,yue,a,b,m,c,_m=28; long e; printf("请输入年份:"); scanf("%d",&nian); e=nian; e=e-1; e=(e*365+e/4)%7; m=e; if((nian%4==0)||(nian%100==0)&&(nian%400!=0)) _m++; printf("%d的日历:",nian); for(yue=1;yue<=12;yue++) { if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) { c=0; printf("\n"); printf(" %d月 \n",yue); printf(" 日 一 二 三 四 五 六\n"); for(b=1;b<=m;b++) { c++; printf(" "); } for(a=1;a<=31;a++) { c++; if(c%7-1==0&&c!=1) printf("\n"); if(a<10) printf(" "); printf(" %d ",a); m++; if(m==7) m=0; } printf("\n"); } else { if(yue==4||yue==6||yue==9||yue==11||yue==2) { if(yue==2) { c=0; printf("\n"); printf(" %d月 \n",yue); printf(" 日 一 二 三 四 五 六\n"); for(b=1;b<=m;b++) { c++; printf(" "); } for(a=1;a<=_m;a++) { c++; if(c%7-1==0&&c!=1) printf("\n"); if(a<10) printf(" "); printf(" %d ",a); m++; if(m==7) m=0; } printf("\n"); } else { c=0; printf("\n"); printf(" %d月 \n",yue); printf(" 日 一 二 三 四 五 六\n"); for(b=1;b<=m;b++) { c++; printf(" "); } for(a=1;a<=30;a++) { c++; if(c%7-1==0&&c!=1) printf("\n"); if(a<10) printf(" "); printf(" %d ",a); m++; if(m==7) m=0; } printf("\n"); } } } } }}欢迎追问请采纳。

4.单片机课程设计

这有一篇,给你参考:

?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

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

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

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

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

7.51单片机键盘接口电路的计算器的实现的毕业设计及开题报告

51单片机计算器的设计(开题报告实物论文)

目 录

1.课程设计的目的………………………………………………3

2.课程设计题目描述和要求……………………………………3

3.单片机发展简史………………………………………………4

4.MCS-51单片机系统简介………………………………………6

5.MCS-51单片机内部定时器/计数器简介……………………7

6.理论设计………………………………………………………8

7.主要电路分析…………………………………………………8

8.硬件设计………………………………………………………10

9.软件设计………………………………………………………11

10.程序代码……………………………………………………12

11.设计总结……………………………………………………18

12.参考文献……………………………………………………20

随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了。

计算器在人们的日常中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的四位数计算器。该设计系统是以AT89S51为单片机, P3口作为输入端,外接4X4的键盘,通过键盘扫描来对输入数的控制,在P1口,P2口接了驱动电路。用来保证LED的工作正常。计算器将完成的功能有加,减,乘,除等功能。

功能:

完成0~9999整数的一次加/减/乘/除运算,

减法运算结果可以实现计算结果的负数显示,

除法运算结果为0~999并保留两位小数,

按键音,

设有清零键,

首位零不显示,

其它的显示"E"

按键排布为:

清零/确认/除/乘

减/加/9/8

7/6/5/4

3/2/1/0

8.C51单片机的万年历程序设计

我这有个数码管显示的程序 以前做的,。

你可以在我这个程序上修改修改 包括键盘扫描,还有动态显示 。

【。

】#include //常量参数 #define TMODW 0x01; #define SCONW 0x00; #define xplay 0x04;//显示分频系数 //显示位选 unsigned char data stb; //键值缓存,0xFF无键命令 unsigned char data keynum; //显示字型变量 unsigned char data play[8]; //工作参数 unsigned char data l,m; //字型码 unsigned char code BCDPC[10]= {0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F}; //字位码 unsigned char code STBCODE[8]= {0x01,0x02,0x04,0x08, 0x10,0x20,0x40,0x80 }; //400Hz xplay分频计数 unsigned char data cttime; //时钟参数 unsigned char data hr,min,sec,sec100; //调整时钟参数(时钟“走”) void ct1() {sec100++; if (sec100==100) {sec100=0;sec++; if (sec==60) {sec=0;min++; if (min==60) {min=0;hr++; if (hr==24) hr=0; } } } } //时钟参数→LED 显示缓存7段参数转换函数; void xcplay() {play[0]=BCDPC[hr/10]; play[1]=BCDPC[hr%10]; play[2]=BCDPC[min/10]; play[3]=BCDPC[min%10]; play[4]=BCDPC[sec/10]; play[5]=BCDPC[sec%10]; play[6]=BCDPC[sec100/10]; play[7]=BCDPC[sec100%10]; } //显示扫描 void cplay() {T0=1;//T0-高电平消隐 T1=0;//T1-低电平准备发脉冲前沿 TI=0;//? P1=0;//? SBUF=STBCODE[stb]; while (TI==0) { }; TI=0; SBUF=play[stb]; while (TI==0) { }; T1=1; T0=0; stb=++stb&0x07; } extern void cthl0(); //定时器0中断处理程序 void ct0(void) interrupt 1 using 1 {cthl0(); cttime--; if (cttime==0) {cttime=xplay; ct1();//调用时钟“走”函数 xcplay();//调用时钟参数→Led显示缓存转换函数 }; cplay(); } void w20ms() {for (l=0;l<41;l++) {for (m=0;m<81;m++) { } } } void tkey() {P1=0xF0; keynum=0xFF; if (P1!=0xF0) {w20ms(); P1=0xF0; if (P1!=0xF0) {P1=0xFE; switch (P1) {case 0xEE:keynum=0;break; case 0xDE:keynum=1;break; case 0xBE:keynum=2;break; case 0x7E:keynum=3;break; } P1=0xFD; switch (P1) {case 0xED:keynum=4;break; case 0xDD:keynum=5;break; case 0xBD:keynum=6;break; case 0x7B:keynum=7;break; } P1=0xFB; switch (P1) { case 0xEB:keynum=8;break; } }; }; P1=0x00; } void command() {switch (keynum) { case 0:{hr=hr+1; if (hr==24) hr=0; } break; case 1:{min=min+1; if (min==60) min=0; } break; case 2:{sec=sec+1; if (sec==60) sec=0; } break; case 3:{sec100=0; } break; case 4:{ while(!(P1=0xED)) { hr=0; min=0; sec=0; } } break; case 5:{hr=hr-1; if (hr==00) hr=24; } break; case 6:{min=min-1; if (min==00) min=59; } break; case 7:{sec=sec-1; if (sec==00) sec=0; } break; case 0xFF:break; } keynum=0xFF; } main () { hr=8; min=5; sec=8; sec100=0; TMOD=TMODW; SCON=SCONW; ET0=1; TR0=1; EA=1; cttime=xplay; while (1) {w20ms(); tkey(); command(); }; }。

基于51单片机的计算器和万历毕业论文的设计

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

资讯

法律毕业生论文(大学生法律意识论文3000字)

阅读(79)

本文主要为您介绍法律毕业生论文,内容包括大学生法律意识论文3000字,关于法律的毕业论文,谁帮我写一篇法律的毕业论文。[原文] 从社会学角度讲,我国正在融入法治社会。对置身于未来社会的任何一个人,是无法摆脱法律而生存的。随着社会主义市

资讯

内蒙古师范大学博士毕业论文答辩(毕业论文答辩)

阅读(85)

本文主要为您介绍内蒙古师范大学博士毕业论文答辩,内容包括如果规定博士生学位论文答辩至少3小时可以吗,内蒙古师范大学的自考论文答辩好过吗,博士论文答辩讲解过程一般多少分钟。毕业论文答辩技巧和准备 自己为什么选择这个课题? 2、研究

资讯

大学生毕业论文题目心理学(心理学论文什么题目的最好写)

阅读(78)

本文主要为您介绍大学生毕业论文题目心理学,内容包括心理学论文什么题目的最好写,心理学毕业论文选题,高分求心理学论文题目。心理学是一门研究人类的心理现象、精神功能和行为的科学,既是一门理论学科,也是一门应用学科.本文就以心理学研究

资讯

论文没过会有毕业证吗(毕业论文没通过能拿到毕业证吗)

阅读(76)

本文主要为您介绍论文没过会有毕业证吗,内容包括毕业论文通不过有毕业证吗请明白人回答,论文不过能拿毕业证吗,毕业论文没过能拿到毕业证吗。题主,你好。很高兴回答你的问题。首先问一下你是本科还是大专,因为有些大专院校也是要求撰写毕业论

资讯

内蒙古师范大学博士毕业论文答辩(毕业论文答辩)

阅读(85)

本文主要为您介绍内蒙古师范大学博士毕业论文答辩,内容包括如果规定博士生学位论文答辩至少3小时可以吗,内蒙古师范大学的自考论文答辩好过吗,博士论文答辩讲解过程一般多少分钟。毕业论文答辩技巧和准备 自己为什么选择这个课题? 2、研究