首页

> 学术期刊知识库

首页 学术期刊知识库 问题

数字万年历毕业论文设计

发布时间:

数字万年历毕业论文设计

stm32本来就带了rtc,就不用时钟芯片了,然后找个显示屏,例如点阵之类的,再移植个万年历算法就搞完了

电子钟相关毕业设计 ·数字电子钟的电路设计 (字数:9242,页数:22 )·数字电子钟的设计与制作 (字数:8017,页数:22 )·数字钟的设计 (字数:6208,页数:21 )·基于8051单片机的数字钟 (字数:21638,页数:50)·基于单片机的电子时钟控制系统 (字数:7935,页数:42 )·数字电路数字钟设计 (字数:4846,页数:21 )·电子闹钟设计 (字数:4094,页数:19 )·定时闹钟设计 (字数:5714,页数:24 )·智能定时闹钟设计 (字数:3826,页数:18 )·下棋定时钟设计 (字数:5290,页数:24 )·多功能数字钟设计与制作 (字数:13129,页数:34)·基于单片机的电子钟设计 (字数:7710,页数:24 )·基于单片机的数字电子钟设计 (字数:10301,页数:42)·基于Labview的虚拟数字钟设计 (字数:17457,页数:32)·电子日历钟 (字数:10677,页数:33)·数字钟的设计与制作 (字数:4922,页数:23 )·单片机数字钟设计 (字数:15355,页数:47)·基于单片机的数字钟设计 (字数:12541,页数:27)·单片机定时闹钟设计 (字数:8450,页数:24 )·万年历可编程电子钟控电铃 (字数:14371.页数:41)·数字定时闹钟设计 (字数:7770,页数:28 )·基于EDA技术的数字电子钟设计 (字数:12247,页数:32)·多功能时钟打点系统设计 (字数:8353,页数:31 )·智能音乐闹钟设计 (字数:10002,页数:37)·基于AT89S51单片机的数字电子钟设计 (字数:14560,页数:39)

前段时间写的,部分有注释,你参考参考,不懂的问我./* * * * Createdon:2013-3-11 * Author:jw */#include<>#include<>//三维数组存放日期,每年12月,日历中最多排6行(星期),每星期7天intdays[12][6][7];//平年,闰年每个月的天数intds[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29, 31,30,31,30,31,31,30,31,30,31}};//标题chartitle[]="SUMMONTUEWEDTHUFRISAT";//月份intm[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};//月份charmt[][4]={"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"};//根据蔡勒公式计算日期星期几intwd(intyear,intm,intd){ intc,y,w; if(m<=2){ year--; m+=12; } c=year/100; y=year%100; w=(c/4-2*c+y+y/4+13*(m+1)/5+d-1); return(w%7+7)%7;}//闰年平年intleapYear(intyear){ return(year%4==0&&year%100!=0)||(year%400==0);}intmain(){ inti,j,k,leap,fd,year; scanf("%d%*c",&year); //初始三维数组为0 for(i=0;i<12;i++){ for(j=0;j<6;j++){ for(k=0;k<7;k++){ days[i][j][k]=0; } } } fd=wd(year,1,1); leap=leapYear(year); //三维数组赋值 for(i=0;i<12;i++){ for(k=0,j=1;j<=ds[leap][i];j++){ days[i][k][fd]=j; fd=(++fd)%7; if(fd==0){ k++; } } } //输出数据 for(i=0;i<4;i++){ printf("%13s %27s %27s\n",mt[m[i][0]-1],mt[m[i][1]-1], mt[m[i][2]-1]); printf("%s %s %s\n",title,title,title); for(j=0;j<6;j++){ //1,4,7 for(k=0;k<7;k++){ if(days[m[i][0]-1][j][k]) printf("%4d",days[m[i][0]-1][j][k]); else printf(" "); } printf(" "); //2,5,8 for(k=0;k<7;k++){ if(days[m[i][1]-1][j][k]) printf("%4d",days[m[i][1]-1][j][k]); else printf(" "); } printf(" "); //3,6,9 for(k=0;k<7;k++){ if(days[m[i][2]-1][j][k]) printf("%4d",days[m[i][2]-1][j][k]); else printf(" "); } printf("\n"); } } return0;}-------------------------------------------------打印结果--------------------------------------------------------------------

