单片机制作秒表计时器(c语言)

合集下载

基于单片机的秒表设计

基于单片机的秒表设计

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

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

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

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

主控制器采用单片机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)前言前言秒表计时器是电器制造,工业自动化控制、国防、实验室及科研单位理想的计时仪器,它广泛应用于各种继电器、电磁开关,控制器、延时器、定时器等的时间测试。

51单片机c语言的秒表设计

51单片机c语言的秒表设计

学号:1108421065课程设计报告基于AT89C51单片机的秒表设计院系电子信息工程学院专业电子信息工程班级 1姓名张远远摘要本设计是设计一个单片机控制的多功能秒表系统。

近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面的知识是不够的,还要根据具体的硬件结构,以及针对具体的应用对象的软件结合,加以完善。

秒表的出现,解决了传统的由于人为因素造成的误差和不公平性。

本设计的秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、电源电路、LED数码管以及按键电路来设计计时器。

将软、硬件有机地结合起来,使得系统能够正确地进行计数,并且结合相应的显示驱动程序,使数码管能够正确地显示时间,暂停和中断。

可谓功能强大。

其中软件系统采用c语言编写程序,包括显示程序,计数程序,中断,延时程序,按键消抖程序等,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。

关键字:单片机秒表目录摘要 (I)目录 (II)引言 (III)1.课程设计目的 (1)2.课程设计题目描述和要求 (1)3.课程设计报告内容 (1)3.1设计思路(方案) (1)3.2系统总体方案及硬件设计(方案论证、设计、调试) (1)3.2.1系统总体方案 (1)3.2.2硬件电路设计 (2)3.3 软件设计 (5)3.3.1软件设计概述 (5)3.3.2程序流程图 (5)3.3.3子程序模块设计 (6)4.Protues软件仿真 (7)5.秒表c语言程序 (9)6.焊接实物图 (11)7.总结(设计后的体会和建议) (11)8.参考文献: (12)引言中国使用单片机的历史只有短短的30年,在初始的短短五年时间里发展极为迅速。

纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。

C语言数码管秒表(详细)

