0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实现一个简单的可设置电子时钟设计

EJIO_ZCorePlaye 来源:智芯Player 2023-10-30 11:17 次阅读

1

实验环境介绍

• 实验环境

本次实验是通过Proteus+MDK一起模拟完成的。Proteus模拟实际电路,MDK编译代码。Proteus版本是8.9,MDK版本是5.36。需要注意的是,Proteus需要安装8.8以上版本,器件库里面要支持STM32F401VE。

实验目的

通过定时器3TIM3,计数,8位数码管,一个3*4的键盘来实现一个简单的可设置电子时钟

2

硬件电路

wKgaomU_IJWAaIufAAQzVX6R1JI909.jpg

Proteus电路

• 主控:

STM32F401VE,Cotex-M4内核,主频最大84MHz,程序空间512KB,FLASH空间96KB。

• 时钟:

没有用外部晶振,因为Proteus只支持一种时钟树,所以这里采用内部晶振,做实验够了。

• 复位电路:

没有配置相关外设电路,因为Proteus默认是有电压的,默认是复位的,毕竟是仿真软件,主要是验证程序功能。

• IO说明:

我们利用PD0PD7以及PC0PC7控制数码管、PE0~PE6控制键盘输入。

3

代码概述

wKgaomU_IJWAN1ReAADR3V4hkEM895.jpg

MDK代码目录结构

• 代码目录概述:

USER文件夹:主要包含应用函数的.C文件以及中断函数.C。

HARDWARE文件夹:主要包含底层硬件驱动的.C文件。

CORE文件夹:主要包含STM32的启动的.S文件。

FWLIB文件夹:主要包含ST官方提供的标准外设驱动.C文件(不是HAL库哦)。

• 代码内容概述:

↓↓↓ 按键识别代码如下:

//判断按键是否按下
u8 iskeyinput(void)
{
  GPIOE->ODR=0x000f;
  if((KEYPORT&0x000f)==0x000f)
    return 0;
  else
    return 1;
}
//按键识别
u8 key_identify(void)
{
  u8 linecode=0,rowcode=0;
  u8 i;
  u8 scancode=0x00ef;
  for(i=0;i<4;i++)
  {
    GPIOE->ODR=scancode;
    if((KEYPORT&0x000f)==0x000f)
    {
      rowcode++;
      scancode=scancode<<1|1;
    }
    else
    {
      if(line0==0)linecode=0;
      if(line1==0)linecode=3;
      if(line2==0)linecode=6;
      if(line3==0)linecode=9;
      break;
    }
  }
  return linecode+rowcode;
}
//等待按键松开
void wait_key_release(u8 x)
{
  while(1)
  {
    GPIOE->ODR=0x000f;
    if(x==0)seg_disp2();
    else seg_disp1(f);
    if((KEYPORT&0x000f)==0x000f)
      break;
  }
}
//按键扫描
u8 key_Scan(u8 x)
{
  u8 keycode=0;  
  if(iskeyinput())
  {
    delay_us(100);
    if(iskeyinput())
    {
      keycode=key_identify()+1;
      wait_key_release(x);      
    }
  }
  return keycode;
}

↓↓↓ 电子时钟事件计时代码如下:

void get_time(void)
{
  if(bs>99)
  {
    bs=0;s++;
    if(s==60)
    {
      s=0;m++;
      if(m==60)
      {
        m=0;h++;
        if(h==24)
        {h = 0;}
        date[0]=h/10;
        date[1]=h%10;          
      }
      date[2]=m/10;
      date[3]=m%10;
    }
    date[4]=s/10;
    date[5]=s%10;
  }
  date[6]=bs/10;
date[7]=bs%10;
}

4

实验结果展示

wKgaomU_ILqAf5A_AAE5tkUV7rI854.jpg

电子时钟效果

wKgZomU_ILqAGLXcAAJKiZFV-NI489.jpg

设置效果

可以看到,电子时钟能够正常计时并且通过*号按键切换成设置状态,再通过#号按键切换成正常计时状态,至此可设置电子时钟实验完成!!!






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数码管
    +关注

    关注

    32

    文章

    1874

    浏览量

    90919
  • 定时器
    +关注

    关注

    23

    文章

    3237

    浏览量

    114432
  • PROTEUS仿真
    +关注

    关注

    28

    文章

    308

    浏览量

    35193
  • 电子时钟
    +关注

    关注

    11

    文章

    197

    浏览量

    24492
  • STM32F401
    +关注

    关注

    1

    文章

    16

    浏览量

    10467
收藏 人收藏

    评论

    相关推荐

    用单片机实现电子时钟设计方案

    用单片机实现电子时钟设计方案时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在单片机应用系统中,
    发表于 12-17 11:20

    电子时钟

    简单电子时钟
    发表于 05-29 20:33

    电子时钟

    `在knewmaker上看见这么篇文章,感觉还行,转了数字电子时钟可是电子DIY入门第课,对于了解电路知识和提高动手能力有着很大的帮助。今天小编带来的是
    发表于 05-31 10:22

    简易电子时钟

    简单电子时钟
    发表于 06-06 11:04

    如何实现用12864显示汉字的电子时钟

    实现用12864显示汉字,字符串,数字,浮点数以及可调节的电子时钟
    发表于 07-15 06:06

    用STC89C52做一个简单电子时钟

    今天我们来用STC89C52做一个简单的单片机作品:电子时钟。含原理图、元器件归纳、C语言程序,还有详细的制作过程。就算是零基础,只要愿意动手就能完成。
    发表于 07-21 08:05

    如何实现基于单片机的电子时钟设计?

    如何实现基于单片机的电子时钟设计?
    发表于 11-08 08:24

    电子时钟可以设定时分

    这是电子时钟,可以设置时和分,需要的可以看
    发表于 12-14 15:22 3次下载

    电子时钟设计

    电子时钟设计。
    发表于 04-19 15:17 0次下载

    电子时钟设计20

    关于ATMEGA16的电子时钟设计,比较详细。
    发表于 05-10 16:31 5次下载

    可设置闹时的智能时钟

    可设置闹时的智能时钟
    发表于 01-08 14:14 5次下载

    可调闹钟电子时钟

    可调闹钟电子时钟
    发表于 03-05 14:21 68次下载

    电子时钟设计电子时钟程序相关资料下载

    电子发烧友网站提供《电子时钟设计电子时钟程序相关资料下载.zip》资料免费下载
    发表于 05-26 08:00 128次下载

    使用51单片机设计的电子时钟程序资料免费下载

    51单片机源代码,keil工程文件,电子时钟可设置定时报时,整点报时,蜂鸣器报警等
    发表于 12-17 08:00 37次下载
    使用51单片机设计的<b class='flag-5'>电子时钟</b>程序资料免费下载

    使用verilog语言实现电子时钟的资料合集

    使用verilog语言,实现电子时钟,包含功能时,分的调整,整点音乐和led花样显示
    发表于 07-01 08:00 6次下载