C语言编写秒表

合集下载

99.9s秒表代码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; //工作模式切换至计时溢出模式}}}。

基于单片机的秒表设计

基于单片机的秒表设计

摘要摘要数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。

本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。

设计中包括硬件电路的设计和系统程序的设计。

其硬件电路主要有主控制器,计时与显示电路和回零、启动和停表电路等。

主控制器采用单片机AT89S51,显示电路采用共阴极LED数码管显示计时时间。

文中设计了一种以单片机为控制核心的数字秒表。

该数字秒表采用C语言开发,通过数码管显示计时结果。

关键字:AT89S51;数字秒表;LED数码管显示ABSTRACTDigital electronic stopwatch display intuitive, read the convenient, high precision of advantages, widely used in time. The design of digital electronic stopwatch by single chip, and strive to simple structure, high precision for the target. Design including the design of the system hardware circuit and the design of the program. The main hardware circuit is the main controller, timing and display circuit and back to zero, start and stop watch circuit, etc. Lord AT89S51 single-chip controller, show circuit of the cathode LED digital pipe display time clock. This paper designs a with the single chip processor as the core to control the digital stopwatch. The digital stopwatch using C language development, through the digital pipe display the time.K ey words:AT89S51 Digital stopwatch The LED digital display目录摘要 (I)ABSTRACT (II)前言 (IV)1绪论 (1)1.1单片机的背景 (1)1.2 单片机的应用领域 (2)2 总体方案的设计 (4)2.1系统的组成模块 (4)2.2工作原理 (4)3系统的硬件电路设计 (6)3.1单片机的选择 (6)3.2 显示电路的选择与设计 (9)3.3 按键电路的选择与设计 (11)3.4 时钟电路的选择与设计 (11)3.5 复位电路的选择与设计 (14)4 系统的软件电路设计 (16)4.1 程序设计思想 (16)4.2 主程序设计 (16)4.3 中断程序设计 (18)4.4 系统的程序设计 (21)结论 (25)参考文献 (26)致谢 (27)附录 (28)前言前言秒表计时器是电器制造,工业自动化控制、国防、实验室及科研单位理想的计时仪器,它广泛应用于各种继电器、电磁开关,控制器、延时器、定时器等的时间测试。

C51单片机秒表计时(C语言)

C51单片机秒表计时(C语言)

南开大学滨海学院C51嵌入式软件设计(C语言)题目:计时秒表●功能描述:本设计实现在99秒内的秒表计时,一个按键实现开始、暂停、复位。

●原理概述:P1接四位七段数码管,P3。

2接一按键产生外部中断0,P3。

4-P3。

7控制扫描显示。

计时使用定时器0产生10ms中断累计。

按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零.主程序调用显示程序,显示程序实时显示计时时间.●效果显示●图一(电路总图)●图二(效果显示)注:第四位显示为单位:S●程序清单#include<reg51。

h>#include〈stdio.h>unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };sbit P37=P3^7;sbit P36=P3^6;sbit P35=P3^5;sbit P34=P3^4;unsigned int a=0,cout=0,mm=0;x,y,p,q;/*********延时*********************/void delay(){int g;for(g=70;g>0;g—-);}/*********显示程序*****************/void display(){x=cout/10;//秒十位P34=0;P1=Tab[x];delay();P34=1;y=cout—x*10; //秒各位P35=0;P1=Tab[y]; delay();P1=0x80;delay();P35=1;p=mm/10; //ms的高位P36=0;P1=Tab[p];delay();P36=1;P37=0; //显示单位:SP1=Tab[5]; delay();P37=1;}/*********主程序********************/ void main(){IT0=1;EX0=1;ET0=1;TMOD=0x01;TH0=0xD8;//装初值,10msTL0=0xF0;EA=1;while(1){display(); };}/*********外部按键中断子程序*********/ void int0 ()interrupt 0{if(a==0)//开始计时{ TR0=1;mm=0;a++;}else if(a==1)//暂停计时{TR0=0;a++;}else//置零{ a=0;mm=0;cout=0;}}/*********定时器子程序****************/ void time0()interrupt 1{TH0=0xD8;TL0=0xF0;mm++;if(mm==80)//考虑其它损耗,调整后约为1S {cout++;mm=0;}}。

