首页

毕业论文

首页 毕业论文 问题

电子日历设计的毕业论文

发布时间:

电子日历设计的毕业论文

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

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

电子信息工程大学毕业论文 (张清卓)从21世纪开始,无线传感器网络就开始引起了学术界,军事界和工业界的极大关注。美国和欧洲相继启动了许多关于无线传感器网络的研究计划。随着科学技术的迅猛发展,人类目前已经置身于信息时代,信息的获取是实现信息化的前提,获取物理家门口满怀欣喜的一种重要工具就是传感器。无线传感器网络是当前国际上备受关注的,由多学高度交叉的新兴研究热点领域⑴它综合了传感器技术,嵌入式计算技术及无线通信技术等三大技术,能够通过嵌入式系统对信息进行处理,并通过随机自组织无线通信网络以多跳中继方式所感知信息传送到用户终端。 无线传感器网络可以用于监控温度,湿度,压力,土壤构成,噪声,机械应力等多种环境条件,使用户可以深入的了解和把我周围的世界。无线传感器网络的随机布设,自组织,环境适应等特点使其在军事国防,环境监测,生物医疗,抢先去救灾以及商业应用等领域具有广阔的应用前景,和很高的应用价值⑵。当然,在空进搜索和灾难拯救等特殊领域,无线传感器网络也有其得天独厚的技术优势。

#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);}

双日历电子钟毕业论文

数字电子钟设置成24小时制的操作方法如下: 按下复位键即可将数码电子钟设置成24小时制,按下上调键3秒种左右,此时可以进行12/24小时制的切换。 希望我的回答能够帮助到您哦。

电路图在我空间相册 : oo

找一下256正确宣示都亮的段,对比你的256那段没有宣示出来出来。应该就是那一段的引脚短路或者短路啦。。。

呵呵。我没有做过这个。要现在做。得花时间,不好意思。如果我有现成的。我肯定给你。急求数字电子钟逻辑电路设计

一点都没有,里面就是那么几个零件做的,没高压没高频,说白了,就是没有产生辐射的条件。除非你的东西外壳是铀做的(根本不可能)

基本功能:时间显示,在制作的过程中,你也会学到许多关于数字电路的知识,比如:计数器,译码器等。如果你是基于单片机的,是一个很好的单片机练习课题。

00h ajmp start 03h ajmp jia 0bh ajmp saomiao 13h ajmp jian 1bh ajmp jishu 2bh start: mov ie,#10001111b mov ip,#00000010b mov tmod,#00100010b mov th1,#6 mov tl1,#6 mov th0,#88h mov tl0,#88h setb it1 setb it0 mov r4,#11111110b mov sp,#30h mov 20h,#00h mov p3,#0ffh mov r0,#00h mov r1,#00h mov r2,#00h mov r3,#00h mov r5,#00h mov dptr,#table setb tr1 setb tr0 loop: mov a,r0 mov b,#40 div ab jz chuli mov r0,#00h inc r5 mov a,r5 mov b,#100 div ab jz chuli cpl mov r5,#00h inc r1 mov a,r1 cpl a mov p2,a cpl a mov b,#60 div ab jz chuli mov r1,#00h inc r2 mov a,r2 mov b,#60 div ab jz chuli mov r2,#00h inc r3 mov a,r3 mov b,#24 div ab jz chuli mov r3,#00h chuli: mov a,r2 mov b,#10 div ab mov 10h,b mov 11h,a mov a,r3 mov b,#10 div ab mov 12h,b mov 13h,a jb mov r1,#00h mov 87h,#01h ljmp loop jia: push a inc r2 mov a,r2 mov b,#60 div ab jz next1 mov r2,#00h next1: lcall ys clr ie0 pop a reti jian: push a inc r3 mov a,r3 mov b,#24 div ab jz next2 mov r3,#00h next2: lcall ys clr ie1 pop a reti jishu: inc r0 reti saomiao: push a mov a,r4 rl a mov p0,#0ffh d0: cjne a,#11111110b,d1 mov p1,a mov r4,a mov a,11h jnz zc mov a,r4 rl a mov p1,a zc: mov a,10h movc a,@a+dptr mov p0,a sjmp over d1: cjne a,#11111101b,d2 mov p1,a mov r4,a mov a,11h jz over movc a,@a+dptr mov p0,a sjmp over d2: cjne a,#11111011b,d3 mov p1,a mov r4,a mov a,12h movc a,@a+dptr mov p0,a mov c, mov sjmp over d3: cjne a,#11110111b,d4 mov p1,a mov r4,a mov a,13h jz over movc a,@a+dptr mov p0,a sjmp over d4: mov a,#11111110b ajmp d0 over: pop a reti ys: mov 14h,#0ffh a0: mov 15h,#0ffh a1: djnz 15h,a1 djnz 14h,a0 ret table: db 0c0h db 0f9h db 0a4h db 0b0h db 099h db 092h db 082h db 0f8h db 080h db 090h end