C语言数码管秒表(详细)
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)
*十万位P20 dis_buf[7] sec_bcd[7] *
*万位P21 dis_buf[6] sec_bcd[6] *
*千位P22 dis_buf[5] sec_bcd[5] *
*百位P23 dis_buf[4] sec_bcd[4] *
*十位P24 dis_buf[3] sec_bcd[3] *
*个位(1.s) P25 dis_buf[2] sec_bcd[2] *
*十分位(0.1s) P26 dis_buf[1] sec_bcd[1] *
*百分位(0.01s) P27 dis_buf[0] sec_bcd[0] *
* *
********************************************************************************
}
void update_disbuf()
//更新显示缓冲区
{
dis_buf[0] = dis_code[sec_bcd[0]];
dis_buf[1] = dis_code[sec_bcd[1]];
dis_buf[2] = dis_code[sec_bcd[2]] & 0x7f;//加上小数点

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

单片机60分钟倒计时秒表

单片机60分钟倒计时秒表

60分钟倒计时秒表功能:1.带有启动键Start,暂停键Pause,停止键Stop,复位键Reset;2.4位数码管显示分(两位)秒(两位);3.按启动键启动从60分开始倒计时,按暂停键暂停,显示保持原来计时时间,再次按启动键继续计时,按停止键停止计时,复位键复位,到零停止计时.4.按停止键后,可按中间的4个键,分别对应分的十位(2键),个位(4键),和秒的十位(5键),个位(9键),按动一下,相应的位增1,并保证时间的正确值,再按一次停止键,保存设置值,按其它键则放弃设置时间值,恢复原来的时间.电路图:计时器工作模式:编码(54H单元) 当前工作模式00H Reset01H Start02H Pause03H Stop主程序流程:主程序代码段:ORG 0000HLJMP MAINORG 000BHLJMP TIMER0ORG 1000HMAIN: ACALL INIT ;初始化定时器SETB EA ;开总中断SETB ET0 ;开定时器0中断MOV A, #03H ;设置8155的工作模式, PA, PB输出, PC输入.MOV DPTR, #7F00HMOVX @DPTR, ABEGIN: ACALL DISACALL CLEARACALL CCSCANJNZ INK1AJMP BEGININK1: ACALL DISACALL CLEARACALL CCSCANJNZ INK2AJMP BEGININK2: MOV R2, #7FH ;从最左边列开始扫描MOV R4, #00HCOLUM: MOV DPTR, #7F02HMOV A, R2MOVX @DPTR, AINC DPTRMOVX A, @DPTRJB ACC.2, LONEMOV A, #00HAJMP KCODELONE: JB ACC.1, NEXTMOV A, #04HKCODE: ADD A, R4ACALL PUTBUFKON: ACALL DISACALL CLEARACALL CCSCANJNZ KONNEXT: INC R4MOV A, R2JNB ACC.4, KERRRR AMOV R2, AAJMP COLUMKERR: AJMP BEGINCCSCAN: MOV DPTR, #7F02HMOV A, #00HMOVX @DPTR, AINC DPTRMOVX A, @DPTRCPL AANL A, #03HRETCLEAR: MOV DPTR, #7F01HMOV A, #00HMOVX @DPTR, ARETINIT: MOV 53H, #06H ;分十位MOV 52H, #00H ;分个位MOV 51H, #00H ;秒十位MOV 50H, #00H ;秒个位MOV 54H, #00H ;存放当前工作模式, 00:Reset, 01 Start, 02 Pause, 03 StopMOV 55H, #0AH ;定时计数用, 定时器每次中断0.1s, 计数10次, 定时1sCLR TR0MOV TMOD, 01H ;定时器工作在方式1, 16位定时器MOV TH0, #3CHMOV TL0, #0B0HRETDIS: PUSH ACCPUSH 00HPUSH 03HMOV A, #03HMOV DPTR, #7F00HMOVX @DPTR, AMOV R0, #50HMOV R3, #0EFHMOV A, 54HCJNE A, #03H, DIS0MOV R0, #60HDIS0: MOV A, R3AGAIN: MOV DPTR, #7F02HMOVX @DPTR, AMOV A, @R0MOV DTPR, DAT ASMOVC A, @A+DPTRMOV DPTR, #7F01HMOVX @DPTR, AACALL DL1MSINC R0MOV A, R3JNB ACC.0, OUTRL AMOV R3, AAJMP AGAINOUT: POP 03HPOP 00HPOP ACCRETDAT AS: DB 03FH, 06H, 05BH, 04FH, 066H, 06DH, 07DH DB 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HDL1MS: MOV R7, #01HDL0: MOV R6, #0FFHDL1: DJNZ R6, DL1DJNZ R7, DL0RETPUTBUF: MOV R1, AJNZ CHKSTAR TACALL RESETFUNCSJMP GOBACKCHKSTAR T: CJNE R1, #03H, CHKPAUSEACALL STAR TFUNCSJMP GOBACKCHKPAUSE: CJNE R1, #04H, CHKSTOPACALL PAUSEFUNCSJMP GOBACKCHKSTOP: CJNE R1, #07H, CHKOTHERACALL STOPFUNCSJMP GOBACKCHKOTHER: ACALL OTHERFUNCGOBACK: RETRESETFUNC: MOV R0, 54HCJNE R0, #00H, RESET0RETCJNE R0, #01H, RESET0RETRESET0: ACALL INITMOV 54H, #00HRETSTAR TFUNC: MOV R0, 54HCJNE R0, #01H, STAR T0RETSTAR T0: MOV 54H, #00HSETB TR0RETPAUSEFUNC: MOV R0, 54HCJNE R0, #01H, PAUSE0CLR TR0MOV 54H, #02HSJMP PAUSE1PAUSE0: CJNE R0, #02H, PAUSE1SETB TR0MOV 54H, #01HPAUSE1: RETSTOPFUNC: MOV R0, 54HCJNE R0, #03H, STOP0MOV 54H, #02HMOV R0, #50HMOV R1, #60HSTOP1: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R0, #54H, STOP1RETSTOP0: CLR TR0MOV 54H, #03HMOV R0, #60HMOV R1, #50HSTOP2: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R1, #54H, STOP2RETOTHERFUNC: MOV R0, 54HCJNE R0, #03H, OTHER0CJNE R1, #01H, OTHER1MOV R0, #63HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER1: CJNE R1, #02H, OTHER2MOV R0, #62HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER2: CJNE R1, #05H, OTHER3MOV R0, #61HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER3: CJNE R1, #06H, OTHER0MOV R0, #60HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER0: RET;使用定时器0, 工作模式1, 定时0.1s, 晶振频率为6MHz;定时器初值X = 65536 –50000 = 15536 = 3CB0HTIMER0: MOV TH0, #3CHMOV TL0, #0B0HDJNZ 55H, EXIT0 ;判断是否已定时中断10, 即1秒MOV 55H, #0AHMOV R0, #50HGOON0: DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #05HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0 ; 倒计时结束, 停止计时, 显示全”0”ACALL INITMOV 53H, #00HMOV 54H, #03HEXIT0: RET。

51单片机秒表程序设计

51单片机秒表程序设计

51单片机秒表程序设计1. 简介秒表是一种用于测量时间间隔的计时器,常见于体育比赛、实验室实验等场合。

本文将介绍如何使用51单片机设计一个简单的秒表程序。

2. 硬件准备•51单片机开发板•LCD液晶显示屏•按键开关•连接线3. 程序流程3.1 初始化设置1.设置LCD液晶显示屏为8位数据总线模式。

2.初始化LCD液晶显示屏。

3.设置按键开关为输入模式。

3.2 主程序循环1.显示初始界面,包括“00:00:00”表示计时器初始值。

2.等待用户按下开始/暂停按钮。

3.如果用户按下开始按钮,则开始计时,进入计时状态。

4.如果用户按下暂停按钮,则暂停计时,进入暂停状态。

5.在计时状态下,每隔1毫秒更新计时器的数值,并在LCD液晶显示屏上显示出来。

6.在暂停状态下,不更新计时器的数值,并保持显示当前数值。

3.3 计时器控制1.定义一个变量time用于存储当前的计时器数值,单位为毫秒。

2.定义一个变量running用于标记计时器的状态,0表示暂停,1表示运行。

3.定义一个变量start_time用于存储计时器开始的时间点。

4.定义一个变量pause_time用于存储计时器暂停的时间点。

5.在计时状态下,每隔1毫秒更新time的值为当前时间与start_time的差值,并将其转换为小时、分钟、秒的表示形式。

6.在暂停状态下,保持time的值不变。

3.4 按键检测1.检测按键开关是否被按下。

2.如果按键被按下,判断是开始/暂停按钮还是复位按钮。

3.如果是开始/暂停按钮,并且当前处于计时状态,则将计时状态设置为暂停状态,并记录暂停时间点为pause_time;如果当前处于暂停状态,则将计时状态设置为运行状态,并记录开始时间点为当前时间减去暂停时间的差值。

4.如果是复位按钮,则将计时器数值重置为0,并将计时状态设置为暂停。

4. 程序代码示例#include <reg51.h>// 定义LCD控制端口和数据端口sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit LCD_D4 = P1^3;sbit LCD_D5 = P1^4;sbit LCD_D6 = P1^5;sbit LCD_D7 = P1^6;// 定义按键开关端口sbit START_PAUSE_BTN = P2^0;sbit RESET_BTN = P2^1;// 定义全局变量unsigned int time = 0; // 计时器数值,单位为毫秒bit running = 0; // 计时器状态,0表示暂停,1表示运行unsigned long start_time = 0; // 开始时间点unsigned long pause_time = 0; // 暂停时间点// 函数声明void delay(unsigned int ms);void lcd_init();void lcd_command(unsigned char cmd);void lcd_data(unsigned char dat);void lcd_string(unsigned char *str);void lcd_clear();void lcd_gotoxy(unsigned char x, unsigned char y);// 主函数void main() {// 初始化设置lcd_init();while (1) {// 显示初始界面lcd_clear();lcd_gotoxy(0, 0);lcd_string("00:00:00");// 等待用户按下开始/暂停按钮while (!START_PAUSE_BTN && !RESET_BTN);// 判断按钮类型并处理计时器状态if (START_PAUSE_BTN) {if (running) { // 当前处于计时状态,按下按钮将进入暂停状态 running = 0;pause_time = time;} else { // 当前处于暂停状态,按下按钮将进入计时状态running = 1;start_time = get_current_time() - pause_time;}} else if (RESET_BTN) { // 复位按钮按下,重置计时器time = 0;running = 0;}}}// 毫秒级延时函数void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--) {for (j = 110; j > 0; j--);}}// LCD初始化函数void lcd_init() {lcd_command(0x38); // 设置8位数据总线模式lcd_command(0x0C); // 显示开,光标关闭lcd_command(0x06); // 光标右移,不移动显示器lcd_command(0x01); // 清屏}// 向LCD发送指令函数void lcd_command(unsigned char cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_D4 = cmd >> 4 & 1;LCD_D5 = cmd >> 5 & 1;LCD_D6 = cmd >> 6 & 1;LCD_D7 = cmd >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = cmd >> 0 & 1;LCD_D5 = cmd >> 1 & 1;LCD_D6 = cmd >> 2 & 1;LCD_D7 = cmd >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送数据函数void lcd_data(unsigned char dat) { LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_D4 = dat >> 4 & 1;LCD_D5 = dat >> 5 & 1;LCD_D6 = dat >> 6 & 1;LCD_D7 = dat >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = dat >> 0 & 1;LCD_D5 = dat >> 1 & 1;LCD_D6 = dat >> 2 & 1;LCD_D7 = dat >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送字符串函数void lcd_string(unsigned char *str) {while (*str) {lcd_data(*str++);delay(5);}}// 清屏函数void lcd_clear() {lcd_command(0x01);}// 设置光标位置函数void lcd_gotoxy(unsigned char x, unsigned char y) {unsigned char addr;if (y == 0)addr = x | (0x80 + y);else if (y == 1)addr = x | (0xC0 + y);lcd_command(addr);}5. 总结本文介绍了使用51单片机设计一个简单的秒表程序。

单片机-简易秒表-正计时时间可设置-倒计时时间可查询-报警三秒.doc.

单片机-简易秒表-正计时时间可设置-倒计时时间可查询-报警三秒.doc.

第一章设计内容和要求设计任务用AT89C52设计一个4位的LED数码作为多功能“秒表”。

设计目的1.学习数码管显示的结构和工作流程,实现数码管分组显示数字组合。

2.学习有关单片机的内容,进一步了解AT89C52芯片的相关功能。

3.复习C语言的相关知识。

4.培养自学能力和探索解决问题的能力。

设计要求显示时间为00分00秒-59分59秒,每1秒自动加1,另外设计一个“开始/暂停”键、一个“记录/查询”键、一个“清零”键、一个“模式切换”键、一个“时间设置”键、一个“复位”键。

秒表要求正计时时,可记录并且查询10组数据,倒计时时,时间用户可设置,并且时间到时蜂鸣器报警。

设计创新在基本设计基础上添加了正向查询10条记录后蜂鸣器同时报警。

设计意义简易秒表具有读取方便,显示直观,功能多样,电路简洁,成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

本次设计将基于单片机的工作原理,设计简易秒表的基本电路,深入的了解其工作原理,掌握其基本的工作特点。

同时简易秒表在生活中应用广泛,从实际出发,不断创新。

第二章方案设计与选择技术可行性20世纪以来,微电子,IC集成电路行业发展迅速,其中单片机行业发展最引人注目。

单片机利用大规模集成电路技术把中央处理器和数据存储器(RAM),程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成最小的计算机系统。

如今的单片机发展集成了更多的特殊功能单元,例如A/D,D/A转换器,通信控制,DMA,PWM控制输出单元等。

因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统。

单片机除了具备体积小,价格低,速度快,用途广,可靠性高等特点,在硬件结构和指令设置上还有以下独特之处:1.存储器ROM和RAM是严格分工的。

前者存放程序,常数和数据表格,后者存放临时数据和变量。

2.采用面向控制的指令系统,构成的应用系统有较大的可靠性。

大部分测控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当的改变系统功能。

MSP430单片机秒表程序(完整)

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

基于c语言单片机秒表课程设计

基于c语言单片机秒表课程设计

课程设计报告课程名称:单片机原理及应用报告题目:秒表学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年12 月25 日课程设计任务书摘要近年来随着科技的飞速发展,单片机的应用正在不断的走向深入,秒表计时器是电器制造,工业自动化控制、国防、实验室以及科研单位理想的计时仪器,它广泛应用于各种继电器、电磁开关,控制器、延时器、定时器等时间测试。

本文阐述了基于单片机的数字电子秒表设计。

本设计主要特点是计时从00到99秒秒表系统,方便了在计时精度要求不高的情况下计时。

因为计时精度为1,所以系统电路比较简单。

另外硬件部分设置了开始、暂停、清零、复位按键,可以对秒表系统进行计时控制。

本设计的数字电子秒表系统采用AT89C51单片机位中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。

将软、硬件有机的相结合起来,使得系统能够实现两位LED显示,显示时间为00-99秒,计时精度为1秒,能正确地进行计时,同时能记录一次时间,其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,延时程序等,并用KeiL中调试运行,硬件系统利用Proteus强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。

关键词:单片机;数字电子秒表;仿真目录一、概述 (1)1.1设计目的 (1)1.2设计要求 (1)1.3设计意义 (1)二、系统总体方案及硬件设计 (1)2.1系统总体方案 (2)2.2硬件设计 (2)2.21晶体振荡电路 (2)2.22复位电路 (3)2.23按键电路 (3)2.24 显示电路 (4)2.25系统电路 (4)三、软件设计 (5)1.设计特点 (5)2.秒表设计源程序 (9)3.程序流程图 (10)四、结论与心得 (11)五、参考文献 (11)一、概述1.1设计目的设计一个单片机控制的秒表系统。

利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码以及按键来设计秒表。

单片机实验——秒表(详细步骤)

单片机实验——秒表(详细步骤)
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图5-50所示,抖动时间的长短与开关的机械特性有关,一般为5~10ms。
在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。本子情境中采用软件去抖。
{
delay(10);//延时去抖动
if(key3==0) //再次检测"复位"按钮是否按下
{
while(!key3); //松手检测
temp=0; //将变量temp的值清零
shi=0; //将十位清零
ge=0; //将个位清零
TR0=0; //关闭定时器
}
}
display(shi,ge); //调用显示子函数
sbit key1=P3^0; //定义"启动"按钮
sbit key2=P3^1; //定义"停止"按钮
sbit key3=P3^2; //定义"复位"按钮
uchar temp,aa,shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
TR0=1; //启动定时器开始工作
}
}
if(key2==0) //检测"停止"按钮是否按下
{
delay(10); //延时去抖动
if(key2==0) //再次检测"停止"按钮是否按下
{

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

C51单片机秒表计时(C语言)
南开大学滨海学院
C51嵌入式软件设计(C语言)
题目:计时秒表
功能描述:本设计实现在99秒内的秒表计时,一个按键实现开始、暂停、复位。
原理概述:P1接四位七段数码管,P3.2接一按键产生外部中断0,P3.4-P3.7控制扫描显示。计时使用定时器0产生10ms中断累计。按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零。主程序调用显示程序,显示程序实时显示计时时间。
P35=1;
p=mm/10; //ms的高位
P36=0;
P1=Tab[p];delay();
P36=1;
P37=0;//显示单位:S
P1=Tab[5]; delay();
P37=1;
}
/*********主程序********************/
void main()
{
IT0=1;
EX0=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++;
效果显示
图一(电路总图)
图二(效果显示)注:第四位显示为单位:S
程序清单
#include<reg51.h>
#include<stdio.h>
unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };

C语言单片机设计成的电子秒表设计

C语言单片机设计成的电子秒表设计

C语言单片机设计成的电子秒表设计————————————————————————————————作者:————————————————————————————————日期:济源职业技术学院《电子秒表》毕业设计报告题目: 电子秒表系别:电气工程系专业:应用电子技术班级: 电技0901班姓名:张帅龙指导教师:李丽时间:2011.09.01-2011。

10。

02毕业设计任务书电气工程系应用电子技术专业09年级电技 0901班学生张帅龙学号09020116日期2011。

09。

05毕业设计题目电子秒表毕业设计内容与要求:一、设计任务利用单片机的定时器/计数器定时和计数,并使用LED数码管显示计时的时间来制作一个电子秒表。

二、设计要求(1)能够多次计时;(2)能够查询计时时间。

指导教师李丽毕业设计成绩评定表本毕业设计评语:指导教师(签名):年月日本毕业设计成绩:指导教师(签名):年月日目录1 方案设计 (1)1。

1系统分析 (1)1。

2系统方案 (1)1。

2。

1方案设计 (1)1。

2。

2 方案论证 (2)2 硬件设计 (2)2.1 控制芯片的介绍...。

....。

.。

.....。

..。

.。

..。

..。

.。

.。

.。

.。

..。

........。

22。

2 单片机最小系统 (3)2。

2.1 振荡电路――让单片机活起来的心脏 (3)2.2。

2 复位电路――恢复初始状态值 (4)2。

2。

3 程序下载接入电路 (4)2。

3 电源电路设计 (5)2.4 显示电路设计 (5)2。

5元件清单 (7)3 软件设计 (8)4 课程设计体会 (8)5 参考文献 (9)电子秒表摘要:本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成电子秒表的硬件电路的.电子秒表电路主要由AT89S52单片机最小系统电路、七段数码管动态显示电路和控制电路组成,它能实现八位数码显示和多次计时,能通过控制电路能控制时间的暂停和开始,能够最少十次计时,查询计时时间。

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