下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 基于单片机的电子时钟和显示屏的设计

基于单片机的电子时钟和显示屏的设计.doc

基于单片机的电子时钟和显示屏的设计

潇甜在路上
2018-02-11 0人阅读 举报 0 0 暂无简介

简介:本文档为《基于单片机的电子时钟和显示屏的设计doc》,可适用于战略管理领域

基于单片机的电子时钟和显示屏的设计目录方案设计单片机电子时钟的背景电子时钟的意义电子时钟的工作原理及其具体实现设计任务电路方案设计模块一电路图模块二电路图模块三电路图总电路图程序设计主程序流程图模块一DS流程图模块二LCD流程图模块三DSB流程图源程序仿真与调试总结语参考文献方案设计单片机电子时钟的背景随着电子技术和计算机技术的迅速发展单片机已经在工业过程控制、智能仪表、计算机集成控制、人工智能、通信设备的智能化以及家电的智能化等方面得到广泛的应用。以单片机和微控制器为核心仍然是当今实现智能化技术的主流。随着单片机技术广泛地应用与人们生活的各个方面一些人们经常使用的产品大多数是基于单片机研发的如电子时钟。钟表从原来的沙漏计时和机械打点塔钟等演变到如今的电池驱动钟、交流钟、指针式石英电子钟表和数字式石英电子钟表并且钟表的准确度越来越高了。随着人们的时间观念逐渐地增强时钟在我们人类的世界里扮演着一个非常重要的角色几乎出现在我们生活的各个角落里并且人们几乎离不开它了。如今的时钟的功能更加全面与机械时钟相比具有更高的正确性和直观性且无机械装置具有更长的寿命因此广泛地应用于人类正常生活中得到人们的关注和研发。电子时钟的意义电子时钟采用数字电路实现对时、分、秒和数字显示的计时装置广泛使用于个人家庭、车站、机场等公共场所成为人们日常生活中不可缺少的必需品给人们的生活、学习、工作、娱乐带来了极大的方便。由于数字集成电路的发展和石英晶体振荡器的广泛应用使得电子时钟的精度、稳定性大幅度提高。现在的钟表的功能越来越强具有定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等因此研究数字时钟及其扩展有着重大意义。电子时钟的工作原理及其具体实现电子时钟的工作原理是采用单片机最小系统用DS时钟芯片和LCD液晶显示屏芯片以及DSB温度传感器分别进行寄存相关信息、显示年月日时分秒和采取温度用四个键分别实现选择调整对象为、增加调节对象的数值、减少调节对象的数值和调整确定采用小时制、定时器中断和外部中断从而实现可调式中文电子日历、温度及整点报时功能。采用定时器中断定时ms其中断服务程序的功能是将时间和日期显示到LCD上。每s时间刷新液晶显示屏上的秒钟数值每s时间刷新显示屏的分钟数值每min时间刷新显示屏的小时数值每h时间刷新显示屏的日期星期是通过年月日进行调整温度是通过温度传感器芯片DSB进行调整时钟每次到整点时通过蜂鸣器进行整点报时。采用外部中断实现时钟的调整将四个键通过“与门”连接单片机P^端口从而通过键产生外部中断信号。当要调整日期时间的时候首先要按K键来选择调整对象否则按其他键不会进行时间调整然后可以按K和K键对日期时间进行加减调整最后按K键可以将改动的日期时间重新显示到LCD上。并且每次按下键后都会通过蜂鸣器发出按键声音。设计任务()可调式中文电子日历的硬件和软件设计()画出程序流程图()编写代码()程序分析与调试电路方案设计模块一电路图该模块主要通过DS时钟芯片实现计算秒、分、时、星期、日、月、年的信息且具有闰年补偿的功能其在proteus中的电路图如图所示。图记录年月日秒分时星期的电路图模块二电路图该模块主要通过LCD实现中文电子日历功能其在proteus中的电路图如图所示图显示时间电路图模块三电路图该模块主要通过DSB温度传感芯片、四个键以及蜂鸣器实现温度采集时间调节和闹钟等功能。图时间调整电路图总电路图如图所示。图总体硬件电路图程序设计主程序流程图开始调用液晶初始化调用读取温度函数调用延时调用音乐播放显示年的固定函数前两位YN整点显示固定汉字中断初始化报警NY装定时器初值温度超过开定时器显示温度值YNYAdjustInde图主函数流程图调用显示当前时间函数x==模块一DS流程图读读读读读读读读读读读读读DS读读读读读读读读读读读读DS读读读读读读读图获取当前时间的流程图读读读DS读读读读读读读breakY是年需要调根据相应的条整,件进行调整刷新星期N调用判断年是否为闰年来获如果月份变化后取月的天数当前月份的天数根据相应的条是月需要调Y获取月天数大于上限则设为件进行调整整,上限如果年份变化N后当前月份的天数大于上限根据当前月份根据年份得出则设为上限Y决定调节日期是日需要调该年中月的刷新星期的上限在进整,天数行相应的调整调用刷新星期N函数Y根据相应的条是时需要调breakbreak件进行调整整,breakNY根据相应的条是分需要调break件进行调整整,NY根据相应的条是秒需要调break件进行调整整,图年月日时分秒流程图Nbreak重装定时器的初值YtCount!=NtCount=调用显示年后两位值、月、日、星期、时分秒的值图定时器的中断服务程序Y中断返回K==选择调整对象NYK==对对象进行加NYK==对对象进行减NY将调整后的时K==间写入DSN操作索引重设图外部中断服务程序为时间继续正常显示中断返回模块二LCD流程图初始化LCD包括位形式行字符开显示清屏画面不动光标右移设置起始行调用LCD发送命令检查LCD是否忙,N给相关的引脚赋相应的值返回图LCD初始化流程图YY第p页第L列小于,L列W字节小于,全部显示在左半屏NN全部显示在右如果越界则跨越左右半半屏屏显示返回图通用显示函数流程图模块三DSB流程图Y置传感器标判断DSB是否出故障,志位为N调用写一字节来跳过序列号调用写一字节来启动温度转换调用函数使DSB初始化跳过序列号读取温度寄存器读取温度低为读取温度高位图读取温度值置传感器正常标志位为源程序#include<regh>#include<intrinsh>#include<stringh>#defineucharunsignedchar#defineuintunsignedintsbitSDA=P^*DS数据线*sbitCLK=P^*DS时钟线*sbitRST=P^*DS复位线*sbitK=P^*选择键*sbitK=P^*加键*sbitK=P^*减键*sbitK=P^*确定键*sbitSPK=P^*************子函数定义****************************显示年函数***************externvoidLCDInitialize()*液晶初始化函数********读取温度值******externvoidReadTemperature()externvoidDisplayTemperature()*显示时间函数*externvoidDisplayACharX(ucharP,ucharL,ucha*M)reentrant*显示年月日,星期,时分秒的固定汉字函数*externvoidDisplayAWORD(ucharP,ucharL,uchar*M)reentrantvoidBeep()*启动蜂鸣器函数**在调整日期时间时,用该位决定是否反白显示*externbitReverseDisplayexternucharDisplayDigit={,,,}*待显示的各温度数位*externbitDSBISOK=*传感器正常标志**********全局变量和数组定义*********uchartCount=*一年中每个月的天数,月的天数由年份决定*ucharMonthsDays={,,,,,,,,,,,,}*所读取的日期时间*ucharDateTime*当前调整的时间对象:秒,分,时,日,月,星期,年(,,,,,,)变量**其中星期由年月日调整自动完成*charAdjustIndex=ucharHOffset=,VPageOffset=*水平与垂直偏移变量**年月日,星期,时分秒汉字点阵乘*ucharcodeDATETIMEWORDS={x,x,x,xC,xE,x,x,x,xFE,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,xFF,x,x,x,x,x,x,x,*年*x,x,x,x,x,xFF,x,x,x,x,x,xFF,x,x,x,x,x,x,x,x,xC,x,x,x,x,x,x,xF,x,x,x,x,*月*x,x,x,xFE,x,x,x,x,x,x,x,xFE,x,x,x,x,x,x,x,xF,x,x,x,x,x,x,x,xF,x,x,x,x,*日*x,x,x,xBE,xA,xA,xA,xEA,xA,xA,xA,xA,xE,x,x,x,x,x,x,x,x,x,x,xF,x,x,x,x,x,x,x,x,*星*x,x,xFF,x,x,x,xFF,x,x,xFE,x,x,x,xFE,x,x,x,x,xB,x,x,xA,x,x,x,x,x,x,x,xF,x,x,*期*x,xFC,x,x,x,xFC,x,x,x,x,x,xFF,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,xF,x,x,x,x,*时*x,x,x,x,x,x,x,x,x,x,x,x,x,xC,x,x,x,x,x,x,x,xF,x,x,x,x,xF,x,x,x,x,x,*分*x,x,xD,xFE,x,x,xC,x,x,x,xFF,x,x,x,x,x,x,x,x,xFF,x,x,x,x,x,x,x,x,x,x,x,x,*秒*x,x,x,x,x,xE,xA,xA,xA,xA,xA,xE,x,x,x,x,x,xFE,x,x,xF,x,x,xF,x,x,xF,x,x,xF,x,x,*温*x,x,xFC,x,x,x,xFC,xA,xA,xA,xFC,x,x,x,x,x,x,x,xF,x,x,x,x,xA,x,x,xA,x,x,xC,x,x,*度*}*星期几的汉字点阵乘*ucharcodeWEEKDAYWORDS={x,x,x,xFE,x,x,x,x,x,x,x,xFE,x,x,x,x,x,x,x,xF,x,x,x,x,x,x,x,xF,x,x,x,x,*日*x,x,x,x,x,x,x,x,x,x,x,x,x,xC,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,*一*x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,*二*x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,*三*x,xFE,x,x,x,xFE,x,x,xFE,x,x,x,x,xFE,x,x,x,xF,x,x,x,x,x,x,x,x,x,x,x,xF,x,x,*四*x,x,x,x,x,x,xFE,x,x,x,xC,x,x,x,x,x,x,x,x,x,x,xF,x,x,x,x,xF,x,x,x,x,x,*五*x,x,x,x,x,x,x,xE,x,x,x,x,x,x,x,x,x,x,x,x,xC,x,x,x,x,x,x,xC,x,x,x,x,*六*}*半角数字点阵乘*ucharcodeDIGITS={x,xE,x,x,x,x,xE,x,x,xF,x,x,x,x,xF,x,**x,x,x,xF,x,x,x,x,x,x,x,xF,x,x,x,x,**x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,**x,x,x,x,x,x,x,x,x,x,x,x,x,x,xE,x,**x,x,xC,x,x,xF,x,x,x,x,x,x,x,xF,x,x,**x,xF,x,x,x,x,x,x,x,x,x,x,x,x,xE,x,**x,xE,x,x,x,x,x,x,x,xF,x,x,x,x,xE,x,**x,x,x,x,xC,x,x,x,x,x,x,xF,x,x,x,x,**x,x,x,x,x,x,x,x,x,xC,x,x,x,x,xC,x,**x,xE,x,x,x,x,xE,x,x,x,x,x,x,x,xF,x,**}*生日快乐歌的音符频率表,不同的频率由不同的延时值来决定*ucharcodeSONGTONE={,,,,,,,,,,,,,,,,,,,,,,,,}*生日快乐歌节拍表,节拍表决定了每个音符的演奏长短*ucharcodeSONGLONG={,,,,,,,,,,,,,,,,,,,,,,,,,}voidDelayMS(uintx)*调用延时子函数*{uchariwhile(x)for(i=i<i)}voidPlayMusic()*音乐播放函数*{uinti=,j,kwhile(SONGLONGi!=||SONGTONEi!=){*播放各个音符,SONGLONG为拍*for(j=j<SONGLONGi*j){SPK=~SPK*SONGTONE延时表决定了每个音符的频率*for(k=k<SONGTONEik)}DelayMS()*下一个音符的索引*i}}voidAlarm(uchart)*温度报警函数*{uchari,jfor(i=i<i){SPK=~SPK*由参数t形成不同的频率*for(j=j<tj)}}*向DS写入一字节*voidWriteAByteTODS(ucharx){ucharifor(i=i<i){SDA=xCLK=CLK=x>>=}}*从DS读取一字节*ucharGetAByteFROMDS(){uchari,b,tfor(i=i<i){b>>=t=SDAb|=t<<CLK=CLK=}*BCD码转换*return(b*b)}*从DS指定位置读数据*ucharReadData(ucharaddr)}uchardatRST=CLK=RST=WriteAByteTODS(addr)dat=GetAByteFROMDS()CLK=RST=returndat}*向DS某地址写入数据*voidWriteDS(ucharaddr,uchardat){CLK=RST=WriteAByteTODS(addr)WriteAByteTODS(dat)CLK=RST=}*设置时间*voidSETDS(){uchariWriteDS(xE,x)*秒分时日月年依次写入*for(i=i<i){*秒,分,时,日,月,星期,年的起始地址分别为x,x,x,x,x,xA,xC*WriteDS(x*i,(DateTimei<<)|(DateTimei))}WriteDS(xE,x)}*读取当前时间*voidGetTime(){ucharifor(i=i<i){DateTimei=ReadData(x*i)}}ucharisLeapYear(uinty)*判断是否为闰年*{return(y==y!=)||(y==)}*********刷新星期******voidRefreshWeekDay(){uinti,d,w=*已知是周五*for(i=i<DateTimei){d=isLeapYear(i):w=(wd)}d=for(i=i<DateTimei)d=MonthsDaysid=DateTime*保存星期,~表示星期日,星期一,二,三,四,五,六,为了与DS的星期格式匹配返回值需要加*DateTime=(wd)}*蜂鸣器函数*voidBeep(uchart){ucharifor(i=i<i){SPK=~SPKDelayMS(t)}SPK=}voidDateTimeAdjust(charx)*年月日时分或*{switch(AdjustIndex){case:*年*if(x==DateTime<)DateTimeif(x==DateTime>)DateTime*获取月天数*MonthsDays=isLeapYear(DateTime):*如果年份变化后当前月份的天数大于上限则设为上限*if(DateTime>MonthsDaysDateTime)DateTime=MonthsDaysDateTimeRefreshWeekDay()*刷新星期*breakcase:*月至*if(x==DateTime<)DateTimeif(x==DateTime>)DateTime*获取月天数*MonthsDays=isLeapYear(DateTime):*如果年份变化后当前月份的天数大于上限则设为上限*if(DateTime>MonthsDaysDateTime)DateTime=MonthsDaysDateTimeRefreshWeekDay()*刷新星期*breakcase:*日至调节之前首先根据年份得出该年中月的天数*MonthsDays=isLeapYear(DateTime):*再根据当前月份决定调节日期的上限*if(x==DateTime<MonthsDaysDateTime)DateTimeif(x==DateTime>)DateTimeRefreshWeekDay()*刷新星期*breakcase:*小时*if(x==DateTime<)DateTimeDateTimebreakcase:*分钟*if(x==DateTime<)DateTimeif(x==DateTime>)DateTimebreakcase:*秒*if(x==DateTime<)DateTimebreak}}*定时器每秒刷新LCD显示*voidTINT()interrupt{TH=()TL=()if(tCount!=)returntCount=*年(后两位)*ReverseDisplay=AdjustIndex==DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)*星期*ReverseDisplay=AdjustIndex==DisplayAWORD(VPageOffset,HOffset,WEEKDAYWORDS(DateTime)*)*月*ReverseDisplay=AdjustIndex==DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)*日*ReverseDisplay=AdjustIndex==DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)*时*ReverseDisplay=AdjustIndex==DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)*分钟*ReverseDisplay=AdjustIndex==DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)*秒*ReverseDisplay=AdjustIndex==DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)DisplayACharX(VPageOffset,HOffset,DIGITSDateTime*)}*键盘中断(INT)*voidEXINT()interrupt{if(K==)*选择调整对象*{Beep()if(AdjustIndex==||AdjustIndex==)AdjustIndex=AdjustIndexif(AdjustIndex==)AdjustIndex=*跳过对星期的调整*}elseif(K==)*加*{Beep()DateTimeAdjust()}elseif(K==)*减*{Beep()DateTimeAdjust()}elseif(K==)*确定*{Beep()SETDS()*将调整后的时间写入DS*AdjustIndex=*操作索引重设为,时间继续正常显示*}}***************主函数**********************voidmain(){LCDInitialize()*液晶初始化*ReadTemperature()DelayMS()DelayMS()****显示年的固定前两位****DisplayACharX(VPageOffset,HOffset,DIGITS*)DisplayACharX(VPageOffset,HOffset,DIGITS)*******显示固定汉字:年月日,星期,时分秒,温度:********DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)DisplayAWORD(VPageOffset,HOffset,DATETIMEWORDS*)****************允许外部中断定时器中断*******************IE=xIP=xIT=xTMOD=xTH=xCTL=xBTR=while(){******如果未执行调整时间操作则就继续显示当前时间*******if(AdjustIndex==)GetTime()ReadTemperature()if(DSBISOK)DisplayTemperature()DelayMS()*温度*if(DisplayDigit!=)DisplayACharX(VPageOffset,HOffset,DIGITSDisplayDigit*)if(DisplayDigit==DisplayDigit!=)DisplayACharX(VPageOffset,HOffset,DIGITSDisplayDigit*)DisplayACharX(VPageOffset,HOffset,DIGITSDisplayDigit*)if((DisplayDigit!=)||((DisplayDigit==)(DisplayDigit==))){Alarm()Alarm()}if(DateTime==DateTime==){Playmusic()DelayMS()}}}*LCDc**名称:LCD显示驱动程序(不带字库)*#include<regh>#include<intrinsh>#defineucharunsignedchar#defineuintunsignedint#defineLCDDBPORTP*液晶DB~DB*#defineLCDSTARTROWxC*起始行*#defineLCDPAGExB*页指令*#defineLCDCOLx*列指令******液晶引脚定义******sbitDI=P^sbitRW=P^sbitE=P^sbitCS=P^sbitCS=P^sbitRS=P^*是否反相显示(白底黑字黑底白字)*bitReverseDisplay=*检查LCD是否忙*bitLCDCheckBusy(){RW=nop()DI=E=nop()E=return(bit)(Px)}*向LCD发送命令*voidLCDWriteCommand(ucharc){while(LCDCheckBusy())LCDDBPORT=xRW=nop()DI=LCDDBPORT=cE=nop()E=}*向LCD发送数据*voidLCDWriteData(uchard){while(LCDCheckBusy())LCDDBPORT=xRW=nop()DI=*根据ReverseDisplay决定是否反相显示*if(!ReverseDisplay)LCDDBPORT=delseLCDDBPORT=~dE=nop()E=}*初始化LCD*voidLCDInitialize(){CS=CS=LCDWriteCommand(x)*位形式,行字符*LCDWriteCommand(xF)*开显示*LCDWriteCommand(x)*清屏*LCDWriteCommand(x)*画面不动光标右移*LCDWriteCommand(LCDSTARTROW)*设置起始行*}*********通用显示函数**********从第p页第L列开始显示W字节,数据在r所指向的缓冲**每字节位是垂直显示的,高位在下,低位在上**每个*的矩形区域为一页(每页分左半页与右半页)**整个LCD又由*的左半屏和*的右半屏构成*voidCommonShow(ucharP,ucharL,ucharW,uchar*r)reentrant{uchariif(L<)*显示在左半屏或右半屏*{CS=CS=LCDWriteCommand(LCDPAGEP)LCDWriteCommand(LCDCOLL)if(LW<)*全部显示在左半屏*{for(i=i<Wi)LCDWriteData(ri)}else*如果越界则跨越左右半屏显示*{for(i=i<Li)LCDWriteData(ri)*左半屏显示*CS=CS=*右半屏显示*LCDWriteCommand(LCDPAGEP)LCDWriteCommand(LCDCOL)for(i=Li<Wi)LCDWriteData(ri)}}else*全部显示在左右半屏*{CS=CS=LCDWriteCommand(LCDPAGEP)LCDWriteCommand(LCDCOLL)for(i=i<Wi)LCDWriteData(ri)}}*显示一个*点阵字符*voidDisplayACharX(ucharP,ucharL,uchar*M)reentrant{CommonShow(P,L,,M)*显示汉字上半部分*CommonShow(P,L,,M)}*显示一个*点阵汉字*voidDisplayAWORD(ucharP,ucharL,uchar*M)reentrant{CommonShow(P,L,,M)*显示汉字上部分*CommonShow(P,L,,M)*显示汉字下部分*}*名称:DSB温度传感器*#include<regh>#include<intrinsh>#defineucharunsignedchar#defineuintunsignedint#definedelayNOP(){nop()nop()nop()nop()}sbitDQ=P^ucharCurrentT=*当前温度整数部分*ucharTempValue={x,x}*从DSB读取的温度值*************延时************voidDelay(uintx){while(x)}*************初始化DSB**************ucharInitDSB(){ucharstatusDQ=Delay()DQ=Delay()DQ=Delay()status=DQDelay()DQ=returnstatus}*************读一字节*************ucharReadOneByte(){uchari,dat=DQ=nop()for(i=i<i){DQ=dat>>=DQ=nop()nop()if(DQ)dat|=xDelay()DQ=}returndat*************写一字节**********voidWriteOneByte(uchardat){ucharifor(i=i<i){DQ=DQ=datxDelay()DQ=dat>>=}}*******读取温度值******voidReadTemperature(){if(InitDSB()==)*判断DSB故障*DSBISOK=else{WriteOneByte(xCC)*跳过序列号*WriteOneByte(x)*启动温度寄存器*InitDSB()WriteOneByte(xCC)*跳过序列号*WriteOneByte(xBE)*读取温度寄存器*TempValue=ReadOneByte()*温度低位*TempValue=ReadOneByte()*温度高位*DSBISOK=}}*在LCD上显示当前温度*voidDisplayTemperature(){uchari*延时值与负数标识*uchart=,ng=*高五位全为(xF)则为负数,为负数时取反加,并设置负数标识*if((TempValuexF)==xF){TempValue=~TempValueTempValue=~TempValueif(TempValue==x)TempValue*负数标识置*ng=}*获取温度整数部分(高字节中的低位与低字节中的高位,无符号)*CurrentT=((TempValuexF)>>)|((TempValuex)<<)*将整数部分分解为位待显示数字*DisplayDigit=CurrentTDisplayDigit=CurrentTDisplayDigit=CurrentT}仿真与调试其调试结果如图所示。图调试结果图按K键之后的结果图图按K键之后的结果图图按K键之后的结果图图按K键之后的结果图总结通过短暂的两周时间的课程设计我对单片机的基本原理以及单片机的C语言编程有了一定的了解同时我不仅对proteus仿真技能也有了进一步地了解也扩展了自己对一些重要芯片工作原理的了解提高了我的实践能力和理论水平。模块化设计让思路变得明了冗长的程序也变得条理清晰。本次课程设计让我了解到单片机在生活应用中的重要性了解了它的广阔的应用前景。学好单片机对我今后找工作有很大的帮助不仅可以充实自己的精神风貌和掌握各种操作技巧具有重大意义而且还可以研发出一些对人们有意义的产品促进社会的发展。在当今科学发达的社会中各行各业对这种人才非常急需因此这次课程设计对我们今后的学习有很大的帮助我们应该多参加一些对学好单片机有帮助的活动。总之本次设计锻炼了我们的动手能力激发了我们的创新思维培养了我们勇于面对困难、克服困难的坚强意志和不懈的精神最后我要感谢在本次设计中帮助过的同学要不是有他们的帮助时间对于我来说不足够的同时我也再次体会到团队精神的力量和合作的重要性更重要的是使我体会到理论与实际结合的重要性和知识的海洋是无穷无尽的这将激励我们对新知识的追求。参考文献郭天祥编著单片机C语言教程电子工业出版社。彭伟编著单片机C语言程序设计实训例电子工业出版社。周润景等编著基于proteus的电路及单片机设计与仿真北京航空航天大学出版社。江世明编著单片机原理及应用中国铁道出版社。内部资料仅供参考内部资料仅供参考DDDDDDDDLEDLEDLEDLEDLEDLEDLEDLEDPVCCRRRRRRRRGNDKKKKKKKKVCCUAUBUCUDUAUBUCUDLMLMLMLMLMLMLMVCCLMJJGNDRRJKRRRRRRRRRKJKKKKKKKKGNDULMVCCDDVinVPDCCNCCGDDUuDSDSDSDSaaaaaaaabbbbGNDbbbbaaaaccccccccDSCOMddddfbfbfbfbddddggggeeeeeeeeQffffececececffffddddggggggggdpdpdpdpdpdpdpdpDSCOMGNDGNDGNDGNDQVCCDSCOMDSCOMDSCOMDSCOMDSCOMBTBLVRQVCCDBLYVCCDSCOMDCUQRRBLabcdefgRRRRRRRRKCOMCOMCOMUGNDLSBLRESVCCRXDPGNDTXDPCXPBLPUXPXTALCOMCOMCOMFBCEADGINTPQMKCINTPPTPTPTIEABCDLBLGNDPPKCGNDRKVCCGNDRGNDVCCLEDLED

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/42

基于单片机的电子时钟和显示屏的设计

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利