数字9是显示的,过了一秒再进位,中间一共过了10秒钟啊。

到中国知网论文数据库找,论文多,而且质量高。自己懒得找,可以去淘宝的(翰林书店)店铺看看,店主应该能帮你下载到这论文的

电子手表和数字电子钟,只是大小不一样,其功能都是大同小异的。

电子钟相关毕业设计 ·数字电子钟的电路设计 (字数: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)

Computers have accelerated the transformation of the world's human pace, but it is after all bulky. SCM in this case was born. As of today, SCM application rapid development of technology, looking around us now in all spheres of life, from missiles, navigation equipment, to the various instruments on the aircraft control from a computer network communications and data transmission, industrial automation to real-time process control and data processing, and our lives extensive use of the smart card, electronic pets, which is inseparable from the microcontroller. Monolithic single-chip micro-computer or computer. (Single-Chip Microcomputer) is the set of CPU, RAM, ROM, the timing, number and variety of interface integrated microcontrollers. Its small size, low cost, high performance, which are widely used in smart industries, and industrial automation. And 51 Series SCM SCM is the most typical and the most representative one. The graduation design Through the study, and thereby achieve the study, design, development hardware and software capabilities. Based on a microcontroller based on the will to achieve timing, stopwatch, calendar, alarm clocks, and other functions of a multi-functional electronic clock design study, in detail, the computer application of data conversion, Principle LCD, keyboard scanning principle, SCM regularly interrupted principle. Thereby achieve studying and understanding the relevant directives SCM in all aspects of the application. By AT89S52 system, temperature detection chip, the clock chips, liquid crystal displays, memory, Regulators and electricity supply of components, to achieve clock calendar display function can be carried out, hours seconds of the show and real-time temperature display. Also calculated with the calendar and clock, calendar calibration, regular hours and set the alarm function. The article attached circuit diagram, the PCB plans and procedures checklist for the reference of our readers. Due to limited, and it will inevitably be lighter inadequate, locations will give teachers and students correction and criticism. Keywords : stopwatch, alarm clock, calendar time

毕业论文电子锁的设计

电子密码锁的设计研究开题报告

紧张而又充实的大学生活即将结束,大家都开始做毕业设计了,在做毕业设计之前要先写好开题报告,优秀的开题报告都具备一些什么特点呢?下面是我帮大家整理的电子密码锁的设计研究开题报告,欢迎大家分享。

一、 课题背景和意义

锁是一种保安措施,是人类为了保护自己私有财产而发明的一种用钥匙才能开启的装置。随着人们生活水平的提高和安全意识的加强,对锁的要求也越来越高,既要安全可靠的防盗,又要使用方便。这就使得传统的锁防盗效果已经满足不了现代社会的防盗需要,而且还存在着随身带钥匙的不便。因此近几年,随着科学技术的不断发展,一种新型的电子密码锁应运而生。电子密码锁运用电子电路控制机械部分,使两者紧密结合,从而避免了因为机械部分被破坏而导致开锁功能失常的问题,而且密码输入错误是还有报警声,大大增加了电子密码锁的防盗功能。同时因为电子密码锁不需要携带钥匙,弥补了钥匙极易丢失和伪造的缺陷,方便了锁具的使用。传统的锁由于构造简单,所以被撬的事件屡见不鲜,电子密码锁由于具有保密性高、使用灵活性好、安全系数高等优点,受到了广大用户的青睐。

二、国内外研究现状

