秒表C语言程序
99.9s秒表代码c语言

#include <reg51.h>#include <intrins.h>sbit DG1 = P0^0;sbit DG2 = P0^1;sbit DG3 = P0^2;sbit START_KEY = P1^0;sbit SUSPEND_KEY = P1^1;sbit RESET_KEY = P1^2;sbit LED1 = P1^4;sbit LED2 = P1^5;sbit LED3 = P1^6;sbit LED4 = P1^7;unsigned char WorkMode = 0;#define STANDBY_MODE 0#define RECORD_MODE 1#define SUSPEND_MODE 2#define RECORDOUT_MODE 3unsigned int display_num = 0;unsigned char timeoutnum = 0;unsigned char duanxuan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void delay2ms(void);void dev_init(void);void Timer0_init(void);void Timer0_start(void);void Timer0_stop(void);void standby_mode(void);void record_mode(void);void suspend_mode(void);void recordout_mode(void);void display(unsigned int value);void main(){dev_init();Timer0_init();while(1){switch(WorkMode){case STANDBY_MODE:standby_mode();break;case RECORD_MODE:record_mode();break;case SUSPEND_MODE:suspend_mode();break;case RECORDOUT_MODE:recordout_mode();break;default:break;}display(display_num);}}void delay2ms(void) //误差0us{unsigned char a,b;for(b=4;b>0;b--)for(a=248;a>0;a--);_nop_(); //if Keil,require use intrins.h }void dev_init(void){DG1 = 0;DG2 = 0;DG3 = 0;LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;}void Timer0_init(void){TMOD = 0x01;TH0 = 0x3C;TL0 = 0xB0;EA = 1;}void Timer0_start(void){ET0 = 1;TR0 = 1;}void Timer0_stop(void){ET0 = 0;TR0 = 0;}void standby_mode(void){LED1 = 0;LED2 = 1;LED3 = 1;LED4 = 1;if(START_KEY == 0){timeoutnum = 0;display_num = 0;Timer0_init();Timer0_start();WorkMode = RECORD_MODE;}if(RESET_KEY == 0){Timer0_stop();timeoutnum = 0;display_num = 0;WorkMode = STANDBY_MODE;}}void record_mode(void){LED1 = 1;LED2 = 0;LED3 = 1;LED4 = 1;if(SUSPEND_KEY == 0){Timer0_stop();WorkMode = SUSPEND_MODE;}if(RESET_KEY == 0){Timer0_stop();timeoutnum = 0;display_num = 0;WorkMode = STANDBY_MODE;}}void suspend_mode(void){LED1 = 1;LED2 = 1;LED3 = 0;LED4 = 1;if(START_KEY == 0){Timer0_start();WorkMode = RECORD_MODE;}if(RESET_KEY == 0){Timer0_stop();timeoutnum = 0;display_num = 0;WorkMode = STANDBY_MODE;}}void recordout_mode(void){LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 0;if(RESET_KEY == 0){Timer0_stop();timeoutnum = 0;display_num = 0;WorkMode = STANDBY_MODE;}}void display(unsigned int value){P2 = duanxuan[value/100];DG1 = 1;delay2ms();DG1 = 0;P2 = duanxuan[(value%100)/10]+0x80;DG2 = 1;delay2ms();DG2 = 0;P2 = duanxuan[value%10];DG3 = 1;delay2ms();DG3 = 0;}void Timer0Interrupt(void) interrupt 1{TH0 = 0x3C;TL0 = 0xB0;timeoutnum++;if(timeoutnum == 2)//100ms{timeoutnum = 0;display_num++;if(display_num>=999){Timer0_stop();WorkMode = RECORDOUT_MODE;}}}#include <reg51.h>#include <intrins.h>sbit DG1 = P0^0; //位选1,数码管第一位sbit DG2 = P0^1; //位选2,数码管第二位sbit DG3 = P0^2; //位选3,数码管第三位sbit START_KEY = P1^0; //开始按键sbit SUSPEND_KEY = P1^1; //暂停按键sbit RESET_KEY = P1^2; //重置按键sbit LED1 = P1^4; //LED灯第一个sbit LED2 = P1^5; ////LED灯第二个sbit LED3 = P1^6; //LED灯第三个sbit LED4 = P1^7; //LED灯第四个unsigned char WorkMode = 0; //工作模式#define STANDBY_MODE 0 //宏定义,待机模式#define RECORD_MODE 1 //宏定义,计时模式#define SUSPEND_MODE 2 //宏定义,暂停模式#define RECORDOUT_MODE 3 //宏定义,计时超出99.9秒模式unsigned int display_num = 0; //显示的数据,如99.9秒为999unsigned char timeoutnum = 0; //定时器超时次数unsigned char duanxuan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管段选void delay2ms(void); //延时函数,2msvoid dev_init(void); //设备初始化void Timer0_init(void); //定时器0初始化void Timer0_start(void); //开始定时器0void Timer0_stop(void); //停止定时器0void standby_mode(void); //待机模式void record_mode(void); //计时模式void suspend_mode(void); //暂停模式void recordout_mode(void); //计时超出99.9s模式void display(unsigned int value); //数码管显示函数void main(){dev_init(); //设备初始化Timer0_init(); //定时器0初始化while(1){switch(WorkMode) //工作模式判断{case STANDBY_MODE: //待机模式standby_mode(); //待机模式工作break;case RECORD_MODE: //计时模式record_mode(); //计时模式工作break;case SUSPEND_MODE: //暂停模式suspend_mode(); //暂停模式工作break;case RECORDOUT_MODE: //计时超出99.9s模式recordout_mode(); //计时超出99.9s模式工作break;default:break;}display(display_num); //数码管显示}}void delay2ms(void) //误差0us{unsigned char a,b;for(b=4;b>0;b--)for(a=248;a>0;a--);_nop_(); //if Keil,require use intrins.h}void dev_init(void){DG1 = 0; //第一位数码管位选为0 即第一个数字不亮,下同DG2 = 0; //第二位数码管位选为0 即第一个数字不亮,下同DG3 = 0; //第三位数码管位选为0 即第一个数字不亮LED1 = 1; //第一个LED灯灭LED2 = 1; //第二个LED灯灭LED3 = 1; //第三个LED灯灭LED4 = 1; //第四个LED灯灭}void Timer0_init(void){TMOD = 0x01; //模式1TH0 = 0x3C; //TH0,TL0 定时0 装值TL0 = 0xB0;EA = 1; //使能中断}void Timer0_start(void){ET0 = 1; //开启定时器0中断TR0 = 1; //定时器0开始计时}void Timer0_stop(void){ET0 = 0; //禁止定时器0中断TR0 = 0; //停止计时器0计时}void standby_mode(void)LED1 = 0; //第一个LED灯亮,下面三句都为灭LED2 = 1;LED3 = 1;LED4 = 1;if(START_KEY == 0) //开始计时按键按下{timeoutnum = 0; //定时器溢出次数清0display_num = 0; //显示数据清0Timer0_init(); //定时器0初始化Timer0_start(); //开始计时WorkMode = RECORD_MODE; //模式切换至计时模式}if(RESET_KEY == 0) //重置按键按下{Timer0_stop(); //停止定时器0timeoutnum = 0; //定时器0溢出次数清0display_num = 0; //显示数据清0WorkMode = STANDBY_MODE; //工作模式切换至待机模式}}void record_mode(void){LED1 = 1;LED2 = 0; //第2个LED灯亮,其他三句都为灭LED3 = 1;LED4 = 1;if(SUSPEND_KEY == 0) //暂停按键按下{Timer0_stop(); //停止定时器0WorkMode = SUSPEND_MODE; //工作模式切换至暂停模式}if(RESET_KEY == 0) //重置按键按下{Timer0_stop(); //停止定时器0timeoutnum = 0; //定时器0溢出次数清0display_num = 0; //显示数据清0WorkMode = STANDBY_MODE; //工作模式切换至待机模式}}void suspend_mode(void)LED1 = 1;LED2 = 1;LED3 = 0; //第3个LED灯亮,其他三句都为灭LED4 = 1;if(START_KEY == 0) //开始计时按键按下{Timer0_start(); //开始定时器0WorkMode = RECORD_MODE; //工作模式切换至计时模式}if(RESET_KEY == 0) //重置按键按下{Timer0_stop(); //停止定时器0timeoutnum = 0; //定时器溢出次数清0display_num = 0; //显示数据清0WorkMode = STANDBY_MODE; //工作模式切换至待机模式}}void recordout_mode(void){LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 0; //第4个LED灯亮,其他三句都为灭if(RESET_KEY == 0) //重置按键按下{Timer0_stop(); //停止定时器0timeoutnum = 0; //定时器溢出次数清0display_num = 0; //显示数据清0WorkMode = STANDBY_MODE; //工作模式切换至待机模式}}void display(unsigned int value){P2 = duanxuan[value/100]; //第一个数码管段选DG1 = 1; //开位选delay2ms(); //延时2msDG1 = 0; //关位选P2 = duanxuan[(value%100)/10]+0x80; //第二个数码管段选,+0x80是为了显示小数点DG2 = 1; //开位选delay2ms(); //延时2msDG2 = 0; //关位选P2 = duanxuan[value%10]; //第三个数码管段选DG3 = 1; //开位选delay2ms(); //延时2msDG3 = 0; //关位选}//定时器0中断处理函数void Timer0Interrupt(void) interrupt 1{TH0 = 0x3C; //TH0,TL0 定时0 装值TL0 = 0xB0;timeoutnum++; //超时次数加1if(timeoutnum == 2)//100ms{timeoutnum = 0; //定时器溢出次数清0display_num++; //显示数据加1if(display_num>=999) //如果显示数据大于999,即99.9s{Timer0_stop(); //停止定时器0WorkMode = RECORDOUT_MODE; //工作模式切换至计时溢出模式}}}。
pic单片机C语言程序例程之stopwatch

