




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. temp_zh equ 24h ;实测温度值存放单元 templ equ 25h temph equ 26h temp_th equ 27h ;高温报警值存放单元 temp_tl equ 28h ;低温报警值存放单元 temphc equ 29h ;正、负温度值标记 templc equ 2ah tempfc equ 2bh k1 equ p1.4 ;查询按键 k2 equ p1.5 ;设置/调整键 k3 equ p1.6 ;调整键 k4 equ p1.7 ;确定键 beep equ p3.7 ;蜂鸣器 relay equ p1.3 ;指示灯 lcd_x equ 2fh ;lcd 字符显示
2、位置 lcd_rs equ p2.0 ;lcd 寄存器选择信号 lcd_rw equ p2.1 ;lcd 读写信号 lcd_en equ p2.2 ;lcd 允许信号 flag1 equ 20h.0 ;ds18b20是否存在标志 key_ud equ 20h.1 ;设定按键的增、减标志 dq equ p3.3 ;ds18b20数据信号精品. org 0000h ljmp main org 0030hmain: mov sp,#60h mov a,#00h mov r0,#20h ;将20h2fh 单元清零 mov r1,#10hclear: mov r0,a inc r0 djnz r1,cl
3、ear lcall set_lcd lcall re_18b20 start: lcall rst ;调用18b20复位子程序 jnb flag1,start1 ;ds1820不存在 lcall menu_ok;ds1820存在,调用显示正确信息子程序 movtemp_th,#055h;设置th初值85度 movtemp_tl,#019h;设置tl初值25度 lcall re_18b20a;调用暂存器操作子程序 lcall write_e2 ;写入ds18b20 lcall temp_bj ;显示温度标记 jmp start2精品.start1: lcall menu_error;调用显示出错
4、信息子程序 lcall temp_bj ;显示温度标记 sjmp $start2: lcall rst;调用ds18b20复位子程序 jnb flag1,start1 ;ds18b20不存在 mov a,#0cch ;跳过rom匹配命令 lcall write mov a,#44h ;温度转换命令 lcall write lcall rst mov a,#0cch ;跳过rom匹配 lcall write mov a,#0beh ;读温度命令 lcall write lcall read;调用ds18b20数据读取操作子程序 lcall convtemp;调用温度数据bcd 码处理子程序 lc
5、all dispbcd;调用温度数据显示子程序 lcall conv;调用lcd显示处理子程序 lcall temp_comp;调用实测温度值与设定温度值比较子程序精品. lcall proc_key ;调用键扫描子程序 sjmp start2;循环;* 键扫描子程序 *proc_key:jb k1,proc_k1 lcall beep_bl jnb k1,$ mov dptr,#m_alax1 mov a,#1 lcall lcd_print lcall look_alarm jb k3,$ lcall beep_bl jmp proc_k2proc_k1: jb k2,proc_end l
6、call beep_bl jnb k2,$ mov dptr,#rst_a1 mov a,#1 lcall lcd_print lcall set_alarm精品. lcall re_18b20 ;将设定的th,tl值写入ds18b20 lcall write_e2proc_k2: lcall menu_ok lcall temp_bjproc_end:ret;* 设定温度报警值 th、tl *set_alarm:lcall look_alarmas0: jb k1,as00 lcall beep_bl jnb k1,$ cpl 20h.1 ;up/down 标记as00: jb 20h.1,
7、asz01 ;20h.1=1,增加 jmp asj01 ;20h.1=0,减小asz01: jb k2,asz02 ;th值调整(增加) lcall beep_bl inc temp_th mov a,temp_th cjne a,#120,asz011 mov temp_th,#0精品.asz011: lcall look_alarm mov r5,#10 lcall delay jmp asz01asz02: jb k3,asz03 ;tl值调整(增加) lcall beep_bl inc temp_tl mov a,temp_tl cjne a,#99,asz021 mov temp_t
8、l,#00hasz021: lcall look_alarm mov r5,#10 lcall delay jmp asz02asz03: jb k4,as0 ;确定调整 lcall beep_bl jnb k4,$ retasj01: jb k2,asj02 ;th值调整(减少) lcall beep_bl dec temp_th mov a,temp_th精品. cjne a,#0ffh,asj011 jmp asj022asj011: lcall look_alarm mov r5,#10 lcall delay jmp as0asj02: jb k3,asj03 ;tl值调整(减少)
9、lcall beep_bl dec temp_tl mov a,temp_tl cjne a,#0ffh,asj021 jmp asj022asj021: lcall look_alarm ; mov r5,#10 lcall delay jmp as0asj022: cpl 20h.1 jmp asz01asj03: jmp asz03 retrst_a1: db set alert code ,0精品.;* 实测温度值与设定温度值比较子程序 *temp_comp:mov a,temp_th subb a,temp_zh ;减数被减数,则 jc chuli1 ;借位标志位c=1,转 mova
10、,tempfc cjnea,#0bh,comp sjmpchuli2comp: mov a,temp_zh subb a,temp_tl ;减数被减数,则 jc chuli2 ;借位标志位c=1,转 mov dptr,#bj5 lcall temp_bj3 clr relay ;点亮指示灯 ret chuli1: mov dptr,#bj3 lcall temp_bj3 setb relay ;熄灭指示灯 lcall beep_bl;蜂鸣器响 ret chuli2: mov dptr,#bj4 lcall temp_bj3精品. setb relay ;熄灭指示灯 lcall beep_bl;
11、蜂鸣器响 ret;-temp_bj3: mov a,#0ceh lcall wcom mov r1,#0 mov r0,#2bbjj3: mov a,r1 movc a,a+dptr lcall wdata inc r1 djnz r0,bbjj3 retbj3: db hbj4: db lbj5: db !; ;* 显示温度标记子程序 *temp_bj: mov a,#0cbh lcall wcom精品. mov dptr,#bj1 ;指针指到显示消息 mov r1,#0 mov r0,#2bbjj1: mov a,r1 movc a,a+dptr lcall wdata inc r1 dj
12、nz r0,bbjj1 retbj1: db 00h,c;* 显示正确信息子程序 *menu_ok: mov dptr,#m_ok1 ;指针指到显示消息 mov a,#1 ;显示在第一行 lcall lcd_print mov dptr,#m_ok2 ;指针指到显示消息 mov a,#2 ;显示在第一行 lcall lcd_print retm_ok1: db ds18b20 ok ,0m_ok2: db temp: ,0精品.;* 显示出错信息子程序 *menu_error:mov dptr,#m_error1 ;指针指到显示消息 mov a,#1 ;显示在第一行 lcall lcd_pri
13、nt mov dptr,#m_error2 ;指针指到显示消息1 mov a,#2 ;显示在第一行 lcall lcd_print retm_error1: db ds18b20 error ,0m_error2: db temp: - ,0;*ds18b20复位子程序 *rst: setb dq nop clr dq mov r0,#6bh ;主机发出延时复位低脉冲 mov r1,#04htsr1: djnz r0,$ mov r0,#6bh精品. djnz r1,tsr1 setb dq ;拉高数据线 nop nop nop mov r0,#32htsr2: jnb dq,tsr3 ;等待
14、ds18b20回应 djnz r0,tsr2 jmp tsr4 ; 延时tsr3: setb flag1 ; 置1标志位,表示ds1820存在 jmp tsr5tsr4: clr flag1 ; 清0标志位,表示ds1820不存在 jmp tsr7tsr5: mov r0,#06bhtsr6: djnz r0,$ ; 时序要求延时一段时间tsr7: setb dq ret;* ds18b20暂存器操作子程序 *re_18b20:jb flag1,re_18b20a ret精品.re_18b20a:lcall rst mov a,#0cch ;跳过rom匹配 lcall writewr_scra
15、pd: mov a,#4eh ;写暂器 lcall write mov a,temp_th ;th(报警上限) lcall write mov a,temp_tl ;tl(报警下限) lcall write mov a,#7fh ;12位精度 lcall write ret;* 复制暂存器子程序 *write_e2:lcall rst mov a,#0cch ;跳过rom匹配 lcall write mov a,#48h ;把暂存器里的温度报警值拷贝到eerom精品. lcall write ret;* 重读eerom子程序 *read_e2:lcall rst mov a,#0cch ;跳过
16、rom匹配 lcall write mov a,#0b8h ;把eerom里的温度报警值拷贝回暂存器 lcall write ret;* 将自定义字符写入lcd的cgram中 *store_data: mov a,#40h lcall wcom mov r2,#08h mov dptr,#d_data mov r3,#00hs_data: mov a,r3精品. movc a,a+dptr lcall wdata ;写入数据 inc r3 djnz r2,s_data retd_data: db 0ch,12h,12h,0ch,00h,00h,00h,00h;* ds18b20数据写入操作子程
17、序 *write: mov r2,#8 ;一共8位数据 clr cwr1: clr dq ;开始写入ds18b20总线要处于复位(低)状态 mov r3,#07 djnz r3,$ ;总线复位保持16微妙以上 rrc a ;把一个字节data 分成8个bit环移给c mov dq,c ;写入一位 mov r3,#3ch djnz r3,$ ;等待100微妙 setb dq ;重新释放总线 nop djnz r2,wr1 ;写入下一位精品. setb dq ret;* ds18b20数据读取操作子程序 *read: mov r4,#4 ;将温度低位、高位、th、tl从ds18b20中读出 mov
18、 r1,#templ ;存入25h、26h、27h、28h单元re00: mov r2,#8re01: clr cy setb dq nop nop clr dq ;读前总线保持为低 nop nop nop setb dq ;开始读总线释放 mov r3,#09 ;延时18微妙 djnz r3,$ mov c,dq ;从ds18b20总线读得一位精品. mov r3,#3ch djnz r3,$ ;等待100微妙 rrc a ;把读得的位值环移给a djnz r2,re01 ;读下一位 mov r1,a inc r1 djnz r4,re00 ret;* 温度值 bcd 码处理子程序 *con
19、vtemp: mov a,temph ;判温度是否零下 anl a,#08h jz tempc1 ;温度零上转 clr c mov a,templ ;二进制数求补(双字节) cpl a ;取反加1 add a,#01h mov templ,a mov a,temph cpl a addc a,#00h精品. mov temph,a mov temphc,#0bh;负温度标志 mov tempfc,#0bh sjmp tempc11tempc1: mov temphc,#0ah ;正温度标志 mov tempfc,#0ahtempc11: mov a,temphc swap a mov temp
20、hc,a mov a,templ anl a,#0fh ;乘0.0625 mov dptr,#tempdottab movc a,a+dptr mov templc,a ;templc low=小数部分 bcd mov a,templ ;整数部分 anl a,#0f0h ;取出高四位 swap a mov templ,a mov a,temph ;取出低四位 anl a,#0fh swap a精品. orl a,templ ;重新组合 mov temp_zh,a lcall hex2bcd1 mov templ,a anl a,#0f0h swap a orl a,temphc ;temphc
21、 low = 十位数 bcd mov temphc,a mov a,templ anl a,#0fh swap a ;templc hi = 个位数 bcd orl a,templc mov templc,a mov a,r4 jz tempc12 anl a,#0fh swap a mov r4,a mov a,temphc ;temphc hi = 百位数 bcd精品. anl a,#0fh orl a,r4 mov temphc,atempc12: ret;* 二-十进制转换子程序 *hex2bcd1: mov b,#064h div ab mov r4,a mov a,#0ah xch
22、 a,b div ab swap a orl a,b rettempdottab: db 00h,00h,01h,01h,02h,03h,03h,04h ; 小数部分码表 db 05h,05h,06h,06h,07h,08h,08h,09h;* 查询温度报警值子程序 *精品.look_alarm: mov dptr,#m_alax2 ;指针指到显示信息区 mov a,#2 ;显示在第二行 lcall lcd_print mov a,#0c6h lcall temp_bj1 mov a,temp_th ;加载th数据 mov lcd_x,#3 ;设置显示位置 lcall show_dig2h ;
23、显示数据 mov a,#0ceh lcall temp_bj1 mov a,temp_tl ;加载tl数据 mov lcd_x,#12 ;设置显示位置 lcall show_dig2l ;显示数据 retm_alax1: db look alert code,0m_alax2: db th: tl: ,0temp_bj1: lcall wcom mov dptr,#bj2 ;指针指到显示信息区 mov r1,#0 mov r0,#2 bbjj2: mov a,r1精品. movc a,a+dptr lcall wdata inc r1 djnz r0,bbjj2 retbj2: db 00h,
24、c;* lcd显示子程序 *show_dig2h: mov b,#100 div ab add a,#30h push b mov b,lcd_x lcall lcdp2 pop b mov a,#0ah xch a,b div ab add a,#30h inc lcd_x push b精品. mov b,lcd_x lcall lcdp2 pop b inc lcd_x mov a,b mov b,lcd_x add a,#30h lcall lcdp2 retshow_dig2l: mov b,#100 div ab mov a,#0ah xch a,b div ab add a,#30
25、h push b mov b,lcd_x lcall lcdp2 pop b inc lcd_x精品. mov a,b mov b,lcd_x add a,#30h lcall lcdp2 ret;* 显示区 bcd 码温度值刷新子程序 *dispbcd: mov a,templc anl a,#0fh mov 70h,a ;小数位 mov a,templc swap a anl a,#0fh mov 71h,a ;个位 mov a,temphc anl a,#0fh mov 72h,a ;十位 mov a,temphc swap a anl a,#0fh mov 73h,a ;百位精品.di
26、spbcd2: ret;* lcd 显示数据处理子程序 *conv: mov a,73h ;加载百位数据 mov lcd_x,#6 ;设置位置 cjne a,#1,conv1 jmp conv2conv1: cjne a,#0bh,conv11 mov a,#- ;-号显示 jmp conv111conv11: mov a,# ;+号不显示conv111: mov b,lcd_x lcall lcdp2 jmp conv3conv2: lcall show_dig2 ;显示数据conv3: inc lcd_x mov a,72h ;十位 lcall show_dig2 inc lcd_x mo
27、v a,71h ;个位 lcall show_dig2精品. inc lcd_x mov a,#. mov b,lcd_x lcall lcdp2 mov a,70h ;加载小数点位 inc lcd_x ;设置显示位置 lcall show_dig2 ;显示数据 ret;* 第二行显示数字子程序 *show_dig2:add a,#30h mov b,lcd_x lcall lcdp2 ret;* 第二行显示数字子程序 *lcdp2: push acc mov a,b ;设置显示地址 add a,#0c0h ;设置lcd的第二行地址 lcall wcom ;写入命令精品. pop acc ;由
28、堆栈取出a lcall wdata ;写入数据 ret;* 对 lcd 做初始化设置及测试*set_lcd: clr lcd_en lcall init_lcd ;初始化 lcd lcall store_data ;将自定义字符存入lcd的cgram ret;* lcd初始化 *init_lcd: mov a,#38h ;2行显示,字形5*7点阵 lcall wcom lcall delay1 mov a,#38h lcall wcom lcall delay1 mov a,#38h lcall wcom精品. lcall delay1 mov a,#0ch ;开显示,显示光标,光标不闪烁 l
29、call wcom lcall delay1 mov a,#01h ;清除 lcd 显示屏 lcall wcom lcall delay1 ret;* 清除lcd的第一行字符 *clr_line1:mov a,#80h ;设置 lcd 的第一行地址 lcall wcom mov r0,#24 ;设置计数值 c1: mov a,# ;载入空格符至lcd lcall wdata ;输出字符至lcd djnz r0,c1 ;计数结束 ret;* lcd的第一行或第二行显示字符 *lcd_print:cjne a,#1,line2 ;判断是否为第一行精品. line1: mov a,#80h ;设置 lcd 的第一行地址 lcall wcom ;写入命令 lcall clr_line ;清除该行字符数据 mov a,#80h ;设置 lcd 的第一行地址 lcall wcom ;写入命令 jmp fill line2: mov a,#0c0h ;设置 lcd 的第二行地址 lcall wcom ;写入命令 lcall clr_line
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 断桥门窗产品培训
- 课件模板空白高级设置
- 高级感摄影培训
- 装饰行业销售培训
- 课件框架搭建步骤图解
- 公司拓展培训结业
- 少儿超轻粘土课件
- 大班珍惜动物课件
- 展览活动电子课件
- 课件最后一页文案
- 移风易俗培训教程课件
- 直销公司财务管理制度
- 2025-2030年中国象棋行业发展分析及前景趋势与投资风险研究报告
- 2025年保健按摩师(五级)资格理论必背考试题库(附答案)
- 抖音员工合同协议书模板
- DB32/T 3636-2019车用汽油中甲缩醛含量的测定多维气相色谱法
- 2025年部编版道德与法治六年级上册全册教案设计(共4个单元含有教学计划)
- 股东出资协议书合同
- 报考纪检公务员面试题及答案
- 生产考核奖惩管理办法
- 2025年度策划居间合作协议书样本
评论
0/150
提交评论