历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2019年09月29日 | 课程设计题六:秒表

发布者:快乐舞步 来源: eefocus关键字:秒表  STC89C51  计时范围 手机看文章 扫描二维码
随时随地手机看文章

要求:


1、计时范围:0~59分59.59秒,整数四位数和小数两位数显示;


2、计时精度10毫秒;


3、复位按钮,计时器清零,并做好下次计时准备;


4、可以对两个对象(A、B)计时,具有启/停控制;


3、设开始、停止A、停止B、显示A、显示B、复位按钮。


一、Protues仿真图:

二、程序源码:

因为注释非常的全,这里就不再进行讲解了。

/*******************************************************************************

================================================================================

【平    台】STC89C51_sumjess平台

【编    写】sumjess

【E-mail  】1371129880@qq.com

【软件版本】V2.0

【最后更新】2019年06月10日

【相关信息参考下列地址】

【网    站】

           https://blog.csdn.net/qq_38351824

           http://www.51hei.com/bbs/mcu-2-1.html

---------------------------------------------------------------------------------

【dev.env.】MDK4.02及以上版本

【Target  】STC89C51

第一次修订:2019/05/09

第二次修订:2019/05/21

第三次修订:2019/06/10

【problem 】

    (1)库内补充的不全面;

    (2)库内解释部分不全面;

    (3)库内还存在一定的bug;

【direction】

      下一步的目标就是把库继续集成!

【explain 】

      为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!

【warning】

      目前程序中暂无错误 !   

---------------------------------------------------------------------------------

没有完美的代码,只有不断的奉献,大家一起努力;

赠人玫瑰手留余香,欢迎大家反馈bug!

================================================================================

********************************************************************************/

#include

#define uint unsigned int //宏定义无符号整型数据

#define uchar unsigned char //宏定义无符号字符型数据

 

sbit key1=P3^6; //开始按键

sbit key2=P3^0; //停止按键A

sbit key3=P3^1; //停止按键B

sbit key4=P3^2; //显示按键A

sbit key5=P3^3; //显示按键B

sbit key6=P3^4; //复位按键

 

sbit dula=P2^6; //段

sbit wela=P2^7; //位

 

