当前位置: 首页 > news >正文

51单片机应用从零开始(五)·加减乘除运算

51单片机应用从零开始(一)-CSDN博客

51单片机应用从零开始(二)-CSDN博客

51单片机应用从零开始(三)-CSDN博客

51单片机应用从零开始(四)-CSDN博客

详解 KEIL C51 软件的使用·建立工程-CSDN博客

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客

        前面我们通过对P3口的控制实现了流水灯的操作,下面我们来进行加减乘除运算的学习。

1.  用 P0 口、P1 口分别显示加法和减法运算结果

#include<reg51.h> 
void main(void) 
{ unsigned char m,n; m=43; //即十进制数 2x16+11=43 n=60; //即十进制数 3x16+12=60 P1=m+n; //P1=103=0110 0111B,结果 P1.3、P1.4、P1.7 口的灯被点亮P0=n-m; //P0=17=0001 0001B,结果 P0.0、P0.4 的灯被熄灭}

2.  用 P0、P1 口显示乘法运算结果

        51单片机的P0口和P1口是用来进行输入输出的通用口,可以通过程序来进行控制。如果要使用P0和P1口来显示乘法运算结果,可以采用以下步骤:

  1. 定义变量:定义两个变量m和n,分别用来存储乘数和被乘数。

  2. 通过P0口输入数据:使用P0口进行输入操作,将乘数和被乘数分别输入到变量m和n中。

  3. 进行乘法运算:使用乘法指令MUL将m和n相乘,将结果存入寄存器中。

  4. 将乘法结果存到P1口中:使用P1口进行输出操作,将乘法结果从寄存器中读取,通过P1口输出。

下面是代码实现的具体步骤:

#include<reg51.h> //包含单片机寄存器的头文件
void main(void) 
{ unsigned char m,n; unsigned int s; m=64; n=71; s=m*n;  //s=64*71=4544,需要 16 位二进制数表示,高 8 位送 P1 口,低 8 位送 P0 口//由于4544=17*256+192=H3*16*16*16+H2*16*16+H1*16+H0 //两边同除以 256,可得 17+192/256=H3*16+H2+(H1*16+H0)/256 //因此,高 8 位 16 进制数 H3*16+H2 必然等于 17,即 4544除以 256 的商//低 8 位 16 进制数 H1*16+H0 必然等于 192,即 4544 除以256 的余数P1=s/256; //高 8 位送 P1 口 ,P1=17=11H=0001 0001B, P1.0 和 P1.4口灭,其余亮P0=s%256; //低 8 位送 P0 口 , P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7 口灭,其余亮
}

3.  用 P1、P0 口显示除法运算结果

#include<reg51.h> //包含单片机寄存器的头文件
void main(void) 
{ P1=36/5; //求整数P0=((36%5)*10)/5; //求小数while(1) ; //无限循环防止程序“跑飞”}

4.  用自增运算控制 P0 口 8 位 LED 流水花样

#include<reg51.h> //包含单片机寄存器的头文件
/****************************************************** 
函数功能:延时一段时间
******************************************************/ 
void delay(void) 
{ unsigned int i; for(i=0;i<20000;i++) ; 
} 
/****************************************************** 
函数功能 :主函数
******************************************************/ 
void main(void) 
{ unsigned char i; for(i=0;i<255;i++) //注意 i 的值不能超过 255 { P0=i; //将 i 的值送 P0 口delay(); //调用延时函数} 
}

更多推荐:

时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客

http://www.lryc.cn/news/232574.html

相关文章:

  • Meta降本增效大招之:弃用产品
  • Adobe Illustrator——原创设计的宝藏软件
  • LEEDCODE 220 存在重复元素3
  • 从内网到公网:使用Axure RP和内网穿透技术发布静态web页面的完整指南
  • 第三天课程 RabbitMQ
  • Ubuntu18.04编译OpenCV时遇到无法下载ADE的问题
  • 基于JavaWeb+SSM+社区居家养老服务平台—颐养者端微信小程序系统的设计和实现
  • 算法实战:亲自写红黑树之五 删除erase的平衡
  • 春秋云境靶场CVE-2021-41402漏洞复现(任意代码执行漏洞)
  • 12 Go的接口
  • Python编程-----并行处理应用程序
  • kubernetes集群编排——istio
  • mfc140u.dll丢失的解决方法,以及mfc140u.dll解决方法的优缺点
  • 2源码安装网络协议
  • 未来服务器操作系统的趋势与展望
  • VB.net WebBrowser网页元素抓取分析方法
  • 自建ES6.2.4切阿里云商业版ES(7.10)整体方案
  • Vue实现封装自定义指令
  • <MySQL> 查询数据进阶操作 -- 聚合查询
  • arm开发板
  • nodejs+vue教室管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
  • rabbitMQ的Topic模式的生产者与消费者使用案例
  • 【软考篇】中级软件设计师 第五部分
  • 论文阅读——RetNet
  • 【Proteus仿真】【51单片机】锂电池管理系统
  • 【工具使用-VScode】设置 VSCode 的自动保存功能
  • 常用Git命令记录
  • Go语言常用库
  • 二叉树(进阶)
  • Flink之OperatorState