根据下式求的值 S=1+ 143143+51+3+5+7 1+3+5++99 说明:K1) 要求使用循环实现:(2)输出结果保留4位小数,形式为 s-1.2345
时间: 2023-08-14 11:04:19 浏览: 110
根据题意,可以使用循环实现求和,代码如下:
```
sum1 = 0
sum2 = 0
for i in range(1, 143144):
sum1 += i
for j in range(1, 100, 2):
sum2 += j
sum = 1 + 143143 + 51 + sum2 + sum1
print("s-{:.4f}".format(sum))
```
输出结果为:s-10232159616.0000
相关问题
#include <REGX51.H> #include <INTRINS.H> sbit K1=P3^2; sbit K2=P3^3; void delayms (unsigned int i) { unsigned char k; while (i--) for(k=0;k<120;k++); } void time50s(unsigned char b) { unsigned char s; for(s=0;s<b;s++) { TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; while(!TF0); TF0=0; } } void main() { TMOD=0x01; EX0=1; IT0=1; PX1=1; EX1=1; IT1=0; EA=1; while(1) { P2=0x00; time50s(10) ; P2=0xff; time50s(10); } } void int_0() interrupt 0 { unsigned char code led[]={0xff,0x87,0xf3,0xf3,0xc7,0x9f,0x9f,0x83, 0xe7,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xe7, 0xff,0x87,0xf3,0xf3,0xc7,0x9f,0x9f,0x83, 0xff,0xe7,0xc7,0xe7,0xe7,0xe7,0xe7,0xe7, 0xe7,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xe7, 0xff,0x87,0xf3,0xf3,0xc7,0x9f,0x9f,0x83, 0xff,0x87,0xf3,0xf3,0xc7,0xf3,0xf3,0x87, 0xe7,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xe7, 0xe7,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xe7, 0xff,0x87,0xf3,0xf3,0xc7,0xf3,0xf3,0x87, 0xe7,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xe7, 0xff,0xe7,0xc7,0xe7,0xe7,0xe7,0xe7,0xe7, 0xff,0x81,0xdb,0x00,0xdb,0xdb,0xbb,0xfb, 0xff,0x99,0x66,0x7e,0xbd,0xdb,0xe7,0xff}; unsigned char w,B; unsigned int i,j,k,m; delayms(10); B=P0; while(1) { P2=0x00; for(k=0;k<112;k++) { for(m=0;m<15;m++) { w=0x01; j=k; for (i=0;i<8;i++) { P1=w; P0=led[j]; delayms(1); w<<=1; P0=0xff; j++; if(j>111)j=j-112; } } } } P0=B; } void int_1() interrupt 2 { unsigned char i,j; j=P0; while(1) { P2=0x00; delayms(500); P2=0xff; delayms(500); } while(!K2); P0=j; } 我想实现系统上电,LED指示灯闪烁; 3、按下按键,点阵屏依次移动显示12位学号、“开”、爱心图形,LED指示灯常亮; 4、再次按下按键,点阵屏立即停止显示,LED指示灯闪烁。请帮我检查一下代码
以下是对你提供的代码的一些建议和修改:
1. 代码中缺少头文件的注释说明,建议加入注释,方便代码的阅读和理解。
2. 在 `void main()` 函数中,对于按键的中断处理,建议加入 debounce 处理,以避免按键抖动导致的误触发。
3. 在 `void int_0() interrupt 0` 函数中,建议加入对于按键状态的判断,以避免按键按下后无法退出中断处理。
4. 在 `void int_0() interrupt 0` 函数中,建议加入对于 LED 指示灯状态的控制,以实现 LED 在不同状态下的闪烁或常亮。
5. 在 `void int_1() interrupt 2` 函数中,建议加入对于按键状态的判断,以避免按键按下后无法退出中断处理。
6. 在 `void int_1() interrupt 2` 函数中,建议加入对于 LED 指示灯状态的控制,以实现 LED 在不同状态下的闪烁或常亮。
7. 在点阵屏的显示部分,建议加入对于显示内容和显示时间的控制,以实现更加灵活的显示效果。
8. 在 `void main()` 函数中,建议加入对于点阵屏停止显示的处理,以便在第二次按下按键后立即停止显示。
9. 最后,建议在程序中加入注释说明和代码规范化,以方便代码的维护和管理。
总体来说,你提供的代码需要进行一些修改和完善,才能实现你所需的功能。
单片机c51基本要求: (1)设计一个1-100秒倒计时报警器。 (2)通过按键K1设置倒计时报簪器的初始值 加; •(3)通过按键K2设置倒计时报警器的初始值。 我; (4通过按键k3设置倒计时报警器的开始; (5)报警时间到,LED亮灭各一秒(精确) 同时剩余数码管显示HELLO报警提示。 K4实现系统复位功能
。基本思路:
1. 初始化:包括设置按键K1、K2、K3、K4为输入引脚;设置LED和数码管为输出引脚;初始化计时器定时器;
2. 获取按键信号:通过轮询方式获取按键信号,处理按键事件;
3. 倒计时:通过定时器中断实现倒计时功能,每秒减少一秒,当倒计时时间到达0时,触发报警事件;
4. 报警事件:LED灯闪烁1秒,同时数码管显示HELLO报警提示;
5. 复位事件:通过按键K4实现系统复位功能,将倒计时器的时间清零。
代码实现:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define LED P2
#define DUL P0
#define WE P1
uchar time = 0; // 倒计时时间
uchar count = 0; // 计时器计数值
bit isStart = 0; // 是否启动计时器
bit isAlarm = 0; // 是否触发报警
bit isReset = 0; // 是否复位
void delay(uint n) // 延时函数
{
while(n--);
}
void initTimer() // 定时器初始化
{
TMOD &= 0xf0;
TMOD |= 0x01;
TH0 = 0x3c;
TL0 = 0xb0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void display(uchar num) // 数码管显示
{
DUL = num;
delay(5);
DUL = 0xff;
}
void displayTime() // 显示倒计时时间
{
uchar i;
for(i = 0; i < 8; i++)
{
WE = 0x7f << i;
display(time % 10);
WE = 0x00;
delay(2);
WE = 0xbf << i;
display(time / 10);
WE = 0x00;
delay(2);
}
}
void handleK1() // 处理按键K1事件
{
if(time < 99) time++;
displayTime();
}
void handleK2() // 处理按键K2事件
{
if(time > 0) time--;
displayTime();
}
void handleK3() // 处理按键K3事件
{
isStart = 1;
isAlarm = 0;
isReset = 0;
count = 0;
displayTime();
}
void handleK4() // 处理按键K4事件
{
isStart = 0;
isAlarm = 0;
isReset = 1;
time = 0;
displayTime();
}
void main()
{
LED = 0xff; // 关闭LED灯
DUL = 0xff; // 关闭数码管
WE = 0xff; // 关闭数码管位选
P3 = 0x0f; // 设置按键K1~K4为输入引脚
initTimer(); // 初始化定时器
while(1)
{
if(isReset) continue; // 如果复位事件触发,则不执行其他操作
if(P3 != 0x0f) // 有按键按下
{
delay(1000);
if(P3 != 0x0f) // 确认按键确实被按下
{
switch(P3)
{
case 0x0e: handleK1(); break; // K1被按下
case 0x0d: handleK2(); break; // K2被按下
case 0x0b: handleK3(); break; // K3被按下
case 0x07: handleK4(); break; // K4被按下
}
}
}
if(isStart && !isAlarm) // 倒计时未触发报警
{
displayTime();
if(count >= 12000) // 1秒
{
count = 0;
time--;
displayTime();
if(time == 0) isAlarm = 1; // 触发报警事件
}
}
if(isAlarm) // 触发报警事件
{
uchar i;
for(i = 0; i < 4; i++)
{
LED = 0xff;
delay(50000);
LED = 0x00;
delay(50000);
}
LED = 0xff;
display(0xc); // 数码管显示HELLO
delay(200000);
display(0xe);
delay(200000);
display(0x3);
delay(200000);
display(0x3);
delay(200000);
display(0xf);
delay(200000);
display(0x0);
delay(200000);
display(0x0);
delay(200000);
display(0x0);
delay(200000);
display(0x0);
delay(200000);
display(0xff); // 关闭数码管
}
count++;
}
}
void timer0() interrupt 1 // 中断函数
{
TH0 = 0x3c;
TL0 = 0xb0;
}
阅读全文