




已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2011 届毕业项目届毕业项目 诚诚 信信 声声 明明 本人郑重声明: 所呈交的毕业项目报告/论文pcb 恒温腐蚀箱的设计与制作是本人在 指导老师的指导下,独立研究、写作的成果。论文中所引用是他人的无论以 何种方式发布的文字、研究成果,均在论文中以明确方式标明。 本声明的法律结果由本人独自承担。 作者签名: 年 月 日 2011 届毕业项目届毕业项目 摘摘 要:要:在 pcb 制作中,能够以最简单的操作实现受热的试剂受热均匀, 并且能够自动调节水温保持受热试剂在需要的温度范围内 器件选型:测量传感器采用初步定为 ds18b20,测量最高精度 1/16 摄 氏度,主控制电路采用 stc89c52。 拿所测的结果与温度上限进行比较,大于上限温度的话,关制热并打 开制冷,使温度下降;并将所测温度与温度下限比较,小于下限温度的话 则将制冷关闭,打开制热;大于温度下限值的话,将制热、制冷关闭,跳 入下一阶段的水位测量。 如果当前的水位大于水位上限值,那么继电器将自动关闭进水并打开 排水,所测的水位将与水位下限值再进行一次比较,如果小于下限,则继 续关闭排水打开进水,如果介与上限值之间的话,那么继电器将关闭进水、 关闭排水。 现在0.5以内,考虑到实际中温度的传递及程序计算和逐次逼近所 需要的时间,实际产品的控制精度应在1以内。其测试、温控、键盘输 入等电路工作都正常。 关键字关键字:温度,水位,传感器,看门狗 2011 届毕业项目届毕业项目 目目 录录 1 绪论 1 1.1 设备的作用 1 1.2 设备的简单运作 1 1.3 设计目标 1 2 硬件设计 2 2.1 框图 2 2.2 框图的主要组成部分简介 2 2.3 原理图 3 2.4 原理图各部分详细概述 4 2.5 软件优点 .10 2.6 pcb 图 .11 3 软件设计 13 3.1 流程图 .13 3.3 程序 .15 4 实物图 70 4.1 pcb 实物图.70 4.2 实物图一 72 4.3 实物图二 73 4.4 实物图三 74 4.5 实物图四 75 4.6 实物图五76 4.6 实物图六 77 4.8 操作说明77 5 体会78 参考文献 致谢 2011 届毕业项目届毕业项目 第 1 页 pcbpcb 恒温腐蚀箱的设计与制作恒温腐蚀箱的设计与制作 1 1 绪论绪论 pcb 恒温腐蚀箱的设计与制作是把实验室的纯手工操作的腐蚀箱改为自动化控制的, 以前的腐蚀箱往往对温度控制不好误差较大。而改进后的腐蚀箱采用自动化控制,温度、 水位的精确度较高大大的提高了试液的利用率。 1.11.1 设备的作用设备的作用 化学实验室腐蚀箱可以保证 pcb 板制作中温度的恒温,水位都可以处在一个恒定的 境,保证化学物质的稳定,全部的操作都是采用智能化控制,大大的提高精确度,保证 了 pcb 板制作的正常的进行。 1.21.2 设备的简单运作设备的简单运作 温度:当温度高于预设温度时系统将自动降温,低于预设温度时系统将自动加温。 水位:当水位高于最高水位时系统将自动排水,低于最低水位时系统将自动加水。 1.31.3 设计目标设计目标 在 pcb 板制作中,能够以最简单的操作实现受热的试剂受热均匀,并且能够自动调 节水温保持受热试剂在需要的温度范围内。 2011 届毕业项目届毕业项目 第 2 页 2 2 硬件设计硬件设计 整个程序的组成大体有 stc89c52、lcd24064、adc0832、44 非编码键盘、 ds18b20、x5045、水泵等组成。 2.12.1 框图框图 图图 1 1 pcbpcb 恒温腐蚀箱的设计与制作控制系统框图恒温腐蚀箱的设计与制作控制系统框图 2.22.2 框图的主要组成部分简介框图的主要组成部分简介 (1)lcd24064功能简介: 驱动12864320240点阵的液晶显示模块,单5v 供电,led背光电源外接。 国标gb_2312 二级字库,标准ascii 码,编码调用。 可显示1616/3232 点阵字体或1212/2424 点阵字体。 两种接口形式: uart串行接口(默认ttl 电平)和普通io 三线通信(ttl 电平)。 (2)adc0832 2011 届毕业项目届毕业项目 第 3 页 8 位分辨率,双通道 a/d 转换,输入输出电平与 ttl/cmos 相兼容,5v 电源供电时输入 电压在 05v 之间工作频率为 250khz,转换时间为 32ms。 (3)ds18b20 测温范围 55125,固有测温分辨率 0.5。 (4)x5045 本器件将四种功能和与一体:上电复位、看门狗定时、降压管理以及具有块保护功 能的穿行 eeprom。他有助于简化系统的设计,减少印制板的占用面积,提高可靠性。 2.32.3 原理图原理图 图图 2 2 pcbpcb 恒温腐蚀箱的设计与制作恒温腐蚀箱的设计与制作 2011 届毕业项目届毕业项目 第 4 页 2.42.4 原理图各部分详细概述原理图各部分详细概述 (1) ds18b20 特征:独特的单独接口仅需要一个端口引脚进行通讯,简单的多点分布应用,无 需外部器件,可通过数据线进行供电,零待机功耗,测温范围-55-125,以 0.5递 增,温度以 9 位数字量读出,温度数字量转换时间 200ms,用户可定义是非易失型报警设 置。 操作流程:复位、存在脉冲、控制器发送 rom 指令、控制器发送存储器操作指令、 执行或数据额读写。 芯片 pom 指令表: read rom(读 rom)33h match rom(指定匹配芯片)55h search rom(搜索芯片)f0h skip rom(跳跃 rom 指令)cch alarm search(报警芯片搜索)ech ds18b20 芯片存储器操作指令表: write scratchpad(向 ram 写数据)4eh read scratchpad(从 ram 中读数据)beh copy scratchpad (将 ram 数据复制到 eeprom 中)48h convert t(温度转换)44h recall eeprom(将 eeprom 中的报警值复制到 ram)b8h read power supply(工作方式切换)b4h (2) lcd24064 slcm 指令: 控制命 令 参数功 能 说 明 ? 无 查询模块的状态,模块准备好就回传字符“ok“到主机(uart),模 块收到 此命令后,在显示屏最后一行显示波特率等提示 asd 英文串 在当前位置起显示一串英文字符,最多显示到行尾(地址不改变) bls 无开或关背光 2011 届毕业项目届毕业项目 第 5 页 brta 重新设置波特率(a=0-8),设置新的波特率后,主机也要重新设 置 a=0 2400 a=1 4800 a=2 7200 a=3 9600 a=4 14400 a=5 19200 a=6 38400 a=7 57600 a=8 115200 ;uart/usb 接口有效 ;如果 a8 则不做处理 chrabc 显示内码为ab的字符,地址自动加1.c=0显示普通字,c=1显示大 字(对 于英文字母 a=0) abcd 画圆.原点(a,b),半径 c.d=0 消圆, d=1 画圆 cir abcde 画圆.原点(a,b,c),半径 d.e=0 消圆, e=1 画圆(320240) cln abcd abcdef 清除从点(ab,c)到点(de,f)的一直线(320240) clr 无清屏.清屏后,显示坐标也回复到起点(左上角) clwablh 清除以(a,b)为起点的 l 个字符宽,h 个字符高的窗口内容 cplablh 反显以(a,b)为起点的 l 个字符宽,h 个字符高的窗口内容 databc 在坐标(a,b)处显示 c(主要用来输入图形或用户自定义文字数 据) abcde 在点坐标(b,c)处显示内码为 de 的文字,a=0 显示普通字,a=1 显示大字 fhz abcdef 在点坐标(bc,d)处显示内码为 ef 的文字,a=0 显示普通字,a=1 显示大字 abc 在(a,b)处显示一个点 c,c=0 则为清除点,c=1 则是画点 dot abcd 在(ab,c)处显示一个点 d,d=0 则为清除点,d=1 则是画点 abcd 从点(a,b)到点(c,d)画一直线 lin abcdef 从点(ab,c)到点(de,f) 画一直线(320240) locabc 设置(a,b)为显示坐标,c=1 则显示光标块,在进行str,chr 命 令前需先发 送此命令 res 无液晶复位。复位不影响显示内容! sada 选择显示区,a=07共8个显示区,第8个显示区为文本区,可显示 2011 届毕业项目届毕业项目 第 6 页 4016 个5*8点阵的英文字符。默认0区,每个显示区240128个点 (此指令仅 t6963 控制的 240128 有效) str a 串 显示字符串,a=0 显示正常字,a=1 显示大字;串长度上 限 关制 热 开制 冷 测温下 限 开制热 关制冷 关制热 关制冷 测量当前水位 当前水位 上限 关进水 开排水 当前水位 #include /包含_nop_()temp=_crol_(?,?)函数定义的头文件 #include “lcd24064cuan.h“ /图片显示数据 #include “bmp.h“ /图片显示数据 #include “ds18b20.h“ /温度传感器 #include “key_bianma4_4_hanglie.h“ /4*4 非编键盘 #include “x5045.h“ / 存储器及狗 #include “adc0832.h“ /a_d 芯片 #define uchar unsigned char #define uint unsigned int unsigned char code str1=“温度检测-ds18b20“; /说明显示的是温度 unsigned char code str3=“上限:“; /说明显示的是温度上限 unsigned char code str4=“下限:“; /说明显示的是温度上限 unsigned char code str5=“上限:“; /说明显示的是温度上限 unsigned char code str6=“下限:“; /说明显示的是温度上限 unsigned char code str7=“当前水位:“; /说明显示的是当前水位 unsigned char code str8=“水位上限“; /说明显示的是水位上限 unsigned char code str9=“水位下限“; /说明显示的是水位下限 /unsigned char code str10=“ “; /预留 调试后未用空字符串 /unsigned char code str11=“ “; /预留 调试后未用空字符串 unsigned char code strn1=“指导教师:孙绍晟“; /说明 unsigned char code strn2=“设计人员:电子 082-金 龙“; /说明 unsigned char code strn3=“电子 091-吴亚云“; /说明 unsigned char code error=“请检查 ds18b20!“; /说明没有检测到 ds18b20 unsigned char code error2=“温度设置错误!请重新设定“; /说明温度 设置错误 2011 届毕业项目届毕业项目 第 16 页 unsigned char code error3=“水位设置错误!请重新设定“; /说明水位 设置错误 unsigned char code error4=“水位设置错误!请重新设定“; /说明水位 设置错误 unsigned char code tempa=“当前温度:“; /说明显示的 是温度 /* 以下是继电器操作部分 1 为断开,0 为吸合 */ sbit jdzr=p04; sbit jdfan=p05; sbit jdzn=p06; sbit jdm_m=p07; sbit jdm_s=p20; sbit jdj_d=p21; sbit jdp_s=p22; sbit set_led=p23; /设置灯 /unsigned char setid; /定义 set 键按动次数 unsigned char lightid; /定义背灯开关键按动次数 /用以形成温度曲线 unsigned char t0_0; /x 轴计时(20 为一秒) unsigned char t0_1; /x 轴计时单位/每秒加 1 unsigned char t0_2; /x 轴画点坐标 unsigned char s_h; /水位上限 unsigned char s_l; /水位下限 unsigned char ad_s; /储存 a/d 转换后的值,即水位值*2 unsigned char id2; /当削定义状态 void cushi2() /以下为第二界面初始画面 2011 届毕业项目届毕业项目 第 17 页 lcd_clr(100); /完全清屏延时 100ms lcd_setxy(0,0,0);/定位字符串起始地址/第 1 列,第 1 行,0 光标关 lcd_str1(0,str8,0); /显示“水位上限“ 第 1 行 lcd_setxy(15,0,0);/定位字符串起始地址/第 9 列,第 1 行,0 光标关 lcd_str1(0,str9,0); /显示“水位下限“ 第 1 行 tl lcd_setxy(0,1,0);/定位字符串起始地址/第一列,第 2 行,0 光标关 lcd_str1(0,str10,0); /显示“当前水位:“ 第二行 lcd_setxy(4,2,0);/定位字符串起始地址/第 1 列,第 3 行,0 光标关 lcd_str1(0,str11,0); /显示“加热是否起用调制?“ 第 3 行 if (id2=0) lcd_setxy(9,3,0);/定位字符串起始地址 /第 9 列,第 3 行,0 光标关 lcd_str(0,“关“); /显示“开“ 第 4 行 else lcd_setxy(9,3,0);/定位字符串起始地址 /第 9 列,第 3 行,0 光标关 lcd_str(0,“开“); /显示“开“ 第 4 行 display_ad(8,0,s_h); /第 9 列,第 1 行,显示水位上限值 display_ad(23,0,s_l); /第 24 列,第 1 行,显示水位下限值 display_ad(10,1,ad_s); /第 10 列,第四行,显示水位 ad_s 后值 /* 串口通讯 */ void send (unsigned char dat) sbuf=dat;/待发数据进缓冲器 while(ti=0) ;/没发完,等 ti=0; /清 ti 为 0 2011 届毕业项目届毕业项目 第 18 页 (2)主函数 void main() unsigned char templ; /储存暂存器的温度低位 unsigned char temph; /储存暂存器的温度高位 signed int t_h; /温度上限、如使用内部存储使用 unsigned char th 储存暂 存器的上限 signed int t_l; /温度下限、如使用内部存储使用 unsigned char th 储存暂存 器的下限 unsigned char m_h; /水位上限 unsigned char m_l; /水位下限 signed int temp_c; /测试温度 unsigned char ad_m; /储存 a/d 转换后的值,即水位值2 signed int num_key_temp2; /键盘输入值 for ds18b20 unsigned char num_key_ad2; /键盘输入值 for ad /以下是 x5045 地址分配 uchar th_addr,tl_addr,mh_addr,ml_addr,sh_addr,sl_addr,id2_addr; /x5045 地址分配 /以下是继电器及 led 初始设置 jdzr=1;/关闭制热; jdfan=1; jdzn=1;/关闭制冷,预留未用 jdm_m=1;/关进水阀 jdm_s=1;/关排水泵 jdj_d=1; /关 jdp_s=1; /预留,不处理 set_led=1;/初始关设置灯 sound=1; /关无源蜂鸣器 setid=0; /定义 set 键按动次数 2011 届毕业项目届毕业项目 第 19 页 lightid=0; /lcd 背灯 id=0; /默认加热关调制 escid=0; /取消键关 /以下是 x5045 地址分配 th_addr=0x10;/+1 tl_addr=0x20;/+1 mh_addr=0x30; ml_addr=0x40; sh_addr=0x50; sl_addr=0x60; id2_addr=0x70; /温度曲线部分赋初值 t0_0=0;/赋初值 0 t0_1=0;/赋初值 0 t0_2=0;/赋初值 0 /完成 lcd 检查及初始化 while(!mclk); /mclk=0 wait. delaynms(20); /wait. lcd_clr(50); /清屏后延时 100ms lcd_bote(); / /查状态 delayns(2); lcd_clr(20); /清屏后延时 100ms lcd_setxy(0,1,0);/定位字符串起始地址/第一列,第一行,1 光标开 0 关光 标 lcd_str1(0,str1,0);/温度检测说明 0 小字节 1 大字,串,字符间延时 lcd_setxy(0,3,0);/定位字符串起始地址 /第一列,第一行,1 光标开 lcd_str1(0,str2,0);/水位检测说明 delayns(4) ; lcd_clr(50); /清屏后延时 100ms lcd_bmp(0,0,240,64,school); /学院图标 2011 届毕业项目届毕业项目 第 20 页 delayns(4); lcd_clr(120); /清屏后延时 100ms lcd_setxy(0,0,0); /(x,y) 1 开光标/关光标 lcd_str1(0,strn1,50); /测试字符 lcd_setxy(0,2,0); /(x,y) 1 开光标/关光标 lcd_str1(0,strn2,50); /测试字符 lcd_setxy(10,3,0); /(x,y) 1 开光标/关光标 lcd_str1(0,strn3,50); /测试字符 delayns(4); lcd_clr(100); /清屏后延时 100ms /开中断,启动键盘 ea=1; /开总中断 et0=1; /定时器 t0 中断允许 tmod=0x21; /使用定时器 t0 的模式 2(16 位) ,t1 工作模式 2 th0=(65536-50000)/256; /定时器 t0 的高 8 位赋初值 tl0=(65536-50000)%256; /定时器 t0 的高 8 位赋初值 th1=0xfd; /赋初值 tl1=0xfd; pcon=0x00; /波特 9600 tr0=1; /启动定时器 t0 tr1=1; /启动定时器 t1 scon=0x40; /串口工作方式 1 if(init_ds18b20()=1) /检测 ds1820 lcd_setxy(0,1,0); /定位字符串起始地址 lcd_str1(1,error,0); /显示“请检查 ds18b20!“ while(init_ds18b20()=1) /报警死循环各 ssr 初始化全部执行关断等待处理 sound2(5); /以下为 x5045 部分预设 2011 届毕业项目届毕业项目 第 21 页 writesr_x5045(0x02); /写状态寄存器(设定看门狗溢出时间为 1.4s,写不保 护) delaynms(10); /x5045 的写入周期约为 10ms /从 x5045 中读预设值 t_h=readset_thl(th_addr); /将数据读出送 th th 空间 010,011 delaynms(10); t_l=readset_thl(tl_addr); /将数据读出送 tl tl 空间 020,021 delaynms(10); /t_h=0x0230;/测试用高温 35最后将上面打开,此两条去掉 /t_l=0x0190;/测试用高温 25 m_h=readset_x5045(mh_addr); /将数据读出送 mhtl 空间 030 delaynms(10); m_l=readset_x5045(ml_addr); /将数据读出送 mltl 空间 040 delaynms(10); s_h=readset_x5045(sh_addr); /将数据读出送 mhsh 空间 050 delaynms(10); s_l=readset_x5045(sl_addr); /将数据读出送 mlsl 空间 060 delaynms(10); id2=readset_x5045(id2_addr); /将数据读出送 ml sl 空间 060 delaynms(10); temp_c=0x0000; /赋初值 while(1) /大循环,不断检测并显示 lcd_setxy(0,1,0); /定位字符串起始地址 /第一列,第 2 行,0 光标关 lcd_str1(0,tempa,0); /显示“当前温度“ 第二行 lcd_setxy(0,3,0); /定位字符串起始地址 /第 1 列,第 4 行,0 光标关 lcd_str1(0,str7,0); /显示“当前水位“ 第 4 行 lcd_setxy(0,0,0); /定位字符串起始地址 /第 1 列,第 1 行,0 光标关 lcd_str1(0,str3,0); /显示“温度上限“ 第 1 行 th lcd_setxy(12,0,0); /定位字符串起始地址 /第 9 列,第 1 行,0 光标关 2011 届毕业项目届毕业项目 第 22 页 lcd_str1(0,str4,0); /显示“温度下限“ 第 1 行 tl lcd_setxy(0,2,0); /定位字符串起始地址 /第 1 列,第 3 行,0 光标关 lcd_str1(0,str5,0); /显示“水位上限“ 第 3 行 lcd_setxy(12,2,0); /定位字符串起始地址 /第 9 列,第 3 行,0 光标关 lcd_str1(0,str6,0); /显示“水位下限“ 第 3 行 lcd_lin(192,15,239,15); /温度 x 轴 / delaynms(20); lcd_dot(238,14,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(238,16,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(237,13,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(237,17,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_lin(235,19,239,19); /画点 t delaynms(10); lcd_lin(237,19,237,26); /t delaynms(10); lcd_lin(195,0,195,30); /温度 y 轴 delaynms(20); lcd_dot(194,1,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(196,1,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(193,2,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(197,2,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_lin(192,47,239,47); /水位 x 轴 delaynms(20); lcd_dot(238,46,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(238,48,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(237,45,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(237,49,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_lin(235,51,239,51); /t delaynms(10); lcd_lin(237,51,237,58); /t 2011 届毕业项目届毕业项目 第 23 页 delaynms(10); lcd_lin(195,33,195,63); /水位 y 轴 delaynms(20); lcd_dot(194,34,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(196,34,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(193,35,1); /(a,b)坐标,c=1 画点,以 c=0 清点 lcd_dot(197,35,1); /(a,b)坐标,c=1 画点,以 c=0 清点 readyreadtemp(); /读温度准备 templ=readonechar(); /从 ds18b20 中先读的是温度值低位 temph=readonechar(); /从 ds18b20 中接着读的是温度值高位 / th=readonechar(); /从 ds18b20 中接着读的是上限位,用外部存 贮器时不需要读 / tl=readonechar(); /从 ds18b20 中接着读的是下限位,用外部存 贮器时不需要读 temp_c=temph*256; temp_c=temp_c+templ; display_temp(10,1,temp_c); /第 10 列,第 2 行,显示当前测量温度 含 if(temp_ct_h)/测温上限 jdzr=1;jdzn=0;/搅动保证均匀 else if(temp_cm_h)/测水位上限 jdm_s=0;jdm_m=1;/搅动保证均匀 else if(ad_m=2) /每 2 秒钟画一点 t0_1=0; t0_2+; ; if(t0_2=35) /连画 35 个点后删上一次曲线 最大取 39 t0_2=0; display_temp_cln(); /清除 temp 曲线及水位曲线 /delaynms(10); /延时 10ms /删除完画新点 display_temp_dot(t_h,t_l,temp_c,t0_2) ; display_ad_m_dot(m_h,m_l,ad_m,t0_2); /以下是水位控制 ad_s= a_d(1,1); /使用 ch1 进行 a/d 转换,水位值 /以下为按键识别与操作 2011 届毕业项目届毕业项目 第 25 页 while (lightid0) lcd_light (); lightid=0; switch(setid) case 0: _nop_(); break; case 1: lcd_cpl(0,0,4,1); /反显 th:1 行 1 列 3 个字符宽 1 个字符 高 num_key_temp=t_h; dian=0; /默认先关小数点 while(setid=1) /按下确认键,可 set 键退出 num_key_temp2=keyfornum_temp( ); /完成数据入 display_temp(5,0,num_key_temp2); /第 4 列,第 1 行,显示温度上限值 while (lightid0) lcd_light (); lightid=0; if (escid=1) escid=0; lcd_cpl(0,0,4,1); /再次反显 th: 应能去反显 1 行 1 列 3 个字符宽 1 个字符高 setid=0; goto loop1; 2011 届毕业项目届毕业项目 第 26 页 /case1 while /写入 x5045 t_h=num_key_temp2; if(t_h0x07d0|t_h0) 2011 届毕业项目届毕业项目 第 27 页 lcd_light (); lightid=0; if (escid=1) escid=0; lcd_cpl(12,0,4,1);/再次反显 th: ,应能去反显 1 行 12 列 43 个字符宽 1 个字符高 setid=0; goto loop1; /case2 while /写入 x5045 t_l=num_key_temp2; if(t_l0) lcd_light (); lightid=0; if (escid=1) escid=0; lcd_cpl(0,2,4,1);/再次反显 th:应能去反显 3 行 1 列 4 个字符宽 1 个字符高 setid=0; goto loop1; /case 3 while /写入 x5045 m_h=num_key_ad2; if(m_h0xc8|m_h0) lcd_light (); lightid=0; if (escid=1) escid=0; lcd_cpl(12,2,4,1); /再次反显 th:应能去反显 3 行 12 列 43 个字符宽 1 个字符高 setid=0; 2011 届毕业项目届毕业项目 第 30 页 goto loop1; /case 4 while /写入 x5045 m_l=num_key_ad2; if(m_l0) lcd_light (); lightid=0; if (escid=1) escid=0; lcd_cpl(0,0,8,1);/再次反显 th: ,应能去反显? 1 行 1 列 8 个字符宽 1 个字符高 setid=0; lcd_clr(100); /完全清屏延时 100ms goto loop1; /case 5 while /写入 x5045 s_h=num_key_ad2; if(s_h0xc8|s_h0) lcd_light (); lightid=0; if (escid=1) escid=0; lcd_cpl(15,0,8,1);/再次反显 sl:应能去反显 1 行 1 列 3 个字符宽 1 个字符高 setid=0; lcd_clr(100); /完全清屏延时 100ms goto loop1; /case 6 while /写入 x5045 2011 届毕业项目届毕业项目 第 33 页 s_l=num_key_ad2; if(s_l0) lcd_light (); lightid=0; if (escid=1) escid=0; lcd_cpl(4,2,22,1); /再次反显 ,应能去反显 1 行 1 列 3 个字符宽 1 个字符高 setid=0; lcd_clr(100);/完全清屏延时 100ms goto loop1; /case 7 while /写入 x5045 writeset_x5045(id2,id2_addr); /将 sh 值写到 sh_addr delaynms(10); /延时 10ms lcd_cpl(4,2,22,1); /再次反显“是否: 1 列 3 行 22 个字符宽 1 个字符高 lcd_clr(100); /完全清屏延时 100ms break; /switch loop1: _nop_(); send(temp_c); /send(t_h); 2011 届毕业项目届毕业项目 第 35 页 /总 while /main /定时中断 void time0_interserve(void) interrupt 1 using 1 /定时器 t0 的中断编号为 1,使用第 一组寄存器 unsigned char i; unsigned char j; tr0=0; /关闭定时器 t0 t0_0+; /x 轴计时 if(t0_0=20) t0_0=0; t0_1+; /每秒钟加 1 p1=0xef; /第 1 列置为低电平“0” (p1.4 输出低电平“0” ) if(p1i7) setid=0; else if(setid0 _nop_(); /等待一个机器周期 dq = 1; /将数据线“人为“拉高,为单片机检测 ds18b20 的输出电平作准备 for(time=0;time=1; /将 dat 中的各二进制位数据右移 1 位 for(time=0;time=0) bai=x/16/100; /取百位 shi=(x/16%100)/10; /取十位 ge=x/16%10; /取个位 xiao=x%16*10/16; /保留一位 writeaddress(0x03); /写显示地址,将在第 1 行第 4 列开始显示 writedata(digitbai); /将百位数字的字符常量写入 lcd writedata(digitshi); /将十位数字的字符常量写入 lcd writedata(digitge); /将个位数字的字符常量写入 lcd 2011 届毕业项目届毕业项目 第 55 页 writedata(digit0x0b); /将个位数字的字符常量写入 lcd writedata(digitxiao); /将小数部分的第一位数字字符常量写入 lcd else x=x+2; shi=(x/16%100)/10; /取十位 ge=x/16%10; /取个位 xiao=x%16*10/16;/保留一位 writeaddress(0x03); /写显示地址,将在第 1 行第 4 列开始显示 writedata(digit0x0a); /将百位数字的字符常量写入 lcd writedata(digitshi); /将十位数字的字符常量写入 lcd writedata(digitge); /将个位数字的字符常量写入 lcd writedata(digit0x0b); /将个位数字的字符常量写入 lcd writedata(digitxiao); /将小数部分的第一位数字字符常量写入 lcd delaynms(50); /延时 1ms 给硬件一点反应时间 /* 函数功能:显示下限温度值 入口参数:x */ void display_tl(signed int x) unsigned char bai,shi,ge,xiao; /bai,shi,ge,xiao 分别储存温度的百位、十位和个位 if(x=0) bai=x/16/100; /取百位 shi=(x/16%100)/10; /取十位 ge=x/16%10; /取个位 2011 届毕业项目届毕业项目 第 56 页 xiao=x%16*10/16;/保留一位 writeaddress(0x0d); /写显示地址,将在第 1 行第 14 列开始显示 writedata(digitbai); /将百位数字的字符常量写入 lcd writedata(digitshi); /将十位数字的字符常量写入 lcd writedata(digitge); /将个位数字的字符常量写入 lcd writedata(digit0x0b); /将个位数字的字符常量写入 lcd writedata(digitxiao); /将小数部分的第一位数字字符常量写入 lcd else x=x+2; shi=(x/16%100)/10; /取十位 ge=x/16%10; /取个位 xiao=x%16*10/16; /保留一位 writeaddress(0x0d); /写显示地址,将在第 1 行第 14 列开始显示 writedata(digit0x0a); /将百位数字的字符常量写入 lcd writedata(digitshi); /将十位数字的字符常量写入 lcd writedata(digitge); /将个位数字的字符常量写入 lcd writedata(digit0x0b); /将个位数字的字符常量写入 lcd writedata(digitxiao); /将小数部分的第一位数字字符常量写入 lcd delaynms(50); /延时 1ms 给硬件一点反应时间 /* 函数功能:做好读温度的准备 */ void readyreadtemp(void) init_ds18b20(); /将 ds18b20 初始化 writeonechar(0xcc); / 跳过读序号列号的操作 2011 届毕业项目届毕业项目 第 57 页 writeonechar(0x44); / 启动温度转换 for(time=0;time100;time+) ; /温度转换需要一点时间 init_ds18b20(); /将 ds18b20 初始化 writeonechar(0xcc); /跳过读序号列号的操作 writeonechar(0xbe); /读取温度寄存器,前两个分别是温度的低位和高位 /第三位是上限位,第四位是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学信息培训总
- 前端技术模拟面试题及答案
- 患者搬运约束技术培训试题及答案
- 辅警法律知识培训提纲课件
- 农业银行2025兴安盟秋招笔试性格测试题专练及答案
- 邮储银行2025鄂尔多斯市秋招笔试创新题型专练及答案
- 农业银行2025凉山彝族自治州秋招笔试创新题型专练及答案
- 农业银行2025鹰潭市小语种岗笔试题及答案
- 2025年3D打印的食品制造工艺
- 2025行业数字化转型成功案例分析
- 2025年湖南韶山红旅教育培训集团有限公司招聘笔试参考题库附带答案详解
- 大件运输安全生产管理制度文本
- 社区用房使用协议书
- 麻醉术前评估制度
- 2025-2030中国茶酒行业市场发展现状及发展趋势与投资研究报告
- 北美128个护理诊断
- 2025高考英语全国II卷试题分析及备考策略指导课件
- 博士组合物80问
- 调课申请书范文
- 伦理学课件-应用伦理学下
- 公路工程监理规划
评论
0/150
提交评论