(7)用C51编程实现除法“90+8”的运算,并通过P2口的发光二极管分时显示结果的商和余数
时间: 2024-09-17 21:06:19 浏览: 35
单片机C语言实例--278-用P1、P0口显示除法运算结果.zip
在C51编程中,实现"90 + 8"的除法运算并分时显示商和余数的过程需要使用中断处理以及循环结构。首先,你需要了解C51的一些关键部分,比如定时器T1用于实现分时显示,以及P2口的控制功能。
以下是简化的步骤:
1. **声明变量**:
- 使用`unsigned char`存储商(result商),余数(remainder),以及临时变量。
2. **初始化定时器T1**:
- 设置T1工作于模式1,即计数从TH1、TL1清零开始,每计满16次就触发中断。
- 配置定时器周期以便每次中断间隔足够长,可以切换LED显示。
3. **主程序入口点(main.c)**:
- 开启定时器T1中断
- 设置初始值,如a = 90, b = 8
- 初始化商和余数为0
4. **中断服务函数(Timer1_Handler.c)**:
- 每次中断发生时,更新P2口的某一位LED状态,显示当前计算的结果的一部分。例如,如果用4位LED显示,先显示商,然后显示余数,每一位代表一位数字。
- 用减法算法计算商和余数,注意处理溢出情况。
5. **显示商和余数**:
- 商可以用10进制表示,每位显示在特定时间。
- 余数则直接显示。
6. **循环和中断管理**:
- 主循环等待中断,每次中断后检查是否完成全部计算,如果没有,则继续下一个LED的显示。
- 当计算完成后,关闭定时器中断,并显示最终结果。
```c
#include <reg52.h>
#include "TMOD.h"
// ... 其他头文件
unsigned char a = 90, b = 8;
unsigned char result商, remainder;
void Timer1_ISR() interrupt 1 {
P2 = (result商 << 4) | remainder; // 显示商和余数
if (/*条件判断*/ 完成显示) {
ET1 = 0; // 关闭定时器中断
}
}
void main(void) {
TMOD.TM = 0x01; // Timer1 mode 1
TH1 = 0xFD; TL1 = 0xFF; // 根据实际LED显示位数调整计数次数
ET1 = 1; EA = 1; // 启动定时器和中断
a -= b; // 计算90 - 8
result商 = a / b; // 商
remainder = a % b; // 余数
while(1);
}
```
阅读全文