




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、实验内容实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开头,并在LCD上显示衬里温度值、设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。通过该实验学习和掌握以下的内容1MPALB开发环境的使用,程序编写和排错及软件仿真2利用MPLAB和ICD2以程序进行在线仿真和调试3使用万用表和示波器等仪器对硬件系统进行测量和调试4PIC18F452单片机的I/O和PWM驱动及编程5PIC18F452单片机LCD和键盘接口及编程方法6PIC18F452的UART编程及与PC机的通讯方法7利用TIMER1外接32768KHZ的晶振产生RTC二、实现方法采用模块编程、分块调试、之后系统联调的原则。1、驱动蜂鸣器APP001开发板上的BUZZER是由RC2控制一个三极管来驱动的,当JP4的跳线开关短路时,RC2管脚输出高电平便会使蜂鸣器发出声音,RC2管脚输出低电平便禁止蜂鸣器发声。2、散热风扇开关输出控制实验中利用一个LED来模拟风扇状态,当菜瓜风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。开发板上的指示灯D11由RB2控制,低电平亮,高电平来。在代码中通过TRISBBITSTRISB20/1来设置输出/输入,通过PORTBBITSRB2来控制管脚输出高低电平。3字符LCDAPP001开发板配置了一个216的字符LCD,它和PIC18F452的接口是RD0RD3连接到LCD模块的DB4DB7,用来向LCD模块写入命令和数据,其中DB7可以用来作为LCD模块控制器的忙标志位;RD5是读写控制位;RD4是命令和数据标志位。RD0时,RD0RD3是读取和写入数据到LCD的命令寄存器;RD1时,RD0RD3读取和写入的是要显示的数据。4温度测量使用模拟温度传感器TC1047A,利用模数转换,将模拟电压转换为数字电压。对应于相应的温度。5键盘使用开发板上的2组按键SW2和SW36串口波特率19200,8位数据位,无校验,1位停止位。7RTC采用TIMER1外接32768KHZ的晶振可以产生精确的1秒计时,从而实现RTC。三、硬件结构框图和原理图硬件结构框图如下原理图见附件。四、软件流程图和部分接口函数及说明软件流程图如下部分函数如下1、主函数VOIDMAINVOIDCHARIFORI0I17FLAG1FLAG_SETFLAGIFPORTBBITSRB01ADD_VALUEFLAGIFT_BUFFER/10DT7PORTDBITSRD71ELSEPORTCBITSRC20PORTDBITSRD702、按键部分函数FLAG_SET函数功能程序设定RB0为SET键,当RB0按下的时候,标志变量FLAG,当RB0松开的时候,程序调用FLAG_SET函数,在对应的位置处闪烁光标。比如说,RB0按下松开一次,FLAG由0变为1,这时光标就在LCD的第0行第0个字符处闪烁。VOIDFLAG_SETUNSIGNEDCHARFLAGIFFLAG1LCD_SET_CURSOR0,0WRITECMDLCD0X0FIFFLAG2LCD_SET_CURSOR0,1WRITECMDLCD0X0FIFFLAG3LCD_SET_CURSOR0,3WRITECMDLCD0X0FIFFLAG4LCD_SET_CURSOR0,4WRITECMDLCD0X0FIFFLAG5LCD_SET_CURSOR0,6WRITECMDLCD0X0FIFFLAG6LCD_SET_CURSOR0,7WRITECMDLCD0X0FIFFLAG7LCD_SET_CURSOR0,11WRITECMDLCD0X0FIFFLAG8LCD_SET_CURSOR0,12WRITECMDLCD0X0FIFFLAG9LCD_SET_CURSOR0,13WRITECMDLCD0X0FIFFLAG10LCD_SET_CURSOR0,14WRITECMDLCD0X0FIFFLAG11LCD_SET_CURSOR1,0WRITECMDLCD0X0FIFFLAG12LCD_SET_CURSOR1,1WRITECMDLCD0X0FIFFLAG13LCD_SET_CURSOR1,3WRITECMDLCD0X0FIFFLAG14LCD_SET_CURSOR1,4WRITECMDLCD0X0FIFFLAG15LCD_SET_CURSOR1,6WRITECMDLCD0X0FIFFLAG16LCD_SET_CURSOR1,7WRITECMDLCD0X0FADD_VALUE函数功能主要是加数功能。该函数紧接着上一个函数,在RB0(SET)键按完之后,如果这时按下RA4(ADD)键,进入加数程序,因为要在LCD上调整16个字符,所以做了16个CASE,CASE对应于RB0SET按下的次数,RB0按一次,进入CASE1RB0按2次,进入CASE2,以此类推。另外,本函数还对各个位要设定的数字的范围做了判定,以防止出现不合理的日期设定。VOIDADD_VALUEUNSIGNEDCHARFLAGIFPORTABITSRA40DELAY10KTCYX80SWITCHFLAGCASE1COUNTDT5/10COUNTIFCOUNT9COUNT0DT5DT510COUNT10BREAKCASE2COUNTDT510COUNTIFCOUNT9COUNT0DT5DT5DT510COUNTBREAKCASE3COUNTDT4/10COUNTIFCOUNT1COUNT0DT4DT410COUNT10IFDT4/101BREAKCASE4COUNTDT410COUNTIFDT4/100IFCOUNT9COUNT1ELSEIFCOUNT2COUNT0DT4DT4DT410COUNTBREAKCASE5COUNTDT3/10COUNTIFDT42IFCOUNT2COUNT0DT3DT310COUNT10IFDT3/102ELSEIFCOUNT3COUNT0DT3DT310COUNT10IFDT3/103BREAKCASE6COUNTDT310COUNTIFDT42/IFFEBRUARYIFDT540/IFLEAPYEARIFDT3/100IFCOUNT9COUNT1ELSEIFCOUNT9COUNT0ELSE/NOTLEAPYEARIFDT3/102IFCOUNT8COUNT0ELSEIFDT3/100IFCOUNT9COUNT1ELSEIFCOUNT9COUNT0ELSEIFDT41|DT43|DT45|DT47|DT48|DT410|DT412IFDT3/103IFCOUNT1COUNT0ELSEIFDT3/100IFCOUNT9COUNT1ELSEIFCOUNT9COUNT0ELSEIFDT3/103IFCOUNT0COUNT0ELSEIFDT3/100IFCOUNT9COUNT1ELSEIFCOUNT9COUNT0DT3DT3DT310COUNTBREAKCASE7COUNTDT6/10COUNTIFCOUNT9COUNT0DT6DT610COUNT10BREAKCASE8COUNTDT610COUNTIFCOUNT9COUNT0DT6DT6DT610COUNTBREAKCASE9COUNTDT7/10COUNTIFCOUNT9COUNT0DT7DT710COUNT10BREAKCASE10COUNTDT710COUNTIFCOUNT9COUNT0DT7DT7DT710COUNTBREAKCASE11COUNTDT2/10COUNTIFCOUNT2COUNT0DT2DT210COUNT10BREAKCASE12COUNTDT210COUNTIFDT2/102IFCOUNT3COUNT0ELSEIFCOUNT9COUNT0DT2DT2DT210COUNTBREAKCASE13COUNTDT1/10COUNTIFCOUNT5COUNT0DT1DT110COUNT10BREAKCASE14COUNTDT110COUNTIFCOUNT9COUNT0DT1DT1DT110COUNTBREAKCASE15COUNTDT0/10COUNTIFCOUNT5COUNT0DT0DT010COUNT10BREAKCASE16COUNTDT010COUNTIFCOUNT9COUNT0DT0DT0DT010COUNTBREAK3RTC部分函数RTC放在低中断里边,每200MS产生一次低中断,CP,CP2时,FLAGBITSTIMER0_FLAG1;CP5时(CP0),SECOND,实现时钟的计数。VOIDISR_LOWVOIDIFPIR1BITSTMR1IF1TMR1H0XFFFFTIMER_COUNT/256TMR1L0XFFFFTIMER_COUNT256/TIMER1RELOADEVERY200MSPIR1BITSTMR1IF0/CLEARTIMER1INTERRUPTFLAGCPIFCP2FLAGBITSTIMER0_FLAG1/SETFORPROGRAMTASKIFCP5CP0DT0/SECONDIFDT059DT00DT1IFDT159DT10DT2IFDT223DT20DT3IFDT42/IFITISFEBRUARYIFDT540/IFLEAPYEARIFDT329DT31DT4ELSEIFDT328DT31DT4ELSEIFDT41|DT43|DT45|DT47|DT48|DT410|DT412IFDT331DT31DT4ELSEIFDT330DT31DT4IFDT412DT41DT5IFDT599DT50LCD_SET_CURSOR1,0WRITEDATALCDDT2/100X30WRITEDATALCDDT2100X30WRITEDATALCDWRITEDATALCDDT1/100X30WRITEDATALCDDT1100X30WRITEDATALCDWRITEDATALCDDT0/100X30WRITEDATALCDDT0100X30LCD_SET_CURSOR0,0WRITEDATALCDDT5/100X30WRITEDATALCDDT5100X30WRITEDATALCD/WRITEDATALCDDT4/100X30WRITEDATALCDDT4100X30WRITEDATALCD/WRITEDATALCDDT3/100X30WRITEDATALCDDT3100X304串口函数SEND_TEMP函数功能向串口发送温度VOIDSEND_TEMPVOIDIFT_BUFFER0WRITEUSART0DELAY10KTCYX4ELSEITOAT_BUFFER,ASCII_STRING/CONVERTTOASCIISTRINGSTR_LENSTRLENASCII_STRING/GETLENGTHFORTHEASCIISTRINGFORJ0J17FLAG1FLAG_SETFLAGIFPORTBBITSRB01ADD_VALUEFLAG2串口发送的问题问题比如说采集的温度是273,结果发送到串口这后就变成了23;如果采集的是282,串口中就变成22,即如果连续发送两个字节的数据的话,第一个字节的低4位与第二个字节的高4位就丢失。解决可以将这种数据丢失的现象叫做接收错误,可以引起一个叫“RECEIVEERRORSTATUS”的中断请求。如果这个中断请求在寄存器UCONN中的使能位被置为“1”,并且当这个请求被处理时通过读取UERSTSATN的值可知引起这个中断的信号,也就是找到是哪种错误引起的中断。接收缓冲区在接收到第一个字节的数据并开始发送,但还没有发送结束,第二个字节的数据就被送入接收缓冲区从而出现未知的接收错误。可以在每次发送之后加上DELAY1KTCYX4以保证缓冲区里的字符已完全发送。如WRITEUSARTDELAY1KTCYX43日期的调整问题问题在本程序中,日期的调整特别是月份和每月天数的调整需要特别注意,若不加限制就会出现3月32日之类的事情发生。解决对日期特别是月份和天数的调整用严格的程序规则来判定,比如调整月份时(本程序是对一个位来判定,如对月份的十位和个位分别判定),它的十位可以是0或1,如果十位是0,则个位只能是1至9;如果十位是1,个位只能是0至2;在调完十位之后,程序要对存储月份的单元DT4加以判定,DT4的值不能大于12,如果大于12,则强制将DT4的值变为10。对天数的判定则要分3组2月;1、3、5、7、8、10、12月;4、6、9、11月。如果是第1组(2月),则对天数十位的设定是设定完十位(0、1、2)后,强制将天数的个位变为0;对第2、3组,对天数十位的设定是设定完十位后,将个位变为0CASE3COUNTDT4/10COUNTIFCOUNT1COUNT0DT4DT410COUNT10IFDT4/101BREAKCASE4COUNTDT410COUNTIFDT4/100IFCOUNT9COUNT1ELSEIFCOUNT2COUNT0DT4DT4DT410COUNTBREAKCASE5COUNTDT3/10COUNTIFDT42IFCOUNT2COUNT0DT3DT310COUNT10IFDT3/102ELSEIFCOUNT3COUNT0DT3DT310COUNT10IFDT3/103BREAKCASE6COUNTDT310COUNTIFDT42/IFFEBRUARYIFDT540/IFLEAPYEARIFDT3/100IFCOUNT9COUNT1ELSEIFCOUNT9COUNT0ELSE/NOTLEAPYEARIFDT3/102IFCOUNT8COUNT0ELSEIFDT3/100IFCOUNT9COUNT1ELSEIFCOUNT9COUNT0ELSEIFDT41|DT43|DT45|DT47|DT48|DT410|DT412IFD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Fmoc-PEG-Maleimide-MW-1000-Fmoc-NH-PEG-Mal-MW-1000-生命科学试剂-MCE
- FG-2216-Standard-生命科学试剂-MCE
- 农发行楚雄彝族自治州武定县2025秋招结构化面试经典题及参考答案
- 平邑街道安全生产培训课件
- 农发行西安市雁塔区2025秋招笔试英语题专练及答案
- 农发行唐山市迁安市2025秋招小语种岗笔试题及答案
- 网络文学IP全产业链开发与网络文学版权交易平台市场潜力报告
- 数字艺术与区块链:创作、交易与版权保护的创新发展报告
- 2025年新能源汽车充电设施建设对环境影响评价报告
- 垃圾填埋气发电技术升级2025年应用场景与碳减排效果分析报告
- 铝合金门窗安装监理交底
- 胸腹水常规检测标准操作规程
- 基本公卫生服务的项目组织管理灵石武佳波课件
- 电工职业技能竞赛技术规程
- 机电设备调试协议书
- 芪参益气滴丸课件
- 短视频编辑与制作(第2版)PPT完整全套教学课件
- 电梯井内落地脚手架搭设方案
- 新视野大学英语3第三版课后习题答案加解析详细翻译
- 水泥产品生产许可证实施细则
- GB/T 14258-2003信息技术自动识别与数据采集技术条码符号印制质量的检验
评论
0/150
提交评论