文档库 最新最全的文档下载
当前位置:文档库 › 用C语言实现秒表

用C语言实现秒表

用C语言实现秒表
用C语言实现秒表

#include

#define dataport P1

sbit SDA=P0^5;

sbit CLK=P0^6;//端口定义

unsigned char ms_second=0, second=0,minute=0;

void main()

{ void display(unsigned char a,unsigned char b,unsigned char c);

void shift(unsigned char t);

unsigned char keyscan(unsigned char keys) ;

unsigned char keys=4; //键值赋初值

TMOD=0x01; //设置定时器0为工作方式1

TH0=(65535-9174)/256; // 装初值,11.0592M晶振,定时10ms的数为9174,10ms后溢出

TL0=(65535-9174)%256; // 机器周期12x(1/11059200)=1.09us ,10000/1.09=9174

EA=1; // 开总中断(寄存器IE)

ET0=1; // 开定时器0中断(寄存器IE)

TR0=0;

while(1)// 程序停在这里等待中断

{ if(dataport!=0xf0) //判断是否有按键按下,有进入扫描程序keyscan

keys=keyscan(keys);//扫描键盘,并返回一个键值,

if(keys==0)

TR0=1; // 启动定时器0(寄存器TCON)

if(keys==1)

TR0=0;

if(keys==2)

{TR0=1;

ms_second=0-1;

second=0;

minute=0;

TR0=0;

}

}

}

void T0_time()interrupt 1 //中断函数,interrupt 1选中定时器0

{

TH0=(65535-9174)/256; // 重装初值

TL0=(65535-9174)%256;

ms_second++;

if(ms_second==100)

{

ms_second=0;

second++;

}

if(second==60)

{

second=0;

minute++;

}

if(minute==60)

{

ms_second=0;

second=0;

minute=0;

TR0=0;

}

display(ms_second,second,minute);

}

unsigned char keyscan(unsigned char keys)

{

unsigned char t,k1,k2,key;

dataport=0xf0; //低四位低电平

k1=dataport; //有按键按下,P2有改变dataport=0x0f; //高四位低电平

k2=dataport; //有按键按下,P2有改变

key=k1|k2; //将K1和K2相或得到键值代码

for(t=0;t<16;t++)

{

code char keycode[16]={0x77,0xb7,0xd7,0xe7,

0x7b,0xbb,0xdb,0xeb,

0x7d,0xbd,0xdd,0xed,

0x7e,0xbe,0xde,0xee};

if(key==keycode[t])

keys=t;

dataport=0xff;//返回初始电平

}

return keys; //返回键值

}

code unsigned char number[]={

0x11,0xd7,0x32,0x92,0xd4, // 0-4

0x98,0x18,0xd3,0x10,0x90,0xfe // 5-9 和-

};

void display(unsigned char a,unsigned char b,unsigned char c)

{

shift(a%10);

shift(a/10%10);

shift(10);

shift(b%10);

shift(b/10);

shift(10);

shift(c%10);

shift(c/10);

}

void shift(unsigned char t)

{

int ledbuf,i;

ledbuf=number[t];

CLK=0;

for(i=0;i<8;i++)

{

if(ledbuf&0x80)

SDA=1;

else

SDA=0;

CLK=1;

CLK=0;

ledbuf=ledbuf<<1;

}

}

99.9s秒表代码c语言

#include #include 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 3 unsigned 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:

电子时钟计时器的设计(c语言版_调试完美通过_可直接使用)(附原理图源程序以及完整的文档)..

湖南人文科技学院 课程设计报告 课程名称:单片机原理及应用课程设计 设计题目:电子时钟的设计 系别:通信与控制工程系 专业:通信工程 班级:09级通信二班 学生姓名: 袁琦黄文付 学号: 09416230 09416227 起止日期:2011年12月20日~2011年12月30日 指导教师:王善伟姚毅谢四莲 教研室主任:刘建闽

指导教师评语: 指导教师签名:年月日 成绩评定 项目权重 成绩 袁琦黄文付 1、设计过程中出勤、学习态度等方面0.2 2、课程设计质量与答辩0.5 3、设计报告书写及图纸规范程度0.3 总成绩 教研室审核意见: 教研室主任签字:年月日教学系审核意见: 主任签字:年月日

