完整电路图:

完整代码:

/*
实验说明:实验接线:1,动态数码管模块-->单片机管脚参考动态数码管显示实验接线(开发攻略内在对应的实验章节内实验现象有接线说明)实验现象:数码管上显示秒表
*/#include "reg52.h"           //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;      //对数据类型进行声明定义
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;sbit k1=P3^1;   //jia
sbit k2=P3^0;  //jian
sbit k3=P3^2;  //mode
sbit k4=P3^3;   //定义按键端口u8 KEY_Scan(u8 mode);
void KEY_Pros();u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值u8 ssec,sec,min; //毫秒,秒,分
u8 DisplayData[8];
u8 mode = 0;
/*******************************************************************************
* 函 数 名         : delay
* 函数功能         : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);
}/*******************************************************************************
* 函 数 名         : Timer0Init
* 函数功能         : 定时器0初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0Init()
{TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。TH0=0Xd8;   //给定时器赋初值,定时10msTL0=0Xf0;   TR0=1;//打开定时器
}/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能         : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{u8 i;for(i=0;i<8;i++){switch(i)   //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位   //1111 1110   显示第一位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位  //1111 1101case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4):LSA=0;LSB=0;LSC=1; break;//显示第4位case(5):LSA=1;LSB=0;LSC=1; break;//显示第5位case(6):LSA=0;LSB=1;LSC=1; break;//显示第6位case(7):LSA=1;LSB=1;LSC=1; break;//显示第7位}P0=DisplayData[i];//发送段码delay(100); //间隔一段时间扫描 P0=0x00;//消隐}
}void datapros()
{DisplayData[0]=smgduan[min/10];DisplayData[1]=smgduan[min%10];DisplayData[2]=0x40;  DisplayData[3]=smgduan[sec/10];DisplayData[4]=smgduan[sec%10];DisplayData[5]=0x40;DisplayData[6]=smgduan[ssec/10];DisplayData[7]=smgduan[ssec%10];
}void time_process(){if(TF0==1)     //定时器T0溢出标志{TF0=0;TH0=0Xd8; //给定时器赋初值,定时10msTL0=0Xf0;ssec++;if(ssec>=100)  //1s{ssec=0;sec++;if(sec>=60){sec=0;min++;if(min>=60){min=0;}}  }   }
}#define  K1_MODE  1
#define  K2_ADD  2
#define  K3_DEC  3//mode:  0-单次扫描   1-连续扫描
u8 KEY_Scan(u8 mode)
{static u8 key=1;if(key&&(k1==0||k2==0||k3==0)){delay(1000);   //消抖key=0;if(k3==0){return K1_MODE;}else if(k1==0){return K2_ADD;}else if(k2==0){return K3_DEC;    }}else if(k1==1&&k2==1&&k3==1){key=1;    }if(mode){key=1;}return 0;
}void KEY_Pros()
{u8 key;key=KEY_Scan(0);if(key==K1_MODE)   //模式选择{mode++;//while(!start);  //等待按键释放if(mode==1){TR0=!TR0;        //定时器的控制位取反}else if(mode==2){//TR0=TR0;      //定时器的控制位取反}else {mode=0;TR0=!TR0;}}if(mode==1)  //温度上限设置{switch(key)   {case K2_ADD:      //加sec++;if(sec>=60)sec=0;break;case K3_DEC:   //减sec--;if(sec<=0)sec=59;break;}datapros();DigDisplay();  }else if(mode==2)  //温度下限设置{switch(key)  {case K2_ADD:      //加min++;if(min>=60)min=0;break;case K3_DEC:   //减min--;if(min<=0)min=59;break;}datapros();DigDisplay(); }}
/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{   Timer0Init();  //定时器0初始化while(1){time_process();if(mode==0){datapros();DigDisplay();  }KEY_Pros();}
}

效果展示:

可以设置时间的计时器相关推荐

  1. 【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)

    教程目录 一 计时器简介 二 计时器实现 三 Demo下载 一 计时器简介 在手机上跑游戏时,可能由于运动物体过多,导致帧频太低,计时不准确. 比如一些倒计时的游戏,可能倒计时30s,变成了35s. ...

  2. windows 睡眠倒计时_如何在手机上设置音乐睡眠计时器

    windows 睡眠倒计时 If you listen to music on your phone or tablet as you fall asleep, you might appreciat ...

  3. 时间倒数计时器_如何建立倒数计时器

    时间倒数计时器 Building a simple countdown timer is easy with JavaScript's native timing events. You can re ...

  4. 【FPGA】数码管电子时钟(可设置时间和闹钟)

    目录 前言 一丶需求分析 1.设置时间 2.设置闹钟 二丶工程源码 1.counter 2.seg_driver 3.key_debounce 4.beep 5.顶层模块 三丶模块原理图 四丶管脚信息 ...

  5. C语言电子闹钟(显示时间、计时器、闹钟、倒计时、世界时钟)C语言大作业

    #include <stdio.h> #include <time.h> //时间函数 #include <conio.h> //字符模式函数 #include & ...

  6. linux7设置时间,CentOS 7 设置日期和时间

    现代操作系统分为以下两种类型的时钟: 实时时钟(Real-Time Clock,RTC),通常称为硬件时钟(一般是系统主板上的集成电路),它完全独立于操作系统的当前状态,即使在计算机关闭时也能运行. ...

  7. 用SimpleDateFormat类设置时间格式

    用SimpleDateFormat类设置时间格式 www.diybl.com 时间:2008-10-02 作者:佚名 编辑:本站 点击: [评论] String[] formatArr = {&quo ...

  8. Matplotlib绘图双纵坐标轴设置及控制设置时间格式

    双y轴坐标轴图 今天利用matplotlib绘图,想要完成一个双坐标格式的图. fig=plt.figure(figsize=(20,15)) ax1=fig.add_subplot(111) ax1 ...

  9. idea每次都要配置tomcat_电脑每次开机时间都不对?电脑每次开机都要重新设置时间解决方法...

    近期有网友咨询到装机之家晓龙,称自己一台老电脑最近出现一个问题,每次电脑重新开机都需要设置一下时间,关机再开机之后系统时间又归零了,又需要重新设置系统时间.日期,十分麻烦.那么电脑每次开机时间都不对怎 ...

最新文章

  1. LeoFS —— 高可靠性的分布式对象存储系统
  2. kafka0.11.0.2安装 笔记
  3. 每日一皮:从项目的开始到结束,开发人员的变化...
  4. Spring Cloud限流详解(附源码)
  5. 俄罗斯议会下院通过“老大哥”反恐法
  6. 暑期训练日志----2018.8.15
  7. 多页面之间传递数据的方法
  8. npm run build 出错 npm: 6.5.0-next.0 should be = 3.0.0
  9. java代码写selector_javaNIO:选择器--实践 Selector
  10. VUE之命令行报错:Component template should contain exactly one root element. If you are using v-if on multi
  11. 百度网盘不能上传超过百兆的文件?
  12. 【转】MPLAB使用PICKit3.5烧录程序说明
  13. 逃离北上广:你以为回到小城市就非常幸福了吗?
  14. oracle回收DBA权限以及授权表空间
  15. 【量化笔记】量价关系分析
  16. 红色墙绘设计公司营销网站织梦模板
  17. U盘在别人电脑上正常显示,插在自己电脑读不出来(只显示CD驱动器)
  18. mysql常用的tamper脚本,tampermonkey 实用脚本
  19. java tostring格式化日期_Java格式化日期的三种方式
  20. web程序设计基础——edu实训平台选择判断复习(1)

热门文章

  1. android手机黑科技软件,4款安卓手机黑科技APP,功能非常牛逼,希望大家谨慎使用...
  2. Interval数据类型
  3. C语言中的fprintf函数
  4. 什么是Linux 的xxd
  5. NetworkManager的命令行工具nmcli
  6. Blender:Lowpoly手部建模流程(附blender源文件下载)
  7. 之杰的机器学习笔记:1.机器学习概述
  8. c语言fseek128字节,你知道C语言是如何处理fseek()和ftell()这两个I/O随机访问数吗?...
  9. 为什么要学网络安全?如何学习网络安全?这3个理由告诉你(自己整理的50G网安资料)
  10. day01 HTMLCSS