全自动电热水壶的设计(包含原理图和程序)


    
    单片机控制电热水壶温度设计

    中文摘

    着微机测量控制技术迅速发展广泛应单片机核心温度采集控制系统研发应程度提高生产生活中温度控制水设计述种STC89C52单片机控制单元DS18B20温度传感器温度控制系统该控制系统实时存储相关温度数记录前时间系统设计相关硬件电路相关应程序硬件电路包括STC89C52单片机系统测温电路实时时钟电路LCD液晶显示电路通讯模块电路等系统程序包括程序读出温度子程序计算温度子程序键处理程序LCD显示程序数存储程序等

    [关键词] STC89C52单片机DS18B20显示电路















    目 录

    引言 4
    ()课题研究背景 4
    (二)课题研究目意义 5
    二硬件电路设计 5
    ()系统设计框架 5
    (二)单片机系统电路 6
    (三)单片机选型 6
    1STC89C52单片机简介 6
    2STC89C52单片机时序 7
    3STC89C52单片机引脚介绍 7
    (四)温度传感器电路 9
    (五)系统电源电路设计 10
    (六)LCD显示电路 11
    (七)串口通讯电路 12
    (八)键接口电路 13
    (九)DS1302时钟电路 13
    (十)存储器接口电路 13
    三系统软件设计 14
    ()计算温度子程序 15
    (二)键处理子程序 15
    (三)计算温度子程序 16
    (四)显示数刷新子程序 17
    四结束语 18
    参考文献 19
    致谢 20
    附件1:系统原理图 21
    附件2:系统相关程序 22
    DS18B20底层驱动程序 22
    二DS1302时钟底层驱动程序 27
    三数存储底层驱动程序 33







    引言
    ()课题研究背景
    工业控制计算机重应领域计算机控制系统正适应领域需发展起门专业技术研究计算机技术通信息技术动控制理应工业生产程设计出需计算机控制系统着微机测量控制技术迅速发展广泛应单片机核心温度采集控制系统研发应程度提高生产生活中温度控制水设计基单片机STC89C52温度控制系统设计通次课程实践更加明确单片机广泛途方法工作原理
    (二)课题研究目意义
    着社会发展温度测量控制变越越重文采单片机STC89C52设计温度实时测量控制系统单片机STC89C52 够根温度传感器DS18B20 采集温度液晶屏实时显示通控制温度控制设定范围温度数均通液晶显示器LCD显示出系统根时钟存储相关数
    通该课程学计算机控制系统全面解掌握常规控制算法方法掌握简单微型计算机应系统软硬设计方法进步锻炼学微型计算机应方面实际工作力
    二硬件电路设计
    ()系统设计框架
    课题设计种STC89C52单片机控制单元DS18B20温度传感器温度控制系统该控制系统实时存储相关温度数记录前时间包括:电源模块温度采集模块键处理模块实时时钟模块数存储模块LCD显示模块通讯模块单片机系统

    图1 系统设计框架
    (二)单片机系统电路
    课题设计温度控制系统设计中控制核心STC89C52单片机该单片机51系列增强型8位单片机32IO口片含4K FLASH工艺程序存储器便电方式瞬间擦改写价格便宜外部晶振12MHz指令周期1μS该单片机完全完成设计务系统包括:复位电路震荡电路存储器选择模式(EA脚高低电选择)电路图2示:

    图2 单片机系统
    (三)单片机选型
    课题设计温度控制系统控制芯片选型STC89C52单片机特点:
    1STC89C52单片机简介
    目前51系列单片机工业检测领域中广泛应许单片机应领域中配接种类型语音接口构成具合成语音输出力综合应系统增强机话功STC89C52单片机深圳宏晶科技限公司生产种单片机块芯片集成微型计算机组成部分单片机包括:8位微型处理器CPU512K片数存储器RAM4K片程序存储器四8位行IO接口P0P3接口输入输出两定时器记数器五中断源中断控制系统全双工UART串行IO口片振荡器时钟产生电路石英晶体微调电容需外接高允许振荡频率12MHZ部分通部总线相连接
    2STC89C52单片机时序
    STC89C52单片机执器周期6状态(s1—s6)组成状态持续2震荡周期分P1P2两节拍样机器周期12振荡周期组成采12MHz晶体振荡器机器周期1us状态周期1/6us数情况算术逻辑操作发生N期间部寄存器寄存器传输发生P2期间单周期指令指令操作码读指令寄存器时S1P2开始执行指令果双字节指令机器周期s4读第二字节单字节指令51期间进行读读入字节操作码忽略程序计数加1加结束时完成指令操作数STC89C52指令周期1—2机器周期法法指令需两机器周期指令需4机器周期 双字节单机器指令通常机器周期程序存储器中读两字节Movx指令例外Movx指令访问外部数存储器单字节双机器周期指令执行Movx指令期间外部数存储器访问选通时跳两次取指操作
    3STC89C52单片机引脚介绍
    STC89C52单片机40引脚中2专电源引脚2外接晶振引脚4控制电源复引脚32条输入输出IO引脚
    面引脚功分4部分叙述引脚功
    (1)电源引脚VccVss
    Vcc(40脚):接+5V电源正端
    Vss(20脚):接+5V电源正端
    (2)外接晶振引脚XTAL1XTAL2
    XTAL1(19脚):接外部石英晶体端单片机部反相放器输入端放器构成采外部时钟时HMOS单片机该引脚接CHOMS单片机该引脚作外部振荡信号输入端
    XTAL2(18脚):接外部晶体端单片机部接片振荡器反相放器输出端采外部时钟时HMOS单片机该引脚作外部振荡信号输入端CHMOS芯片该引脚悬空接
    (3)控制信号电源复引脚
    控制信号电源复引脚RSTVPDALEPPSENEAVPP等4种形式
    (A).RSTVPD(9脚):RSTRESETVPD备电源该引脚单片机电复位掉电保护端单片机振荡器工作时该引脚出现持续两机器周期高电实现复位操作单片机复位初始状态
    VCC发生障降低低电规定值掉电时该引脚接备电源VPD(+5V)部RAM供电保证RAM中数丢失
    (B).ALE P (30脚):访问外部存储器时ALE(允许址锁存信号)机器周期两次信号输出锁存出现P0口低
    (C).PSEN(29脚)片外程序存储器读选通输出端低电效外部程序存储器读取指令常数期间机器周期PESN两次效通数总线口读回指令常数访问外部数存储器期间PESN信号出现
    (D).EAVpp(31脚):EA访问外部程序储器控制信号低电效EA端保持高电时单片机访问片程序存储器4KB(MS—52子系列8KB)超出该范围时动转执行外部程序存储器程序EA端保持低电时片程序存储器均访问外部程序存储器片含EPROM单片机EPROM编程期间该引脚接21V编程电源Vpp
    (4)输入输出(IO)引脚P0口P1口P2口P3口
    (A)P0口(39脚~22脚):P00~P07统称P0口接外部存储器扩展IO接口时作准双8位输入输出接口接外部程序存储器扩展IO口时P0口址数分时复口分时提供8位双数总线
    片含EPROM单片机EPROM编程时P0口输入指令字节检验程序时输出指令字节
    (B)P1口(1脚~8脚):P10~P17统称P1口作准双IO接口MCS—52子系列单片机P10P11第2功:P10口作定时器计数器2计数脉输入端T2P11作定时器计数器2外部控制端T2EXEPROM编程进行程序校验时P0口接收输入低8位址
    (C)P2口(21脚~28脚):P20~P27统称P2口般作准双IO接口接外部程序存储器扩展IO接口寻址范围超256字节时P2口高8位址总线送出高8位址EPROM编程进行程序校验时P2口接收输入8位址
    (D)P3口(10脚~17脚):P30~P37统称P3口双功口作般准双IO接口1位第2功P3口条引脚均独立定义第1功输入输出第2功P3口第2功见表
    表1 单片机P30脚含义
    引脚
    第2功
    P30
    RXD(串行口输入端0)
    P31
    TXD(串行口输出端)
    P32
    INT0(部中断0请求输入端低电效)
    P33
    INT1(中断1请求输入端低电效)
    P34
    T0(时器计数器0计数脉端)
    P35
    T1(时器计数器1数脉端)
    P36
    WR(部数存储器写选通信号输出端低电效)
    P37
    RD(部数存储器读选通信号输出端低电效)

    综述MCS—51系列单片机引脚作纳两点:
    1)单片机功引脚数少许引脚具第2功
    2)单片机外呈3总线形式P2P0口组成16位址总线P0口分时复作数总线
    (四)温度传感器电路
    采线制数字温度传感器DS18B20作课题温度传感器传感器输出信号进47K拉电阻直接接单片机P10引脚
    DS18B20温度传感器美国达拉斯(DALLAS)半导体公司推出应单总线技术数字温度传感器该器件半导体温敏器件AD转换器存储器等做集成电路芯片设计中温度传感器选择单线数字器件DS18B20方面较考虑决定方面原:
    (1)系统特性:测温范围55℃~+125℃ 测温精度士05℃温度转换精度9~12位变够直接温度转换值16位二进制数码方式串行输出12位精度转换时间750ms通数线供电具超低功耗工作方式
    (2)系统成:计算机技术微电子技术发展新型规模集成电路功越越强体积越越价格越越低支DS18B20体积普通三极相差价格十元民币左右
    (3)系统复杂度:DS18B20单总线器件微处理器接口时仅需占1IO端口条总线挂接十DS18B20测温时需外部元件模拟传感器相减少接线数量降低系统复杂度减少工程施工量
    (4)系统调试维护:引线减少系统接口简化系统调试带方便时DS18B20全数字元器件障率低抗干扰性强减少系统日常维护工作
    DS18B20温度传感器三根外引线:单线数传输总线端口DQ 外供电源线VDD线GNDDS18B20两种供电方式:种数线供电方式时VDD接通部电容空闲时数线获取量完成温度转换相应完成温度转换时间较长种情况单片机IO口完成DS18B20总线拉种外部供电方式(VDD接+5V)相应完成温度测量时间较短
    设计中采外部供电方式实现DS18B20传感器单片机连接接口电路图4示

    图4 温度传感器接口
    (五)系统电源电路设计
    系统采电源稳压芯片LM2596该开关电压调节器降压型电源理单片集成电路够输出3A驱动电流输入电压+5v输入电压+24v时具线性负载调节特性
    该器件部集成频率补偿固定频率发生器开关频率150KHz低频开关调节器相较更规格滤波元件
    该器件特点:特定输入电压输出负载条件输出电压误差保证±4范围振荡频率误差±15范围仅80μA机电流实现外部断电具保护电路(两级降频限流保护异常情况断电温完全保护电路)
    该温度控制系统中电源电路设计图10示

    图5 系统电源模块
    (六)LCD显示电路
    课题设计温度控制系统采液晶屏128*64作显示模块接口原理图图6示:

    图6 液晶显示接口电路
    (七)串口通讯电路
    课题设计通讯采常见串口通讯协议转换芯片采MAX232A接口原理图图7示:

    图6 串口通讯接口电路
    (八)键接口电路
    课题设计采键盘模块接口原理图图8示:

    图8 键盘模块电路
    (九)DS1302时钟电路
    课题设计时钟采时钟芯片DS1302接口原理图图9示:

    图9 时钟接口电路
    (十)存储器接口电路
    课题设计存储器采AT24C256接口原理图图十示:

    图10 存储器电路
    三系统软件设计
    系统软件采C语言单片机进行变成实现项功程序模块进行初始化调读温度处理温度显示键盘等模块循环查询方式显示控制温度程序功负责温度实时显示读出处理DS18B20测量前温度值负责调子程序程序流程图10系统程序流程图

    开始
    初始化



    启动DB18B20
    读温度
    计算温度
    LCD显示


    图10系统程序流程图
    ()计算温度子程序
    读出温度子程序功包括初始化判断DS18B20否存存进行系列读操作存返回程序流程图图11示


    图11 读温度流程图
    (二)键处理子程序
    键处理子程序负责参数设置程序循环次键进行扫描判断否输入键进行系列键输入操作程序流程框图图12示


    图12 温度转换流程图
    (三)计算温度子程序
    计算温度子程序RAM中读取值进行BCD码转换运算进行温度值正负判定程序流程图图13示


    开始
    温度零
    温度值取补码置—标志
    计算数位温度BCD值
    计算整数位温度BCD值
    结束
    置+标志
    N
    Y

















    图13 计算温度子程序
    (四)显示数刷新子程序
    显示数刷新子程序显示缓器中显示数进行刷新操作高显示位0时符号显示位移入位程序流程图图14








    温度数移入显示寄存器
    十位数0?
    百位数0?
    十位数显示符号百位数显示
    百位数显示数(显示符号)
    结束
    N
    N
    Y
    Y













    图14 数刷新子程序
    四结束语
    通次毕业文课题设计学会样学书知识应实践中学会思考整控制系统软硬件设计实践程中遇困难解决问题程中学会团队合作精神样发现问题分析问题进解决问题次课程设计仅增强学专业课兴趣勇气信心更重学指明方









    参考文献
    [1] 李广弟朱月秀王秀山单片机基础北京航空航天学出版社2001(07)
    [2] 蔡美琴张民等MCS51系列单片机系统应高等教育出版社2004(06)
    [3] 张毅刚等MCS51单片机应设计[M]哈尔滨工业学出版社1997
    [4] 刘瑞星胡健等Protel DXP 实教程机械工业出版社2003(04)
    [5] 海生 计算机控制技术 机械工业出版社 2007(05)
    [6] 谭浩强 C程序设计 清华学出版社
    [7] 康华光 电子技术基础 模拟部分 高等教育出版社 1998(08)
    [8] 余锡存 单片机原理接口技术 西安电子科技学出版社2003



















    致谢
    文指导老师密切关心悉心指导完成老师课题开题期间文写作程中予许指导导师总认真负责丝苟工作态度阅读修改文章中足方优良作风严谨治学态度深深影响着恩师致真挚感谢崇高敬意
    时感谢学特室友正年里陪起成长起学天成绩时学生活中予私关怀帮助表示诚挚谢意



















    附件1:系统原理图















    附件2:系统相关程序
    DS18B20底层驱动程序
    延时 N ms
    DS1820引脚定义
    sbit TMDAT P1^0

    void DS1820_DelayCount (unsigned char Coun)
    {
    data unsigned char Count
    CountCoun
    while(Count>0) Count
    CountCoun
    while(Count>0) Count
    }
    复位DS18B20
    void DS1820_Reset(void)
    {
    TMDAT0
    DS1820_DelayCount(412)

    TMDAT1
    DS1820_DelayCount(16)
    }
    等DS18B20应答
    unsigned char DS1820_Answer(void)
    {
    data unsigned int i
    data unsigned char j
    i0xc000
    while(TMDAT)
    {
    i
    if (i0)
    return(aban_return)
    }

    i0xffff
    j3
    while(~TMDAT)
    {
    i
    if (i0)
    if(j0)
    return(aban_return)
    else
    {
    j
    i0xffff
    }
    }
    DS1820_DelayCount(16)
    return(done_return)
    }
    等DS18B20应答
    读取位
    bit DS1820_Readbit(void)
    {
    data int i0
    bit dat
    TMDAT0i++i++i++i++
    TMDAT1i++i++i++i++i++i++i++i++
    dat TMDAT
    DS1820_DelayCount(8)
    DS1820_DelayCount(32)
    return dat
    }
    读取字节
    unsigned char DS1820_Readbyte(void)
    {
    data unsigned char ijdat0

    for(i1i<8i++)
    {
    jDS1820_Readbit()
    dat(j<<7)|(dat>>1)
    }
    return dat
    }
    写字节
    void DS1820_Writebyte(unsigned char dat)
    {
    data signed char i0
    data unsigned char j
    bit testb

    for(j1j<8j++)
    {
    testbdat & 0x01
    dat dat>>1
    if(testb)
    {
    TMDAT0
    i++i++i++i++i++i++i++i++
    TMDAT1
    DS1820_DelayCount(8)
    DS1820_DelayCount(32)
    }
    else
    {
    TMDAT0
    DS1820_DelayCount(8)
    DS1820_DelayCount(32)
    TMDAT1
    i++i++i++i++i++i++i++i++
    }
    }
    }
    读操作开始
    unsigned char DS1820_StartTem(void)
    {
    EA0
    DS1820_Reset()

    if(DS1820_Answer()aban_return)
    {
    EAEa
    return(aban_return)
    }
    DS1820_Delayms(1)
    DS1820_Delayms(4)
    DS1820_Writebyte(0xcc)
    DS1820_Writebyte(0x55)
    for(i0i<8i++)
    DS1820_Writebyte(DS1820_temp[i])
    DS1820_Writebyte(0x44)
    EAEa
    return(done_return)
    }
    读传感器
    int DS1820_ReadTem(void)
    {
    data unsigned char ab
    data int y3
    data float y4
    data unsigned char i
    EA0

    DS1820_Reset()

    if(DS1820_Answer()aban_return)
    {
    EAEa
    return(0xffff)
    }
    DS1820_Delayms(4)
    DS1820_Writebyte(0xcc) 跳匹配传感器

    DS1820_Writebyte(0x55) 匹配传感器
    for(i0i<8i++)
    DS1820_Writebyte(run_infsystem_indexDS1820_temp[i])

    DS1820_Writebyte(0xbe) 读取温度
    for(i0i<9i++)
    {
    run_infsystem_indexDS1820_temp[i]DS1820_Readbyte()

    }
    if(CRC(9)0)
    {
    EA1
    return(0xffff)
    }
    计算CRC
    a run_infsystem_indexDS1820_temp[0]
    b run_infsystem_indexDS1820_temp[1]
    DS1820_Reset()

    y3 (b<< 8)|a
    y4y3
    y4(y4*25)4
    EA1
    return((int)(y4))

    }
    二DS1302时钟底层驱动程序
    DS1302引脚定义
    sbit rtc_scP3^4
    sbit rtc_ioP3^5
    sbit rst_1302P3^6
    bdata unsigned char temp
    sbit temp_0 temp^0
    sbit temp_7 temp^7

    **************************************************************
    DS1302驱动程序开始
    **************************************************************
    功 DS1302写入1Byte数
    void v_RTInputByte(unsigned char ucDa)
    {
    unsigned char i
    temp ucDa
    for(i8 i>0 i)
    {
    rtc_io temp_0 *相汇编中 RRC *
    rtc_sc 1
    rtc_sc 0
    temp temp >> 1
    }
    }
    功 DS1302读取1Byte数
    unsigned char uc_RTOutputByte(void)
    {
    unsigned char i
    rtc_io1
    for(i8 i>0 i)
    {
    temp temp >>1 *相汇编中 RRC *
    temp_7 rtc_io

    rtc_sc 1
    rtc_sc 0
    }
    return(temp)
    }

    功 DS1302写入数
    void write1302(unsigned char ucAddrunsigned char ucDa)
    {
    bit ea
    eaEA
    EA0
    rtc_rs_port&(~rtc_rs_bit)
    rtc_sc 0
    rtc_rs_port|rtc_rs_bit
    v_RTInputByte(ucAddr) * 址命令 *
    v_RTInputByte(ucDa) * 写1Byte数*
    rtc_sc 1
    rtc_rs_port&(~rtc_rs_bit)
    EA ea
    }
    功 读取DS1302某址数
    unsigned char read1302(unsigned char ucAddr)
    {
    unsigned char ucDa
    bit ea
    eaEA
    EA0
    rtc_rs_port&(~rtc_rs_bit)
    rtc_sc 0
    rtc_rs_port|rtc_rs_bit
    v_RTInputByte(ucAddr) * 址命令 *
    ucDa uc_RTOutputByte() * 读1Byte数 *
    rtc_sc 1
    rtc_rs_port&(~rtc_rs_bit)
    EA ea
    return(ucDa)
    }

    功 设置初始时间
    void Set1302(pTime_S time_temp)
    {
    unsigned char i 0x80
    write1302(0x8e0x00) * 控制命令WP0写操作*
    write1302(itime_temp>sec)
    i +2
    write1302(itime_temp>min)
    i +2
    write1302(itime_temp>hou)
    i +2
    write1302(itime_temp>day)
    i +2
    write1302(itime_temp>mon)
    i +2
    write1302(i0x02)
    i +2
    write1302(itime_temp>yea)
    i +2

    write1302(0x8e0x80) * 控制命令WP1写保护*
    }

    功 读取DS1302前时间
    void get1302(void)
    {
    unsigned char itime_bcd_temp[6]
    unsigned char ucAddr 0x81
    for (i0i<7i++)
    {
    time_bcd_temp[i] read1302(ucAddr)*格式 秒 分 时 日 月
    星期 年 *
    ucAddr + 2

    }
    sectime_bcd_temp[0]
    mintime_bcd_temp[1]
    houtime_bcd_temp[2]
    daytime_bcd_temp[3]
    montime_bcd_temp[4]
    yeatime_bcd_temp[6]
    }

    连续6字节读出程序
    void ds1302_read(unsigned char *ptrunsigned char addr)
    {

    unsigned char i

    addraddr*2+0x0c1
    for(i0i<6i++)
    {
    *(ptr+i)read1302(addr)
    addr+2
    }
    }

    连续6字节写入程序
    void ds1302_write(unsigned char *ptrunsigned char addr)
    {
    unsigned char i

    addraddr*2+0x0c0
    write1302(0x8e0x00) 写保护置低(关闭)
    for(i0i<6i++)
    {
    write1302(addr*(ptr+i))
    addr+2
    }
    write1302(0x8e0x80) 写保护置高(开)
    }

    void Start1302(void)
    {
    unsigned char temp
    bit ea
    eaEA
    EA0
    tempread1302(0x81)
    temp&0x7f
    write1302(0x8e0x00) * 控制命令WP0写操作*
    write1302(0x80temp)
    write1302(0x900)
    write1302(0x8e0x80) * 控制命令WP1写保护*
    EAea
    }
    DS1302驱动程序结束
    三数存储底层驱动程序
    ATC256引脚定义
    sbit epr_sdP3^3
    sbit epr_scP3^2
    bdata unsigned char temp1
    sbit temp1_0 temp1^0
    sbit temp1_7 temp1^7

    存储器驱动程序开始
    void noack(void)
    {
    epr_sd1
    epr_sc1
    epr_sc1
    epr_sc1
    epr_sc0
    }
    void ask()
    {
    unsigned char i0xff
    epr_sd1
    epr_sc1
    epr_sc1
    epr_sc1
    do{
    i
    if(epr_sd0)
    {
    epr_sc0
    i0
    }
    }while(i0)
    epr_sd1
    epr_sd1
    epr_sd1
    }

    void stop()
    {
    epr_sd0
    epr_sd0
    epr_sd0
    epr_sc1
    epr_sc1
    epr_sc1
    epr_sd1
    epr_sd1
    epr_sd1
    epr_sd1
    }
    24c256 start
    void start()
    {
    epr_sc1
    epr_sd1
    epr_sd1
    epr_sd0
    epr_sd0
    epr_sc0
    }

    void wrby(unsigned char x)

    { unsigned char i
    epr_sc0
    temp1x
    for(i0i<8i++) 高位开始传送数
    {
    epr_sdtemp1_7
    temp1temp1<<1 左移位
    epr_sc1
    epr_sc1
    epr_sc1
    epr_sc1
    epr_sc0
    }
    }
    24c256 rdby
    unsigned char rdby() 高位开始读出数
    {
    unsigned char i
    epr_sd1
    epr_sd1
    epr_sd1
    for(i0i<8i++)
    {

    epr_sc1
    epr_sc1
    temp1temp1<<1
    temp1_0epr_sd
    epr_sc0
    epr_sc0
    epr_sc0
    }
    return(temp1)
    }

    24c256 waddr
    void waddr()
    {
    start()
    wrby(0xa0)
    ask()}

    24c256 raddr
    unsigned char raddr()
    {
    start()
    wrby(0xa1)
    ask()
    temp1rdby()
    noack()
    stop()
    return(temp1)
    }

    void w16addr(unsigned int x)
    {
    union {
    unsigned int int_type
    unsigned char char_type[1]
    }u_int_char

    unsigned mn

    u_int_charint_typex x高位赋m低位赋n
    mu_int_charchar_type[0]
    nu_int_charchar_type[1]
    wrby(m )
    ask()
    wrby(n )
    ask()
    }

    延时
    void d5ms()
    {
    unsigned char a b
    for (a0a<15a++)
    {
    for (b0b<0x7fb++)
    {}
    }
    }
    24c256 读出字节
    unsigned char epr_read(unsigned int x)
    {
    bit ea
    eaEA
    EA0 关中断
    EPR_WEN
    d5ms()
    waddr()
    w16addr(x)
    temp1raddr()
    EAea开中断
    return(temp1)
    }
    24c256 写入字节
    void epr_write(unsigned int funsigned char x)
    {
    bit ea
    eaEA
    EA0 关中断
    d5ms()
    waddr()
    w16addr(f)
    wrby(x)
    ask()
    stop()
    d5ms()
    EAea 开中断
    }
    存储器驱动程序结束
    汇编部分:
    TEMPERATURE_L DATA 31H DS18B20低8位Buffer
    TEMPERATURE_H DATA 30H DS18B20高8位Buffer
    TEMPERATURE_HC DATA 32H 计算百位十位BCD码存放
    BUFFER
    TEMPERATURE_LC DATA 33H 计算位数位BCD码存放
    TEMPERATURE_ZH DATA 34H 计算十位位HEX码存放BUFFER
    DIS_BUF_X DATA 35H 数码数位Buffer
    DIS_BUF_G DATA 36H 数码位Buffer
    DIS_BUF_S DATA 37H 数码十位Buffer
    DIS_BUF_B DATA 38H 数码百位Buffer
    KEY_BUF_G DATA 39H 键盘输入位值
    KEY_BUF_S DATA 49H 键盘输入十位值
    KEY_BUF_B DATA 41H 键盘输入百位值
    K_UP EQU P11 调钮
    K_DOWN EQU P12 调钮
    K_ENTER EQU P10 输入数确认钮
    P_DS18B20 EQU P30 读取DS18B20输入端口
    P_SWITCH EQU P31 控硅控制
    FLAG EQU 20H0 标志位确定否存DS18B20
    ENTER_FLAG EQU 20H1 键盘输入标志位
    ORG 0000H
    LJMP MAIN
    ORG 0100H
    MAIN MOV SP#60H 初始化
    MOV KEY_BUF_G#00H KEY_BUF户输入先赋值初始化
    MOV KEY_BUF_S#00H
    MOV KEY_BUF_B#00H

    NEXT
    LCALL READ_TEMP 调读温度子程序
    JB FLAGNORMAL 判断否DS18B20存
    CALL ERR 存时显示错误信息
    AJMP NEXT
    NORMAL LCALL DATA_DEA 处理DS18B20数
    LCALL SET_DIS_BUF 赋值DIS_BUF_XGSB
    LCALL DISPLAY 调数码显示子程序
    LCALL SCAN_KEY 扫描键盘
    LCALL SWITCH 处理控硅
    AJMP NEXT

    程序名称ERR
    功程序出错处理显示四88888
    入口参数
    出口参数DIS_BUF_XDIS_BUF_G DIS_BUF_S DIS_BUF_B
    ERR MOV DIS_BUF_X#08H 果没找DS18B20显示错误错误
    显示888
    MOV DIS_BUF_G#08H
    MOV DIS_BUF_S#08H
    MOV DIS_BUF_B#08H
    LCALL DISPLAY
    RET
    程序名称DATA_DEAL
    功处理采集数
    入口参数TEMPERATURE_L
    出口参数DIS_BUF_G DIS_BUF_S DIS_BUF_
    DATA_DEAL
    MOV ATEMPERATURE_H 判温度否零
    ANL A#80H
    JZ TEMPC1 A0说明正数果负数
    低8进行补码处理
    CLR C
    MOV ATEMPERATURE_L 二进制数求补(双字节)
    CPL A 取反加1
    ADD A#01H
    MOV TEMPERATURE_LA
    MOV ATEMPERATURE_H
    CPL A
    ADDC A#00H
    MOV TEMPERATURE_HA 写回TEMPERATURE_H
    MOV TEMPERATURE_HC#0BH
    SJMP TEMPC11
    TEMPC1 MOV TEMPERATURE_HC#0AH
    TEMPC11 MOV ATEMPERATURE_HC
    SWAP A
    MOV TEMPERATURE_HCA
    MOV ATEMPERATURE_L
    ANL A#0FH
    MOV DPTR#TEMPDOTTAB
    MOVC A@A+DPTR 查表
    MOV TEMPERATURE_LCA TEMPERATURE_LC LOW数部分 BCD
    MOV DIS_BUF_XA 数位BCD码送入显示buffer中
    MOV ATEMPERATURE_L 整数部分
    ANL A#0F0H 位单数值
    SWAP A SWAP位真正位
    MOV TEMPERATURE_LA
    MOV ATEMPERATURE_H
    ANL A#0FH
    SWAP A
    ORL ATEMPERATURE_L
    MOV TEMPERATURE_ZHA 组合值存入TEMPERATURE_ZH
    LCALL HtoB 转换HEx值成BCD码
    MOV TEMPERATURE_LA
    ANL A#0F0H
    SWAP A
    ORL ATEMPERATURE_HC TEMPERATURE_HC LOW位 十位数
    MOV TEMPERATURE_HCA
    MOV ATEMPERATURE_L
    ANL A#0FH
    SWAP A
    MOV R7A
    MOV ATEMPERATURE_HC TEMPERATURE_HC HI 百位数 BCD
    ANL A#0FH
    ORL AR7
    MOV TEMPERATURE_HCA

    TEMPC12 RET 数部分码表
    TEMPDOTTAB
    DB 00H01H01H02H03H03H04H04H05H06H06H07H08H08H09H09H
    00625>00H
    00625*2 0125>01H
    00625*3 01875>01H
    00625*4 025>02H
    00625*5 03125>03H
    类推
    程序名称HtoB
    功十六进制转 BCD
    入口参数A
    出口参数R7
    HtoB MOV B#064H 100
    DIV AB a100
    MOV R7A
    MOV A#0AH
    XCH AB
    DIV AB
    SWAP A
    ORL AB
    RET

    程序名称INIT_TEMP
    功初始化DS18B20确定DS18B20否存
    入口参数
    出口参数FLAG
    INIT_TEMP
    SETB P_DS18B20
    NOP
    CLR P_DS18B20 机发出延时537微秒复位低脉
    MOV R0#6BH
    MOV R1#04H
    TSR1 DJNZ R0
    MOV 40#6BH
    DJNZ R1TSR1
    SETB P_DS18B20 然拉高数线释放总线进入接受状态
    NOP
    NOP
    NOP
    MOV R0#32H
    TSR2 JNB P_DS18B20TSR3 等DS18B20回应
    DJNZ R0TSR2
    LJMP TSR4 延时
    TSR3 SETB FLAG 置标志位表示DS1820存
    LJMP TSR5
    TSR4 CLR FLAG 清标志位表示DS1820存
    LJMP TSR7
    TSR5 MOV R0#06BH
    TSR6 DJNZ R0TSR6 时序求延时段时间
    TSR7 SETB P_DS18B20
    RET

    程序名称READ_TEMP
    功读取DS18B20数
    入口参数TEMPERATURE_LTEMPERATURE_H
    出口参数
    READ_TEMP
    SETB P_DS18B20
    LCALL INIT_TEMP 先复位DS18B20
    JB FLAGTSS2
    RET 判断DS1820否存DS18B20存返回
    TSS2 MOV A#0CCH 跳ROM匹配
    LCALL WRITE_18B20
    MOV A#44H 发出温度转换命令
    LCALL WRITE_18B20
    LCALL DISPLAY 等AD转换结束12位话750微秒
    LCALL INIT_TEMP 准备读温度前先复位
    MOV A#0CCH 跳ROM匹配
    LCALL WRITE_18B20
    MOV A#0BEH 发出读温度命令
    LCALL WRITE_18B20
    LCALL READ_18B20 读出温度数保存35H36H
    RET
    程序名称WRITE_18B20
    功A保存数值写入DS1820中
    入口参数A 寄存器
    出口参数
    WRITE_18B20
    MOV R2#8 8位数串行通信
    CLR C
    WR1 CLR P_DS18B20
    MOV R3#07
    DJNZ R3
    RRC A 循环右移
    MOV P_DS18B20C
    MOV R3#3CH
    DJNZ R3 23*2 46微妙
    SETB P_DS18B20
    NOP
    DJNZ R2WR1 A里面8位送8次
    SETB P_DS18B20 释放总线
    RET
    程序名称READ_18B20
    功读取18B20中数串行通信次读取循环8次读取
    入口参数TEMPRATURE_L
    出口参数
    READ_18B20
    MOV R4#4 温度高位低位DS18B20中读出
    MOV R1#TEMPERATURE_L
    RE00 MOV R2#8 数8位
    RE01 CLR C
    SETB P_DS18B20
    NOP
    NOP
    CLR P_DS18B20
    NOP
    NOP
    NOP
    SETB P_DS18B20
    MOV R3#09
    RE10 DJNZ R3RE10
    MOV CP_DS18B20
    MOV R3#3CH
    RE20 DJNZ R3RE20
    RRC A
    DJNZ R2RE01
    MOV @R1A
    DEC R1
    DJNZ R4RE00
    RET
    程序名称SCAN_KEY
    功扫描键盘
    入口参数DIS_BUF_GDIS_BUF_SDIS_BUF_B
    出口参数KEY_BUF_GKEY_BUF_SkEY_BUF_B
    SCAN_KEY
    JB K_ENTERQUIT 果Enter键入开始键盘输入
    LCALL K_DELAY
    JB K_ENTERQUIT
    CLR ENTER_FLAG 次进赋值输入标志设置0
    MOV KEY_BUF_GDIS_BUF_G 前温度赋值KEY_BUF
    MOV KEY_BUF_SDIS_BUF_S
    MOV KEY_BUF_BDIS_BUF_B
    K_LOOP
    JB ENTER_FLAGQUIT 果输入完成ENTER_FLAG1退出键盘程

    JB K_ENTERKUP
    CALL PRO_ENTER
    KUP JB K_UPKDOWN
    CALL PRO_UP
    KDOWN JB K_DOWNLOOPA
    CALL PRO_DOWN
    LOOPA LCALL DISPLAY
    SJMP K_LOOP
    QUIT RET

    程序名称PRO_ENTER
    功确认键盘输入退出键盘输入
    入口参数ENTER_FLAG
    出口参数ENTER_FLAG
    PRO_ENTER
    CALL K_DELAY
    JB K_ENTERK_LOOP 钮抖动处理
    SETB E NTER_FLAG
    CALL K_DELAY
    RET

    程序名称PRO_UP
    功数值调处理
    入口参数KEY_BUF_GKEY_BUF_SKEY_BUF_B
    出口参数DIS_BUF_GDIS_BUF_SDIS_BUF_B
    PRO_UP
    CALL K_DELAY
    JB K_UPK_LOOP 钮抖动处理
    INC KEY_BUF_G 位增
    MOV AKEY_BUF_G
    CJNE A#0AHUPNEXT 位增加10回0
    MOV KEY_BUF_G#00H
    INC KEY_BUF_S 十位加
    MOV AKEY_BUF_S
    CJNE A#0AHUPNEXT 十位超99溢出
    MOV R0#200
    ERROR1 LCALL ERR 出错显示8888
    DJNZ R0ERROR1
    DEC KEY_BUF_S 退回99
    MOV KEY_BUF_G#09H
    UPNEXT
    MOV DIS_BUF_GKEY_BUF_G
    MOV DIS_BUF_SKEY_BUF_S
    MOV DIS_BUF_BKEY_BUF_B
    CALL K_DELAY
    RET
    程序名称PRO_DOWN
    功数值调处理
    入口参数KEY_BUF_GKEY_BUF_SKEY_BUF_B
    出口参数DIS_BUF_GDIS_BUF_SDIS_BUF_B
    PRO_DOWN
    CALL K_DELAY
    JB K_DOWNK_LOOP 钮抖动处理
    DEC KEY_BUF_G 位减
    MOV AKEY_BUF_G
    CJNE A#0FFHDOWNNEXT 位减0回9
    MOV KEY_BUF_G#09H
    DEC KEY_BUF_S 十位减
    MOV AKEY_BUF_S
    CJNE A#0FFHDOWNNEXT十位低0溢出
    MOV R0#200
    ERROR2 LCALL ERR 出错显示8888
    DJNZ R0ERROR2
    INC KEY_BUF_S 退回00
    MOV KEY_BUF_G#00H
    DOWNNEXT
    MOV DIS_BUF_GKEY_BUF_G 增加完成赋值退出然DISPLAY
    显示出
    MOV DIS_BUF_SKEY_BUF_S
    MOV DIS_BUF_BKEY_BUF_B
    CALL K_DELAY
    RET
    K_DELAY 键盘抖动延时子程序
    MOV R6#250
    DL20MS_1
    MOV R7#200
    DJNZ R7
    DJNZ R6 DL20MS_1
    RET
    控硅控制
    SWITCH
    MOV AKEY_BUF_G 三Buffer0话说明没输入数值直
    接退出
    JNZ SNEXT
    MOV AKEY_BUF_S
    JNZ SNEXT
    MOV AKEY_BUF_B
    JZ SQUIT
    SNEXT CALL SET_DIS_BUF
    MOV AKEY_BUF_S
    SUBB ADIS_BUF_S
    JC COOL
    JNZ HOT 十位果相等继续较位
    MOV AKEY_BUF_G
    SUBB ADIS_BUF_G
    JC COOL
    HOT CLR P_SWITCH P_SWITCH0说明前温度设定温度升温
    接电阻丝
    SETB P13 报警
    SJMP SQUIT
    COOL SETB P_SWITCH P_SWITCH 1说明前温度设定温度
    SETB P13 报警
    SQUIT RET

    程序名称SET_DIS_BUF
    功赋值DIS_BUF_G DIS_BUF_S DIS_BUF_B
    入口参数TEMPERATURE_LCTEMPERATURE_HC
    出口参数DIS_BUF_G DIS_BUF_S DIS_BUF_B

    SET_DIS_BUF
    MOV ATEMPERATURE_LC
    ANL A#0FH
    MOV DIS_BUF_XA 数位
    MOV ATEMPERATURE_LC
    SWAP A
    ANL A#0FH
    MOV DIS_BUF_GA 位
    MOV ATEMPERATURE_HC
    ANL A#0FH
    MOV DIS_BUF_SA 十位
    MOV ATEMPERATURE_HC
    SWAP A
    ANL A#0FH
    MOV DIS_BUF_BA 百位
    MOV ATEMPERATURE_HC
    ANL A#0F0H
    CJNE A#010HNEXT0
    SJMP NEXT1

    NEXT0 MOV ATEMPERATURE_HC
    ANL A#0FH
    JNZ NEXT1 十位数0
    MOV ATEMPERATURE_HC
    SWAP A
    ANL A#0FH
    MOV 73H#0AH 符号位显示
    MOV 72HA 十位数显示符号
    NEXT1 RET
    程序名称DISPLAY
    功显示数数码中
    入口参数DIS_BUF_G DIS_BUF_S DIS_BUF_B
    出口参数
    DISPLAY
    MOV DPTR#DISTAB
    MOV R3#0FEH
    MOV R1#DIS_BUF_B
    DPLOP MOV A@R1
    MOVC A@A+DPTR
    MOV P2R3
    MOV P0A
    CJNE R3#0FBHDPNEXT
    CLR P07
    DPNEXT MOV AR3
    RL A
    MOV R3A
    DEC R1
    CALL DS1M
    CJNE R3#0EFHDPLOP
    MOV P0#0FFH 次显示结束P0口复位
    MOV P2#0FFH P2口复位
    RET
    DS1M MOV R7#0FFH
    DJNZ R7
    RET
    数码TAB
    DISTAB
    DB 0C0H 0
    DB 0F9H 1
    DB 0A4H 2
    DB 0B0H 3
    DB 099H 4
    DB 092H 5
    DB 082H 6
    DB 0F8H 7
    DB 080H 8
    DB 090H 9
    DB 0FFH NONE
    END

    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 8 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    全自动车辆消毒通道设计方案

    全自动车辆消毒通道**  根据贵地的环境及气候特点,现推荐以下两种型号车辆消毒通道供参考。  1、      全自动消毒通道型号推荐   · 1. 1. 凯撒6000强力抗风型 ...

    11年前   
    10497    0

    基于原理图的数字跑表设计课程设计

    XX大学设计报告课程名称: 基于FPGA的现代数字系统设计 设计名称: 基于原理图的数字跑表设计 姓 名: 学 号: ...

    11个月前   
    318    0

    计算机程序设计和软件

    软 件总的来说,软件就是指用以指挥计算机运行活动所使用的程序。有两类软件:应用软件和系统软件。程序员设计和编制应用软件来完成面向用户的某些应用,诸如收帐和工资系统等。系统软件更为通用,通常是...

    12年前   
    558    0

    《冷和热》习作程序设计表

    《冷和热》习作程序设计表(word文档,打开后格式正常) 课 堂 名  称:  _  地席课          小组名称:_      果果班           时        间:__...

    11年前   
    9810    0

    基于单片机的音乐喷泉论文(含原理图、PCB图、程序)

    咅乐喷泉控制器是咅乐喷泉的核心部分。在咅乐喷泉中,喷头的多姿造型和 缤纷的水下灯光都受喷泉控制器的控制。由于不同的喷泉对水泵和彩灯组数的要 求各不相同,因此可以设计一种简单、通用、组数可灵活扩充...

    5年前   
    1837    0

    IATF16949程序文件34设计和开发控制程序

    XXXX有限公司控制状态:设计和开发控制程序文件编号:SJ/QP-034文件版本:B生效日期:发文编号:编制技术部审核XXX批准XXX设计开发方针:严谨创新持续改进1目的明确设计开发全过程的主...

    4年前   
    615    0

    基于PLC控制全自动洗衣机毕业设计论文

    高等专科学校 毕业设计论文 论文题目:全自动洗衣机的控制设计系 部 自动控制系 专 业 电气自动化技术 班 级 电气自动化班 学生姓名 ...

    3年前   
    1749    0

    入党程序和步骤

    加入中国共产党是一件光荣的事,写过入党申请书的同志应该对入党程序有了一定的了解吧!以下是我整理的入党积极分子入党程序及步骤,与大家分享一下,供参考!

    5年前   
    1788    0

    图书馆程序设计程序设计综合课程设计报告

    XX学院计算机科学与技术系信息管理与信息系统专业《程序设计综合课程设计》报告 (2010/2011学年 第一学期)学生姓名: 学生班级: 信息管理与信...

    2年前   
    559    0

    设计和开发控制程序

    中山桑芭丝服装有限公司 程 序 文 件 设计和开发控制程序 编号: 版号:01 生效日期: 拟制: 审核: 批准: ...

    13年前   
    1501    0

    TS16949设计和开发控制程序

    1 目的 明确设计/开发全过程的主要工作和内容,对设计/开发全过程进行控制,确保设计/开发的产品和制造过程满足顾客的要求。2 范围 本程序适用于本公司所有汽车转向器的产品设计和...

    4年前   
    587    0

    Ping程序的设计与实现课程设计

     计算机网络课程设计报告设计名称 Ping程序的设计与实现 专业班级 同组人姓名 ...

    3年前   
    626    0

    毕业设计论文全自动洗衣机的传动模块和PLC控制系统

    洗衣机是目前每个家庭必备的生活家电,经济水平的提高与自动化控制技术发展全自动洗衣机逐步走进了每家每户。全自动洗衣机的传动模块是是洗衣机工作环节中一个非常重要电力能源转换枢纽,起着将电能转化为机械能关键作用。

    3年前   
    543    0

    KPI设计实施程序

    KPI实施程序 一、诊断 以往的绩效管理不够量化,难以调动员工的积极性。 二、建立业绩指标 1. 确定2006年公司战略目标:即:作为一个公司,我们应该完成什么?我们的任务是什...

    10年前   
    14562    0

    《Python程序设计》题库

    第一章 基础知识1、Python安装扩展库常用的是_______工具。(pip)2、Python标准库math中用来计算平方根的函数是__________。(sqrt)3、Python程序文件扩...

    2年前   
    521    0

    组织设计程序

    制度名 组织设计程序 电子文件编码 GLZD002 页码 1-1 第一条 设计原则的确定。根据企业的目标和特点,确定组织设计的方针、原则和主要参数。 第二条 职能分析和设...

    9年前   
    9753    0

    程序设计基础

    程序设计基础 下面我们这一节我们概要向用户管理人员介绍面问过程的程序设计语言的原理。绝大多数生产程序是用诸如COBOL、BASIC这样的POL编制的。虽然用户管理人员通常没有机会...

    14年前   
    13412    0

    工艺设计管理程序

    1. 目的 為滿足客戶要求,規定對工藝設計過程進行有效控制,以確保設計輸出符合設計輸入。 2. 范圍 客戶提供產品生產實現所需工藝過程之設計。 3. 權責 3.1 營...

    10年前   
    1865    0

    机械开题报告 设计题目:电梯控制系统的PLC原理图及梯形图设计

     机械开题报告  设计题目:电梯控制系统的PLC原理图及梯形图设计  电梯的国内外研究动向及意义  从1887年美国奥的斯公司制造出世界上第一台电梯,到中国最早的一部电梯在上海出现,电梯行业在...

    3年前   
    716    0

    基于DS18B20的温度显示及其报警控制系统(含完整原理图及C程序)毕业论文

     XX 大 学 毕 业 设 计( 论 文 ) 题目 基于单片机的数字温度计及其报警系统 作者 学院 物理学院 专业 电子信息科学与技术 学号 ...

    5年前   
    1711    0

    文档贡献者

    文***享

    贡献于2020-12-26

    下载需要 8 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档