蓝桥杯之单片机学习(九)——定时器的进阶综合案例解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 蓝桥杯之单片机学习(九)——定时器的进阶综合案例解析

一、训练任务


在CT107D单片机综合训练平台上,利用定时器T0、数码管模块和2个独立按键(J5的2-3短接),设计一个秒表,有清零、暂停、启动功能


1.显示格式为

分-秒-0.05秒(即50ms)

08-26-18表示:8分26秒900毫秒

2.独立按键S4为:暂停/启动

独立按键S5为:清零

按键均为按下有效


二、训练重点


1.定时器的精确定时应用

2.定时器的多时段计时应用

3.定时器、显示模块、独立按键多模块综合应用程序设计的思路与编码


三、代码展示


#include <reg52.h>
sbit S4 = P3^3;
sbit S5 = P3^2;
typedef unsigned int uint;
typedef unsigned char uchar;
uchar code SMG_duanma[18] = 
  {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  0x88,0x80,0xc6,0xc0,0x86,0x8e,
  0xbf,0x7f};//分别是0-9(对应下标),A-F,“-”,“.”
uchar t_m = 0;
uchar t_s = 0;
uchar t_005s = 0;
//配置HC138
void SelectHC138(uchar channel)
{
  switch(channel)
  {
  case 4:
    P2 = (P2 & 0X1F) | 0X80;
  break;
  case 5:
    P2 = (P2 & 0X1F) | 0Xa0;
  break;
  case 6:
    P2 = (P2 & 0X1F) | 0Xc0;
  break;
  case 7:
    P2 = (P2 & 0X1F) | 0Xe0;
  break;
  }
}
//在pos位码上,显示value段码
void DisplaySMG_Bit(uchar pos, uchar value)
{
  SelectHC138(6);
  P0 = 0X01 << pos;
  SelectHC138(7);
  P0 = value;
}
void DelaySMG(uint t)
{
  while(t--);
}
//数码管显示
void DisplayTime()
{
  DisplaySMG_Bit(7,SMG_duanma[t_005s%10]);
  DelaySMG(500);
  DisplaySMG_Bit(6,SMG_duanma[t_005s/10]);
  DelaySMG(500);
  DisplaySMG_Bit(5,SMG_duanma[16]);
  DelaySMG(500);
  DisplaySMG_Bit(4,SMG_duanma[t_s%10]);
  DelaySMG(500);
  DisplaySMG_Bit(3,SMG_duanma[t_s/10]);
  DelaySMG(500);
  DisplaySMG_Bit(2,SMG_duanma[16]);
  DelaySMG(500);
  DisplaySMG_Bit(1,SMG_duanma[t_m%10]);
  DelaySMG(500);
  DisplaySMG_Bit(0,SMG_duanma[t_m/10]);
  DelaySMG(500);
}
//********定时器相关函数*********
void InitTimer0()
{
  TMOD = 0x01;
  TH0 = (65535 - 50000) / 256;
  TL0 = (65535 - 50000) % 256;
  ET0 = 1;
  EA = 1;
  TR0 = 1;
}
void ServiceTimer0() interrupt 1
{
  TH0 = (65535 - 50000) / 256;
  TL0 = (65535 - 50000) % 256;
  t_005s++;
  if(t_005s == 20)
  {
  t_s++;
  t_005s = 0;
  if(t_s == 60)
  {
    t_m++;
    t_s = 0;
  }
  if(t_m == 99)
  {
    t_m = 0;
  }
  }
}
//*******************************
//按键去抖延时(uchar就够用)
void DelayK(uchar t)
{
  while(t--);
}
//按键扫描函数
void ScanKeys()
{
  if(S4 == 0)  //秒表启动/暂停
  {
  DelayK(100);
  if(S4 == 0)
  {
    TR0 = ~TR0;
    while(S4 == 0)
    {
    DisplayTime();
    }
  }
  }
  if(S5 == 0)  //秒表清零
  {
  DelayK(100);
  if(S5 == 0)
  {
    t_m = 0;
    t_s = 0;
    t_005s = 0;
    while(S5 == 0)
    {
    DisplayTime();
    }
  }
  }
}
//初始化系统
void Initsys()
{
  SelectHC138(5);
  P0 = 0X00;//关闭蜂鸣器和继电器
  SelectHC138(4);
  P0 = 0XFF;//关闭LED
}
void main()
{
  InitTimer0();
  Initsys();
  while(1)
  {
  DisplayTime();
  ScanKeys();
  }
}


四、一些建议


如果自己的变量很多,可以写在一张纸上

可以画流程图

函数取名

全局变量与局部变量

这个题目多练几遍

相关文章
|
3月前
|
XML 监控 网络协议
云深处绝影四足机器人协议学习解析
本文详细介绍并解析了云深处绝影X20四足机器人的通信协议,包括TCP服务端端口号、基于Service的请求/响应通信机制、通信帧结构、消息类型、常见的通信示例如获取状态和导航请求,以及运动控制的参数和命令。文中还提出了对协议中某些未明确说明或可能存在的问题的疑惑。
39 0
云深处绝影四足机器人协议学习解析
|
20天前
|
网络协议 数据格式
【通信协议讲解】单片机基础重点通信协议解析与总结之ModBus(五)
【通信协议讲解】单片机基础重点通信协议解析与总结之ModBus(五)
|
20天前
|
IDE 开发工具
【通信协议讲解】单片机基础重点通信协议解析与总结之CAN(四)
【通信协议讲解】单片机基础重点通信协议解析与总结之CAN(四)
|
20天前
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
|
20天前
【通信协议讲解】单片机基础重点通信协议解析与总结之SPI(二)
【通信协议讲解】单片机基础重点通信协议解析与总结之SPI(二)
|
20天前
【通信协议讲解】单片机基础重点通信协议解析与总结之IIC(一)
【通信协议讲解】单片机基础重点通信协议解析与总结之IIC(一)
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
人工智能 算法
AI 0基础学习,数学名词解析
AI 0基础学习,数学名词解析
22 2
|
4月前
|
网络协议 程序员 定位技术
学习网络的第一步:全面解析OSI与TCP/IP模型
**网络基础知识概览:** 探索网络通信的关键模型——OSI七层模型和TCP/IP五层模型。OSI模型(物理、数据链路、网络、传输、会话、表示、应用层)提供理论框架,而TCP/IP模型(物理、数据链路、网络、传输、应用层)更为实际,合并了会话、表示和应用层。两者帮助理解数据在网络中的传输过程,为网络设计和管理提供理论支持。了解这些模型,如同在复杂的网络世界中持有了地图。
89 2

推荐镜像

更多