51单片机——双字节乘以双字节

DBmulDB:                                ; Double Byte × Double Byte
        MOV  R7 , # 0
        MOV  R6 , # 0
        MOV  R5 , # 0
        MOV   R4 , # 0                      ;R3R2×R2R1=R7R6R5R4
;低字节乘以低字节
        MOV   A, R0
        MOV   B , R2
        MUL   AB
        MOV  R4 ,A
        MOV   R5 , B
;高字节乘以低字节
        MOV   A, R1
        MOV   B , R2
        MUL   AB
        ADD   A, R5
        MOV   R5 ,A
        MOV   A, B
        ADDC A, # 0
        MOV   R6 ,A
;低字节乘以高字节
        MOV   A, R0
        MOV   B , R3
        MUL   AB
        ADD    A, R5
        MOV   R5 ,A
        MOV   A, B
        ADDC A, # 0
        ADD   A, R6
        MOV  R6 ,A
        MOV   A, # 0
        ADDC   A, # 0
        MOV   R7 ,A
;高字节乘以高字节
        MOV  A, R1
        MOV  B , R3
        MUL  AB
        ADD   A, R6
        MOV   R6 ,A
        MOV   A, B
        ADDC  A, R7
        MOV   R7 ,A
        RET
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
制作简易数字电压表需要以下材料: - 51单片机 - 电压传感器模块(例如LM35) - 七段数码管显示模块 - 连接线 - 面包板 步骤如下: 1. 将LM35模块的VCC引脚连接到单片机的5V引脚,GND引脚连接到单片机的GND引脚,OUT引脚连接到单片机的P1.0引脚。 2. 将七段数码管模块的引脚连接到单片机的IO引脚(可以参考七段数码管模块的说明文档)。 3. 在Keil或其他集成开发环境中编写程序,通过读取P1.0引脚的模拟电压值,计算出电压并将其显示在七段数码管上。 示例代码如下: ```c #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit DIO = P2^0; //七段数码管数据引脚 sbit RCLK = P2^1; //七段数码管锁存引脚 sbit SCLK = P2^2; //七段数码管时钟引脚 void delay(uint i) //延时函数 { while(i--); } void writeByte(uchar dat) //向七段数码管写入一个字节数据 { uchar i; for(i=0; i<8; i++) { SCLK = 0; DIO = dat & 0x80; dat <<= 1; SCLK = 1; } } void writeData(uchar dat) //向七段数码管写入显示数据 { RCLK = 0; writeByte(dat); RCLK = 1; } void main() { uchar val; float voltage; while(1) { val = P1; //读取P1.0引脚的模拟电压值 voltage = val * 5.0 / 255.0; //计算电压值 writeData((uchar)(voltage * 10)); //将电压值乘以10并转换为整数,然后显示在七段数码管上 delay(1000); //延时1秒钟 } } ``` 以上代码仅供参考,具体实现需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值