简易秒表c语言程序

合集下载

1602LCD显示的秒表 C语言程序

1602LCD显示的秒表 C语言程序

源程序代码://名称:用1602LCD设计的秒表//说明:首先按下K1键时开始计时,自此按下时暂停,第三次按下时继续累积计时,再次按下时停止计时,K2键用于清零秒表。

//#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define delayNOP ( ) ﹛_nop_( ); _nop_( ); _nop_( ); _nop_( );﹜//LCD控制函数void LCD_Initialize( );void LCD_Set_POS(uchar);void LCD_Write_Date(uchar);void Display_String(uchar﹡,uchar);sbit K1 = P1^0;sbit K2 = P1^1;sbit BEEP = P3^0;sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;uchar KeyCount = 0;uchar code msg1[] = ﹛〞Second Watch 0 〞﹜;uchar code msg2[] = ﹛〞>>>> 0 〞﹜;uchar code Prompts[] [16] ={﹛〞:: 1- - - - > 〞﹜,﹛〞:: 1- - - - > ::2 〞﹜,﹛〞:: 1 - >2 ::3- - > 〞﹜,﹛〞:: 1 - >2 ::3- - >4 〞﹜};// 计时缓冲与显示缓冲uchar Time_Buffer[] ={0,0,0,0};uchar LCD_Display_Buffer[]={〞00: 00: 00:00〞}; //// 蜂鸣器//void Beep ()﹛uchar i,j = 70;for (i = 0;i< 180;i++ )﹛while(--j);BEEP = ~BEEP;﹜BEEP = 0;﹜//// 延时//void DelayX(uint ms){uchar i;while(ms--) for (i= 0;i< 120;i++);﹜//// 显示计时//void Show_Second( ){uchar i;LCD_Set_POS(0x45); //设置LCD显示起点for(i = 3;i != 0xff ;i--);{//将两位整数的1/100s,秒,分,时转换为8位数字字符LCD_Display_Buffer[2﹡i+1] = Time_Buffer[i] / 10 + ˊ0 ˊ;LCD_Display_Buffer[2﹡i] = Time_Buffer[i] % 10 + ˊ0 ˊ;//在 = 3,2,1,0时分别显示时,分,秒,1/100sLCD_Writer_Date(LCD_Display_Buffer[2﹡i+1])LCD_Writer_Date(LCD_Display_Buffer[2﹡i])LCD_Writer_Date(ˊ: ˊ)}}//// Time0中断//Void Time0( ) interrupt 1 using 0{THO = -10000 / 256;TLO = -10000 % 256;Time_Buffer[0] ++if(Time_Buffer[0] == 100){Time_Buffer[0] = 0; Time_Buffer[1]++;}if(Time_Buffer[1] == 60) //秒{Time_Buffer[1] = 0; Time_Buffer[2]++;}if(Time_Buffer[2] == 60) //分{Time_Buffer[2] = 0; Time_Buffer[3]++;}if(Time_Buffer[3] == 24) //时Time_Buffer[3] = 0;}////主函数//void main( ){uchar i;IE = 0x82;TMOD = 0x01;THO = -10000 / 256;TLO = -10000 % 256;LCD_Initialize( );Display_String(msg1,0x00);Display_String(msg2,0x40);While(1){if(k1 == 0){DelayX(100);i = ++KeyCount;switch (i){case 1:case 3: TRO = 1;Display_String(Prompts[i-1],0);Break;case 2:case 4: TRO = 0;Display_String(Prompts[i-1],0);break;default:TRO = 0;break;}While (K1 == 0); // 等待释放K1键Beep( );}elseif(K2 == 0){TRO = 0;KeyCount = 0;for(i = 0;i < 4; i++)Time_Buffer [i] = 0; // 清零计数缓冲Display_String(msg1,0);Beep( );DelayX(100);while (K2 == 0); // 等待释放K2键}Show_Second( );}}//// 1602LCD显示驱动函数//#include 〈reg51.h〉#include 〈intrins.h〉#define uchar unsigned char#define uint unsigned int#define DellayNOP( )﹛_nop_( ); _nop_( ); _nop_( ); _nop_( );﹜sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;bit LCD_Busy_Check( );void LCD_Initialize( );void LCD_Set_POS(uchar);void LCD_Write_Command(uchar);void LCD_Write_ Date(uchar);//// 延时//void DelayMS(uint ms){uchar t;while(ms--) for (t =0;t < 120;t++);}//// LCD忙检查//bit LCD_Busy_Check( );{bit Rsult;LCD_RS = 0; LCD_RW = 1; LCD_EN = 1;DelayNOP( );Result = (bit)(p0 ﹠ 0x80);LCD_EN = 0return Result;}//// 向LCD写指令//void LCD_Write_Command(uchar cmd);{while(LCD_Busy_Check() );LCD_RS = 0; LCD_RW = 0; LCD_EN = 0;_nop_( ); _nop_( );pO = cmd; DelayNOP( );LCD_EN = 1;DelayNOP( );LCD_EN = 0;}//// 向LCD写数据//void LCD_Write_Date(uchar str);{while(LCD_Busy_Check() );LCD_RS = 1; LCD_RW = 0; LCD_EN = 0;pO = str; DelayNOP( ); LCD_EN = 1;DelayNOP( );LCD_EN = 0;}//// 初始化LCD//void LCD_Initialize( );{DelayMS(5); LCD_Write_Command(0x38);DelayMS(5); LCD_Write_Command(0x0c);DelayMS(5); LCD_Write_Command(0x06);DelayMS(5); LCD_Write_Command(0x01);DelayMS(5);}//// 设置显示位置//void LCD_Set_POS(uchar Poition){LCD_Write_Command(Position ︱ 0x80);}////显示函数,在LCD指定行上显示字符串//void Display_String(uchar﹡str,uchar LineNO) {uchar k;LCD_Set_POS(LineNO);for (k = 0;k < 16;k++) LCD_Write_Date(str[k]) }。

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

