m0_60153080 2023-06-29 16:01 采纳率: 50%
浏览 6

汇编语言编写数字温度计

如何用汇编语言设置数字温度计精确到小数点后两位并且将温度显示在液晶显示屏中

img

img

  • 写回答

2条回答 默认 最新

  • Minuw 2023-06-29 16:18
    关注

    参考
    使用8051单片机和LCD1602液晶显示屏:

    ; 定义端口和寄存器地址
    LCD_DATA equ P1
    LCD_CTRL equ P2
    TEMP_SENSOR equ P3
    
    ; 定义常量
    LCD_LINE1 equ 0x80 ; 第一行
    LCD_LINE2 equ 0xC0 ; 第二行
    DELAY_TIME equ 10 ; 延时时间
    
    ORG 0x0000 ; 程序起始地址
    
    ; 初始化函数
    INIT:
        MOV A, #0x38 ; 8位数据总线,2行显示,5x7点阵字符
        ACALL LCD_CMD ; 发送命令到液晶显示屏
        MOV A, #0x0C ; 打开显示,关闭光标
        ACALL LCD_CMD ; 发送命令到液晶显示屏
        MOV A, #0x06 ; 设置光标移动方向为右移
        ACALL LCD_CMD ; 发送命令到液晶显示屏
        MOV A, #0x01 ; 清屏
        ACALL LCD_CMD ; 发送命令到液晶显示屏
        ACALL DELAY ; 延时
    
    ; 主程序
    MAIN:
        MOV A, TEMP_SENSOR ; 读取温度传感器的数据
        ACALL CONVERT ; 将温度数据转换为合适的格式
        ACALL LCD_DISPLAY ; 将温度显示在液晶显示屏上
        ACALL DELAY ; 延时
        SJMP MAIN ; 循环执行
    
    ; 命令发送函数
    LCD_CMD:
        MOV LCD_DATA, A ; 将命令写入数据端口
        CLR LCD_CTRL.0 ; 将RS引脚置低,选择命令模式
        SETB LCD_CTRL.1 ; 将EN引脚置高,使能液晶显示屏
        ACALL DELAY ; 延时
        CLR LCD_CTRL.1 ; 将EN引脚置低,禁用液晶显示屏
        RET
    
    ; 数据发送函数
    LCD_DATA:
        MOV LCD_DATA, A ; 将数据写入数据端口
        SETB LCD_CTRL.0 ; 将RS引脚置高,选择数据模式
        SETB LCD_CTRL.1 ; 将EN引脚置高,使能液晶显示屏
        ACALL DELAY ; 延时
        CLR LCD_CTRL.1 ; 将EN引脚置低,禁用液晶显示屏
        RET
    
    ; 延时函数
    DELAY:
        MOV R0, #DELAY_TIME
    DELAY_LOOP:
        DJNZ R0, DELAY_LOOP
        RET
    
    ; 温度转换函数
    CONVERT:
        ; 将温度传感器的数据转换为温度值
        ; 这里假设温度传感器的数据是8位无符号整数
        ; 温度值 = 数据 * 0.488
        MOV B, #0x0F8 ; 乘以0.488的小数部分
        MUL AB ; 执行乘法
        MOV A, B ; 结果存放在寄存器B中
        MOV B, #100 ; 除以100,得到整数部分
        DIV AB ; 执行除法
        RET
    
    ; 温度显示函数
    LCD_DISPLAY:
        ; 将温度显示在液晶显示屏上
        MOV A, #LCD_LINE1 ; 显示在第一行
        ACALL LCD_CMD ; 发送命令到液晶显示屏
        MOV A, B ; 显示整数部分
        ACALL LCD_DATA ; 发送数据到液晶显示屏
        MOV A, #0x2E ; 显示小数点
        ACALL LCD_DATA ; 发送数据到液晶显示屏
        MOV A, B ; 显示小数部分
        ANL A, #0x0F ; 只取小数点后两位
        ACALL LCD_DATA ; 发送数据到液晶显示屏
        MOV A, #LCD_LINE2 ; 显示在第二行
        ACALL LCD_CMD ; 发送命令到液晶显示屏
        RET
    
    END ; 程序结束
    
    评论

报告相同问题?

问题事件

  • 创建了问题 6月29日