电子密码锁的种类繁多,例如数码锁、指纹锁、磁卡锁、IC卡锁、生物锁等,但较实用的还是按键式电子密码锁。20世纪xx年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,而且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显的进展。

目前,在西方发达国家,密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于只能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国密码锁整体水平尚处在国际xx年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不的努力,使电子密码锁在我国也能得到广发应用。

三、 设计论文主要内容

1、电子密码锁设计方案的分析与方案选择;

2、设计一典型结构的电子密码锁,分析其电路结构及控制程序;

3、选者合适的电器元件;

4、编写控制程序;

5、将程序输入PC机,并修改进行模拟运行;

四、 设计方案

查阅文献技术资料,分析电子密码锁结构、工作原理和技术要求。以单片机为主控芯片,结合外围电路,通过软件程序组成电子密码锁系统,能够实现:

1。 正确输入密码前提下,开锁提示;

2。 错误输入密码情况下,蜂鸣器报警;

3. 密码可以根据用户需要更改。

五、 工作进度安排

— 确定毕业设计课题,提交开题报告; 查阅相关论文,调研及收集相关资料; 方案设计、审查和确定,提交中期报告 编写控制程序 整理并撰写论文 完善论文,提交论文

六、 主要参考文献

[1] 石文轩,宋薇。基于单片机MCS—51的智能密码锁设计[M]。武汉工程职业技术学院学报,20xx,(01);

[2] 祖龙起,刘仁杰。一种新型可编程密码锁[J]。大连轻工业学院学报,20xx,(01);

[3] 叶启明,单片机制作的新型安全密码锁[J]。家庭电子,20xx,(10);

[4] 李明喜,新型电子密码锁的设计[J]。机电产品开发与创新,20xx,(03);

[5] 董继成,一种新型安全的单片机密码锁[J]。电子技术,20xx,(03);

[6] 杨茂涛,一种电子密码锁的实现[J]。福建电脑,20xx,(08);

[7] 瞿贵荣,实用电子密码锁[J]。家庭电子,20xx,(07);

[8] 王千,实用电子电路大全[M],电子工业出版社,20xx,p101;

[9] 何立民,单片机应用技术选编[M],北京:北京航空大学出版社,19xx;

[10] ATmega,ATmega8L—8AC,20xx,(01);

一、开题报告前的准备

毕业设计(论文)题目确定后,学生应尽快征求指导教师意见,讨论题意与整个毕业设计(论文)的工作计划,然后根据课题要求查阅、收集有关资料并编写研究提纲,主要由以下几个部分构成:

1.研究(或设计)的目的与意义。应说明此项研究(或设计)在生产实践上对某些技术进行改革带来的经济与社会效益。有的课题过去曾进行过,但缺乏研究,现在可以在理论上做些探讨,说明其对科学发展的意义。

2.国内外同类研究(或同类设计)的概况综述。在广泛查阅有关文献后,对该类课题研究(或设计)已取得的成就与尚存在的问题进行简要综述,只对本人所承担的课题或设计部分的已有成果与存在问题有条理地进行阐述,并提出自己对一些问题的看法。

3.课题研究(或设计)的内容。要具体写出将在哪些方面开展研究,要重点突出。研究的主要内容应是物所能及、力所能及、能按时完成的,并要考虑与其它同学的互助、合作。

4.研究(或设计)方法。科学的研究方法或切合实际的具有新意的设计方法,是获得高质量研究成果或高水平设计成就的关键。因此,在开始实践前,学生必须熟悉研究(或设计)方法,以避免蛮干造成返工,或得不到成果,甚至于写不出毕业设计(论文)。

5.实施计划。要在研究提纲中按研究(或设计)内容落实具体时间与地点,有计划地进行工作。

二、开题报告

1.开题报告可在指导教师所在教研室或学院内举行,须适当请有关专家参加,指导教师必须参加。报告最迟在毕业(生产)实习前完成。

2.本表(页面:A4)在开题报告通过论证后填写,一式三份,本人、指导教师、所在学院(要原件)各一份。

三、注意事项

1.开题报告的撰写完成,意味着毕业设计(论文)工作已经开始,学生已对整个毕业设计(论文)工作有了周密的'思考,是完成毕业设计(论文)关键的环节。在开题报告的编写中指导教师只可提示,不可包办代替。