摘要 时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事物入手,通过对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领域的探索。 本文利用单片机实现数字时钟计时功能的主要内容。它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上。本次设计采用独立式按键进行时间调整,其中STC89C52是核心元件,同时采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外利用DS1302具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。 关键词:STC89C52 ;LED数码管;8255芯片;DS1302芯片;

基于51单片机的跑表,秒表程序c语言程序

基于51单片机的跑表,秒表程序c语言程序#include #define uchar unsigned char #define uint unsigned int uchar table[]=" 00:00:00:00 "; bit flag=0; sbit en=P2^0; sbit rs=P2^1; sbit s1=P1^0; sbit s2=P1^1; sbit bb=P1^2; uchar shi,fen,miao,biao,tt,num1,aa; void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void write_com(uchar com) { rs=0; P0=com;

delay(10); en=1; delay(10); en=0; } void write_date(uchar date) { rs=1; P0=date; delay(10); en=1; delay(10); en=0; } void display(uchar com1,uchar date1) { uchar aa,bb; aa=date1/10; bb=date1%10; write_com(0x80+com1); write_date(0x30+aa);

write_date(0x30+bb); } void init() { TMOD=0x01; ET0=1; TR0=0; EA=1; TH0=(65536-10000)/256; TL0=(65536-10000)%256; en=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80+0x40); for(num1=0;num1<17;num1++) { write_date(table[num1]); delay(5); }

秒表C语言程序

#include "reg52.h" #include "intrins.h" sbitStart_Stop = P3^2; sbit Clear = P3^3; sbit Sel_A1 = P1^0; sbit Sel_B1 = P1^1; sbit Sel_C1 = P1^2; sbit Sel_D1 = P1^3; #define LED P0 #define DP 0x80 bdata unsigned char flag; sbitStatus_Flag = flag^0; sbit Is_KeyS_Hold=flag^1; unsigned char xiaoshu1 = 0 , xiaoshu2 = 0 , miao1 = 0 ; miao2 = 0 ; code unsigned char table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,}; voidinit(); void display(); void delay(); void key(); void main() { init(); while(1) { key(); display(); } } void key() { if(Is_KeyS_Hold) if(Start_Stop) { Is_KeyS_Hold = 0 ; EX0 = 1 ; } }

void delay() { unsignedinti ; for(i = 0; i<300; i++); } void display() { Sel_A1 = 1; Sel_B1 = 1; Sel_C1 = 1; Sel_D1 = 0; LED = table[xiaoshu2];delay(); Sel_A1 = 1; Sel_B1 = 1; Sel_C1 = 0; Sel_D1 = 1; LED = table[xiaoshu1];delay(); Sel_A1 = 1; Sel_B1 = 0; Sel_C1 = 1; Sel_D1 = 1; LED=table[miao2]|DP;delay(); Sel_A1 = 0; Sel_B1 = 1; Sel_C1 = 1; Sel_D1 = 1; LED = table[miao1];delay(); voidKey_Start_Stop() interrupt 0 { EX0 = 0; Status_Flag = ~ Status_Flag ; Is_KeyS_Hold = 1; if(Status_Flag ) TR0 = 1; else TR0 = 0; } void time10ms() interrupt 1 { TL0 = 0XEF; TH0 = 0XD8; TR0 = 1 ; xiaoshu2+=1; if(xiaoshu2 == 10) { xiaoshu2 = 0 ; xiaoshu1 += 1;}

简易秒表

课程设计 题目简易数字秒表的设计与实现学院信息工程学院 专业通信工程 班级 姓名 指导教师撒继铭 2016 年 6 月26 日

课程设计任务书 学生姓名:专业班级: 指导教师:撒继铭工作单位:信息工程学院 题目: 简易数字秒表的设计与实现 初始条件: 本设计主要使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等来完成,用一组数码管显示时间计数值。 要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求) 1、课程设计工作量:1周。 2、技术要求: 1)设计一个能测量3名100米跑运动员短跑成绩的数字秒表。要求用一组四位数码管显示时间,格式为00.00s,最大计数时间是99.99秒。 2)秒表设置3个开关输入(清零开关1个、记录开关1个、成绩开关1个)。按下“记录”开关第一次,将记录并储存第一名运动员的成绩,以此类推。当“记录”开关按下3次后,成绩计数结束。3)成绩计数结束之后,连续按动“成绩”开关,可以把3个运动员的成绩循环显示在数码管上。4)确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。 3、查阅至少5篇参考文献。按《武汉理工大学课程设计工作规范》要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。 时间安排: 1、年月日,布置课设具体实施计划与课程设计报告格式的要求说明。 2、年月日至年月日,方案选择和电路设计。 3、年月日至年月日,电路调试和设计说明书撰写。 4、年月日,上交课程设计成果及报告,同时进行答辩。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

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

