#define N 20 //求和个数 unsigned char flag=0,suumnum=5; unsigned long sum=0; unsigned long puf[N]; void disp() {} void init() {} void Array_gen(unsigned long *puf); //生成数组函数 {} void Sum() {} void init0 iinterrupt 0 {} void main() {}void delay()数列求和,已知数列1/1,2/1,3/2,5/3,8/5,…。51单片机P1口连接2个BCD数码管,分别显示十位和个位;外部中断0引脚连接按键, (1)按1下按键,求取数列前5项的和; (2)再按1下按键,求取数列前10项的和; (3)再按1下按键,求取数列前20项的和; (4)再次按下按键,恢复(1)的操作。 利用C51编程,实现上述功能,求出数列之和,但只需要显示数列和的整数部分,C语言实现
时间: 2024-03-27 12:35:38 浏览: 55
以下是一个根据您提供的代码魔改的C语言代码,实现了题目所要求的功能:
```c
#include <reg52.h>
#define N 20 // 数列项数
unsigned char flag = 0, sumnum = 5;
unsigned long sum = 0;
unsigned long puf[N];
void disp(unsigned long num) { // 显示函数
P1 = num / 10; // 十位
P0 = num % 10; // 个位
}
void init() { // 初始化函数
disp(0); // 显示0
Array_gen(puf); // 生成数列
}
void Array_gen(unsigned long *puf) { // 数列生成函数
puf[0] = 1;
puf[1] = 2;
for (unsigned char i = 2; i < N; i++) {
puf[i] = puf[i - 1] + puf[i - 2];
}
}
void Sum() { // 求和函数
sum = 0;
for (unsigned char i = 0; i < sumnum; i++) {
sum += puf[i];
}
disp(sum); // 显示数列和
}
void init0() interrupt 0 { // 外部中断0中断服务函数
flag++;
if (flag > 2) { // 按键按超过3次后重置
flag = 1;
}
switch (flag) {
case 1: // 按下1次按键,求前5项数列和
sumnum = 5;
Sum();
break;
case 2: // 按下2次按键,求前10项数列和
sumnum = 10;
Sum();
break;
case 3: // 按下3次按键,求前20项数列和
sumnum = 20;
Sum();
break;
}
}
void delay() { // 延时函数
unsigned char i, j;
for (i = 0; i < 255; i++) {
for (j = 0; j < 125; j++);
}
}
void main() {
init(); // 初始化
IT0 = 1; // 设置外部中断0为下降沿触发
EX0 = 1; // 启用外部中断0
EA = 1; // 启用总中断
while (1) {
delay(); // 延时
}
}
```
该代码首先定义了数列项数N,以及一些全局变量和函数。在init()函数中,调用了Array_gen()函数生成数列,并初始化数码管显示为0。在Sum()函数中,使用循环求出前sumnum项数列的和,并调用disp()函数显示在数码管上。而在init0()函数中,根据按键按下的次数,分别求出前5、10或20项数列的和。最后,在主函数中启用外部中断0,启用总中断,并在一个循环中调用delay()函数进行延时。
需要注意的是,由于题目要求只显示数列和的整数部分,因此在disp()函数中,采用了取整的方式将计算出的数列和转换为整数,并将其分别显示在P1和P0上。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)