2.无开题报告者不准申请答辩。

一、选题依据(拟开展研究项目的研究目的、意义)

随着人们生活水平和自身防范意识的提高,个人人身财产安全越来越受到重视,而锁就是主要的有效保障手段。但是机械锁发展到现在已有悠久的历史,人们对它的内部结构已经有了很透彻的研究,可以做到不使用钥匙而轻易打开锁,也由于金属材料在复杂多变的环境下会生锈,导致锁芯卡死、弹簧老化等问题。

在信息化高速发展的今天,锁也摆脱了以往的造型,向着科技化、信息化、智能化发展。自单片机面世以来,凭借着体积小、价格低、易于编程[2],逐步成为越来越多的电子产品的核心控制组件[4]。在这种趋势下,电子密码锁也就应运而生,并经过多年的快速发展,整体上有遥控式电子锁、键盘式电子锁[11]、卡式电子锁、生物特征扫描电子锁这几种类型,电子密码锁以其可以自由更换密码、操作简单、安全性高[16]、自动报警、自动锁死、功耗低、外观个性、附加功能多种多样[3]等优点深受人们的喜爱,但由于电子密码锁的价格远高于普通机械锁,因此市场上的主流还是机械锁,所以我们需要不断的研究、改进电子锁,学习借鉴前人的程序编码【18】,使其更加智能化、廉价化,让电子密码锁得到普及,使人们的自身财产安全得到更好的保障。

二、文献综述内容(在充分收集研究主题相关资料的基础上,分析国内外研究现状,提出问题,找到研究主题的切入点,附主要参考文献)

早在80年代,日本生产了最早的电子密码锁,随着经济复苏,电子行业得到快速发展,一些使用门电路设计的简单电路密码锁出现了。到了90年代,美国、意大利、德国、日本等地的微电子技术的进步和通信技术的发展为电子密码锁提供了技术上的支持。我国于90年代初开始对密码锁进行初步的探索。到目前为止,在此领域已经有了相当程度的发展,能够生产各种高智能、高安全性的密码锁。遥控式电子防盗锁分为光遥控和无线电遥控,光遥控利用窄角度的光传输密码,传输信息量大、速度极快、无法再光路径上以仪器捕获信号试图复制,保密性极高,无线电遥控传输信息量大、速度快但是信号发散广容易被仪器捕获。卡式防盗锁,利用磁卡存储个人信息而且在特定场合能够一卡多用。生物特征防盗锁利用生物自带的唯一特征能够起到极高的防盗作用。但是这种高端电子锁只适用于政府机关、大型企业等少数部门,不适用于广大的人们群众的日常生活。普通群众日常使用的还是机械锁,所以需要设计一款功能实用、价格低廉、操作简单的电子密码锁。利用单片机【1】作为控制元件的电子密码锁能够使用C语言[7]和汇编语言简单的对其进行各种人性化的编程[6],来控制单片机各引脚的高低电位[14]从而实现各元件的接通与关闭,通过整体的配合实现随意更改密码、防盗报警[9]、防暴力破解自锁、LED显示等功能,更加适应不同人群的需求。

参考文献:

[1]宁爱民应用AT89C2051单片机设计电子密码锁.淮海工学院学报.

[2]韩团军;基于单片机的电子密码锁设计[J];国外电子测量技术;2010年07期

[3]郭海英.基于单片机的电子安全密码锁的设计.现代电子技术.

[4]张洪润. 单片机应用技术教程[M].北京:清华大学出版社,1997

[5]李娜,刘雅举. Proteus在单片机仿真中的应用[J].现代电子技术,2007,(04)

[6]杨将新,李华军,刘到骏. 单片机程序设计及应用(从基础到实践)[M].北京:电子工业出版社,2006

[7]谭浩强. C++程序设计[M].北京:清华大学出版社,2004

[8]郑春来;韩团军;李鑫.编译软件Keil在单片机课程教学中的应用.高教论坛.

[9]周功明. 基于AT89C2051单片机的防盗自动报警电子密码锁系统的设计[J].绵阳师范学院学报,2007,(04)

[10]李全利. 单片机原理及接口技术[M].北京:高等教育出版社,2003