用c语言实现钟表

用c语言实现钟表
要使用 C 语言编写一个简单的钟表程序,你可以按照以下步骤进行:
1. 引入所需的头文件:你需要引入一些头文件来实现程序的功能,例如 stdio.h、stdlib.h、time.h 等。
2. 定义程序的数据结构:你可以定义一个结构体来表示钟表的时间,包括时、分、秒等字段。
3. 获取当前时间:使用 time 函数获取当前系统时间,并将其转换为时、分、秒等字段。
localTime->tm_sec);
22.
23.
// 暂停一秒钟
Байду номын сангаас
24.
sleep(1);
25. }
26.
27. return 0;
28. }
29. 这个程序会不断获取当前系统时间,并输出格式为"时:分:秒"的钟表界面。程序会每 秒钟更新一次时间,并在终端上显示。你可以根据需要进行适当的修改和扩展,例
time_t currentTime = time(NULL);
17.
struct tm *localTime = localtime(&currentTime);
18.
19.
// 输出钟表界面
20.
system("clear"); // 清屏(适用于 Linux 和 Mac)
21.
printf("%02d:%02d:%02d\n", localTime->tm_hour, localTime->tm_min,
7. 下面是一个简单的 C 语言实现钟表的代码示例:
8. c 复制代码
9. #include <stdio.h>
10. #include <stdlib.h>

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

电子钟C程序,显示年月日时分秒,有秒表功能

电子钟C程序,显示年月日时分秒,有秒表功能

#include<reg51.h>//#include"DS18B20_3.H"#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,key4n;//sheding 为调节打铃时间时显示//flag用于读取头文件中的温度值,和显示温度值uchar codeSeg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned int s_1,s_2,s_3,s_4,s_5,s_6;#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)uchar flag_xs=0,flag_m,flag_m1,flag_f,flag_f1,flag_s,flag_s1;uchar flag_n,flag_n1,flag_y,flag_y1,flag_r,flag_r1,flag_mb;uint numt;//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)//DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P1^1;sbit SCLK=P1^0;sbit RST=P1^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit nyr=P3^1;sbit sfm=P3^0;/************************************************************ACC累加器=AACC.0=E0HACC.0就是ACC的第0位。

单片机数码秒表设计C语言程序

单片机数码秒表设计C语言程序

//实例65:数码秒表设计#include<reg51.h> // 包含51单片机寄存器定义的头文件unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示0~9的段码表unsigned char int_time; //记录中断次数unsigned char second; //储存秒/*********************************************************************** 函数功能:快速动态扫描延时,延时约0.6毫秒************************************************************************/ void delay(void){unsigned char i;for(i=0;i<200;i++);}/*********************************************************************** 函数功能:显示秒入口参数:k出口参数:无************************************************************************/ void DisplaySecond(unsigned char k){P2=0xfb; //P2.6引脚输出低电平,DS6点亮P0=Tab[k/10]; //显示十位delay();P2=0xf7; //P2.7引脚输出低电平,DS7点亮P0=Tab[k%10]; //显示个位delay();P2=0xff; //关闭所有数码管}void main(void) //主函数{TMOD=0x01; //使用定时器T0TH0=(65536-46083)/256; //将定时器计时时间设定为46083×1.085微秒//=50000微秒=50毫秒TL0=(65536-46083)%256;EA=1; //开启总中断ET0=1; //定时器T0中断允许TR0=1; //启动定时器T0开始运行int_time=0; //中断次数初始化second=0; //秒初始化while(1){DisplaySecond(second); //调用秒的显示子程序}}//********************************************************//函数功能:定时器T0的中断服务程序//*******************************************************void interserve(void ) interrupt 1 using 1{TR0=0; //关闭定时器T0int_time ++; //每来一次中断,中断次数int_time自加1if(int_time==20) //够20次中断,即1秒钟进行一次检测结果采样{int_time=0; //中断次数清0second++; //秒加1if(second==60)second =0; //秒等于60就返回0}TH0=(65536-46083)/256; //重新给计数器T0赋初值TL0=(65536-46083)%256;TR0=1; //启动定时器T0}。

简易秒表程序

简易秒表程序

一、基本要求(1))让一只LED 灯自由闪烁(即间歇式亮灭)。