//此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.01秒#include "p18f458.h"unsigned char s[4]; //定义0.01 秒、0.1 秒、1秒、10秒计时器unsigned char k,data,sreg;unsigned int i;const table[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};//不带小数点的显示段码表const table0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};//带小数点的显示段码表void clkint(void);//TMR0初始化子程序void tmint(){T0CON=0XCF; //设定TMR0L工作于8位定时器方式//内部时钟,TMR0不用分频INTCON=0X20; //总中断禁止,TMR0中断允许,清除TMR0的中断标志INTCON2bits.TMR0IP=1; //TMR0中断高优先级RCONbits.IPEN=1; //使能中断优先级}//系统其它部分初始化子程序void initial(){TRISA=0x00; //A口设置为输出TRISB=0XF0; //RB1输出,RB4输入TRISC=0x00; //SDO引脚为输出,SCK引脚为输出TRISE=0x00; //E口设置为输出SSPCON1=0x30; //SSPEN=1;CKP=1,FOSC/4SSPSTA T=0xC0; //时钟下降沿发送数据PIR1=0; //清除SSPIF标志data=0X00; //待显示的寄存器赋初值PORTBbits.RB1=0;PORTAbits.RA3=0;PORTE=0; //将K1,K2,K3,K4四条列线置0//SPI传输数据子程序void SPILED(char data){SSPBUF=data; //启动发送do{;}while(PIR1bits.SSPIF==0);PIR1bits.SSPIF=0;}//显示子程序,显示4位数void dispaly(){PORTAbits.RA5=0; //准备锁存for(k=0;k<4;k++){data=s[k];if(k==2) data=table0[data]; //个位需要显示小数点else data=table[data];SPILED(data); //发送显示段码}for(k=0;k<4;k++){data=0xFF;SPILED(data); //连续发送4个DARK,使显示好看一些}PORTAbits.RA5=1; //最后给锁存信号,代表显示任务完成}//软件延时子程序void DELA Y(){for(i = 3553; --i ;)continue;}//键扫描子程序void KEYSCAN(){while(1){dispaly(); //调用一次显示子程序while(PORTBbits.RB4==0){DELA Y(); //若有键按下,则软件延时break;}if (PORTBbits.RB4==0) break; //若还有键按下,则终止循环扫描,返回}}//等键松开子程序void keyrelax(){while(1){dispaly(); //调用一次显示子程序if (PORTBbits.RB4==1) break; //为防止按键过于灵敏,每次等键松开才返回}}/*高优先级中断向量*/#pragma code InterruptV ectorHigh=0x08void InterruptV ectorHigh (void){_asmgoto clkint //跳到中断程序_endasm}//中断服务程序#pragma code#pragma interrupt clkintvoid clkint(){TMR0=0X13; //对TMR0写入一个调整值。
单片机秒表设计程序及原理图

