基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟_第1页
基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟_第2页
基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟_第3页
基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟_第4页
基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

11PROTEUS仿真图:KEILC程序:#include<REGX52.H>#include"LCD1602.h"#include"DS1302.h"voidDelay1ms(unsignedintcount){ unsignedinti,j; for(i=0;i<count;i++) for(j=0;j<120;j++);}main(){ SYSTEMTIMECurrentTime; LCD_Initial(); Initial_DS1302(); GotoXY(0,0); Print("tianmadianzi"); GotoXY(0,1); Print("Time:"); while(1) { DS1302_GetTime(&CurrentTime); TimeToStr(&CurrentTime); GotoXY(6,1); Print(CurrentTime.TimeString); Delay1ms(400); }}#ifndefLCD_CHAR_1602_2021_4_9#defineLCD_CHAR_1602_2021_4_9#include<intrins.h>//PortDefinitions**********************************************************sbitLcdRs =P2^0;sbitLcdRw =P2^1;sbitLcdEn =P2^2;//内部等待函数**************************************************************************unsignedcharLCD_Wait(void){ LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); //while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环, //可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80 //实际硬件时翻开此语句 LcdEn=0; returnDBPort; }//向LCD写入命令或数据************************************************************#defineLCD_COMMAND 0//Command#defineLCD_DATA 1//Data#defineLCD_CLEAR_SCREEN 0x01//清屏#defineLCD_HOMING 0x02//光标返回原点voidLCD_Write(bitstyle,unsignedcharinput){ LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_();//注意顺序 LcdEn=1; _nop_();//注意顺序 LcdEn=0; _nop_(); LCD_Wait(); }//设置显示模式************************************************************#defineLCD_SHOW 0x04//显示开#defineLCD_HIDE 0x00//显示关 #defineLCD_CURSOR 0x02 //显示光标#defineLCD_NO_CURSOR 0x00//无光标 #defineLCD_FLASH 0x01//光标闪动#defineLCD_NO_FLASH 0x00//光标不闪动voidLCD_SetDisplay(unsignedcharDisplayMode){ LCD_Write(LCD_COMMAND,0x08|DisplayMode); }//设置输入模式************************************************************#defineLCD_AC_UP 0x02#defineLCD_AC_DOWN 0x00//default#defineLCD_MOVE 0x01//画面可平移#defineLCD_NO_MOVE 0x00//defaultvoidLCD_SetInput(unsignedcharInputMode){ LCD_Write(LCD_COMMAND,0x04|InputMode);}//移动光标或屏幕************************************************************/*#defineLCD_CURSOR 0x02#defineLCD_SCREEN 0x08#defineLCD_LEFT 0x00#defineLCD_RIGHT 0x04voidLCD_Move(unsignedcharobject,unsignedchardirection){ if(object==LCD_CURSOR) LCD_Write(LCD_COMMAND,0x10|direction); if(object==LCD_SCREEN) LCD_Write(LCD_COMMAND,0x18|direction);}*///初始化LCD************************************************************voidLCD_Initial(){ LcdEn=0; LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动}//************************************************************************voidGotoXY(unsignedcharx,unsignedchary){ if(y==0) LCD_Write(LCD_COMMAND,0x80|x); if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40));}voidPrint(unsignedchar*str){ while(*str!='\0') { LCD_Write(LCD_DATA,*str); str++; }}/*voidLCD_LoadChar(unsignedcharuser[8],unsignedcharplace){ unsignedchari; LCD_Write(LCD_COMMAND,0x40|(place*8)); for(i=0;i<8;i++) LCD_Write(LCD_DATA,user[i]);}*///************************************************************************#endif#ifndef_REAL_TIMER_DS1302_2021_7_21_#define_REAL_TIMER_DS1302_2021_7_21_sbitDS1302_CLK=P1^6;//实时时钟时钟线引脚sbitDS1302_IO=P1^7;//实时时钟数据线引脚sbitDS1302_RST=P1^5;//实时时钟复位线引脚sbitACC0=ACC^0;sbitACC7=ACC^7;typedefstruct__SYSTEMTIME__{ unsignedcharSecond; unsignedcharMinute; unsignedcharHour; unsignedcharWeek; unsignedcharDay; unsignedcharMonth; unsignedcharYear; unsignedcharDateString[9]; unsignedcharTimeString[9];}SYSTEMTIME; //定义的时间类型#defineAM(X) X#definePM(X) (X+12) //转成24小时制#defineDS1302_SECOND 0x80#defineDS1302_MINUTE 0x82#defineDS1302_HOUR 0x84#defineDS1302_WEEK 0x8A#defineDS1302_DAY 0x86#defineDS1302_MONTH 0x88#defineDS1302_YEAR 0x8C#defineDS1302_RAM(X) (0xC0+(X)*2) //用于计算DS1302_RAM地址的宏voidDS1302InputByte(unsignedchard) //实时时钟写入一字节(内部函数){unsignedchari;ACC=d;for(i=8;i>0;i--){DS1302_IO=ACC0; //相当于汇编中的RRCDS1302_CLK=1;DS1302_CLK=0;ACC=ACC>>1;}}unsignedcharDS1302OutputByte(void) //实时时钟读取一字节(内部函数){unsignedchari;for(i=8;i>0;i--){ACC=ACC>>1; //相当于汇编中的RRCACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return(ACC);}voidWrite1302(unsignedcharucAddr,unsignedcharucDa) //ucAddr:DS1302地址,ucData:要写的数据{DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr); //地址,命令DS1302InputByte(ucDa); //写1Byte数据DS1302_CLK=1;DS1302_RST=0;}unsignedcharRead1302(unsignedcharucAddr) //读取DS1302某地址的数据{unsignedcharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr|0x01);//地址,命令ucData=DS1302OutputByte();//读1Byte数据DS1302_CLK=1;DS1302_RST=0;return(ucData);}voidDS1302_SetProtect(bitflag)//是否写保护{ if(flag) Write1302(0x8E,0x10); else Write1302(0x8E,0x00);}voidDS1302_SetTime(unsignedcharAddress,unsignedcharValue)//设置时间函数{ DS1302_SetProtect(0); Write1302(Address,((Value/10)<<4|(Value%10)));}voidDS1302_GetTime(SYSTEMTIME*Time){ unsignedcharReadValue; ReadValue=Read1302(DS1302_SECOND); Time->Second=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F); ReadValue=Read1302(DS1302_MINUTE); Time->Minute=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F); ReadValue=Read1302(DS1302_HOUR); Time->Hour=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F); ReadValue=Read1302(DS1302_DAY); Time->Day=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F); ReadValue=Read1302(DS1302_WEEK); Time->Week=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F); ReadValue=Read1302(DS1302_MONTH); Time->Month=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F); ReadValue=Read1302(DS1302_YEAR); Time->Year=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F); }voidDateToStr(SYSTEMTIME*Time){ Time->DateString[0]=Time->Year/10+'0'; Time->DateString[1]=Time->Year%10+'0'; Time->DateString[2]='-'; Time->DateString[3]=Time->Month/10+'0'; Time->DateString[4]=Time->Month%10+'0'; Time->DateString[5]='-'; Time->DateString[6]=Time->Day/10+'0'; Time->DateString[7]=Time->Day%10+'0'; Time->DateString[8]='\0';}voidTimeToStr(SYSTEMTIME*Time){ Time->TimeString[0]=Time->Hour/10+'0'; Time->TimeString[1]=Time->Hour%10+'0'; Time->TimeString[2]=':'; Time->TimeString[3]=Time->Minute/10+'0'; Time->TimeString[4]=Time->Minute%10+'0'; Time->TimeString[5]=':'; Time->TimeString[6]=Time->Second/10+'0'; Time->TimeString[7]=Time->Second%10+'0'; Time->DateString[8]='\0';}voidInitial_DS1302(void){ unsignedcharSecond=Read1302(DS1302_SECOND); if(Second&0x80) DS1302_SetTime(DS1302_SECOND,0);}/********************************************************************************voidBurstWrite1302(unsignedchar*pWClock) //往DS1302写入时钟数据(多字节方式){unsignedchari;Write1302(0x8e,0x00); //控制命令,WP=0,写操作?DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(0xbe); //0xbe:时钟多字节写命令for(i=8;i>0;i--) //8Byte=7Byte时钟数据+1Byte控制{DS1302InputByte(*pWClock); //写1Byte数据pWClock++;}DS1302_CLK=1;DS1302_RST=0;}voidBurstRead1302(unsignedchar*pRClock) //读取DS1302时钟数据(时钟多字节方式){unsignedchari;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(0xbf); //0xbf:时钟多字节读命令for(i=8;i>0;i--){*pRClock=DS1302OutputByte();//读1Byte数据pRClock++;}DS1302_CLK=1;DS1302_RST=0;}voidDS1302_TimeStop(bitflag)//是否将时钟停止{ unsignedcharData; Data=Read1302(DS1302_SECOND); DS1302_SetProtect(0); if(flag) Write1302(DS1302_SECOND,Data|0x80); else Write1302(DS1302_SECOND,Data&0x7F);}********************************************************************************/#endif