(2))让数码管的低两位显示一个两位数50 。

(3))使用一按键控制上述数字的加1,每按一下数字加1,当加到59时,再按一下,则从0开始,即在0到59 循环加。

(4))使用另一按键控制上述数字的减1,每按一下数字减1,当减到0时,再按一下,则从59开始,即在0到59循环减。

三、提高部分(1))做一顺时计时秒表,以一秒为单位计时,分和秒之间用一小数点作间隔(2))用一个按键控制该计时秒表的暂停与继续,另一个按键使秒表复位(即数码管归位到0)。

(3))能用按键设定某一时刻,当计时到达这一时刻时,LED 灯闪烁,且秒表停止变为0。

(4))其它自由发挥一.用定时器0 的方式 1 实现第一个发光管一200 μm间隙闪烁,用定时器 1 的方式 1 实现数码管前两位59s 循环计时#include<reg52.h>#define unsigned char#define uint unsigned intsbit dula=P2^6; // 申明U1 锁存器的所存端sbit wela=P2^7; // 申明U2 锁存器的所存端sbit led1=P1^0;uchar codetable[]={ 0x3f,0x06,0x5b,0x4 f, 0x66,0x6b,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uint);void display(uchar,uchar); uchar num,num1,num2,shi,ge; void main(){TMOD=0x11;TH0=(65536-45872)/256;TL0=(65536-45872)%256;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1){display(she,ge);}}void display(uchar shi,uchar ge) {dula=1;P0=table[shi];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delayms(5);dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);}void delayms(uint xms);{uint i,j;for(i=xms;i--)for(j=110;j>0;j--);}void T0_time()interrupt1 {TH0=(65536-45872)/256;TL0=(65536-45872)%256;num1++;if(num1==4){num1=0;led= ~l ed1;}void T1_time()interrupt3 {TH1=(65536-45872)/256;TL1=(65536-45872)%256;num2++;if(num2==20){num2=0;num++;if(num==60)Num=0;shi=num/10;ge=num%10;}}Welcome To Download !!!欢迎您的下载,资料仅供参考!。

8位数码管秒表C程序

8位数码管秒表C程序

