例5.4

#define SUM 100000
int main()
{ float amount,aver,total;
int i;
for(i=1,total=0;i<=1000;i++)
{printf("please enter amount:");
scanf("%f",&amount);
total=total+amount;
if(total>=SUM)break;
}
aver=total/i;
printf("num=%d\naver=%10.2f\n",i,aver);
return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C51程序,用于实现按键次数的统计和显示。程序中使用了C51的计数器功能来实现按键次数的统计,并通过LED数码管动态显示按键次数。程序中最大按键次数为999。 ```c #include <reg51.h> #define LED P0 // LED数码管控制端口 #define KEY P1 // 按键端口 #define KEY_MASK 0x0F // 按键掩码 unsigned int count = 0; // 按键计数器 unsigned char led_data[3] = {0}; // LED数码管显示数据 void delay(unsigned int t) { while(t--); } void display(unsigned char *data) { unsigned char i; for(i = 0; i < 3; i++) { LED = 0x01 << i; P2 = data[2-i]; delay(100); } } void main() { TMOD = 0x05; // 定时器0工作在模式1 TH0 = 0xFC; // 定时器0初值,1ms中断 TL0 = 0x67; TR0 = 1; // 启动定时器0 ET0 = 1; // 开启定时器0中断 EA = 1; // 开启总中断 while(1) { unsigned char key_value = KEY & KEY_MASK; if(key_value == 0x01) // 按键1按下 { count++; if(count > 999) count = 0; } led_data[0] = count % 10; // 个位 led_data[1] = count / 10 % 10; // 十位 led_data[2] = count / 100 % 10; // 百位 display(led_data); } } void timer0_isr() interrupt 1 { TH0 = 0xFC; // 定时器0重置 TL0 = 0x67; display(led_data); // 定时刷新LED数码管显示 } ``` 程序的执行流程如下: 1. 初始化定时器0,使其工作在模式1,即16位定时器/计数器模式,每个计数器增加到0xFFFF时,会触发定时器溢出中断。 2. 在主循环中,读取按键状态,如果按键1被按下,则按键计数器加1,如果计数器超过999,则将计数器重置为0。 3. 将计数器的值转换为3个数码管所需的显示数据,分别保存在led\_data数组中。 4. 调用display函数,将led\_data数组中的数据显示在LED数码管上。 5. 定时器0中断服务函数timer0\_isr被触发时,重置定时器0,并调用display函数,刷新LED数码管的显示。 需要注意的是,程序中没有进行按键消抖处理,如果按键抖动过大,可能会导致计数器增加过多。如果需要进行按键消抖处理,可以参考相关的消抖程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值