基于DS1302和LCD1602的数字电子钟的设计1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实习报告实习名称:专业综合实践学生姓名:学院名称:电气与信息工程学院专业班级:电子XX41学号:10位学号成绩评定考核内容实习表现实习报告实习成果或答辩综合评定成绩成绩2011年7月20日实习纪律要求和成绩考核办法(纪律要求和成绩考核办法在封皮背面打印)1.实习必须听从教师指导,严格遵守安全操作规程。不准违规操作,未经指导教师允许不准启动任何非自用设备、仪器、工具等;操作项目和内容必须按实习要求进行,特别要注意防止电烙铁烧烫伤、不用时要及时切断电源。2.实习教室内不准吸烟、吃零食,不准带无关人员到实习教室活动,否则扣平时表现分。3.参加本次实习时间不足三分之二或旷课3天以上者,不得参加本次考核,按不及格处理。4.病事假必须有请假条,需经班主任或有关领导批准,否则按旷课处理。5.实习过程考核和实习成绩在教师手册中要有记载。6.实习成绩的考核由指导教师根据实习表现(出勤、遵守纪律情况等)、实习报告、实习成果、现场操作、口试或笔试等几个方面,给出各项成绩或权重,综合后给出实习总成绩。该实习经考核教研室主任审核,主管院长审批备案。7.成绩评定采用五级分制,即优、良、中、及格、不及格。8.实习结束一周内,指导教师提交实习成绩和实习总结。实习报告要求实习报告内容、格式各专业根据实习类别(技能实习、认识实习、生产实习、毕业实习等)统一规范,经教研室主任审核、主管院长审批备案。注意:1.实习任务书和实习指导书在实习前发给学生,实习任务书放置在实习报告封面后和正文目录前。2.为了节省纸张,保护环境,便于保管实习报告,统一采用A4纸,实习报告建议双面打印(正文采用宋体五号字)或手写,左侧装订,订两个钉。基于单片机和DS1302的电子钟数字钟的设计斧头帮2010-05-17Proteus仿真图:C程序:/*****************************************************程序名称:基于单片机和时钟芯片DS1302的电子时钟程序功能:时钟芯片采用DS1302显示采用液晶屏LCD1602初始时间2010-06-0112:00程序作者:斧头帮2010.05.17***************************************************/#includereg51.h//包含单片机寄存器的头文件#includeintrins.h//包含_nop_()函数定义的头文件#defineucharunsignedchar#defineuintunsignedint/***********************************************************************以下是DS1302芯片的操作程序************************************************************************/ucharcodedigit[10]={0123456789};//定义字符数组显示数字sbitDATA=P1^1;//位定义1302芯片的接口,数据输出端定义在P1.1引脚sbitRST=P1^2;//位定义1302芯片的接口,复位端口定义在P1.1引脚sbitSCLK=P1^0;//位定义1302芯片的接口,时钟输出端口定义在P1.1引脚/*****************************************************函数功能:延时若干微秒入口参数:n***************************************************/voiddelaynus(ucharn){uchari;for(i=0;in;i++);}/*****************************************************函数功能:向1302写一个字节数据入口参数:x***************************************************/voidWrite1302(uchardat){uchari;SCLK=0;//拉低SCLK,为脉冲上升沿写入数据做好准备delaynus(2);//稍微等待,使硬件做好准备for(i=0;i8;i++)//连续写8个二进制位数据{DATA=dat&0x01;//取出dat的第0位数据写入1302delaynus(2);//稍微等待,使硬件做好准备SCLK=1;//上升沿写入数据delaynus(2);//稍微等待,使硬件做好准备SCLK=0;//重新拉低SCLK,形成脉冲dat=1;//将dat的各数据位右移1位,准备写入下一个数据位}}/*****************************************************函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据***************************************************/voidWriteSet1302(ucharCmd,uchardat){RST=0;//禁止数据传递SCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输delaynus(2);//稍微等待,使硬件做好准备Write1302(Cmd);//写入命令字Write1302(dat);//写数据SCLK=1;//将时钟电平置于已知状态RST=0;//禁止数据传递}/*****************************************************函数功能:从1302读一个字节数据入口参数:x***************************************************/ucharRead1302(void){uchari,dat;delaynus(2);//稍微等待,使硬件做好准备for(i=0;i8;i++)//连续读8个二进制位数据{dat=1;//将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA==1)//如果读出的数据是1dat|=0x80;//将1取出,写在dat的最高位SCLK=1;//将SCLK置于高电平,为下降沿读出delaynus(2);//稍微等待SCLK=0;//拉低SCLK,形成脉冲下降沿delaynus(2);//稍微等待}returndat;//将读出的数据返回}/*****************************************************函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd***************************************************/ucharReadSet1302(ucharCmd){uchardat;RST=0;//拉低RSTSCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输Write1302(Cmd);//写入命令字dat=Read1302();//读出数据SCLK=1;//将时钟电平置于已知状态RST=0;//禁止数据传递returndat;//将读出的数据返回}/*****************************************************函数功能:1302进行初始化设置***************************************************/voidInit_DS1302(void){WriteSet1302(0x8E,0x00);//根据写状态寄存器命令字,写入不保护指令WriteSet1302(0x80,((0/10)4|(0%10)));//根据写秒寄存器命令字,写入秒的初始值//'/'除法运算,取整;'%'取模运算,取余//数据前四位为十位,后四位为个位,详见寄存器表WriteSet1302(0x82,((0/10)4|(0%10)));//根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,((12/10)4|(12%10)));//根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,((01/10)4|(01%10)));//根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,((06/10)4|(06%10)));//根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,((10/10)4|(10%10)));//根据写小时寄存器命令字,写入小时的初始值}/*******************************************************************************以下是对液晶模块的操作程序*******************************************************************************/sbitRS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚sbitE=P2^2;//使能信号位,将E位定义为P2.2引脚sbitBF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚/*****************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒***************************************************/voiddelay1ms(){unsignedchari,j;for(i=0;i10;i++)for(j=0;j33;j++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/voiddelaynms(unsignedcharn){unsignedchari;for(i=0;in;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙***************************************************/bitBusyTest(void){bitresult;RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间result=BF;//将忙碌标志电平赋给resultE=0;//将E恢复低电平returnresult;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/voidWriteInstruction(uchardictate){while(BusyTest()==1);//如果忙就等待RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功