pic单片机C语言程序例程之stopwatch

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写入一个调整值。

C语言实现秒表

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"); }。

单片机秒表程序代码

单片机秒表程序代码
TMOD=0x01;
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语言编写输入一个以秒为单位的时间值,将其转化成“时:分:秒”的形式输出,将转换操作定义成函式#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民蔽显话疏筑爽袋墙侄可以。

c语言课程设计秒表

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语言编程实践》等参考书,供学生进行深入学习。

倒计时数字秒表设计 (2)

倒计时数字秒表设计 (2)

课程设计任务书倒计时数字秒表设计摘要:本次课程设计以AT89S52单片机为核心设计一个倒计时数字秒表,计数初值为59并开始每秒自动减1,当按键1按下时记录当前时间值,当按键2按下时显示当前记录值,显示过之后再次按下按键1时秒表复位为59。

本设计硬件部分包括电源电路、复位电路、按键电路、振荡电路、数码管显示电路五部分电路,软件程序部分有定时中断程序、外部中断程序、显示子程序和延时子程序等。

软件Proteus画出原理图并进行仿真,依照仿真成功的原理图接线,在万能版上把个个器件焊接好从而实现预期的功能。

关键词:倒计时; AT89S52; 74LS47; 数码管目录1. 设计背景.......................................................................... 错误!未定义书签。

2. 设计方案.......................................................................... 错误!未定义书签。

2.1总体设计框图........................................................... 错误!未定义书签。

2.2时钟电路方案选择................................................... 错误!未定义书签。

2.3复位电路方案选择................................................... 错误!未定义书签。

2.4显示电路方案选择................................................... 错误!未定义书签。

3. 方案实施.......................................................................... 错误!未定义书签。

用C++编写模拟时钟程序

用C++编写模拟时钟程序

模拟时钟程序1 基本功能描述本次课程设计是基于面向对象的应用程序设计,主要运用C++语言在VC++开发环境下的MFC中编程实现。

模拟时钟的基本功能是程序初始在屏幕上有一指针式时钟表盘,表盘为椭圆形,内部分布有12个刻度,表盘上有三个长度和颜色不同的时针分针和秒针,相互之间容易辨认,指针的运动通过数学推导之后以代码实现。

表盘的下方是一个数字形式显示的数字钟,其显示时间的格式是时:分:秒,指针式时钟和数字式时钟显示的时间同步,且两个时钟所显示的时间与系统时间相致,页面的菜单项设有时间设置项,可以对所显示的时间进行调整,能进行调整的具体内容是年、月、日、时、分、秒。

设计成功之后,此应用程序便可以起到时钟显示的作用。

2 设计思路2.1 程序流程图图1 模拟时钟程序流程图2.2 程序流程分析(1) 绘制指针式的时钟和数字式的时钟图形时,要在CView类下进行。

其中OnDraw()函数在绘制视图窗口时被调用,在定义了画刷CBrush和画笔CPen之后,调用GetClientRect()定义屏幕大小并确定椭圆中心的坐标,然后调用Ellipse绘制椭圆,即指针式的时钟表盘,SetTextColor绘制文本颜色,调用MoveTo和LineTo绘制表盘指针,同时调用CreateFont()创建数字钟字体,TextOut则是用以数字钟的文本输出。

(2) 模拟时钟处理消息的过程:首先调用SetTimer函数定义时钟消息,包括参数指定计时器的ID,消息产生的时间间隔,回调函数为NULL;调用消息处理函数OnTimer()刷新窗口显示。

在相应的WM_TIMER消息处理里添加时钟消息响应代码;最后调用KillTimer 释放该时钟。

(3) 要实现时钟的动态效果,即时间窗显示的时间每隔一秒钟更新一次,需要在时间窗格的正文调用CStatusBar::SetPaneText()函数。

要定时更新,则应利用WM_TIMER消息,计时器每隔一定的时间间隔就会发出一个WM_TIMER消息,而这个时间间隔可由用户指定。

单片机课程设计--数字式秒表

单片机课程设计--数字式秒表