南开大学滨海学院 C51嵌入式软件设计(C语言) 题目:计时秒表 功能描述:本设计实现在99秒内的秒表计时,一个按键实 现开始、暂停、复位。 原理概述:P1接四位七段数码管,P3.2接一按键产生外部中断0, P3.4-P3.7控制扫描显示。计时使用定时器0产生10ms 中断累计。按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零。主程序调用显示程序,显示程序实时显示计时时间。 效果显示

图一(电路总图) 图二(效果显示) 注:第四位显示为单位:S 程序清单 #in clude #in clude unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; sbit P37=P3A 7; sbit P36=P3A6; sbit P35=P3A5; sbit P34=P3A4; un sig ned int a=0,cout=0,mm=0;x,y,p,q; /********* void delay() { in t g; for(g=70;g>0;g--); H Ef H pf s II 劭B bg ^rl ry s " ■ U1 ■ ■ 口 HILK. paims^ i^^im Fl.^TD ■k i F JJ SOUI n.Tfflr dgirvi^n PH 1 win fOSAtl FCO A E3 POSAD5 HUMth rnTf^vr riwnrr 、:i ■ 品< rz.v^ 冲护 晒 PTanil 程和W P2J5^L 13 PZB?H Px-TiHIS RET ■nep rn F 目*.曰 '怛屮耐 B USr^.L* fDJMKi RONUn P2则a a ?3*J3 *5.

简易秒表的keil C程序

晶振设置为:12MHz 机器周期为:12*(1/12MHz)=1μs 用Atmel89c52完成,LED显示 用定时器0工作方式2 简易秒表的keilC程序?/span> #include unsigned char led_code[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7 F,0X6F};//共阴显示 unsigned long cnt=0; unsigned int second=0,minute=0; void delay(unsigned int n) //延时 { unsigned long i; while(n--) for (i=0;i<100;i++); } t0_int() interrupt 1