8位数码管秒表C程序/***********************************************************实验名称:8位数码管秒表达例程序程序阐明:烧好程序,短接J1的左端,按下S6即可看到秒表运行,再按下S6秒表暂停计时,按第三下秒表归零。

作者:RF-X1开发板团体日期:-08-01***********************************************************/#include <reg51.h>#include <intrins.h>unsigned char data dis_digit;unsigned char key_s, key_v;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, offunsigned char dis_buf[8]; // 显示缓冲区unsigned char sec_bcd[8]; // 秒计数值, BCD码unsigned char dis_index; //unsigned char key_times; // K1 按下次数 //void clr_time();void update_disbuf();bit scan_key();void proc_key();void delayms(unsigned char ms);sbit K1 = P3^2;/******************************************/ /* 主函数 */ /******************************************/ void main(void) {P0 = 0xff;P2 = 0xff;TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式TH1 = 0xdc;TL1 = 0;TH0 = 0xFC;TL0 = 0x17;clr_time(); //dis_digit = 0x7f; // 初始显示P30口数码管dis_index = 0; //key_times = 0;key_v = 0x01;IE = 0x8a; // 使能timer0, timer1中断TR0 = 1;TR1 = 0;while(1){if(scan_key()){delayms(10);if(scan_key()){key_v = key_s;proc_key();}}}}/******************************************/ /* 清零 *//******************************************/ void clr_time(){sec_bcd[0] = 0x0;sec_bcd[1] = 0x0;sec_bcd[2] = 0x0;sec_bcd[3] = 0x0;sec_bcd[4] = 0x0;sec_bcd[5] = 0x0;sec_bcd[6] = 0x0;sec_bcd[7] = 0x0;update_disbuf();}/******************************************//* 键盘扫描子程序 */ /******************************************/ bit scan_key(){key_s = 0x00;key_s |= K1;return(key_s ^ key_v);}/******************************************//* 键盘解决子程序 */ /******************************************/ void proc_key(){if((key_v & 0x01) == 0){key_times++;if(key_times == 1){TR1 = 1;}else if(key_times == 2){TR1 = 0;}else{clr_time();key_times = 0;}}}/*******************************************//*定时器0中断服务程序, 用于数码管的动态扫描*//*dis_index --- 显示索引, 用于标记目前显示的数码管和缓冲区的偏移量 */ /*dis_digit --- 位选通值,传送到P2口用于选通目前数码管的数值, 如等于0xfe时,选通P2.0口数码管*/ /*dis_buf ---显于缓冲区基地址 *//******************************************/ void timer0() interrupt 1{TH0 = 0xFC;TL0 = 0x17;P2 = 0xff; // 先关闭全部数码管P0 = dis_buf[dis_index]; // 显示代码传送到P0口P2 = dis_digit; //dis_digit = _cror_(dis_digit,1); // 位选通值右移(P20<-P27),下次中断时选通下一位数码管dis_index++; //dis_index &= 0x07; //8个数码管全部扫描完一遍之后,再回到第一种开始下一次扫描}/******************************************/ /* 定时中断1 *//******************************************/ void timer1() interrupt 3 {unsigned char i;TH1 |= 0xdc;for(i = 0; i < 8; i++){sec_bcd[i]++; // 低位加1if(sec_bcd[i] < 10) // 如果低位满10则向高位进1break; // 低位未满10sec_bcd[i] = 0; // 低位满10清0}update_disbuf(); // 更新显示缓冲区}/******************************************/ /* 更新显示缓冲区 */ /******************************************/ void update_disbuf() {dis_buf[0] = dis_code[sec_bcd[7]];dis_buf[1] = dis_code[sec_bcd[6]];dis_buf[2] = dis_code[sec_bcd[5]];dis_buf[3] = dis_code[sec_bcd[4]];dis_buf[4] = dis_code[sec_bcd[3]];dis_buf[5] = dis_code[sec_bcd[2]]& 0x7f; // 加上小数点dis_buf[6] = dis_code[sec_bcd[1]];dis_buf[7] = dis_code[sec_bcd[0]]; }/******************************************//* 延时子程序 */ /******************************************/ void delayms(unsigned char ms) {unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档