[11]瞿贵荣. 实用电子密码锁[J]. 家庭电子,2000,(07):34~73

[12]赵益丹,徐晓林,周振峰. 电子密码锁的系统原理、设计程序及流程图[J].嘉兴学院学报,2003,(15)

[13]李广弟,朱月秀,冷祖祁.单片机基础[M].(第三版) 北京:北京航空航天大学出版社,2007

[14]康华光,陈大钦,张林.电子技术基础(模拟部分)[M].(第五版) 北京:高等教育出版社,2006

[15]李伯成.基于MCS-51单片机的嵌入式系统的设计[M].北京:电子工业出版社,.

[16]郭海英.基于单片机的电子安全密码锁的设计[J].现代电子技术,2005,(13)

[17]蒋辉平 周国雄.基于PROTEUS的单片机系统设计与仿真实例[M].北京:机械工业出版社,.

三、研究方案(主要研究内容、目标,研究方法)

研究内容:

基于整个控制系统的研究设计情况,本设计主要进行如下方面的研究:用智能,集成且功能强大的单片机芯片[15]为控制中心,设计出一套按键式电子密码锁。

本设计主要做了如下几方面的工作:

1.确定密码锁系统的整体设计,包括密码的存储与更改、密码数字的显示、密码是否正确的LED灯提示,暴力破解的密码的蜂鸣器警报。

2.进行各模块的电路设计与连接、大体分配各个器件及模块的基本功能[13]要求。在P0口处接上拉电阻来保证LED屏幕的正常工作以给用户显示正确有效的提示信息,接入两个发光二极管(红、绿各一个)来提示用户的密码是否正确,接入一个蜂鸣器来提示用户密码错误以及在被暴力破解时的报警功能,接入一个4x4矩阵键盘来让用户输入密码,与LED屏幕、发光二极管、蜂鸣器一起起到人机交互的作用。

3.进行软件系统的设计,使用KEI采用C语言对系统进行编程,研究系统的判断逻辑,采用延时函数来有效实现键盘的防抖动功能,采用循环语句来实现键盘的实时监听,采用外接存储器保存密码,采用判断语句判断输入的密码是否正确以及输入错误密码的次数判断是否调用蜂鸣器和键盘响应,将各功能模块整合到一起形成一套高效、简练的系统。

研究目标:

设计一个基于单片机的电子密码锁电路,完成密码的存储与更改、密码数字的显示、密码是否正确的LED灯提示,暴力破解的密码的蜂鸣器警报的功能,完成proteus仿真。

研究方法:

通过文献资料、理论学习,使用KEIL和PROTEUS进行密码锁系统的模拟仿真,验证是否能够实现预期功能。

四、进程计划(各研究环节的时间安排、实施进度、完成程度)

20xx年12月—20xx年3月

进行大量论文相关材料阅读,撰写开题报告,开题。三月中旬完成开题报告;

20xx年3月—20xx年4月

20xx年四月中旬完成论文初稿,交给导师修改,对不足的地方进行改进,学院进行论文中期检查;

20xx年4月—20xx年5月

对论文不足之处再修改,五月中旬并完成论文,形成定稿;

20xx年5月—20xx年6月

对论文进行评阅,合格的论文进行资格检查,组织毕业论文答辩。

电子密码锁摘要 本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够安工作,有极高的安全系数。关键词 电子密码锁 电压比较器 555单稳态电路 计数器 JK触发器 UPS电源。1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题时构思了两种方案:一种是用以AT89C2051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到单片机方案原理复杂,而且调试较为繁琐,所以本文采用后一种方案。

新款的单片机都可以设置密码

哈哈。快点回答吧。好几天了

简易日历设计毕业论文

简易日历制作方法:

1、准备A4大小的白纸或彩色卡纸。卡纸比普通白纸厚,用卡纸制成的日历比较耐用。

2、用尺子画出7纵行、5横行的表格。分别在12张卡纸上画表,每张纸代表一个月份。确保每个单元格宽窄高低一致,不要有任何一条线弯曲。先用铅笔画,等你把每个单元格大小都调整完毕,线也都画直的时候,就可以用永久性记号笔再描一遍了。

3、写下月份。在每张卡纸的顶部写上月份——一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月及十二月。月份要写得大一点,用水彩笔、彩色铅笔或彩色记号笔来写。确保月份都要写对。