湖南工学院单片机课程设说明书数字式秒表学生姓名:**系部:电气与信息工程系指导教师:**专业:自动化班级:自本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个按键,其中一个为启动开关,一个为清零开关,其它八个作为记录开关,一个四位数码管输出,显示记录时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
delayms(10);
if(key4==0)
{
while(!key4);
TR1=0;
TR0=1;
}
}
}
void T0_time()interrupt 1 //定时器T0,中断序号为1
wela=1; //打开位选
P0=0xfb; //送位选数据
wela=0; //关闭位选
delayms(5); //延时
}
void delayms(uint xms) //延时子函数
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
num1++;
if(num1==10)
num1=0;
if(num==0) //当num自减为0时,重新为60.0,再开始倒计时
num=600;
num--; //num逐渐自减
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1; //开总中断
ET0=1; //开启定时器T0中断
ET1=1; //开启定时器T1中断
{
while(!key1) //等待按下
{
TR0=0; //定时器TR0关闭
TR1=1; //定时器TR1打开
num=0; //送数据num=0
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delayms(uint); //声明延时函数
void display(uchar,uchar,uchar); //声明显示函数
void keyscan(); //声明按键函数
sbit key1=P3^4; //申明四个按键的锁存端
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uchar code table[]={ //含有0~9的数字数组
0x3f,0x06,0x5b,0x4f,
while(1) //程序停在这里等待中断的发生,这个大循环也是实现数据显示的主体循环
{
keyscan();
//三个数码管要选送的数据
bai=num/100; //百位
shi=(num-100*bai)/10; //十位
ge=num-100*bai-shi*10; //个位
TR0=0;
TR1=~TR1; //每次按下,TR1的状态时相反的
}
}
if(key3==0) //使计数器显示为60.0
{
delayms(10);
if(key3==0)
P0=0xfd; //送位选数据
wela=0; //关闭位选
delayms(5); //延时
display(bai,shi,ge);
}
}
void display(uchar bai, uchar shi,uchar ge) //数码管显示子函数
#include<reg52.h> //52系列单片机头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit dula=P2^6; //申明U1锁存器的锁存端
sbit wela=P2^7; //申明U2锁存器的锁存端
//直接把第二只数码管的小数点烧出来
dula=1; //打开段选
P0=0x80; //送段选数据
dula=0; //关闭断选
P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱
wela=1; //打开位选
wela=1; //打开位选
P0=0xfd; //送位选数据
wela=0; //关闭位选
delayms(5); //延时
dula=1; //打开段选
P0=table[ge]; //送段选数据
dula=0; //关闭断选
P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱
{
TH0=(65536-45872)/256; //重装初值
TL0=(65536-45872)%256;
num2++;
if(num2==2) //如果到了2次,说明0.1秒的时间到
{
num2=0; //然后把num2清零重新再计2次
{
num2=0; //然后把num2清零重新再计2次
num1++;
if(num1==10)
num1=0;
num++; //num逐渐自加
if(num==600) //这个数十用来送给数码管显示的,到了60.0后归零
}
}
void T1_time()interrupt 3 //定时器T1,中断序号为3
{
TH1=(65536-45872)/256; //重装初值
TL1=(65536-45872)%256;
num2++;
if(num2==2) //如果到了2次,说明0.1秒的时间到
{
while(!key3);
TR0=0;
TR1=1;
num=600;
TR1=0;
}
}
if(key4==0) //实现计数器的倒数功能
for(j=110;j>0;j--);
}
void keyscan() //按键子函数
{
if(key1==0) //清零
{
delayms(10); //延时去抖
if(key1==0)
uchar num1,num2,bai,shi,ge; //变量声明
uint num;
void main() //主函数入口
{
TMOD=0x11; //设置TO,T1定时器
TH0=(65536-45872)/256; //装初值11.05992M晶振定时50ms数为45872
{
dula=1; //打开段选
P0=table[bai]; //送段选数据
dula=0; //关闭断选
P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱
wela=1; //打开位选
P0=0xfe; //送位选数据
num=0;
}
}
TR1=0; //定时器TR1关闭
}
}
}
if(key2==0) //暂停和开始
{
delayms(10);
if(key2==0)
{
while(!key2);
wela=0; //关闭位选
delayms(5); //延时 Nhomakorabeadula=1; //打开段选
P0=table[shi]; //送段选数据
dula=0; //关闭断选
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱
相关文档
最新文档