uchar code table[]={ //0~f段码

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

uchar Cntus=0,Cnt10ms=0,Cnt1s=0,Cnt1min=0;//中断计时变量

uchar Cntus_A=0,Cnt10ms_A=0,Cnt1s_A=0,Cnt1min_A=0;//存储A的数据

uchar Cntus_B=0,Cnt10ms_B=0,Cnt1s_B=0,Cnt1min_B=0;//存储B的数据

 

bit stop=0; //停止标志

void display(); //显示程序声明

void keyscan(); //按键扫描程序声明

/***********按键扫描程序****************/

void keyscan()

{

if(key1==0) stop=1; //开始计时

if(key6==0)     //复位计时

{

stop=0;

Cntus=0;

Cnt10ms=0;

Cnt1s=0;

Cnt1min=0;

}

if(key2==0){ //A停止,存储数据

    Cntus_A=Cntus;Cnt10ms_A=Cnt10ms;Cnt1s_A=Cnt1s;Cnt1min_A=Cnt1min;}

if(key3==0){ //B停止,存储数据

    Cntus_B=Cntus;Cnt10ms_B=Cnt10ms;Cnt1s_B=Cnt1s;Cnt1min_B=Cnt1min;}

if(stop==0){ //当复位即计时结束后,才可以进行查看

if(key4==0) //A显示

{

   Cntus=Cntus_A;Cnt10ms=Cnt10ms_A;Cnt1s=Cnt1s_A;Cnt1min=Cnt1min_A;

   }

if(key5==0)     //B显示

{

   Cntus=Cntus_B;Cnt10ms=Cnt10ms_B;Cnt1s=Cnt1s_B;Cnt1min=Cnt1min_B;

   }

  }

}

/***********定时器初始化程序****************/

void Timer0Init(void) //2.5毫秒@11.0592MHz

{

TMOD = 0x01; //设置定时器模式

TL0 = 0x00; //设置定时初值

TH0 = 0xF7; //设置定时初值

TR0 = 1; //定时器0开始计时

EA=1; //开总中断

ET0=1; //开定时器0中断

}

/***************主程序****************/

void main()

{

Timer0Init(); //定时器初始化

while(1)

{

keyscan(); //按键扫描

display(); //显示程序

}

}

/**************中断服务程序*****************/

void timer0() interrupt 1 //2.5毫秒@11.0592MHz

{

TL0 = 0x00; //设置定时初值

TH0 = 0xF7; //设置定时初值

Cntus++; //中断变量Cntus自+1

if(Cntus>=4) //10ms

{

Cntus=0; //清0

if(stop==1) //启动的前提是计时按键按下

Cnt10ms++; //10毫秒计数

if(Cnt10ms>=100)

{

Cnt10ms=0;

Cnt1s++; //秒计数

if(Cnt1s>=60)

{

Cnt1s=0;

Cnt1min++; //分计数

if(Cnt1min>=100)

Cnt1min=0;

}

}

}

}

void display()//显示程序

{

static uchar count=0; //计数变量 作用是是函数一直在循环

P0=0x00; //消隐

dula=1;

dula=0;

switch(count)

{

case 0: 

   P0=table[Cnt1min/10]; //显示十分位

   dula=1;

   dula=0;

   P0=0x7e;

   wela=1;

   wela=0;

   count++;

break;

case 1:

   P0=table[Cnt1min%10]|0x80;//显示分位加点

   dula=1;

   dula=0;

 

   P0=0x7d;

   wela=1;

   wela=0;

   count++;

break;

case 2:

   P0=table[Cnt1s/10]; //显示十秒位

   dula=1;

   dula=0;

   P0=0x7b;

   wela=1;

   wela=0;

   count++;

break;

case 3:

   P0=table[Cnt1s%10]|0x80;//显示秒个位加点

   dula=1;

   dula=0;

   P0=0x77;

   wela=1;

   wela=0;

   count++;

break;

case 4:

   P0=table[Cnt10ms/10]; //显示十分秒位

   dula=1;

   dula=0;

   P0=0xef;

   wela=1;

   wela=0;

   count++;

break;

case 5:

   P0=table[Cnt10ms%10]; //显示百分秒位

   dula=1;

   dula=0;

   P0=0xdf;

   wela=1;

   wela=0;

   count=0;

break;

}

}


关键字:秒表  STC89C51  计时范围 引用地址:课程设计题六:秒表

上一篇:课程设计题五:汽车尾灯控制器设计
下一篇:课程设计题四:LED彩灯控制器设计

推荐阅读

   雷蛇公司去年推出的游戏手机 Razer Phone 在市场上收到非常不错的反响,所以近日他们又准备推出后续机型 Razer Phone 2 。Razer Phone 2 将会采用夏普 IGZO 的 2K 屏幕,搭载高通骁龙 845 处理器,配备 8GB 内存以及 512GB 存储空间,但看配置就知道它是为游戏而生。日前,知名爆料人 evleaks 更是直接曝出雷蛇 Razer Phone...
近年来,随着深度学习技术的突破以及相关产业生态日渐成熟,人工智能开始飞速崛起。2017年是我国人工智能提速发展的关键之年,这一年,“人工智能”被写入了政府工作报告,国务院印发了《新一代人工智能发展规划》。在政策之风的吹拂下,我国人工智能发展掀开了新篇章。  日前,安徽省经信厅、发展改革委、科技厅联合印发了《安徽省新一代人工智能产业基...
国际机器人联合会(IFR)的最新报告显示,世界各地工厂中运行的工业机器人数量达到创纪录水平。该报告还发现强劲的销售数字仍在继续,这提供了一些希望,希望机器人产业相对不受新冠的影响。《世界机器人2020年工业机器人》报告发现全球已有270万机器人在工作。新机器人的销量仍然很高,2019年全球发货了37.3万台,比上年下降了12%-但仍是有记录以来的...
8051单片机可以直接对某一位IO进行读写操作,而Cortex-M3的位带操作是8051位寻址区的加强版。使用位带操作后,可以使用普通的加载/存储指令对单一的比特进行读写操作。一、相关概念。位带区:支持位带操作的地址区。位带别名区:对别名地址的访问最终作用到位带区的访问上。位带别名区对位带区的访问有个地址映射过程。二、位带操作的原理位带操作的最终目...

史海拾趣

问答坊 | AI 解惑

无位置传感器的 SRD系统及其应用

在分析 SR 电机 相电流的基础 上,通过检测相 电流 梯度的变化来检测 电机转子位 置,以实现无位置传感器 的 SRD系统。为解决系统起动和低速运行 问题 ,引入 了软件定位 和斩波控制 ;为提 高高速运行 时的转矩 ,加入 了角度位置控制。将无位置传 ...…

查看全部问答∨

BOB Pease居然被裁了

Bob Pease is an analog integrated circuit design expert.[1] He has designed several very successful integrated circuits, many of them in continuous production for multiple decades. These include the LM331 voltage to frequency conv ...…

查看全部问答∨

如何获取一个驱动程序的GUID?

现在要为已经有的驱动程序(以前通过手工的方式拷贝文件和执行注册表文件)编制INF文件,但是不知道其GUID,导致Windows通过编制的INF文件,仍然无法识别驱动程序。 请问有没有什么办法获取原有驱动文件的GUID(源代码已经丢失)?…

查看全部问答∨

急急急!!!关于wince版的“Resco Picture Viewer”图片浏览软件

有谁用过在wince下能运行的Resco Picture Viewer图片浏览软件啊,我同步安装后在多普达上能用,但是再拷到wince版的游戏机上就要注册码啦,怎么回事啊?谁用过啊?我就是想能在wince上浏览gif格式图片,怎么找不到这样的能在wince下运行的浏览软件 ...…

查看全部问答∨

一款应急灯电路(转载)

先转过来供大家参考     这里介绍一个简单、实用的应急灯的制作。它可以在停电时自动实现切换供电。正常供电时,自动对后备蓄电池充电,并有充电保护功能。其电路见图1。下面介绍其工作原理。  在供电正常时,J2得电吸合,其动触点与“N ...…

查看全部问答∨

印制电路板设计技术指导pdf

印制电路板设计技术指导。…

查看全部问答∨

3DG6C

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 请问有人知道3DG6C的引脚怎么分布吗?哪个是e,c,b脚。。。。  …

查看全部问答∨

TI啥时候有支持64bit系统的仿真器 ?

我安装的是Windows 7 64bit的操作系统,其他无论是arm,单片机,FPGA的仿真器或者编程器识别都没有问题,单单就是 TI的仿真器驱动无法识别,作为这么大的一家跨国公司不至于这么简单的一款产品都弄不出来吧?…

查看全部问答∨

求C8051F020资料

手上有一个C8051F020的核心板 想试一试 哪位大侠有相关资料 给点儿啊!!! 谢谢啦…

查看全部问答∨

Ga入门[遗传算法]

感觉写的比较精彩,而且简单易懂.值得一看。主要是GA.pdf..其他的是相关的资料.东西是其他论坛的人收集整理的。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved