基于MSP430F249的电子钟仿真(源码+仿真)

news2024/12/25 15:33:35

目录

1、前言

2、仿真

3、程序

资料下载地址:基于MSP430F249的电子钟仿真(源码+仿真)

 1、前言

        基于MSP430F249的电子钟仿真,数码管显示时分秒,并可以通过按键调节时间。

2、仿真

 3、程序

#include <MSP430x24x.h>
#define uchar unsigned char
#define uint unsigned int
uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,  //共阴数码管段选码表,无小数点
                               0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
struct {
   uchar hou;
   uchar min;
   uchar sec;
}time;
struct {
   uchar hou:1;
   uchar min:1;
   uchar sec:1;
}Flashflag;
uchar Disbuf[8],Index;
uint count1ms,FlashCnt;
uchar Keytimes=0;
void delayms(uint t)
{
    uint i;
    while(t--)
      for(i=1330;i>0;i--);//进过参数的调整 
}
void Init_Timer_A(void)
{
    CCTL0 = CCIE; // 使能CCR0 中断
    TAR=0xFC18;  // 计数装入初值
   TACTL=TASSEL_2+MC_2+TAIE+ID_3;//设置时钟源和计数模式 采用SMCLK/8 =1Mhz                          

}
void Refreshtime(void)
{
    if(Flashflag.hou)
    {
      Disbuf[1]=table[time.hou%10];
      Disbuf[0]=table[time.hou/10]; 
    }
    else
    {
      Disbuf[1]=0x00;
      Disbuf[0]=0x00; 
    }
     if(Flashflag.min)
    {
       Disbuf[3]=table[time.min/10];
       Disbuf[4]=table[time.min%10];
    }
    else
    {
      Disbuf[3]=0x00;
      Disbuf[4]=0x00; 
    }
     if(Flashflag.sec)
    {
      Disbuf[6]=table[time.sec/10];
      Disbuf[7]=table[time.sec%10]; 
    }
    else
    {
      Disbuf[6]=0x00;
      Disbuf[7]=0x00; 
    }
 
   
}
uchar ReadKey(void)
{
   static uchar count;
   uchar temp;
   temp=P2IN&0x07;
   if(temp!=0x07)
   {
      if(++count==10)
      {
          return temp;
          
      }else if(count>=200)
      {
          count=180;
          return temp;
      }else
        return 0xFF;
   }else
   {    
     count=0;
     return 0xFF;
   }  
}
void KeyProcess(void)
{
    
    uchar temp;
    temp=ReadKey();
    if(temp!=0xFF)
    {
        temp=temp^0x07;
        if(temp&0x01)
        {
            if(++Keytimes==4)
            {
              Keytimes=0;
               Flashflag.hou=1;
               Flashflag.min=1;
               Flashflag.sec=1;
               FlashCnt=0;
            } 
        }
         if(temp&0x02)
        {
            if(Keytimes==1)
            {
                if(++time.hou>=24)
                  time.hou=0;
            }
            else if(Keytimes==2)
            {
                if(++time.min>=60)
                  time.min=0;
            }
            else if(Keytimes==3)
            {
                 if(++time.sec>=60)
                  time.sec=0;
            }
        }
         if(temp&0x04)
        {
            if(Keytimes==1)
            {
                if(time.hou--==0)
                  time.hou=23;
            }
            else if(Keytimes==2)
            {
                if(time.min--==0)
                  time.min=59;
            }
            else if(Keytimes==3)
            {
                 if(time.sec--==60)
                  time.sec=59;
            }
        }
       
    }
}