#include<>#include""#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;//flag用于读取头文件中的温度值,和显示温度值#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)sbit rs=P1^0;sbit en=P1^2;sbit rw=P1^1; //如果硬件上rw接地,就不用写这句和后面的rw=0了sbit led=P3^7; //LCD背光开关//DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P2^2;sbit SCLK=P2^1;sbit RST=P2^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;/************************************************************ACC累加器= 就是ACC的第0位。Acc可以位寻址。累加器ACC是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。以后在学习指令时,常用A来表示累加器。但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字。一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址。 ***************************************************************///校时按键与C51的引脚连接定义sbit key1=P2^4; //设置键sbit key2=P2^5; //加键sbit key3=P2^6; //减键sbit buzzer=P2^0;//蜂鸣器,通过三极管9012驱动,端口低电平响/**************************************************************/uchar code tab1[]={"20 - - "}; //年显示的固定字符uchar code tab2[]={" : : "};//时间显示的固定字符//延时函数,后面经常调用void delay(uint xms)//延时函数,有参函数{ uint x,y; for(x=xms;x>0;x--) for(y=120;y>0;y--);}/********液晶写入指令函数与写入数据函数,以后可调用**************//*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/write_1602com(uchar com)//****液晶写入指令函数****{ rs=0;//数据/指令选择置为指令 rw=0; //读写选择置为写 P0=com;//送入数据 delay(1); en=1;//拉高使能端,为制造有效的下降沿做准备 delay(1); en=0;//en由高变低,产生下降沿,液晶执行命令}write_1602dat(uchar dat)//***液晶写入数据函数****{ rs=1;//数据/指令选择置为数据 rw=0; //读写选择置为写 P0=dat;//送入数据 delay(1); en=1; //en置高电平,为制造下降沿做准备 delay(1); en=0; //en由高变低,产生下降沿,液晶执行命令}lcd_init()//***液晶初始化函数****{ write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移 write_1602com(0x01);//清显示 write_1602com(yh+1);//日历显示固定符号从第一行第1个位置之后开始显示 for(a=0;a<14;a++) { write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分 //delay(3); } write_1602com(er+2);//时间显示固定符号写入位置,从第2个位置后开始显示 for(a=0;a<8;a++) { write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号 //delay(3); }}/*********************over***********************//***************DS1302有关子函数********************/void write_byte(uchar dat)//写一个字节{ ACC=dat; RST=1; for(a=8;a>0;a--) { IO=ACC0; SCLK=0; SCLK=1; ACC=ACC>>1; }}uchar read_byte()//读一个字节{ RST=1; for(a=8;a>0;a--) { ACC7=IO; SCLK=1; SCLK=0; ACC=ACC>>1; } return (ACC);}//----------------------------------------void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据{ RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0;}uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址{ uchar temp; RST=0; SCLK=0; RST=1; write_byte(add); temp=read_byte(); SCLK=1; RST=0; return(temp);}uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制{ uchar Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F));}//--------------------------------------void ds1302_init() //1302芯片初始化子函数(2010-01-07,12:00:00,week4){RST=0;SCLK=0;write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12write_1302(0x8a,0x04);//向DS1302内写周寄存器8aH写入初始周数据4write_1302(0x86,0x07);//向DS1302内写日期寄存器86H写入初始日期数据07write_1302(0x88,0x01);//向DS1302内写月份寄存器88H写入初始月份数据01write_1302(0x8c,0x10);//向DS1302内写年份寄存器8cH写入初始年份数据10write_1302(0x8e,0x80); //打开写保护}//------------------------------------//温度显示子函数void write_temp(uchar add,uchar dat)//向LCD写温度数据,并指定显示位置{ uchar gw,sw; gw=dat%10;//取得个位数字 sw=dat/10;//取得十位数字 write_1602com(er+add);//er是头文件规定的值0x80+0x40 write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0xdf);//显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码 write_1602dat(0x43); //显示"C"符号,0x43是液晶屏字符库里大写C的地址码 }//------------------------------------//时分秒显示子函数void write_sfm(uchar add,uchar dat)//向LCD写时分秒,有显示位置加、现示数据,两个参数{ uchar gw,sw; gw=dat%10;//取得个位数字 sw=dat/10;//取得十位数字 write_1602com(er+add);//er是头文件规定的值0x80+0x40 write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码 }//-------------------------------------//年月日显示子函数void write_nyr(uchar add,uchar dat)//向LCD写年月日,有显示位置加数、显示数据,两个参数{ uchar gw,sw; gw=dat%10;//取得个位数字 sw=dat/10;//取得十位数字 write_1602com(yh+add);//设定显示位置为第一个位置+add write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码 }//-------------------------------------------void write_week(uchar week)//写星期函数{ write_1602com(yh+0x0c);//星期字符的显示位置 switch(week) { case 1:write_1602dat('M');//星期数为1时,显示 write_1602dat('O'); write_1602dat('N'); break; case 2:write_1602dat('T');//星期数据为2时显示 write_1602dat('U'); write_1602dat('E'); break; case 3:write_1602dat('W');//星期数据为3时显示 write_1602dat('E'); write_1602dat('D'); break; case 4:write_1602dat('T');//星期数据为4是显示 write_1602dat('H'); write_1602dat('U'); break; case 5:write_1602dat('F');//星期数据为5时显示 write_1602dat('R'); write_1602dat('I'); break; case 6:write_1602dat('S');//星期数据为6时显示 write_1602dat('T'); write_1602dat('A'); break; case 7:write_1602dat('S');//星期数据为7时显示 write_1602dat('U'); write_1602dat('N'); break;}}//****************键盘扫描有关函数**********************void keyscan(){ if(key1==0)//---------------key1为功能键(设置键)-------------------- { delay(9);//延时,用于消抖动 if(key1==0)//延时后再次确认按键按下 { buzzer=0;//蜂鸣器短响一次 delay(20); buzzer=1; while(!key1); key1n++; if(key1n==9) key1n=1;//设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环 switch(key1n) { case 1: TR0=0;//关闭定时器 //TR1=0; write_1602com(er+0x09);//设置按键按动一次,秒位置显示光标 write_1602com(0x0f);//设置光标为闪烁 temp=(miao)/10*16+(miao)%10;//秒数据写入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);//miao write_1302(0x8e,0x80); break; case 2: write_1602com(er+6);//按2次fen位置显示光标 //write_1602com(0x0f); break; case 3: write_1602com(er+3);//按动3次,shi //write_1602com(0x0f); break; case 4: write_1602com(yh+0x0e);//按动4次,week //write_1602com(0x0f); break; case 5: write_1602com(yh+0x0a);//按动5次,ri //write_1602com(0x0f); break; case 6: write_1602com(yh+0x07);//按动6次,yue //write_1602com(0x0f); break; case 7: write_1602com(yh+0x04);//按动7次,nian //write_1602com(0x0f); break; case 8: write_1602com(0x0c);//按动到第8次,设置光标不闪烁 TR0=1;//打开定时器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);//miao数据写入DS1302 write_1302(0x8e,0x80); break; }} }//------------------------------加键key2---------------------------- if(key1n!=0)//当key1按下以下。再按以下键才有效(按键次数不等于零) { if(key2==0) //上调键 { delay(10); if(key2==0) { buzzer=0;//蜂鸣器短响一次 delay(20); buzzer=1; while(!key2); switch(key1n) { case 1:miao++;//设置键按动1次,调秒 if(miao==60) miao=0;//秒超过59,再加1,就归零 write_sfm(0x08,miao);//令LCD在正确位置显示"加"设定好的秒数 temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码 write_1302(0x8e,0x80); //打开写保护 write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回 //write_1602com(0x0b); break; case 2:fen++; if(fen==60) fen=0; write_sfm(0x05,fen);//令LCD在正确位置显示"加"设定好的分数据 temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 break; case 3:shi++; if(shi==24) shi=0; write_sfm(2,shi);//令LCD在正确的位置显示"加"设定好的小时数据 temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 4:week++; if(week==8) week=1; write_1602com(yh+0x0C);//指定'加'后的周数据显示位置 write_week(week);//指定周数据显示内容 temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 5:ri++; if(ri==32) ri=1; write_nyr(9,ri);//令LCD在正确的位置显示"加"设定好的日期数据 temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 6:yue++; if(yue==13) yue=1; write_nyr(6,yue);//令LCD在正确的位置显示"加"设定好的月份数据 temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 7:nian++; if(nian==100) nian=0; write_nyr(3,nian);//令LCD在正确的位置显示"加"设定好的年份数据 temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break;} } } //------------------减键key3,各句功能参照'加键'注释--------------- if(key3==0) { delay(10);//调延时,消抖动 if(key3==0) { buzzer=0;//蜂鸣器短响一次 delay(20); buzzer=1; while(!key3); switch(key1n) { case 1:miao--; if(miao==-1) miao=59;//秒数据减到-1时自动变成59 write_sfm(0x08,miao);//在LCD的正确位置显示改变后新的秒数 temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码 write_1302(0x8e,0x80); //打开写保护 write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 //write_1602com(0x0b); break; case 2:fen--; if(fen==-1) fen=59; write_sfm(5,fen); temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 break; case 3:shi--; if(shi==-1) shi=23; write_sfm(2,shi); temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 4:week--; if(week==0) week=7; write_1602com(yh+0x0C);//指定'加'后的周数据显示位置 write_week(week);//指定周数据显示内容 temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 5:ri--; if(ri==0) ri=31; write_nyr(9,ri); temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 6:yue--; if(yue==0) yue=12; write_nyr(6,yue); temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 7:nian--; if(nian==-1) nian=99; write_nyr(3,nian); temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break;} } } }}//-------------------------------void init() //定时器、计数器设置函数{ TMOD=0x11; //指定定时/计数器的工作方式为3 TH0=0; //定时器T0的高四位=0 TL0=0; //定时器T0的低四位=0 EA=1; //系统允许有开放的中断 ET0=1; //允许T0中断 TR0=1; //开启中断,启动定时器}//*******************主函数**************************//***************************************************void main(){ lcd_init(); //调用液晶屏初始化子函数 ds1302_init(); //调用DS1302时钟的初始化子函数 init(); //调用定时计数器的设置子函数 led=0; //打开LCD的背光电源 buzzer=0;//蜂鸣器长响一次 delay(80); buzzer=1; while(1) //无限循环下面的语句: { keyscan(); //调用键盘扫描子函数 }}void timer0() interrupt 1 //取得并显示日历和时间{ //Init_DS18B20();//温度传感器DS18b2初始化子函数,在头文件中 flag=ReadTemperature();//将18b2头文件运行返回的函数结果送到变量FLAG中,用于显示 //读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):miao = BCD_Decimal(read_1302(0x81)); fen = BCD_Decimal(read_1302(0x83)); shi = BCD_Decimal(read_1302(0x85)); ri = BCD_Decimal(read_1302(0x87)); yue = BCD_Decimal(read_1302(0x89)); nian=BCD_Decimal(read_1302(0x8d)); week=BCD_Decimal(read_1302(0x8b)); //显示温度、秒、时、分数据: write_temp(12,flag);//显示温度,从第二行第12个字符后开始显示 write_sfm(8,miao);//秒,从第二行第8个字后开始显示(调用时分秒显示子函数) write_sfm(5,fen);//分,从第二行第5个字符后开始显示 write_sfm(2,shi);//小时,从第二行第2个字符后开始显示 //显示日、月、年数据: write_nyr(9,ri);//日期,从第二行第9个字符后开始显示 write_nyr(6,yue);//月份,从第二行第6个字符后开始显示 write_nyr(3,nian);//年,从第二行第3个字符后开始显示 write_week(week);}

