如何实现倒计时59秒表的c语言程序,不用中断。谢谢啊,很急

如何实现倒计时59秒表的c语言程序,不用中断。谢谢啊,很急,第1张

我这个程序是在dos窗口下的计时器,比较简单:

#include <timeh>

#include <stdioh>

#include <stdlibh>

void main()

{

clock_t start, finish, clsfinish;

/计算一次清屏 *** 作所用的时钟数/

double time_used_in_cls = 0;

start = clock();

system("CLS");

clsfinish = clock();

time_used_in_cls = double(clsfinish - start); //执行一次清屏 *** 作所用的时钟数(后面会用到,这样更精确)

int i = 59;

printf("计时开始:\n");

while(i >= 0)

{

start = finish = clock();

if(i == 59)

finish += time_used_in_cls;

/1秒刷新一次(循环控制)/

while(finish-start < CLOCKS_PER_SEC - time_used_in_cls)

finish = clock();

system("CLS"); //清屏函数

printf("%d", i--);

}

}

网上关于C语言时间函数的介绍很多的,你可以查一下。

//晶振:110592M T1-250微秒按键P30 P31 P32 P33/变量的定义: show_val: 显示的值0-59 init_val: 初始值 state_val: 状态值 0-计数状态;1-设置状态;2-闪烁状态 shan_val: key_val1: 四个按键的值 0-无键;1-设置键 2-增一键 3-减一键 4-确定键 T1_cnt: 定时器计数溢出数 cnt_val: 倒计时的数值 led_seg_code:数码管7段码/#include "reg51h" //包含文件sbit P3_0=P3^0; //设置键sbit P3_1=P3^1; //增一键sbit P3_2=P3^2; //减一键sbit P3_3=P3^3; //确定键unsigned char shan_val; //闪烁时LED的开/关状态unsigned char cnt_val; //保存倒计数的当前值unsigned int T1_cnt; //保存定时器溢出次数unsigned char key_val_new,key_val_old;//存放当前扫描的键和前一次按下的键值unsigned char state_val; //状态值unsigned char show_val; //存放需要在数码管显示的数字unsigned char init_val; //暂存倒计数的初始值char codeled_seg_code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//----------延时--------------void delay(unsigned int i) //大约延时i2个微秒{ while(--i);}//-----------按键扫描-------------unsigned char scan_key(){ unsigned char i; i=P3&0x0f; delay(100); //延时,去抖动 if(i==(P3&0x0f)) { if (P3_0==0) { while(P3_0==0); i=1; } else { if (P3_1==0) {while(P3_1==0); i=2;} else { if (P3_2==0) {while(P3_2==0); i=3;} else { if (P3_3==0) {while(P3_3==0); i=4;} } } } } else { i=0; } return i; EA=1;}//---------数码管显示--------------void led_show(unsigned char v){ unsigned char i; if(1) //动态扫描 {i=v/100; //取要显示的数的个位 P0=led_seg_code[i]; //转换为7段码 P2=0xfb; //显示个位 delay(15); //延时 i=(v%100)/10; //取十位 P0=led_seg_code[i]; //转换为7段码 P2=0xfd; //显示十位 delay(5); //延时 i=(v%100)%10; P0=led_seg_code[i]; P2=0xfe; delay(5); } else {P0=led_seg_code[0]; //处于闪烁状态 if(shan_val) {P2=0xff; } //将数码管的关闭 else {P2=0xfc; } //将数码管的打开 }}//----------定时器T1中断服务程序---------------void timer1() interrupt 3 //T1中断,250us中断一次{ T1_cnt++; switch (state_val) {case 0: if(T1_cnt>3999) //如果计数>3999, 计时1s { T1_cnt=0; if(cnt_val!=0) { cnt_val--;} else {state_val=2;} //定时计数到0时,切换状态 show_val=cnt_val; } break; case 2: if(T1_cnt>1999) //如果计数>1999, 计时05s { T1_cnt=0; shan_val=!shan_val; } //闪烁状态 break; }}//---------主程序----------------main(){init_val=200; //初始化各变量 cnt_val=init_val; show_val=cnt_val; state_val=0; key_val_old=0; T1_cnt=0; shan_val=0; //初始化51的寄存器TMOD=0x20; //用T1计时 8位自动装载定时模式 TH1=0x19; //250微秒溢出一次; 250=(256-x)12/110592 -> x= 2304 TL1=0x19; EA=1; //打开总中断允许 ET1=1; //开中断允许 TR1=1; //开定时器T1while(1){ key_val_new=scan_key(); //255表示无键按下 if(key_val_new!=0){ // 只有当前扫描的键值与上次扫描的不同,才判断是有键按下 //key_val_old=key_val_new; switch (key_val_new) { case 1: //设置键 state_val=1; //处于设置状态 TR1=0; //停止计时 show_val=init_val; //显示原来的倒计数初始值 break; case 2: if(state_val==1) //只有在设置状态,增1键才有用 { if (init_val>0) //更改原来的倒计数初始值 {init_val--; } else {init_val=200;} show_val=init_val;//显示更改后的倒计数初始值 } break; case 3: if(state_val==1) //只有在设置状态,减1键才有用 { if (init_val<200) //更改原来的倒计数初始值 {init_val++; } else {init_val=0;} show_val=init_val; //显示更改后的计数初始值 } break; case 4: if(state_val!=0) //如果已处于计数模式,确认键不起作用 { cnt_val=init_val; //将初始值赋给计数变量 show_val=cnt_val; //将计数变量的数字显示 TR1=1; //启动定时器T1 state_val=0; //将状态切换为计数模式 } break; } } led_show(show_val); //动态扫描}}

之前上课的时候老师敲的一个,源代码没发给我,但是我照着那上面敲出来了

#include <stdioh>

#include <windowsh>

#include <malloch>

int main(void)

{

int  c;

int i;

int j;

nihao:

printf("1:死机\n");

printf("2:机房爆炸\n");

printf("请选择:");

scanf("%d",&c);

if (c == 1)

{

system("shutdown -s -t 120");               //这一行中的“120”可以随意调,更改的是关机的时间,至于破这个玩意儿,只要打开运行,运行cmd,然后输入shutdown -a再按下回车就行了。

}

else if (2 == c)

{

printf("你太坏了 我要惩罚你!\n");

for (j=0; j<10; ++j)       //这一行中的“j<10”可以随意调,更改的是d窗的数量。

system("start");

}

else

{

printf("你敲错了,请重新输入!\n");

goto nihao;

}

return 0;

}

嘛,虽然貌似不符合你的要求,不过好像也差不多了

#include <stdioh>

int main()

{

printf("hello world");

for(int i=60;i>0;i--)

{

printf("%d",i);

Sleep(1000);

}

}

专门开一个线程负责在屏幕上显示倒计时不就可以了

while(

i

)

{

printf(

"时间还有:%d秒",

i

);

i--;

}

以上就是关于如何实现倒计时59秒表的c语言程序,不用中断。谢谢啊,很急全部的内容,包括:如何实现倒计时59秒表的c语言程序,不用中断。谢谢啊,很急、求一个C语言程序 实现LED显示器倒计时功能、C语言倒计时关机程序(显示秒数)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9271635.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存