{ if(cnt++==5000)//5000*200个机器周期=1S { cnt=0; second++; if(second==60) { second=0; minute++; if(minute==60) minute=0; } } } main() { TMOD=0x02;//工作方式2 TH0=256-200;//初值计算,200个机器周期 TL0=256-200; ET0=1; EA=1; TR0=1;

while(1) { P3=0;//动态扫描 P2=led_code[second%10]; P3_3=1; delay(1); P3=0; P2=led_code[second/10]; P3_2=1; delay(1); P3=0; P2=led_code[minute%10]; P3_1=1; delay(1); P3=0; P2=led_code[minute/10]; P3_0=1; delay(1); }

51单片机秒表计时器课程设计报告(含C语言程序)

XXXXXX学院 51单片机系统设计课程设计报告 题目:秒表系统设计 专业、班级: 学生姓名: 学号: 指导教师: 分数 : [摘要]本设计是一个秒表计时器,采用51单片机实现。电路包括以下几部分:单片机最小系统部分,数码管显示部分,摁键开关部分部分。电路选用共阴型4位数码管组成时钟显示电路;时钟的增减控制以及清零部分主要由轻触开关构成的摁键系统组成;信号接收和处理部分主要由单片机来执行。接通电源后,秒表计时器处于初始状态,4位数码管显示000.0。当摁下“开始”开关时,秒表开始计时,数码管显示当前状态的时间。当再次摁下开关时,数码管停止计时。摁下“清零”键后,系统重新回到初始状态。 [关键词] 单片机最小系统秒表计时摁键控制 任务书 1、任务 设计一个秒表计时器,在51单片机的控制作用下,采用4个LED数码管显示时间,计时范围设置为00.0~60.0秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。 2、设计要求 (1)开始时显示00.0。每按下S1键一次,数值加1s; (2)每按下S2键一次,数值减1s; (3)每按下S3键一次,数值清零; (4)每按下S4键一次,启动定时器使数值开始自动每秒加1, 再次按下S4键,数值停止自动加1,保持显示原数。 3、发挥部分 (1)开关按键3:“复位60.0”按键(用来60秒倒计时)。按键按下去时数码管复位为“60.0”(用于倒计时)。

(2)开关按键4:倒计时“逐渐自减”按键。按键按下去则是数码管开始“逐渐自减”倒计时。 (3)开关按键5:倒计时初始值“增加”按键。 (4)开关按键6:倒计时初始值“减小”按键。 4、课程设计的难点 单片机电子秒表需要解决三个主要问题,一是有关单片机定时器(一个控制顺序计时,一个控制倒计时)的使用;二是如何实现LED 的动态扫描显示;三是如何对键盘输入进行编程。 5、课程设计仪器 集成电路芯片STC89C52,八段数码管,MCS-51系列单片机微机仿真课程系统中的软件(keil uvision2)。 目录 摘要 (2) 关键词 (2) 任务书 (3) 1、设计任务目的 (5) 2、设计方案选取与论证 (5) 2.1 系统总体设计方案 (5) 2.2 系统整体框图 (5) 3、电路设计 (6) 3.1 单片机最小系统设计 (6) 3.2 数码管显示模块设计 (6) 3.3 摁键控制系统模块设计 (6) 3.4 程序设计 (6) 4、制作及调试过程 (11) 5、结果分析和总结 (12) 参考文献 (12) 附录a 秒表计时器原理图 (13) 附录b 元器件清单 (14) 附录c 秒表计时器实物图 (15) 1、设计任务目的

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

利用单片机制作秒表计时器 (c语言) #include//包含单片机对应的头文件 int MM=0,SS=0,MS=0; int time=2; unsigned int sc[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned int dianyuan[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xbf}; void main(void) { int m=0,n=0; TMOD=0x01; //TH0=0xee; //TL0=0x00; TH0=(65535-5100)/256;//设定5毫秒溢出初值 TL0=(65535-5100)%256; TR0=1; IT0=1;//外部终端以按下效 EX0=1;//启动 IT1=1;//外部终端以按下效 EX1=1;//启动 EA=1; while(1) { m=MM/10; P2=0xfe; P0=sc[m]; delay_ms(1); n=MM%10; P2=0xfd; P0=sc[n]+0x80; delay_ms(1);

m=SS/10; P2=0xfb; P0=sc[m]; delay_ms(1); n=SS%10; P2=0xf7; P0=sc[n]+0x80; delay_ms(1); m=MS/10; P2=0xef; P0=sc[m]; delay_ms(1); n=MS%10; P2=0xdf; P0=sc[n]; delay_ms(1); } } void ex0(void) interrupt 0 { ET0=1; } void ex2(void) interrupt 2 { if(ET0==1) { ET0=0; return ; } if(ET0==0) { MM=0;

C语言实现秒表

源代码如下(作者:中南大学通信工程1602肖涛,qq:2391527690)#include #include//_kbhit #include #include 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);

秒表设计C语言程序

/*----------------------------------------------- 名称:数码管显示,按键控制秒表 论坛:https://www.wendangku.net/doc/2c4187727.html, 编写:shifang 日期:2009.5 修改:无 内容:中断按键控制,数码管显示,中断0控制计时和停止,中断1清零 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 unsigned int msecond,second;//定义全局变量 bit GoFlag;//定义停止,计时标志 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void DelayUs2x(unsigned char t);//函数声明 void DelayMs(unsigned char t); void Display(unsigned char FirstBit,unsigned char Num); void Init_Timer0(void); void CLR(void); /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char num=0; EX0=1; //外部中断0开 IT0=1; //IT1=0表示边沿触发 EX1=1; //外部中断1开 IT1=1; //IT1=1表示边沿触发 Init_Timer0(); while (1) //主循环 {

单片机秒表程序设计

51单片机秒表程序设计 班级: 姓名: 学号 指导老师 时间 一、课题任务要求 用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。即数码显示管在原先的计数上快速加一。 二、设计思路 1、使用单片机,设计秒表,能显示分分秒秒; 2、使用三个按键停止,开始,复位,其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时; 3、使用液晶或数码管显示; 4、使用定时器中断; 三、硬件设计 1、单片机介绍 单片机:AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技

术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 AT89C51主要特性: ·与MCS-51 兼容 ·低功耗的闲置和掉电模式 ·4K字节可编程闪烁存储器 ·全静态工作:0Hz-24MHz ·寿命:1000写/擦循环 ·数据保留时间:10年 ·三级程序存储器锁定 ·128×8位内部RAM ·片内振荡器和时钟电路 ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于

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

课程设计报告 基于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)

简易秒表,3个按键控制,C语言源程序

简易秒表,用2位数码管实现显示00~59,并用三个独立按键实现启动,停止,复位功能。 C语言源程序: #include unsigned char mes,sec=0; unsigned char code LED[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit Key1=P3^2; sbit Key2=P3^3; sbit Key3=P3^5; void delay(unsigned char i) { unsigned char j,k; for(j=0;j

TH0=0x3c; TL0=0xb0; TH1=0xff; TL1=0xfe; EA=1; EX0=1; EX1=1; ET0=1; ET1=1; TR1=1; while(1) { P3=0xfe; P2=LED[sec%10]; delay(10) ; P3=0xfd; P2=LED[sec/10]; delay(10) ;}} void T0_int() interrupt 1 { TH0=0x3c; TL0=0xb0; mes++; if(mes==20) { mes=0; sec++; if(sec==60) {sec=0; }}} void intr0() interrupt 0 //开始{ TR0=1; } void intr2() interrupt 2 //暂停{ TR0=0; } void intr3() interrupt 3 //清零{ TH1=0xff; TL1=0xfe;} if(Key3==0) {

非常好的资料-秒表时钟程序-c语言-51单片机-Proteus仿真-均包括

电子工程训练实验报告题目:秒表系统的设计和工程实现 系班: 学号: 姓名: 大连理工大学电工电子实验中心 电子安装实验室

一.单片机系统设计方案描述 系统设计基本指标: 1.实现最大时间长度超过5分钟的正常倒计时 2.可以在5分钟范围内自由方面设置秒表的开始时间 3.进入最后一分钟时,三声蜂鸣器响提示 4.秒表计时到,五声蜂鸣器响,同时小灯亮提示 电子工程训练是一个综合性实验。秒表系统设计总体上分为硬件设计和软件设计两个部分,并要充分考虑它们的匹配设计。硬件设计特别是引脚的配置要充分考虑软件实现的需要,反过来,软件设计也要建立在硬件的基础上,并且充分利用硬件提供的资源。 硬件电路大体上可分为最小系统板电路、数码管显示电路和按键电路。最小系统板电路和数码管显示电路在老师指导下很快得以完成。按键电路为充分考虑以后软件设计的灵活性和可扩展形,采用了排线将引脚引出。 软件设计上,为方便秒表的操作使用,设置了“修改”、“增加”、“移位”和“开始/暂停”四个按键功能。“修改”键按下,进入修改状态,相应的修改位闪烁,提示按“增加”键修改该位时间参数,操作“移位“按键可以移动修改位。“开始暂停”则用于秒表的开始运行和暂停运行。 按键处理通常有查询和中断两种方式处理,查询占用较多的单片机运行资源,而且延迟防抖效果较差,容易多次触发,而中断方式消抖则操作更为灵敏。同时考虑到A T89S52只有两个外部中断,将使用较多的“增加”和“开始/暂停”两个按键处理分配给两个外部中断。另外两个按键则采用查询方式检测处理。 软件设计整体上利用了“有限状态机”的思想,按键控制状态的转换,并在相应的状态下执行相应的操作。一共设置了3个状态:state=0(暂停状态),state=1(开始运行状态),state=2(修改状态),它们的相互转化如下: 由于本人之前接触过一些仿真软件Proteus的知识,而本系统设计所需要的单片机、按键、数码管、蜂鸣器等硬件均可在Proteus得到仿真。在程序的编写调试过程中,可以完全脱离硬件,高效率的完成了程序的编写调试。

89C51单片机秒表的设计

摘要 本设计是设计一个单片机控制的多功能秒表系统。 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面的知识是不够的,还要根据具体的硬件结构,以及针对具体的应用对象的软件结合,加以完善。秒表的出现,解决了传统的由于人为因素造成的误差和不公平性。 本设计的多功能秒表系统采用A T89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、电源电路、LED数码管以及按键电路来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计数,并且结合相应的显示驱动程序,使数码管能够正确地显示时间,暂停和中断。设计的秒表可以同时记录八个相对独立的时间,通过上翻下翻来查看这八个不同的计时值,可谓功能强大。其中软件系统采用汇编语言编写程序,包括显示程序,计数程序,中断,延时程序,按键消抖程序等,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。 关键字:单片机,多功能秒表 目录 1.概述 1.1设计目的 1.2 设计要求 1.3 设计意义

2.系统总体方案及硬件设计 2.1系统总体方案 2.2硬件设计 2.2.1 89C51单片机 2.2.2振荡电路 2.2.3复位电路 2.2.4按键电路 2.2.5显示电路 2.2.6系统电路图 3.软件设计 3.1设计特点 3.2设计思路 4.PROTEUS软件仿真 5.课程设计体会 1.概述 1.1设计目的 设计一个单片机控制的秒表系统。利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计秒表。将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时具有开始/暂停,记录,上翻下翻,清零等功能。

51单片机秒表C语言程序

51单片机秒表C语言程序 此程序的电路图下载:点这里注意:只需要看数码管部分即可,其他部分可忽略掉. 程序是用c语言编写的,采用的单片机型号是stc89c52 #include ; typedef unsigned char uchar8; typedef unsigned int uint16; typedef unsigned long ulong32; sbit ENLED = P1^4; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; uchar8 led_char[] = { 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90 }; uchar8 zifu_led[] = { 0xff,0xff,0xff, 0xff,0xff,0xff };

void main() { uchar8 cnt = 0; uchar8 key = 0; ulong32 sec = 0; ADDR3 = 1; ENLED = 0; TMOD = 0x01; TH0 = 0xB7; TL0 = 0x00; TR0 = 1; while(1) { if(1 == TF0) { TF0 = 0; TH0 = 0xB7; TL0 = 0x00; cnt++; if(100 = cnt) { cnt = 0;

sec++; zifu_led[0] = sec%10; zifu_led[1] = sec/10%10; zifu_led[2] = sec/100%10; zifu_led[3] = sec/1000%10; zifu_led[4] = sec/10000%10; zifu_led[5] = sec/100000%10; } } switch(key) case 0:P0 = 0xff;ADDR2 =0; ADDR1 = 0; ADDR0 = 0;P0 = led_char[zifu_led[0]];key++;break; case 1:P0 = 0xff;ADDR2 =0; ADDR1 = 0; ADDR0 = 1;P0 = led_char[zifu_led[1]];key++;break; case 2:P0 = 0xff;ADDR2 =0; ADDR1 = 1; ADDR0 = 0;P0 = led_char[zifu_led[2]];key++;break; case 3:P0 = 0xff;ADDR2 =0; ADDR1 = 1; ADDR0 = 1;P0 = led_char[zifu_led[3]];key++;break; case 4:P0 = 0xff;ADDR2 =1; ADDR1 = 0; ADDR0 = 0;P0 = led_char[zifu_led[4]];key++;break; case 5:P0 = 0xff;ADDR2 =1; ADDR1 = 0; ADDR0 = 1;P0

单片机秒表设计(c语言)

单片机秒表设计专业 班级 姓名 学号

完成日期:20 年月日实验内容及要求 要求: 1.设计一个精度为0.1s的秒表系统(显示分、秒、0.1秒); 2.有启动按钮、暂停按钮及清零按钮; 3.每到一秒钟有声音提醒功能,可通过按钮打开及关闭该提醒音。 附加功能:1.倒计时功能。 2.数据暂停存储功能 #include #define uint unsigned int #define uchar unsigned char sbit sda=P2^0; sbit scl=P2^1; sbit dula=P2^6; sbit wela=P2^7; sbit beep=P2^3; //蜂鸣器 uchar address=23; uchar temp;

uint time;//时间 uchar a=0; uchar tt=0,beepc;//定时器溢出次数,表示蜂鸣器工作与否的变量 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//数码管的编码 void init(); void delay(uint z); void display(uint time); void display_fen(uint fen); void display_miao(uint miao); void display_num(uint num); void keyscan(); void delay1() { ;; } void start() //开始信号 {

单片机秒表课程设计(C语言)

课程设计(论文) 课程名称 MCS-51单片机 题目名称单片机秒表设计 学生学部(系)机电学部 专业班级 08自动化一班 2010年 12 月 10 日

目录 1实验设计的目的和任务1.1 单片机秒表实验的概述 1.2系统设计思路及描述 1.3 系统设计任务和要求 2软件与硬件设计 2.1系统硬件方案设计 2.2软件方案设计 3 程序流程及实验效果 3.1源程序及说明 3.2原理图分析 3.3实验效果 4 参考文献

1. 实验设计的目的和任务 1.1单片机秒表实验的概述 一、实验题目 秒表系统设计——用STC89C52RC设计一个3位LED数码显示“秒表”,显示时间为 00.0~59.9秒,每毫秒自动加一,每十毫秒自动加一秒。 二、增加功能 增加一个“复位00.0”按键(即清零),一个“暂停”和“开始”按键,一个“复位60.0”按键(用来60秒倒计时),一个倒计时“逐渐自减”按键。 三,实验难点 单片机电子秒表需要解决三个主要问题,一是有关单片机定时器(一个控制顺序计时,一个控制倒计时)的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程。 四、实验内容提要 本实验利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED 数码管以及实验箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本实验设计了四个开关按键:其中key2按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key1按键按下去时数码管清零,复位为“00.0”,key3按键按下去时数码管复位为“60.0”(用于倒计时),key4按键按下去则是数码管开始“逐渐自减”倒计时。 实验的意义 1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一 步的了解。 2)掌握定时器、外部中断的设置和编程原理。 3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。 4)该实验通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正 确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义 实验仪器 集成电路芯片8051,七段数码管,TX-1C单片机开发板,MCS-51系列单片机微机仿真实验系统中的软件(Keil uvision2)

51单片机秒表程序 00-99秒

#include #define uchar unsigned char //宏定义用uchar代替unsigned char #define uint unsigned int sbit START=P1^0; //开始、停止键低电平有效 sbit RST=P1^1; //复位键 sbit SMGGW=P1^2; //用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定 sbit SMGSW=P1^3; uchar tt; uint time; //此变量为时间 uchar code table[]={ //此为数码管字模,对应0--9 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; void Delay(uint ms) //延时子函数 { uint i,j; for(i=ms;i>0;i--) for(j=500;j>0;j--); } void Display() //显示子函数 { uchar ge,shi; shi=time/10; ge=time%10; P0=table[ge]; SMGGW=0;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定本程序为低电平数码管亮 SMGSW=1; Delay(2); P0=table[shi]; SMGGW=1; SMGSW=0; Delay(2); } void main() { P1=0xff; EA=1; ET0=1; TMOD=0x01; TH0=0x4c; //晶振11.0592Mhz 若用12Mhz晶振则改为TH0=0x3c;Tl0=0xb0; TL0=0x00;

相关文档
相关文档 最新文档