单片机秒表系统设计引言:中国使用单片机的历史只有短短的30年,在初始的短短五年时间里发展极为迅速。
纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。
以前没有单片机时,这些东西也能做,但是只能使用复杂的模拟电路,然而这样做出来的产品不仅体积大,而且成本高,并且由于长期使用,元器件不断老化,控制的精度自然也会达不到标准。
在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。
这样产品的体积变小了,成本也降低了,长期使用也不会担心精度达不到了。
所以,它的魔力不仅是在现在,在将来将会有更多的人来接受它、使用它。
据统计,我国的单片机年容量已达3亿片,且每年以大约20%的速度增长,但相对于世界市场我国的占有率还不到1%。
特别是沿海地区的玩具厂等生产产品多数用到单片机,并不断地辐射向内地。
所以,学习单片机在我国是有着广阔前景的。
一、单片机秒表系统设计目的及内容1、利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。
2、综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
3、通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。
4、通过本次系统设计,增强自己的动手能力。
认识单片机在日常生活中的应用的广泛性,实用性。
本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。
模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位!其中有两个数码管用来显示数据,一个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。
C语言实现秒表

源代码如下(作者:中南大学通信工程1602肖涛,qq:2391527690)#include<stdio.h>#include<conio.h>//_kbhit#include<windows.h>#include<stdlib.h>struct t{intho,mi,se;}ti;struct t carry(struct t sj){ sj.se++;if(sj.se==60){sj.se=0;sj.mi++;}if(sj.mi==60){sj.mi=0;sj.ho++;}if(sj.ho==24)sj.ho=0;return(sj);}void showtime(struct t sj){system("cls");printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t");printf("秒表显示器:");if(sj.se<10&&sj.ho<10&&sj.mi<10)//控制计时时时间显示格式printf("0%d:0%d:0%d\n",sj.ho,sj.mi,sj.se);if(sj.se>=10&&sj.ho<10&&sj.mi<10)printf("0%d:0%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se<10&&sj.mi>=10&&sj.se<10)printf("0%d:%d:0%d\n",sj.ho,sj.mi,sj.se);if(sj.se<10&&sj.mi<10&&sj.ho>=10)printf("0%d:0%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se>=10&&sj.mi>=10&&sj.ho<10)printf("0%d:%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se>=10&&sj.mi<10&&sj.ho>=10)printf("%d:0%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se<10&&sj.mi>=10&&sj.ho>=10)printf("%d:%d:0%d\n",sj.ho,sj.mi,sj.se);if(sj.ho>=10&&sj.mi>=10&&sj.se>=10)printf("%d:%d:%d\n",sj.ho,sj.mi,sj.se);}void main (){char m,n;ti.ho=ti.mi=ti.se=0;printf("\t*************************************************\n");printf("\t\t 欢迎使用秒表功能\n");printf("\t\t操作提示:第一次按回车开始计时!\n");printf("\t\t按z暂停,第二次按回车结束秒表程序\n");while(1){m=getch();if(m!='\r')//读入一个输入,如果是回车,跳出while printf("\t\t输入错误,仅能输入回车!\n");elsebreak;}printf("\t\t已经开始计时,但你可以输入'z'来暂停计时\n");while(1){if(_kbhit())//判断是否键入字符{m=getch();if(m=='\r')break;if(m!='\r'&&m!='z')printf("\n输入错误,仅支持回车或'z'\n");if(m=='z'){system("cls");printf("当前时间:");if(ti.se<10&&ti.mi<10&&ti.ho<10)printf("0%d:0%d:0%d\n",ti.ho,ti.mi,ti.se);if(ti.se>=10&&ti.ho<10&&ti.mi<10)//控制暂停时时间显示格式printf("0%d:0%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se<10&&ti.mi>=10&&ti.se<10)printf("0%d:%d:0%d\n",ti.ho,ti.mi,ti.se);if(ti.se<10&&ti.mi<10&&ti.ho>=10)printf("0%d:0%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se>=10&&ti.mi>=10&&ti.ho<10)printf("0%d:%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se>=10&&ti.mi<10&&ti.ho>=10)printf("%d:0%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se<10&&ti.mi>=10&&ti.ho>=10)printf("%d:%d:0%d\n",ti.ho,ti.mi,ti.se);if(ti.ho>=10&&ti.mi>=10&&ti.se>=10)printf("%d:%d:%d\n",ti.ho,ti.mi,ti.se);printf("\n按任意键继续\n");while(1){Sleep(500);if(_kbhit())//如果有输入会连续判断两个kbhit(),并把输入赋给ch,所以找个替罪羔羊n{n=getch();break;}}}}Sleep(1000);ti=carry(ti);showtime(ti);}system("cls"); }。
c统计时间的函数