论大学生写作能力写作能力是对自己所积累的信息进行选择、提取、加工、改造并将之形成为书面文字的能力。积累是写作的基础,积累越厚实,写作就越有基础,文章就能根深叶茂开奇葩。没有积累,胸无点墨,怎么也不会写出作文来的。写作能力是每个大学生必须具备的能力。从目前高校整体情况上看,大学生的写作能力较为欠缺。一、大学生应用文写作能力的定义那么,大学生的写作能力究竟是指什么呢?叶圣陶先生曾经说过,“大学毕业生不一定能写小说诗歌,但是一定要写工作和生活中实用的文章,而且非写得既通顺又扎实不可。”对于大学生的写作能力应包含什么,可能有多种理解,但从叶圣陶先生的谈话中,我认为:大学生写作能力应包括应用写作能力和文学写作能力,而前者是必须的,后者是“不一定”要具备,能具备则更好。众所周知,对于大学生来说,是要写毕业论文的,我认为写作论文的能力可以包含在应用写作能力之中。大学生写作能力的体现,也往往是在撰写毕业论文中集中体现出来的。本科毕业论文无论是对于学生个人还是对于院系和学校来说,都是十分重要的。如何提高本科毕业论文的质量和水平,就成为教育行政部门和高校都很重视的一个重要课题。如何提高大学生的写作能力的问题必须得到社会的广泛关注,并且提出对策去实施解决。二、造成大学生应用文写作困境的原因:(一)大学写作课开设结构不合理。就目前中国多数高校的学科设置来看,除了中文专业会系统开设写作的系列课程外,其他专业的学生都只开设了普及性的《大学语文》课。学生写作能力的提高是一项艰巨复杂的任务,而我们的课程设置仅把这一任务交给了大学语文教师,可大学语文教师既要在有限课时时间内普及相关经典名著知识,又要适度提高学生的鉴赏能力,且要教会学生写作规律并提高写作能力,任务之重实难完成。(二)对实用写作的普遍性不重视。“大学语文”教育已经被严重地“边缘化”。目前对中国语文的态度淡漠,而是呈现出全民学英语的大好势头。中小学如此,大学更是如此。对我们的母语中国语文,在大学反而被漠视,没有相关的课程的设置,没有系统的学习实践训练。这其实是国人的一种偏见。应用写作有它自身的规律和方法。一个人学问很大,会写小说、诗歌、戏剧等,但如果不晓得应用文写作的特点和方法,他就写不好应用文。(三)部分大学生学习态度不端正。很多非中文专业的大学生对写作的学习和训练都只是集中在《大学语文》这一门课上,大部分学生只愿意被动地接受大学语文老师所讲授的文学经典故事,而对于需要学生动手动脑去写的作文,却是尽可能应付差事,这样势必不能让大学生的写作水平有所提高。(四)教师的实践性教学不强。学生写作能力的提高是一项艰巨复杂的任务,但在教学中有不少教师过多注重理论知识,实践性教学环节却往往被忽视。理论讲了一大堆,但是实践却几乎没有,训练也少得可怜。阅读与写作都需要很强的实践操作,学习理论固然必不可少,但是阅读方法和写作技巧的掌握才是最重要的。由于以上的原因,我们的大学生的写作水平着实令人堪忧,那么如何走出这一困境,笔者提出一些建议,希望能对大学生写作水平的提高有所帮助。三、提高大学生应用写作能力的对策(一)把《应用写作》课设置为大学生的必修课。在中国的每一所大学,《应用写作》应该成为大学生的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论