万年历毕业论文设计打包下载

到看一下吧,这里有讲解51单片机的

可以联系我的,有作好的防真,去我的百度空间看看。然后联系我,空间有我的联系方式

昨天才把我的毕业论文删掉。。

以联想小新pad 英寸电脑、win10专业版以及360安全浏览器13版本为例,如需要将论文下载并打包在一起可以先将论文下载到电脑。然后根据需要选中文件点击右键添加压缩即可。具体的操作方法如下:

1、在电脑上勾选需要下载的论文,点击下载按钮。

2、在出现的下载对话框中选择存储位置点击下载按钮。

3、找到该下载的两个文件,选择文件以后点击右键,选择添加到压缩文件。

4、此时即可看到已经将下载的论文打包在一起了。

毕业论文简易数字万用表设计

无论如何,得先去买一个,不然怎么做,你以为你是爱迪生,爱因斯坦?

有必要上这儿来吗,去图书馆的数据库,这样类型的文章多得不得了啊

万用表又叫多用表、三用表、复用表,是一种多功能、多量程的测量仪表,一般万用表可测量直流电流、直流电压、交流电压、电阻和音频电平等,有的还可以测交流电流、电容量、电感量及半导体的一些参数(如β)。 1.万用表的结构(500型) 万用表由表头、测量电路及转换开关等三个主要部分组成。 (1)表头:它是一只高灵敏度的磁电式直流电流表,万用表的主要性能指标基本上取决于表头的性能。表头的灵敏度是指表头指针满刻度偏转时流过表头的直流电流值,这个值越小,表头的灵敏度愈高。测电压时的内阻越大,其性能就越好。表头上有四条刻度线,它们的功能如下:第一条(从上到下)标有R或Ω,指示的是电阻值,转换开关在欧姆挡时,即读此条刻度线。第二条标有∽和VA,指示的是交、直流电压和直流电流值,当转换开关在交、直流电压或直流电流挡,量程在除交流10V以外的其它位置时,即读此条刻度线。第三条标有10V,指示的是10V的交流电压值,当转换开关在交、直流电压挡,量程在交流10V时,即读此条刻度线。第四条标有dB,指示的是音频电平。 (2)测量线路 测量线路是用来把各种被测量转换到适合表头测量的微小直流电流的电路,它由电阻、半导体元件及电池组成 它能将各种不同的被测量(如电流、电压、电阻等)、不同的量程,经过一系列的处理(如整流、分流、分压等)统一变成一定量限的微小直流电流送入表头进行测量。 (3)转换开关 其作用是用来选择各种不同的测量线路,以满足不同种类和不同量程的测量要求。转换开关一般有两个,分别标有不同的档位和量程。 2.符号含义 (1)∽ 表示交直流 (2) V- 4000Ω/V 表示对于交流电压及的直流电压挡,其灵敏度为4000Ω/V (3)A-V-Ω 表示可测量电流、电压及电阻 (4)45-65-1000Hz 表示使用频率范围为1000 Hz以下,标准工频范围为45-65Hz (5)2000Ω/V DC 表示直流挡的灵敏度为2000Ω/V 钳表和摇表盘上的符号与上述符号相似(其他因为符号格式不对不能全部写上『表示磁电系整流式有机械反作用力仪表 『表示三级防外磁场『表示水平放置))) 3.万用表的使用 (1)熟悉表盘上各符号的意义及各个旋钮和选择开关的主要作用。 (2)进行机械调零。 (3)根据被测量的种类及大小,选择转换开关的挡位及量程,找出对应的刻度线。 (4)选择表笔插孔的位置。 (5)测量电压:测量电压(或电流)时要选择好量程,如果用小量程去测量大电压,则会有烧表的危险;如果用大量程去测量小电压,那么指针偏转太小,无法读数。量程的选择应尽量使指针偏转到满刻度的2/3左右。如果事先不清楚被测电压的大小时,应先选择最高量程挡,然后逐渐减小到合适的量程。 a交流电压的测量:将万用表的一个转换开关置于交、直流电压挡,另一个转换开关置于交流电压的合适量程上,万用表两表笔和被测电路或负载并联即可。 b直流电压的测量:将万用表的一个转换开关置于交、直流电压挡,另一个转换开关置于直流电压的合适量程上,且“+”表笔(红表笔)接到高电位处,“-”表笔(黑表笔)接到低电位处,即让电流从“+”表笔流入,从“-”表笔流出。若表笔接反,表头指针会反方向偏转,容易撞弯指针。 (6)测电流:测量直流电流时,将万用表的一个转换开关置于直流电流挡,另一个转换开关置于50uA到500mA的合适量程上,电流的量程选择和读数方法与电压一样。测量时必须先断开电路,然后按照电流从“+”到“-”的方向,将万用表串联到被测电路中,即电流从红表笔流入,从黑表笔流出。如果误将万用表与负载并联,则因表头的内阻很小,会造成短路烧毁仪表。其读数方法如下: 实际值=指示值×量程/满偏 (7)测电阻:用万用表测量电阻时,应按下列方法*作: a选择合适的倍率挡。万用表欧姆挡的刻度线是不均匀的,所以倍率挡的选择应使指针停留在刻度线较稀的部分为宜,且指针越接近刻度尺的中间,读数越准确。一般情况下,应使指针指在刻度尺的1/3~2/3间。 b欧姆调零。测量电阻之前,应将2个表笔短接,同时调节“欧姆(电气)调零旋钮”,使指针刚好指在欧姆刻度线右边的零位。如果指针不能调到零位,说明电池电压不足或仪表内部有问题。并且每换一次倍率挡,都要再次进行欧姆调零,以保证测量准确。 c读数:表头的读数乘以倍率,就是所测电阻的电阻值。 (8)注意事项 a在测电流、电压时,不能带电换量程 b选择量程时,要先选大的,后选小的,尽量使被测值接近于量程 c测电阻时,不能带电测量。因为测量电阻时,万用表由内部电池供电,如果带电测量则相当于接入一个额外的电源,可能损坏表头。 d用毕,应使转换开关在交流电压最大挡位或空挡上。 4.数字万用表 现在,数字式测量仪表已成为主流,有取代模拟式仪表的趋势。与模拟式仪表相比,数字式仪表灵敏度高,准确度高,显示清晰,过载能力强,便于携带,使用更简单。下面以VC9802型数字万用表为例,简单介绍其使用方法和注意事项。 (1)使用方法 a使用前,应认真阅读有关的使用说明书,熟悉电源开关、量程开关、插孔、特殊插口的作用. b将电源开关置于ON位置。 c交直流电压的测量:根据需要将量程开关拨至DCV(直流)或ACV(交流)的合适量程,红表笔插入V/Ω孔,黑表笔插入COM孔,并将表笔与被测线路并联,读数即显示。 d交直流电流的测量:将量程开关拨至DCA(直流)或ACA(交流)的合适量程,红表笔插入mA孔(<200mA时)或10A孔(>200mA时),黑表笔插入COM孔,并将万用表串联在被测电路中即可。测量直流量时,数字万用表能自动显示极性。 e电阻的测量:将量程开关拨至Ω的合适量程,红表笔插入V/Ω孔,黑表笔插入COM孔。如果被测电阻值超出所选择量程的最大值,万用表将显示“1”,这时应选择更高的量程。测量电阻时,红表笔为正极,黑表笔为负极,这与指针式万用表正好相反。因此,测量晶体管、电解电容器等有极性的元器件时,必须注意表笔的极性。 (2).使用注意事项 a如果无法预先估计被测电压或电流的大小,则应先拨至最高量程挡测量一次,再视情况逐渐把量程减小到合适位置。测量完毕,应将量程开关拨到最高电压挡,并关闭电源。 b满量程时,仪表仅在最高位显示数字“1”,其它位均消失,这时应选择更高的量程。 c测量电压时,应将数字万用表与被测电路并联。测电流时应与被测电路串联,测直流量时不必考虑正、负极性。 d当误用交流电压挡去测量直流电压,或者误用直流电压挡去测量交流电压时,显示屏将显示“000”,或低位上的数字出现跳动。 e禁止在测量高电压(220V以上)或大电流(以上)时换量程,以防止产生电弧,烧毁开关触点。 f当显示“ ”、“BATT”或“LOW BAT” 时,表示电池电压低于工作电压。 二、摇表 摇表又称兆欧表,是用来测量被测设备的绝缘电阻和高值电阻的仪表,它由一个手摇发电机、表头和三个接线柱(即L:线路端、E:接地端、G:屏蔽端)组成。 1.摇表的选用原则 (1)额定电压等级的选择。一般情况下,额定电压在500V以下的设备,应选用500V或1000V的摇表;额定电压在500V以上的设备,选用1000V~2500V的摇表。 (2)电阻量程范围的选择。摇表的表盘刻度线上有两个小黑点,小黑点之间的区域为准确测量区域。所以在选表时应使被测设备的绝缘电阻值在准确测量区域内。 2.摇表的使用 (1)校表。测量前应将摇表进行一次开路和短路试验,检查摇表是否良好。将两连接线开路,摇动手柄,指针应指在“∞”处,再把两连接线短接一下,指针应指在“0”处,符合上述条件者即良好,否则不能使用。 (2)被测设备与线路断开,对于大电容设备还要进行放电。 (3)选用电压等级符合的摇表。 (4)测量绝缘电阻时,一般只用“L”和“E”端,但在测量电缆对地的绝缘电阻或被测设备的漏电流较严重时,就要使用“G”端,并将“G”端接屏蔽层或外壳。线路接好后,可按顺时针方向转动摇把,摇动的速度应由慢而快,当转速达到每分钟120转左右时(ZC-25型),保持匀速转动,1分钟后读数,并且要边摇边读数,不能停下来读数。 (5)拆线放电。读数完毕,一边慢摇,一边拆线,然后将被测设备放电。放电方法是将测量时使用的地线从摇表上取下来与被测设备短接一下即可(不是摇表放电)。 4.注意事项 (1)禁止在雷电时或高压设备附近测绝缘电阻,只能在设备不带电,也没有感应电的情况下测量。 (2)摇测过程中,被测设备上不能有人工作。 (3)摇表线不能绞在一起,要分开。 (4)摇表未停止转动之前或被测设备未放电之前,严禁用手触及。拆线时,也不要触及引线的金属部分。 (5)测量结束时,对于大电容设备要放电。 (6)要定期校验其准确度。 三、钳表 钳表是一种用于测量正在运行的电气线路的电流大小的仪表,可在不断电的情况下测量电流。 1.结构及原理 钳表实质上是由一只电流互感器、钳形扳手和一只整流式磁电系有反作用力仪表所组成。 2.使用方法 (1)测量前要机械调零 (2)选择合适的量程,先选大,后选小量程或看铭牌值估算。 (3)当使用最小量程测量,其读数还不明显时,可将被测导线绕几匝,匝数要以钳口中央的匝数为准,则读数=指示值×量程 / 满偏×匝数 (4)测量时,应使被测导线处在钳口的中央,并使钳口闭合紧密,以减少误差。 (5)测量完毕,要将转换开关放在最在量程处。 3.注意事项 (1)被测线路的电压要低于钳表的额定电压。 (2)测高压线路的电流时,要戴绝缘手套,穿绝缘鞋,站在绝缘垫上。 (3)钳口要闭合紧密不能带电换量程。