c统计时间的函数C语言是一种广泛应用于计算机编程的高级语言,它具有较高的执行效率和灵活性。
在编写程序时,我们常常需要对时间进行计算。
本文将介绍C语言中常用的计算时间的函数及其使用方法。
1. time函数time函数是C语言中用于获取当前系统时间的函数,它的原型定义为:time_t time(time_t *timer);其中,参数timer是一个指向time_t类型的指针,用于存储从UTC时间1970年1月1日0时0分0秒到当前时间的秒数。
下面是一个简单的示例代码,使用time函数输出当前系统时间的秒数:#include <stdio.h>#include <time.h>int main(){time_t now = time(NULL); //获取当前系统时间printf("Current time: %ld seconds since 1970-01-0100:00:00 UTC\n", now);return 0;}2. clock函数clock函数是C语言中用于计算程序运行时间的函数,它的原型定义为:clock_t clock(void);其中,返回值为clock_t类型,表示程序运行的CPU时间。
下面是一个示例代码,使用clock函数计算程序运行时间:#include <stdio.h>#include <time.h>int main(){clock_t start, end;double cpu_time_used;start = clock(); //记录程序开始时间//程序运行end = clock(); //记录程序结束时间cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; //计算CPU时间printf("CPU time used: %f seconds\n", cpu_time_used);return 0;}3. difftime函数difftime函数是C语言中用于计算两个时间之间的时间差的函数,它的原型定义为:double difftime(time_t time1, time_t time2);其中,参数time1和time2分别为两个时间,返回值为double类型,表示两个时间之间的差值(以秒为单位)。
单片机秒表程序代码

