用c语言中的while,if,else,写一个2:00倒计时循环,一直到0:00的代码
时间: 2024-05-11 08:15:18 浏览: 67
好的,以下是代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int hour = 2, minute = 0;
while (hour >= 0) {
if (hour < 10) {
printf("0%d:", hour);
} else {
printf("%d:", hour);
}
if (minute < 10) {
printf("0%d\n", minute);
} else {
printf("%d\n", minute);
}
minute--;
if (minute < 0) {
minute = 59;
hour--;
}
Sleep(1000);
system("cls");
}
printf("00:00\n");
return 0;
}
```
这个代码可以在命令行中运行,从2:00开始循环倒计时,直到0:00。每隔1秒钟更新一次时间,并且使用`system("cls")`清除之前的输出,使得时间的输出始终在同一个位置。
相关问题
项目8:倒计时定时提醒装置 任务1:通过串口下发倒计时定时提醒,定时时间范围(0-999s) 倒计时过程中无法更新定时时间;任务2:动态数码管显示定时时间; 任务3:按下独立按键K1,利用定时器按秒开始倒计时; 任务4:倒计时大于20s时,绿灯闪烁,10s—20s时黄灯闪烁,10s内红灯闪烁; 任务5:按下独立按键K2,停止倒计时提醒,倒计时归零; 任务6:倒计时结束后,蜂鸣器发声; I 任务7:按下独立按键K3,蜂鸣器停止发声;用c语言写一段代码
由于涉及到硬件操作,本回答只提供参考代码,请根据具体硬件进行适当修改。
```c
#include <reg52.h>
#define LED_GREEN P0_0
#define LED_YELLOW P0_1
#define LED_RED P0_2
#define BUZZER P0_3
#define BUTTON_START P1_0
#define BUTTON_STOP P1_1
#define BUTTON_BUZZER_STOP P1_2
#define DISPLAY_PORT P2
// 定时器计数器
unsigned int timer_counter;
// 定时器计时
unsigned int timer_countdown;
// 定时器是否在计时中
bit timer_running;
// 数码管段码表
unsigned char display_table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
// 数码管位选
void display_select(unsigned char digit) {
DISPLAY_PORT = ~ (1 << digit);
}
// 数码管显示数字
void display_digit(unsigned char digit, unsigned char num) {
display_select(digit);
DISPLAY_PORT = display_table[num];
}
// 数码管显示时间
void display_time(unsigned int time) {
display_digit(0, time / 100);
display_digit(1, time / 10 % 10);
display_digit(2, time % 10);
}
// 定时器计时中断处理函数
void timer_isr() interrupt 1 {
TH0 = 0xff;
TL0 = 0x9c;
if (timer_running) {
timer_counter++;
if (timer_counter == 20) {
LED_GREEN = !LED_GREEN;
}
if (timer_counter == 30) {
LED_YELLOW = !LED_YELLOW;
}
if (timer_counter == 40) {
LED_RED = !LED_RED;
}
if (timer_counter >= timer_countdown) {
timer_running = 0;
BUZZER = 1;
}
}
}
void main() {
TMOD = 0x01; // 定时器0工作模式1
TH0 = 0xff;
TL0 = 0x9c;
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启全局中断
TR0 = 1; // 启动定时器0
while (1) {
if (!timer_running) {
if (BUTTON_START == 0) {
unsigned int time = 0;
while (BUTTON_START == 0);
// 读取下发的倒计时时间
while (1) {
if (SBUF != 0xff) {
if (SBUF >= '0' && SBUF <= '9') {
time = time * 10 + SBUF - '0';
} else {
break;
}
}
}
// 倒计时时间范围(0-999s)
if (time > 999) {
time = 999;
}
timer_countdown = time;
timer_running = 1;
timer_counter = 0;
BUZZER = 0;
LED_GREEN = 1;
LED_YELLOW = 1;
LED_RED = 1;
}
} else {
if (BUTTON_STOP == 0) {
while (BUTTON_STOP == 0);
timer_running = 0;
BUZZER = 1;
LED_GREEN = 1;
LED_YELLOW = 1;
LED_RED = 1;
}
}
if (BUTTON_BUZZER_STOP == 0) {
while (BUTTON_BUZZER_STOP == 0);
BUZZER = 1;
}
display_time(timer_running ? timer_countdown - timer_counter : timer_countdown);
}
}
```
以上是一个基本的倒计时定时提醒装置的代码,可根据需求进行适当修改。
项目8:倒计时定时提醒装置 任务1:通过串口下发倒计时定时提醒,定时时间范围(0-999s) 倒计时过程中无法更新定时时间;任务2:动态数码管显示定时时间; 任务3:按下独立按键K1,利用定时器按秒开始倒计时; [任务4:倒计时大于20s时,绿灯闪烁,10s—20s时黄灯闪烁,10s内红灯闪烁; 任务5:按下独立按键K2,停止倒计时提醒,倒计时零; 任务6:倒计时结束后,蜂鸣器发声 任务7:按下独立按键K3,蜂鸣器停止发声; 用c语言写代码,在51单片机上实现效果
以下是51单片机的代码实现:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P3^2; // 定时开始按键
sbit K2 = P3^3; // 定时停止按键
sbit K3 = P3^4; // 蜂鸣器停止按键
sbit BEEP = P2^3; // 蜂鸣器
sbit LED_R = P1^0; // 红灯
sbit LED_Y = P1^1; // 黄灯
sbit LED_G = P1^2; // 绿灯
uchar code SEG7[] = { // 数码管段码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
uchar cnt; // 倒计时计数器
bit flag; // 倒计时标志
uint time; // 定时时间
uchar sec, min, hr; // 秒分时
void delay_ms(uint ms) { // 毫秒延时函数
uint i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 110; j++);
}
void timer0() interrupt 1 { // 定时器0中断
TH0 = (65536 - 1000) / 256; // 1ms定时器
TL0 = (65536 - 1000) % 256;
if (flag) { // 倒计时中
if (--cnt == 0) { // 计数器归零
flag = 0; // 倒计时结束
time = 0; // 清零计时时间
BEEP = 1; // 停止蜂鸣器
}
if (cnt >= 20000) { // 大于20s,绿灯闪烁
if (cnt % 500 == 0) LED_G = ~LED_G;
} else if (cnt >= 10000) { // 10s—20s,黄灯闪烁
if (cnt % 250 == 0) LED_Y = ~LED_Y;
} else { // 10s内,红灯闪烁
if (cnt % 100 == 0) LED_R = ~LED_R;
}
}
}
void display_time() { // 数码管显示时间
uchar i, j;
for (i = 0; i < 4; i++) {
switch (i) { // 分离出秒分时
case 0: j = sec % 10; break;
case 1: j = sec / 10; break;
case 2: j = min % 10; break;
case 3: j = min / 10; break;
}
P0 = SEG7[j]; // 显示数字
P2 = ~(0x01 << i); // 显示位置
delay_ms(1); // 短暂延时
}
}
void main() {
TMOD = 0x01; // 定时器0工作方式1
TH0 = (65536 - 1000) / 256; // 1ms定时器
TL0 = (65536 - 1000) % 256;
EA = 1; // 开总中断
ET0 = 1; // 定时器0中断
TR0 = 1; // 启动定时器
while (1) {
if (!flag) { // 倒计时结束
if (K1 == 0) { // 按下定时开始按键
flag = 1;
cnt = time * 1000; // 计算倒计时计数器
LED_G = 0; // 绿灯亮
LED_Y = LED_R = 1; // 黄灯、红灯灭
BEEP = 0; // 开始蜂鸣器
}
if (K2 == 0) { // 按下定时停止按键
time = 0; // 清零计时时间
}
}
if (K3 == 0) { // 按下蜂鸣器停止按键
BEEP = 1; // 停止蜂鸣器
}
if (time < 1000) { // 时间范围(0-999s)
if (K1 == 0) { // 按下定时开始按键
sec = 0;
min = 0;
hr = 0;
while (K1 == 0) delay_ms(20); // 等待按键弹起
while (K1) { // 等待定时时间设置
display_time(); // 显示时间
if (K2 == 0) break; // 按下定时停止按键
if (++sec >= 60) { // 秒进位
sec = 0;
if (++min >= 60) { // 分进位
min = 0;
if (++hr >= 24) { // 时进位
hr = 0;
}
}
}
delay_ms(200); // 按键消抖
}
time = sec + min * 60 + hr * 3600; // 计算定时时间
}
}
}
}
```
注意,该代码仅供参考,需要根据硬件电路进行调整和修改。
阅读全文