void main(void)
{
    
    WDTCTL=WDTPW + WDTHOLD; // 关闭看门狗
    P4DIR=0x01; 

    P1DIR=0xFF;            // 设置方向
    P1SEL=0;            // 设置为普通I/O 口
    
    P3DIR=0xFF;            // 设置方向
    P3SEL=0;            // 设置为普通I/O 口
   
    P1OUT=0x00;
    P3OUT=0xFF;
    
    P2DIR=0x0;
    P2OUT=0x07;
    P2SEL=0x00;  
    
    time.hou=12;
    Flashflag.hou=1;
    Flashflag.min=1;
    Flashflag.sec=1;
    Disbuf[2]=0x40;
    Disbuf[5]=0x40;
    Refreshtime();
    Init_Timer_A();
    _BIS_SR(LPM0_bits+ GIE);//进入低功耗睡眠模式
   
    while(1)
    {
       
          P3OUT=0xFF;
          if(++Index==8) Index=0;
          delayms(1);
          
    }

    
}
#pragma vector=TIMERA0_VECTOR //定时器A 中断服务程序
__interrupt void Timer_a(void) 
{ 
  
  switch(TAIV)         //TAIV 表示中断向量号  
  { 
  case 2:break; 
  case 4:break; 
  case 10:              //TAIV=10 表示中断计数器溢出中断  
  TAR=0xFC18;// (65536-1000) 
  P4OUT=P4OUT^0x01;
  if(++count1ms==220)
  {
    time.sec++;
    count1ms=0;
    if(time.sec>=60)
    {
      time.sec=0;
      time.min++;
      if(time.min>=60)
      {
         time.min=0;
         if(++time.hou>=24)
           time.hou=0;
       
      }
    }
  }
  if(Keytimes)
  {
    if(++FlashCnt>=80)
    {
   
      if(Keytimes==1)
      {
         Flashflag.hou=!Flashflag.hou;
         Flashflag.min=1;
         Flashflag.sec=1;
      }
      else if(Keytimes==2)
      {
         Flashflag.min=!Flashflag.min;
         Flashflag.hou=1;
         Flashflag.sec=1;
      }
      else if(Keytimes==3)
      {
         Flashflag.sec=!Flashflag.sec;
         Flashflag.hou=1;
         Flashflag.min=1;
      }
      FlashCnt=0;
    }
  }
  KeyProcess();
  Refreshtime(); 
           
 //TACCR0=0xF000;
  break; 
  }
  LPM0_EXIT;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins集成Terraform实现阿里云CDN自动刷新

在互联网业务中&#xff0c;CDN的应用已经成了普遍&#xff0c;SRE的日常需求中&#xff0c;CDN的刷新在前端需求逐渐中占了很大比例&#xff0c;并且比较琐碎。做为合格的SRE&#xff0c;把一切自动化是终极使命&#xff0c;而今天就分享通过JenkinsTerraform实现阿里云的CDN自…

java-动态代理

为什么需要代理&#xff1f; 如何创建代理 注意&#xff1a;实现类和代理需要实现同一个接口 接口 public interface Star {String sing(String song);void dance(); }实现类 public class BigStar implements Star {private String name;public BigStar(String name) {this.…

2024Mac系统热门游戏排行榜 Mac支持的网络游戏有哪些?mac能玩哪些大型网游 苹果电脑Mac游戏资源推荐 Mac玩Windows游戏

“游戏是这个世界上唯一能和女性争夺男朋友的东西&#xff08;/滑稽&#xff0c;有不少女生也喜欢玩游戏&#xff09;。” 虽然只是一句玩笑话&#xff0c;不过也可以看出游戏对大多数男生来说是必不可少的一项娱乐活动了。而网络游戏是游戏中的一大分支&#xff0c;能让玩家们…

uniapp问题归类

最近使用uniapp中&#xff0c;遇到了一些问题&#xff0c;这边mark下。 1. 启动页变形 设置启动页的时候发现在部分android手机上启动页被拉伸了&#xff0c;最后看了下官方建议使用9.png图 生成9.png地址&#xff0c;推荐图片大小为1080x2340 uniapp推荐官方地址传送门 我…

Thread类的基本用法

1.线程创建 这里介绍线程创建常用的五种方法 1.继承Thread&#xff0c;重写run class MyThread extends Thread{public void run(){//这里写的代码就是线程要完成的任务while (true){System.out.println("hello thread");try {Thread.sleep(1000);//线程会休眠一秒…

Springboot+Vue项目-基于Java+MySQL的家政服务平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

FreeRTOS:3.信号量

FreeRTOS信号量 参考链接&#xff1a;FreeRTOS-信号量详解_freertos信号量-CSDN博客 目录 FreeRTOS信号量一、信号量是什么二、 FreeRTOS信号量1、二值信号量1、获取信号量2、释放信号量 2、计数信号量3、互斥信号量1、优先级反转2、优先级继承3、源码解析1、互斥量创建2、获取…

[蓝桥杯2024]-PWN:fd解析(命令符转义,标准输出重定向)

查看保护 查看ida 这里有一次栈溢出&#xff0c;并且题目给了我们system函数。 这里的知识点没有那么复杂 完整exp&#xff1a; from pwn import* pprocess(./pwn) pop_rdi0x400933 info0x601090 system0x400778payloadb"ca\\t flag 1>&2" print(len(paylo…

2024.04.28 Typecho管理视频文件,出现预览功能

需求原因原版的Typecho不支持在线视频预览,只有一个图片预览功能, 所以为了实现可以在线预览视频功能, 修改 typecho/admin/media.php 在大概19行的时候,追加如下内容 <?php if ($attachment->attachment->isImage): ?><p><img src"<?php $att…

装饰器模式【结构型模式C++】

1.概述 装饰器模式是一种结构型设计模式&#xff0c; 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 2.结构 抽象构件&#xff08;Component&#xff09;角色&#xff1a;定义一个抽象接口以规范准备接收附加责任的对象。具体构件&#xff08;Concre…

关于文档中心的英文快捷替换方案

背景&#xff1a;文档中心需要接入国际化&#xff0c;想节省时间做统一英文方案处理&#xff1b; 文档中心是基于vuepress框架编写的&#xff1b; 1、利用百度翻译 API 的接口去做底层翻译处理&#xff0c;https://api.fanyi.baidu.com/需要在该平台上注册账号&#xff0c;个人…

决策树学习笔记

一、衡量标准——熵 随机变量不确定性的度量 信息增益&#xff1a;表示特征X使得类Y的不确定性减少的程度。 二、数据集 14天的打球情况 特征&#xff1a;4种环境变化&#xff08;天气、温度等等&#xff09; 在上述数据种&#xff0c;14天中打球的天数为9天&#xff1b;不…

docker部署的nacos2.2x开启鉴权功能

注意在2.2.0版本之后如果不开启鉴权&#xff0c;那么默认不需要登录就可以访问 所以我们需要手动开启鉴权&#xff0c;nacos启动好以后来到容器内部修改 docker exec -it nacos /bin/shvim conf/application.properties在第34行下面添加 nacos.core.auth.enabledtrue nacos.cor…

编译GTSAM库时报错undefined reference to `_dl_vsym@GLIBC_PRIVATE‘

/home/alex/miniforge3/envs/ros_py39_env/bin/ld: /home/alex/miniforge3/envs/ros_py39_env/bin/../x86_64-conda-linux-gnu/sysroot/lib64/libdl.so.2: undefined reference to _dl_vsymGLIBC_PRIVATE SOLUTION&#xff1a;在CMakeLists.txt里加入&#xff1a; set (CMAKE…

信号分解 | RLMD(鲁棒性局部均值分解)-Matlab

分解效果 RLMD(鲁棒性局部均值分解) RLMD(鲁棒性局部均值分解)-Matlab 代码实现 % %% 清除所有变量 关闭窗口 clc clear all close all%% 导入数据 % data = xlsread(Data.xlsx);%% 输入信号%% RLMD分解 %参数进行设置 % options.display =

OPPO Reno10Pro/Reno11/K10手机强解BL刷root权限KSU内核抓包刷机救砖

OPPO Reno10Pro/Reno11/K10手机虽然发布时间并不久&#xff0c;但由于天玑处理器的体质&#xff0c;已经支持强制解锁BL了&#xff0c;该漏洞来自第三方工具适配&#xff0c;支持OPPO天机8100/8200刷机救砖解锁BL不需要等待官方深度测试直接实现。解锁BL后的OPPO Reno10Pro/Ren…

会声会影2024Win版64位电脑下载及系统配置要求

会声会影是一款专业的视频编辑软件&#xff0c;至今也推出了多版软件&#xff0c;深受用户的喜爱&#xff0c;这不&#xff0c;最近会声会影又要出2024版了&#xff0c;相信有很多用户都想知道新版本有哪些变化&#xff0c;新增了什么功能。下面我就为大家带来会声会影2024美颜…

web前端学习笔记4

4. 盒子模型 4.0 代码地址 https://gitee.com/qiangge95243611/java118/tree/master/web/day044.1 什么是盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子,封装周围的HTML元素,…

MySQL双层游标嵌套循环方法

文章目录 1、需求描述2、思路3、创建存储过程 1、需求描述 1、在项目中&#xff0c;需要将A表中主键id&#xff0c;逐个取出&#xff0c;作为条件&#xff0c;在B表中去逐一查询&#xff0c;将B表查询到的结果集&#xff08;A表B表关系&#xff1a;一对多&#xff09;&#xf…

【软件开发规范篇】Git分支使用规范

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…