TR0=1;ET0=1;EA=1;
while(1)
{
KeyHandle();
CountToLeds();
CountsToLed();
}}
if (isLock) c=0x40;
if (isQuery) c=0x00;
v=Counts[Countp2];
Leds[4]=v/1000+c;
Leds[5]=v/100%10+c;
Leds[6]=v/10%10+0x10+c;
Leds[7]=v%10+c;
}
void Lock()
{
Counts[Countp]=Count;
{
if (isStart) Lock();
isStart=1;
isQuery=0;
}
if (key==0x0d) isStart=0;
if (key==0x0b)
{ isStart=0;
isLock=0;
isQuery=0;
Count=0;}
if (key==0x07)
{
Countp2=(MAXC+Countp2-1)%MAXC;
if (v&0x10) c|=0x80;
if (v&0x80) c=0x00;
if ((v&0x40) && (bGlink)) c=0x00;
P2=c;P3=Ledc;
Ledc++;
if (Ledc>=8) Ledc=0;}
void readkey()
{ char c;
c=P1;
c&=0x0f;
c语言课程设计秒表

c语言课程设计秒表一、教学目标本课程的教学目标是使学生掌握C语言编程的基本知识,能够使用C语言编写简单的程序,并通过编写秒表程序,使学生了解程序的基本结构和编程思想。
知识目标:使学生掌握C语言的基本语法、数据类型、运算符、控制结构等基本知识。
技能目标:使学生能够使用C语言编写简单的程序,并能够通过编程解决实际问题。
情感态度价值观目标:培养学生对计算机编程的兴趣和热情,使学生认识到编程在现代社会的重要性。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构等基本知识,并通过编写秒表程序,使学生了解程序的基本结构和编程思想。
具体的教学内容安排如下:1.第一章:C语言概述,介绍C语言的历史和发展,以及C语言的基本语法和特点。
2.第二章:数据类型和运算符,介绍C语言的基本数据类型和运算符,以及如何使用它们进行数据的计算和操作。
3.第三章:控制结构,介绍C语言的控制结构,包括条件语句和循环语句,以及如何使用它们控制程序的执行流程。
4.第四章:函数,介绍C语言的函数,包括函数的定义、声明和调用,以及如何使用函数进行代码的模块化和复用。
5.第五章:秒表程序,通过编写秒表程序,使学生了解程序的基本结构和编程思想,并巩固前面所学的知识。
三、教学方法本课程的教学方法主要包括讲授法、案例分析法和实验法。
1.讲授法:通过教师的讲解,使学生掌握C语言的基本语法、数据类型、运算符、控制结构等基本知识。
2.案例分析法:通过分析实际的编程案例,使学生了解编程的实际应用,并巩固所学的知识。
3.实验法:通过编写实际的程序,使学生掌握C语言的编程技巧,并培养学生的编程能力和解决问题的能力。
四、教学资源本课程的教学资源主要包括教材、参考书、多媒体资料和实验设备。
1.教材:选用《C程序设计语言》作为主要教材,使学生掌握C语言的基本语法、数据类型、运算符、控制结构等基本知识。
2.参考书:提供《C语言编程实践》等参考书,供学生进行深入学习。
C语言Windows程序设计——使用计时器

C语⾔Windows程序设计——使⽤计时器传统意义上的计时器是指利⽤特定的原理来测量时间的装置, 在古代, 常⽤沙漏、点燃⼀炷⾹等⽅式进⾏粗略的计时, 在现代科技的带动下, 计时⽔平越来越⾼, 也越来越精确, 之所以需要进⾏计时是在很多情况下我们需要知道时间已经过去了多少, 举例说, 上课下课的打铃、考试时的计时、车站按时间间隔进⾏发车等。
不仅在⽇常⽣活中会应⽤到计时, 在⼀些电⼦设备中计时的普遍存在, 如⼿机⾥的闹钟、电⼦秒表、电⼦设备的定时关机等, 这些计时的⽬的都是相同的, 当达到⼀定时间后执⾏某件事, 计时器相当于提醒作⽤, 当达到某个时间后提醒⼈们或者机器该做某件事了。
在Windows系统中, 计时器作为⼀种输⼊设备存在于系统中, 当每到⼀个设定的时间间隔后它都会向应⽤程序发出⼀个 WM_TIMER 的消息, 以提醒程序规定的间隔时间已经过去了, 计时器在程序中的应⽤⼗分⼴泛, 举些我们容易想到的⽰例:1>. 游戏这控制物体的移动速度, ⽐如说某个物体每100毫秒移动某个单位距离;2>. ⽂件的⾃动保存, 当⽤户编辑某些⽂件时5分钟⾃动保存⼀次, 避免因意外情况造成编辑的成果全部丢失;3>. 实现程序的⾃动退出, 当程序达到某个设定的时间后程序⾃动退出;⼀、使⽤计时器计时器的使⽤主要分为创建、处理、销毁三个部分。
①. 创建: 创建⼀个计时器并设定其定计时器的任务周期, 例如每5秒向程序发送⼀条 WM_TIMER 消息 ;②. 处理: 根据接收到的 WM_TIMER 消息让程序作出响应的处理 ;③. 销毁: Windows的计时器属于系统资源, 在使⽤完毕后应及时销毁。
1>. 计时器的创建要创建⼀个计时器可以使⽤ SetTimer 函数, SetTimer函数的原型: UINT_PTR SetTimer( HWND hWnd, //窗⼝句柄 UINT_PTR nIDEvent, //定时器的ID UINT uElapse, //间隔时间, 单位为毫秒 TIMERPROC lpTimerFunc //所使⽤的回调函数 ); 参数说明:参数⼀窗⼝句柄即为接收 WM_TIMER 消息的窗⼝句柄;参数⼆为设置该计时器的ID, ⽤于与其他的计时器进⾏区分;参数三为计时器发送 WM_TIMER 消息的时间间隔, 单位为毫秒, 最⼤可设置的时间间隔为⼀个 unsigned long int 型所能容下的数据⼤⼩,为 4 294 967 295 毫秒(约合49.7天), 当设定的时间间隔到了后Windows就会向应⽤程序的消息队列放⼊⼀个 WM_TIMER 消息 ;参数四为定时器所使⽤的回调函数, 当使⽤回调函数时, 所产⽣的 WM_TIMER 消息⾃动调⽤回调函数进⾏处理。
MSP430单片机秒表程序(完整)

MSP430单片机"秒表" 程序(完整)/*******************************************************基于MSP430F449单片机的秒表*功能:秒计时,8位数码管显示,包括小时、分钟、秒和毫秒*此程序同样适用于其他系列单片机*by:duyunfu1987******************************************************/#include "msp430x44x.h"#define DPYOUT P3OUT //数码管的段选输出口#define DPYCOM P2OUT //38译码器的ABC输入#define OPENOUT P2OUT |= BIT3 //74HC573使能锁存段选#define CLOSEOUT P2OUT &= ~BIT3//74HC573无效int hour,min,sec,ms; //缓冲区定义,小时、分钟、秒、毫秒int count = 0; //2ms计数,计到5时ms增1//共“阴”极数码管的码表unsigned char LED7CC[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//延时n(us)void delay_us(int n){ while(n-- >0)_NOP();}//延时n(ms)void delay_ms(int dms){ int i;while(dms-- >0){ for(i=0;i<250;i++);}}//初始化缓冲区与IO口void Init(){hour = 0;min = 0;sec = 0;ms = 0;P2SEL = 0;P3SEL = 0;P2DIR |= BIT0+BIT1+BIT2+ BIT3;//A B C 使能位P2DIR &= ~(BIT4+BIT5+BIT6); //按键P3DIR = 0xff;P3OUT = 0x00;}//8位数码管动态显示函数void display(){DPYOUT = 0;_NOP();DPYOUT = LED7CC[ms%10]; DPYCOM = 7;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[ms/10]; DPYCOM = 6;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[sec%10]|0x80; DPYCOM = 5;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[sec/10]; DPYCOM = 4;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[min%10]|0x80; DPYCOM = 3;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[min/10]; DPYCOM = 2;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[hour%10]|0x80; DPYCOM = 1;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[hour/10]; DPYCOM = 0;OPENOUT;CLOSEOUT;}//按键处理函数void key_deal(int key){switch(key){case 0x60: //START--开始计时{ BTCTL = BT_ADL Y_2;IE2 |= BTIE;_EINT();}break;case 0x50: //STOP -- 停止BTCTL |= BTHOLD; break;case 0x30: //CLEAR--缓冲区清零{ hour = 0;min = 0;sec = 0;ms = 0;}break;default : break;}display();}//主函数void main( void ){int key;// Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;FLL_CTL0 |= XCAP18PF;Init();while(1){if((key = P2IN & 0x70)!=0x70){delay_ms(10);if((key = P2IN & 0x70)!=0x70){ key_deal(key);}}display();}}//BT中断服务程序,2ms计时#pragma vector = BASICTIMER_VECTOR__interrupt void BT_ISR(){count ++;if(count == 5){ count = 0;ms ++;}if(ms == 100){ms = 0;sec ++;if(sec == 60){sec = 0;min ++;if(min == 60){min = 0;hour ++;if(hour == 24)hour = 0;}}}}。
基于单片机89C51的计时器或秒表

基于单片机89C51的计时器或秒表AT89C51单片机秒表程序和电路图要求就是这样的了:1. 设计中采用的单片机以及显示器件,用AT89C51设计一个2位LED数码显示秒表,有开始,停止,清零就行。
2. 设计实现的基本功能,系统显示时间为00~99秒,每秒自动加1,设计越简单越好。
求电路图和相应的C程序,过程最好能详细些,因为要写实验报告~~希望高手帮忙悬赏分:50 - 解决时间:2010-6-1 15:51就是那个秒表问题,你给我的设计,汇编程序能改成C吗?悬赏分:0 - 解决时间:2010-6-1 18:25//---------------------------------------------下面是00-99秒计数的语言C程序。
#include<reg52.h>#include<intrins.h>unsigned char i, j;unsigned char code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90};bit k;//---------------------------------------------void main( ){TMOD = 0x01; //;T0定时方式1TH0 = (65536-50000) / 256; //;50ms@12MHzTL0 = (65536-50000) % 256;TR0 = 1; //;定时器初始化结束ET0 = 1; //;开启定时中断EX0 = 1;EX1 = 1;EA = 1;i = 0;j = 0;P0 = 0xC0;P2 = 0xC0;while(1);}//---------------------------------------------void timer0(void) interrupt 1{TL0 = (65536-50000) % 256;TH0 = (65536-50000) / 256; //;50ms@12MHzif (k) {j++;if (j == 20) {j = 0;i++;if (i == 100) i = 0;P0 = table[i / 10];P2 = table[i % 10];}}}//--------------------------------------------- void x0(void) interrupt 0{k = ~k;}//--------------------------------------------- void x1(void) interrupt 2{i = 0;j = 0;P0 = 0xC0;P2 = 0xC0;}//---------------------------------------------。
单片机课程设计--数字式秒表

湖南工学院单片机课程设说明书数字式秒表学生姓名:**系部:电气与信息工程系指导教师:**专业:自动化班级:自本1001班完成时间:2012年12月18号目录第1章数字式秒表的设计介绍 (1)1.1设计任务及功能要求 (1)1.2数字式秒表的方案介绍及工作原理说明 (1)第二章数字式秒表硬件系统的设计 (3)2.1 AT89S52芯片的介绍 (3)2.2 时钟电路的介绍 (4)2.3 复位电路的介绍 (4)2.4 键盘电路的介绍 (5)2.5 驱动及显示电路的介绍 (6)2.6 单片机下载口电路 (6)第三章数字式秒表软件系统的设计 (7)3.1 数字式秒表使用单片机资源情况 (7)3.2 主程序流程图 (8)3.3 秒表的工作流程图 (9)3.4 显示程序流程图 (10)3.5 按键扫描流程图 (11)3.6软件系统程序清单 (11)第4章设计结果及误差分析 (12)4.1 数字式秒表的设计结论及使用说明 (12)4.2 调试软件介绍 (12)4.3 程序仿真与结果 (13)4.4 KEIL uVision3简介 (15)4.5 proteus的简介 (15)4.5 误差分析及解决方法 (16)第五章数字式秒表的设计体会及课程教学建议 (17)5.1 秒表的课程设计体会 (17)5.2 课程教学建议 (17)参考文献 (19)附录A 原理图 (20)附录B PCB图、布局图、实物图 (21)附录C 程序 (24)附录 D 元器件清单 (26)第1章数字式秒表的设计介绍1.1设计任务及功能要求由单片机接收小键盘控制递增计时,由LED 显示模块计时时间,显示格式为 00-59(分)00-59(秒).00-99(毫秒),精确到0.01s的整数倍。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
使用单片机AT89S52作为主要控制芯片,以四位一体共阳极数码显示管通过三极管驱动作为显示部分,设计一个具有特定功能的数字式秒表。
数字秒表报告

题目: 数字秒表的设计目录摘要 (1)1 设计内容及要求 (2)1.1 计目的及主要任务 (2)1.1.1 设计目的 (2)1.1.2 设计任务及主要技术指标 (2)1.2设计思想 (2)2 设计方案 (3)2.1两种设计方案 (2)2.2 方案选择 (2)3 设计原理及单元模块设计 (4)3.1 设计原理及方法 (4)3.2 单元模块设计 (4)3.2.1 输入模块的设计 (4)3.2.2 单片机控制模块的设计 (5)3.2.3 输出模块的设计 (5)4 电路的仿真与分析 (6)5 硬件调试 (7)6 心得体会 (8)参考文献 (9)附录一:C语言数字秒表程序 (10)附录二:元件清单 (14)附录三:总电路图 (15)摘要数字电子技术应该是一门理论和实践相结合的课程,在这次课程设计中,我选择了《数字秒表》这样一个题目,希望在自己尝试亲自设计电路的过程中,更加深刻的理解数电中各种集成电路的应用。
这个电路的核心是STC89C52单片机。
硬件组成:输入设备为按键(键盘),输出为四位共阳数码管,其中STC89C52单片机芯片用于处理输入的数字信号并输出数字信号。
软件部分是由C语言设计的控制程序。
Keil软件将设计好的C语言程序转换成hex文件,并通过ISP 通信接口下载端下载到单片机的EEPROM中,用来控制单片机的输出电平,进而控制数码管上显示的数字,从而实现数字秒表的功能。
关键词:STC89C52 单片机输入设备输出设备C语言程序数字秒表1 设计内容及要求1.1 设计的目的及主要任务1.1.1设计目的(1)学会用C语言设计方法设计具有一定功能的模块,并能运用图形设计方法完成顶层原理图的设计,并用Protues软件实现仿真。
(2)掌握数字秒表的主要功能及如何用单片机来实现。
1.1.2设计任务及主要技术指标(1)设计一个能测量8名运动员短跑成绩的数字秒表,有10个按键,其中一个为启动开关,一个为清零开关,其它八个作为记录开关,一个四位数码管输出,显示记录时间。
c语言编写输入一个以秒为单位的时间值,将其转化成“时:分:秒”的形式输出,将转换操作定义成函式

c语言编写输入一个以秒为单位的时间值,将其转化成“时:分:秒”的形式输出,将转换操作定义成函式c语言编写输入一个以秒为单位的时间值,将其转化成“时:分:秒”的形式输出,将转换操作定义成函式#include<stdio.h>void trans(int sec){int hour,min;hour=sec/3600; 计算时 3600进位制min=(sec%3600)/60; 计算分 60进位制sec=(sec%3600)%60; 计算秒余下的全为秒数printf("%d时:%d分:%d秒\n",hour,min,sec);}int main(){int sec;printf("请输入秒数:\n");scanf("%d",&sec);trans(sec);return 0;}可以自己试试编写程式按“时:分:秒”格式输入时间,将这个时间转换以秒为单位的时间值输出,输出示例03:10:12=11412#include <stdio.h>main(){ int hour,min,sec,secs;printf("please enter the time\n hour:min:sec\n");scanf("%d",&hour);scanf("%d",&min);scanf("%d",&sec);secs=hour*3600+min*60+sec;printf("%d:%d:%d",hour,min,sec);printf("=%d",secs);return 0;}输入以秒为单位的时间,用Visual Basic编写程式,将其换算成几时几秒。
Private Sub Form_Click()Dim h1, m1, s1, s0 As Integerh1 = 0 '初始化时间m1 = 0s1 = 0s0 = 0s0 = InputBox(" 请输入以秒为单位的时间: ")s0 = Val(s0) '转换成数字If s0 > 3600 Then h1 = s0 \ 3600If s0 Mod 3600 >= 60 Then m1 = (s0 Mod 3600) \ 60s1 = (s0 Mod 3600) Mod 60Print "你输入的时间是" & h1 & "小时" & m1 & "分" & s1 & "秒"End Subxp 和 vb6 中通过测试c语言程式设计:输入一个弧度,转化成度分秒输出,秒保留一位小数,#include<stdio.h>int main(){ double a, i, j; int b, c, d, e; scanf("%lf", &a); b = a; i = a*60; c = i; c = c%60; i = a*3600;d = i; i=i*100;e = i; e = e%100; d = d%60; printf("%d度%d 分%d%c%d秒",b,c, d,'.',e);}#include<stdio.h>#define PI 3.1415926void main(){ double h,m,hh;int d,f;printf("请输入弧度:"); scanf("%lf",&h);hh=h; h/=PI; h*=180;d=h; h-=d; h*=60; f=h; h-=f; h*=60; m=h;printf("%lf弧度=%d度%d分%.1lf秒\n",hh,d,f,m+0.05);}输入总秒数,并将其以时、分、秒的形式输出,用JAVA程式设计public void toHMS(int ss){int hour = ss/3600;int min = (ss - (hour*3600))/60;int s = ss-(hour*3600+min*60);System.out.println(hour+":"+min+":"+s);}编写C语言程式将40000s转化成几小时几分几秒的形式kbenyu民蔽显话疏筑爽袋墙侄可以。