谅你也做不成功,精确到欧姆的数字表,元件要求相当高,而且调试的时候用的表也很贵,做个玩到不难。

万年历软件设计论文文献综述

/*本实验实现一个能显示小时,分钟,秒的数字时钟。*/module clock(clk,rst,dataout,en);input clk,rst;output[7:0] dataout;reg[7:0] dataout;output[7:0] en;reg[7:0] en;reg[3:0] dataout_buf[7:0];reg[25:0] cnt;reg[15:0] cnt_scan;reg[3:0] dataout_code;wire[5:0] cal; //各级进位标志assign cal[0]=(dataout_buf[0]==9)?1:0;assign cal[1]=(cal[0]&&dataout_buf[1]==5)?1:0;assign cal[2]=(cal[1]&&dataout_buf[3]==9)?1:0;assign cal[3]=(cal[2]&&dataout_buf[4]==5)?1:0;assign cal[4]=(cal[3]&&dataout_buf[6]==9)?1:0;assign cal[5]=(cal[3]&&dataout_buf[6]==2&&dataout_buf[7]==1)?1:0;always@(posedge clk or negedge rst)begin if(!rst) begin cnt_scan<=0; en<=8'b1111_1110; end else begin cnt_scan<=cnt_scan+1; if(cnt_scan==16'hffff) begin en[7:1]<=en[6:0]; en[0]<=en[7]; end endendalways@(*)begin case(en) 8'b1111_1110: dataout_code=dataout_buf[0]; 8'b1111_1101: dataout_code=dataout_buf[1]; 8'b1111_1011: dataout_code=dataout_buf[2]; 8'b1111_0111: dataout_code=dataout_buf[3]; 8'b1110_1111: dataout_code=dataout_buf[4]; 8'b1101_1111: dataout_code=dataout_buf[5]; 8'b1011_1111: dataout_code=dataout_buf[6]; 8'b0111_1111: dataout_code=dataout_buf[7]; default: dataout_code=dataout_buf[0]; endcaseendalways@(posedge clk or negedge rst)begin if(!rst) cnt<=0; else if(cnt!=40000000) cnt<=cnt+1; else cnt<=0;endalways@(posedge clk or negedge rst) //实现计数和进位的功能begin if(!rst) begin dataout_buf[0]<=0; dataout_buf[1]<=0; dataout_buf[2]<=15; dataout_buf[3]<=0; dataout_buf[4]<=0; dataout_buf[5]<=15; dataout_buf[6]<=2; dataout_buf[7]<=1; end else begin if(cnt==26'd40000000) begin if(!cal[0]) dataout_buf[0]<=dataout_buf[0]+1; else begin dataout_buf[0]<=0; if(!cal[1]) dataout_buf[1]<=dataout_buf[1]+1; else begin dataout_buf[1]<=0; if(!cal[2]) dataout_buf[3]<=dataout_buf[3]+1; else begin dataout_buf[3]<=0; if(!cal[3]) dataout_buf[4]<=dataout_buf[4]+1; else begin dataout_buf[4]<=0; if(!cal[4]) dataout_buf[6]<=dataout_buf[6]+1; else begin dataout_buf[6]<=0; if(!cal[5]) dataout_buf[7]<=dataout_buf[7]+1; else dataout_buf[7]<=0; end end end end end end endendalways@(dataout_code)begin case(dataout_code) 4'b0000: dataout=8'b1100_0000; 4'b0001: dataout=8'b1111_1001; 4'b0010: dataout=8'b1010_0100; 4'b0011: dataout=8'b1011_0000; 4'b0100: dataout=8'b1001_1001; 4'b0101: dataout=8'b1001_0010; 4'b0110: dataout=8'b1000_0010; 4'b0111: dataout=8'b1111_1000; 4'b1000: dataout=8'b1000_0000; endcaseendendmodule 这个你再改改吧,应该没有什么难度的,祝你好运!