4、标注星期几。在表格的第一行分别写上星期一至星期五。

5、填写日期。日期要写在每个单元格的右上角。先找出上一年的日历,看看第一天是从星期几开始的。比方说,如果去年12月的最后一天是星期三,那么今年一月的第一天就是星期四。

确保每个月的天数准确无误,因为一年十二个月有大小月之分。为了方便你记忆每个月的天数,你可以记一下这条口诀:四、六、九、十一月有31天,除二月外其余30天,平年二月28天,闰年二月29天。

6、装饰日历。每一页日历都可以按照你自己的心意来装饰。水彩笔、彩色铅笔、记号笔、蜡笔齐上阵;贴纸、亮片、闪光胶也不赖;最重要的是,要发挥你的想象力!

7、标出重要的日子。在日历上标出所有重要的日子,如生日、圣诞节、开学日等等。有个比较有创意的办法就是找一张与这一天相关的图片,然后贴在相应的日期上。

比如说,你姐姐的生日在5月6号,你就剪一张她的大头照贴在5月6号那一天上。你还可以在12月25号那一天上贴上一张圣诞树的图片;万圣节就可以贴巫婆或幽灵;复活节就可以贴毛茸茸的小兔子。

8、把日历挂起来。在每张卡纸的顶部剪两个洞,注意洞的边缘必须光滑。找一根长长的细绳、麻线或者棉线,将两端分别穿进洞里,这样就可以挂起来了。把日历挂在挂钩或钉子上,不论你想挂在卧室里、厨房里还是教室里都可以。不要忘了,每过一天,就可以在日期上画个叉哦。

活动日历是一种对于时间和活动进行整合的有用工具。它可以帮助你更好地安排时间,使你不会错过任何重要的活动。下面我将介绍一种简单又漂亮的制作活动日历的方法。

准备所需材料

制作活动日历所需要的材料包括:一张大纸张(如A3或A4),彩色笔、标签、贴纸、照片或插图等装饰材料。

设计日历格式

在纸张上设计出一个日历格式,可以采用横向或纵向排列的方式。每个日历格子需要留出足够的空间,以便于填写活动和备注。同时,在日历的顶部或底部进行一些装饰,如添加一些插图或照片。

标记节假日和重要日期

在日历上标记出节假日和重要日期,例如生日、纪念日、学校放假时间等。这些日期可以用不同的颜色标记,以便于区分。

填写活动信息

在日历格子上填写即将发生的活动,包括活动名称、时间、地点和备注等。这些信息可以使用不同的颜色进行标记,以便于区分。

添加装饰

在日历上添加一些装饰,如贴纸、标签、照片等。这些装饰可以与活动相关,使整个日历更加生动有趣。

挂起日历

完成所有步骤后,将日历挂起在明显的位置,以便于查看和使用。例如,可以将日历挂在墙上、办公桌上或者放在书架上。

总之,制作一个漂亮的活动日历并不需要太多的时间和精力,只需要准备好所需材料,设计出一个简单的格式,标记重要日期,填写活动信息,添加一些装饰,就可以制作出一个实用又美观的活动日历。

可以制作 ···需要的话百度hi我··· 已经完成··联系我好了··

#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);}

毕业论文电子设计

天下没有免费的午餐

字数多少?大概提纲。

大学是干嘛的地方?无论多高的学历和职称,不会设计、制造教具,不会设计、制造教学仪器,不会维修仪器和设备;用你父母的钱进口教学仪器模仿了委托工厂仿制就是佼佼者;用你父母的钱请校外的人来维修设备、从校外采购配件;用你父母的钱请教学仪器生产企业提供教学实验讲义,将作者填上他们的名字就有教学突出成就奖;教你背诵的公式和外语,永远也比不上美国麻省理工学院在网上公开的教材内容。学生也不要埋怨学费贵,除了上面教师的原因,你们自己的基础实验、专业课就上的迷迷糊糊的,高额投资下的创新实验项目、挑战杯、科技竞赛、毕业论文、商业开发,都见不得阳光,将真金白银变成了一堆堆的垃圾!!!!

具体什么内容的

相关百科

热门百科

首页
发表服务