关闭

关闭

封号提示

内容

首页 课程设计.doc

课程设计.doc

课程设计.doc

上传者: faith-leopard 2012-11-27 评分 3 0 6 1 28 暂无简介 简介 举报

简介:本文档为《课程设计doc》,可适用于高等教育领域,主题内容包含一、设计任务及要求设计任务、运用DSB将测量温度值读到单片机内在LCD上显示出来、在程序中配置温度上下限的初始值并可以通过按键来改变两个初始值当从D符等。

一、设计任务及要求设计任务、运用DSB将测量温度值读到单片机内在LCD上显示出来、在程序中配置温度上下限的初始值并可以通过按键来改变两个初始值当从DSB读进来的温度超出上下限的区间就调用报警程序进行报警。基本要求、用CCPUM时钟常规的上电和手动复位电路、包括矩阵键盘、LCD显示显示器及接口、一路蜂鸣器输出设计的基本步骤、画出Proteus模拟仿真图。、设计矩阵键盘并在LCD上显示在程序中配置温度上下限的初始值并可以通过按键来改变两个初始值。、设计读取温度传感器(B)在LCD上显示。、结合两个模块的程序。、设计报警程序当温度超过上下限蜂鸣器就会鸣叫。、调试程序使之达到要求。二、基本模块的功能原理DSB功能及基本原理、DSB功能该模块主要是测量外界温度并转换为数字温度输出。、DSB基本原理该产品采用美国DALLAS公司生产的DSB可组网数字温度传感器芯片封装而成具有耐磨耐碰体积小使用方便封装形式多样适用于各种狭小空间设备数字测温和控制领域。DQ为数字信号输入、输出引脚通过单总线接到P,通过给P高脉冲的移位脉冲进行对数据的传送。DSB的主要特征:全数字温度转换及输出。先进的单总线数据通信。最高位分辨率精度可达土摄氏度。位分辨率时的最大工作周期为毫秒。可选择寄生工作方式。检测温度范围为–C~C(–F~F)内置EEPROM限温报警功能。位光刻ROM内置产品序列号方便多机挂接。多样封装形式适应不同硬件系统DSB引脚定义:()DQ为数字信号输入输出端  ()GND为电源地 ()VDD为外接供电电源输入端(在寄生电源接线方式时接地)。DSB内部结构图)位ROM。位ROM的内容是位序列号是出厂前被光刻好的它可以被看做是该DSB的地址序列号其作用是使每一个DSB都各不相同这样就可以实现一根总线上挂接多个DSB的目的。()温度灵敏元件。温度灵敏元件完成对温度的测量测量后的结果存储在两个比特的温度寄存器中这两个温度寄存器的定义如下图:LS字节:位位位位位位位位^^^^^()^()^()^()MS字节:位位位位位位位位SSSSS^^^温度存储器高位的前位是符号位当温度大于零时这位为而当温度小于零时这位为。高位剩下的位和低位的前位是温度的整数位低位的后位是温度的小数位当温度大于零时它们以原码的形式存储而当温度小于零时都以二进制的补码形式存储。LCD液晶显示器的工作原理基本原理、LCD分为带背光和不带背光两种基控制器大部分为HD带背光的比不带背光的厚是否带背光在应用中并无差别两者尺寸差别如下图所示:、LCD是字符型LCD通常有条引脚线或条引脚线的LCD多出来的条线是背光电源线VCC(脚)和地线GND(脚)其控制原理与脚的LCD完全一样定义如下表所示:矩阵键盘单片机的P口用作键盘IO口键盘的列线接到P口的低位键盘的行线接到P口的高位。列线PP分别接有个上拉电阻到正电源V并把列线PP设置为输入线行线PP设置为输出线。根行线和根列线形成个相交点。 、检测当前是否有键被按下。检测的方法是PP输出全“”读取PP的状态若PP为全“”则无键闭合否则有键闭合。 、去除键抖动。当检测到有键按下后延时一段时间再做下一步的检测判断。、确认哪个键按下可以采用扫描法和线反转法我采用线反转法方法如下:):P~P输出全为“”然后读入P~P的状态结果P=说明第一行有键按下。):P~P输出全为“”然后读入P~P的状态结果P=说明第列有键按下。综上所述就会知道第一行第三列有键按下此为号键。蜂鸣器的功能及原理功能:主要是警报的作用在温度超过上限或下线值时会发出警报的声音。本实验中我们如下图所示:我写的报警程序主要是比较程序当温度值超过上下限时就给P若干个高频率的脉冲(延时时间越短脉冲频率越高声音越尖)程序如下:三、电路原理图三、流程图五、程序清单#include<regh>#include<intrinsh>#defineucharunsignedchar#defineuintunsignedint#definenop(){nop()nop()nop()nop()}sbitRW=P^sbitRS=P^sbitEN=P^sbitDQ=P^sbitP=P^程序申明voidInitB(void)voidWriteB(ucharch)ucharReadB(void)voidDelayus(ucharn)voidDelayms(uintdelaynum)voidDisplay(void)bitLcdbusy(void)voidLcdwcmd(ucharcmd)voidLcdwdat(uchardat)voidLcdinit(void)voidkeyscan(void)voidkeydown(void)voidlcdpos(ucharpos)voidCompare(void)codeuchardecimalH={,,,,,,,,,,,,,,,}小数点后前两位codeuchardecimalL={,,,,,,,,,,,,,,,}小数点后后两位uintResultTH,ResultTLH,ResultTLL整数,小数高位,小数低位uintResultSignal,WarnupSignal,WarndownSignal符号位unsignedcharWarnTupunsignedcharWarnTdownuintXucharTemLucharTemHuchardisbufuchardisbufucharenterucharn=uchartempucharkeyucharkvoiddelay(ucharx)ucharcdis={"Tem:"}ucharcdis={"up:cdow:c"}#definedelayNOP(){nop()nop()nop()nop()}Main(){unsignedcharmP=xFF置P口P=xFF置P口InitB()WriteB(xCC)跳过ROMnop()WriteB(xf)bits温度分辨率InitB()WriteB(xCC)跳过ROMnop()WriteB(xe)写RAMWriteB(WarnTdown)写报警下限值WriteB(WarnTup)写报警上限值InitB()WriteB(xCC)跳过ROMWriteB(xBE)主机指令Delayus()Lcdinit()初始化LCDlcdpos()设置显示位置为第一行的第个字符m=while(cdism!=''){显示LCD第一行字符Lcdwdat(cdism)m}lcdpos(x)设置显示位置为第二行第个字符m=while(cdism!=''){Lcdwdat(cdism)显示字符m}while(){keydown()lcdpos(x)for(m=m<m){Lcdwdat(disbufm)}WarnTup=(disbufx)*(disbufx)lcdpos(xb)for(m=m<m){Lcdwdat(disbufm)}if(k==)WarnTdown=(disbufx)*(disbufx)Display()在LCD显示读取的温度值Compare()调用蜂鸣程序}voidCompare(void)比较子程序{ucharuif((ResultTH>=WarnTup)|(ResultTH<WarnTdown)){for(u=u<u){P=Delayus()P=}}}voidDisplay(void)显示子程序{ucharTemH,TemLInitB()WriteB(xCC)跳过ROMnop()WriteB(x)发送温度转换指令Delayms()等待s转换InitB()初始化BWriteB(xCC)跳过ROMWriteB(xBE)主机指令TemL=ReadB()读低位温度值TemH=ReadB()读高位温度值Delayms()InitB()WriteB(xCC)跳过ROMnop()WriteB(xe)写RAMWriteB(WarnTup)写报警上限值WriteB(WarnTdown)写报警下限值TemH=(TemH<<)|(TemL>>)TemL=TemLxf取低位if(TemHx){TemH=~TemHTemL=~TemL取反加ResultSignal=负}elseResultSignal=正ResultTLH=decimalHTemLResultTLL=decimalLTemLResultTH=TemHLcdwcmd(x)显示温度值if(ResultSignal)Lcdwdat(xb)负号elseLcdwdat(xb)正号Lcdwdat((ResultTH)|x)整数部分转换为十进制Lcdwdat(((ResultTH))|x)Lcdwdat((ResultTH)|x)Lcdwdat(xe)小数点Lcdwdat((ResultTLH)|x)小数部分Lcdwdat((ResultTLH)|x)Lcdwdat((ResultTLL)|x)Lcdwdat((ResultTLL)|x)}B初始化子程序voidInitB(void){DQ=Delayus()至少延时usDQ=Delayus()至少延时us}B读字节子程序ucharReadB(void){ucharchucharqfor(q=q<q)循环次读取DQ上的数据{ch=ch>>DQ=给DQ移位脉冲nop()DQ=nop()if(DQ==){ch=ch|x}读else{ch=chxf}读Delayus()DQ=}return(ch)}B写字节子程序voidWriteB(ucharch){ucharifor(i=i<i){DQ=Delayus()DQ=chxDelayus()DQ=ch=ch>>nop()}}LCD初始化子程序voidLcdinit(){Delayms()Lcdwcmd(x)设置LCD工作模式Delayms()Lcdwcmd(x)Delayms()Lcdwcmd(xc)光标不闪烁Delayms()Lcdwcmd(x)整屏不移动指针加Delayms()}voidlcdpos(ucharpos){Lcdwcmd(pos|x)数据指针=地址变量}bitLcdbusy()LCD查忙子程序{bitresultP=xffRS=RW=EN=nop()result=(bit)(Px)EN=return(result)}LCD写指令子程序voidLcdwcmd(ucharcmd){while(Lcdbusy())RS=RW=EN=P=cmdnop()EN=nop()EN=}LCD写数据子程序voidLcdwdat(uchardat){while(Lcdbusy())RS=RW=EN=P=datnop()EN=nop()EN=}延时N微秒子程序voidDelayus(ucharn){do{nop()nop()nop()nop()nop()nop()nop()nop()nop()nop()nop()nop()nop()}while(n)}延时N毫秒子程序voidDelayms(uintmm){uchariwhile(mm){for(i=i<i){}}}voiddelay(ucharx)延时子程序{ucharjwhile((x)!=){for(j=j<j){}}}voidkeyscan(void){uchartempP=xF高四位输入行为高电平列为低电平delay()temp=P读P口temp=tempxF屏蔽低四位temp=~((temp>>)|xF)if(temp==)p被拉低key=elseif(temp==)p被拉低key=elseif(temp==)p被拉低key=elseif(temp==)p被拉低key=P=xF低四位输入列为高电平行为低电平delay()temp=P读P口temp=tempxFtemp=~(temp|xF)if(temp==)p被拉低key=keyelseif(temp==)p被拉低key=keyelseif(temp==)p被拉低key=keyelsekey=disbuf=key键值入显示缓存disbuf=disbufxfif(disbuf>)转换为ASCII码disbuf=disbufxelsedisbuf=disbufx}判断键是否按下voidkeydown(void){P=xFif(P!=xF)判断按键是否按下如果按钮按下会拉低P其中的一个端口{delay()if(P!=xF){keyscan()P=xFwhile(P!=xF)消抖if(disbuf=='A')enter=锁键盘if(enter==){if(n==)n=disbufn=disbufn}if(disbuf=='B')enter=开锁k}}}五、心得体会及调试分析我们进行了为期一周的计算机控制技术课程设计。通过这两周的课程设计我拓宽了知识面锻炼了能力综合素质得到了提高。刚刚拿到课题我感到有些茫然对于以前没有做过的人来说要全部做完的确有一定的难度。由于我对计算机控制不是很熟悉在设计的过程中走了不少弯路。通过亲身体验做课程设计我觉得安排课程设计的基本目的在于通过理论与实际的结合进一步提高观察、分析和解决问题的实际工作能力以便培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才。运用学习成果把课堂上学到的系统化的理论知识尝试性地应用于实际设计工作并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果看一看课堂学习与实际工作到底有多大距离并通过综合分析找出学习中存在的不足以便为完善学习计划改变学习内容与方法提供实践依据。我的收获有一下几点:第一我对所学专业有了一些了解增强了自己的兴趣和对以后可能从事的职业的热爱。第二通过课程设计我明白到了理论到实践有一段很远的路程。设计过程中的每一步都是一门学问我终于知道了每一个实现的过程每一个认识的过程都存有人类无数的的汗水与对待事物一丝不苟得缜密的思考以及不懈的努力只有这样才会有一个新生事物的诞生。而以上种种的过程必须要你亲自去体会去认识去发现那才是属于你的“收获”只有这时才会对自己的作品无比的骄傲。第三通过这次设计加强了我们的设计创新能力。使我们的理论知识与实践充分地结合。第四通过两周的课程设计我学到了很多书本上学习不到的知识。两周的时间很短但是我学到比两年的还多在以后的学习生活中我需要更努力地读书和实践。对我们电气专业的学生来说实际能力的培养至关重要而这种实际能力的培养单靠课堂教学是远远不够的必须从课堂走向实践。通过课程设计让我们找出自身状况与实际需要的差距并在以后的学习期间及时补充相关知识为求职与正式工作做好充分的知识、能力准备从而缩短从校园走向社会的心理转型期。在设计过程中体会到了设计一项课题的不易也体会到了设计成功之后的小小成就感和同学之间相互合作的默契。更重要的是通过课程设计我发现了自身存在的更多不足之处和实际应用能力方面的欠缺这些不足之处在今后的学习之中要有意识的弥补和改变。最后感谢在课程设计过程中关心帮助我的老师同学。

职业精品

精彩专题

上传我的资料

热门资料

资料评价:

/ 13
所需积分:5 立即下载

意见
反馈

返回
顶部

Q