仔细研究野火的STM32F103开发板的实时时钟例程,就会学到很多东西这个单片机的实时时钟只是一个简单的32位计数器,计的是秒,要换算成年月日时分秒,完全是要根据阳历的闰年规律计算的,先找一个基准日期,称为时间戳然后根据现今时间与时间戳的差值(以S为单位)计算当前的年月日时分秒钟星期几,然后根据表格查每年的农历有几个月,几个大小月,闰月是个月,春节在哪一天,当前日期是在春节前还是春节后,就能计算出农历日期,然后计算24节气,由于24节是按阳历年划分的,而阳历的一年只有365天和366天两种,因此24节的阳历日期基本固定,找一个标准,然后记下各个节气和标准日期的正负误差就可以确定当前节气的阳历日期了,还有天干地支,只要有一个基准,求12和10的余数,推算很容易的

#includeintleap(intyear){if(year%4==0&&year%100!=0||year%400==0)//判断是否是闰年return1;elsereturn0;}intdays_month(intmonth,intyear)//判断大月和小月{if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//找出大月return31;if(month==4||month==6||month==9||month==11)//找出小月return30;if(month==2&&leap(year)==1)return29;//判断二月是29天还是29天elsereturn28;}intfirstday(intmonth,intyear){intw;w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;//判断每个月开始的第一天是星期几returnw;}main(){inti,j=1,k=1,a,b,month,year;printf(\\"inputmonthandyear:\\");scanf(\\"%d%d\\",&month,&year);//输入月和年b=days_month(month,year);a=firstday(month,year);printf(\\"SunMonTueWedThuFriSat\\");//输出对应当月的日历if(a==7){for(i=1;i<=b;i++){printf(\\"%4d\\",i);if(i%7==0){printf(\\"\\");}}}if(a!=7){while(j<=4*a){printf(\\"\\");j++;}for(i=1;i<=b;i++){printf(\\"%4d\\",i);if(i==7*k-a){printf(\\"\\");k++;}}}printf(\\"\\");}

你好!这个要看你实现的功能要求了

万年历的毕业论文

电子信息工程毕业论文题目参考

论文写作,简单的说,就是大专院校毕业论文的写作,包含着本科生的学士论文,研究生的硕士论文,博士生的博士论文,延伸到了职称论文的写作以及科技论文的写作。论文的题目是论文的关键,有画龙点睛之效。下面是我为大家整理的电子信息工程毕业论文题目,大家不妨多加参考。

1.基于单片机的火灾报警器设计

2.基于NE555的触摸式报警器

3.数字密码锁设计

4.基于单片机智能电子时钟设计及应用

5.流水灯控制电路设计

6.简易单片机控制电路实验开发板

7.全自动洗衣机自动控制电路部分设计

8.基于单片机的八路抢答器的设计及PCB板的设计

9.基于单片机的数字温度计的设计

10.仓库温湿度的监测系统

11.直流稳压电源的制作

12.步进电机的单片机控制系统

13.单片机交通灯管理系统

单片机交通灯控制系统制作

15.基于单片机的步进电机系统设计

16.基于WML的学生网站开发

17.基于单片机的电子密码锁

18.单片机驱动步进电机控制系统的设计

19.基于单片机的流水灯设计

显示屏动态显示及其远程控制

21.基于DSP的高速多通道同步数据采集系统

22.篮球竞赛30S计时器

位数字抢答器

24.一种实用型心率计的设计

25.温度测控系统的设计

26.药品生产线上的药丸控制电路设计

27.基于选修课程的网站设计

28.基于单片机的交通灯设计

29.单片机控制的数字触发器

30.温度测控系统

31.基于单片机的数字时钟设计

32.篮球30秒定时器

33.电子万年历

34.基于单片机的智能节水控制器设计

35.嵌入式通用I/O键盘应用设计

36.数码显示的八路抢答器设计

37.基于PLC的四路抢答器设计

38.基于单片机的数字电子钟的`设计

39.超外差中波调幅收音机的组装及调试

40.基于单片机的无线电数字发射系统设计

41.基于80C51的智能汽车自控系统的设计

实现十字路交通灯自动控制

43.智能型充电器的电源和显示设计

44.基于单片机的电子时钟设计及应用

45.基于单片机的智能电子时钟的设计及应用

46.超外差中波调幅收音机组装及调试

47.基于USB接口的步进电机控制的研究与实现

48.基于单片机的电子琴设计

49.基于FPGA的直序扩频通信研究与设计

50.基于单片机的发射机控制系统

51.声光报警器的设计与研究

52.单片机电源

53.基于P87LPC768的电机控制系统

54.基于单片机的LCD电子钟设计

55.音响放大器的设计

56.超外差收音机制作及分析研究

频带传输系统的设计与实现

58.基于单片机智能电子钟的设计

与串行接口转换器的设计

60.基于FPGA的数字频率计的设计

1.卷积编码和维特比译码的FPGA实现

音频编译码算法研究与FPGA实现

调制解调技术研究及FPGA仿真实现

4.基于FPGA的高斯白噪声发生器设计与实现

5.无线通信系统选择分集技术研究

系统空时分组编码的性能研究

7.基于量子烟花算法的认知无线电频谱分配技术研究

8.基于量子混沌神经网络的鲁棒多用户检测器

9.无线紫外光多址通信关键技术研究

10.认知无线电网络的频谱分配算法

11.基于软件无线电的多制式通信信号产生器设计与实现

12.开关电源EMI滤波器的设计

13.反激式电源传导噪声模态分离技术的研究

14.核电磁脉冲源辐射的数值仿真

15.基于MATLAB的扩频通信系统及同步性能仿真

16.一种多频带缝隙天线的设计

调制解调器及同步性能的仿真分析

18.跳频频率合成器的设计

系统子载波间干扰性能分析

20.复合序列扩频通信系统同步方法的研究

21.基于DDS+PLL的频率源设计

22.基于训练序列的OFDM系统同步技术的研究

23.正交频分复用通信系统设计及性能研究

技术研究及其性能比较

25.基于蓝牙的单片机无线通信研究

26.物联网智能温室控制系统中远程信息无线传输的研究

27.船载AIS通信系统调制器的设计与实现

28.基于FPGA的16QAM调制器设计与实现

29.基于多载波通信的信道化技术研究

30.简易无线通信信号分析与测量装置

一 课题任务:以FPGA适配板为核心,设计并制作一款数字万年历。此数字万年历以“日”为基本计时单位,用8只数码管适时显示“年、月、日”。此万年历具有区分大小月、调整日期、生日提醒等功能。 二 课题研究现状及发展趋势:在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求。因此在这里,我想能不能把一些辅助功能加入钟表中。在此设计中所设计的钟表不但具有普通钟表的功能,它还能实现额外的功能:世界时、农历显示。人类不断研究,不断创新纪录。发展到现在人们广泛使用的万年历。万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。它可以对年、月、日、周日、时、分、秒进行计时,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。三 设计方案:1.工作原理...................有做好的设计可以给你参阅的!!!!!!

相关百科

热门百科

首页
发表服务