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

目录

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.mfbz.cn/a/580258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot项目中的ASCII艺术字

佛祖保佑&#xff1a; ${spring-boot.formatted-version} ———————————————————————————————————————————————————————————————————— // _ooOoo_ …

tomcat系统架构及运用

文章目录 下面是Tomcat架构的详细解析&#xff1a;1. **Server&#xff08;服务器&#xff09;**2. **Service&#xff08;服务&#xff09;**3. **Container&#xff08;容器&#xff09;** - 分层结构4. **Connectors&#xff08;连接器&#xff09;**5. **类加载器&#xff…

数据集笔记:处理北大POI 数据:保留北京POI

数据来源&#xff1a;Map POI (Point of Interest) data - Official data of the contest (pku.edu.cn) windows 下载方法&#xff1a;数据集笔记&#xff1a;windows系统下载北大开放数据研究平台的POI数据-CSDN博客 1 读取数据 1.1 列出所有的文件 dir1D:/data/PKU POI/2…

如何管理约束

本文主要介绍如何管理约束&#xff0c;包括决定何时发生约束检查&#xff0c;如何删除约束&#xff0c;删除和更新父行&#xff0c;插入和更新子行。 1. 约束事务模式 约束事务模式决定何时发生引用违例检查。 对于具有日志记录的数据库 — 即时约束&#xff08;Immediate con…

【笔试强训】Day4 --- Fibonacci数列 + 单词搜索 + 杨辉三角

文章目录 1. Fibonacci数列2. 单词搜索3. 杨辉三角 1. Fibonacci数列 【链接】&#xff1a;Fibonacci数列 解题思路&#xff1a;简单模拟题&#xff0c;要最少的步数就是找离N最近的Fibonacci数&#xff0c;即可能情况只有比他小的最大的那个Fibonacci数以及比他大的最小的那…

【VUE】Vue中实现树状表格结构编辑与版本对比的详细技术实现

Vue中实现树状表格结构编辑与版本对比的详细技术实现 在Vue中&#xff0c;创建一个可编辑的树状表格并实施版本对比功能是一种需求较为常见的场景。在本教程中&#xff0c;我们将使用Vue结合Element UI的el-table组件&#xff0c;来构建一个树状表格&#xff0c;其中包含添加、…

ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析

ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析 论文&#xff1a;https://arxiv.org/abs/2012.11879代码&#xff1a;https://github.com/cfzd/FcaNet 文章是围绕 2D 的 DCT 进行展开的&#xff0c;本文针对具体的计算逻辑进行梳理和解析。 f ( u ,…

【MySQL精炼宝库】数据库的约束 | 表的设计 | 聚合查询 | 联合查询

目录 一、数据库约束 1.1 约束类型&#xff1a; 1.2 案例演示&#xff1a; 二、表的设计 2.1 一对一: 2.2 一对多: 2.3 多对多: 2.4 内容小结&#xff1a; 三、新增 四、查询 4.1 聚合查询&#xff1a; 4.1.1 聚合函数&#xff1a; 4.1.2 GROUP BY子句&#xff1a…

linux使用docker 安装mysql redis

linux安装docker https://hub-stage.docker.com/ 前往这里搜索容器来部署。每个容器都有独立的运行环境。 具体安装教程 https://docs.docker.com/engine/install/centos/#install-using-the-repository 检查是否安装成功&#xff1a; sudo docker --version 配置国内镜像加速…

人脸识别概念解析

目录 1. 概述 2. 人脸检测 3. 人脸跟踪 4. 质量评价 5. 活体检测 6. 特征提取 7. 人脸验证 8. 人脸辨识 1. 概述 人脸识别在我们的生活中随处可见&#xff0c;例如在大楼门禁系统中&#xff0c;它取代了传统的门禁卡或密码&#xff0c;提高了进出的便捷性和安全性。在商…

Adfind的使用

Adfind是一个使用C语言写的活动目录查询工具&#xff0c;它允许用户轻松地搜索各种活动目录信息。它不需要安装&#xff0c;因为它是基于命令行的。它提供了许多选项&#xff0c;可以细化搜索并返回相关细节。下面讲解Adfind的参数以及其使用。 参数 执行如下命令即可查看Adf…

ruoyi-nbcio-plus基于vue3的flowable为了适配文件上传改造VForm3的代码记录

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

Flutter笔记:DefaultTextStyle和DefaultTextHeightBehavior解读

Flutter笔记 DefaultTextStyle和DefaultTextHeightBehavior解读 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

PriorityQueue—优先级队列FollowUp

FollowUp大纲&#xff1a; 思维导图&#xff1a; FollowUp PriorityQueue: Q1&#xff1a;但不知道是大根堆化石小根堆 A&#xff1a;Q1 只需要放进去几个元素peek&#xff08;&#xff09;出元素是大的还是小的 下面如果是5就是小根堆10就是大根堆 A&#xff1a;默认是小根…

Github创建远程仓库(项目)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

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

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

华为ensp中BGP(边界网关协议)基础原理及配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月27日10点04分 BGP&#xff08;边界网关协议&#xff09;是一种路由协议&#xff0c;用于在互联网中的不同自治系统&#xff08;AS&#xff09;之间交换路由信息。它…

Edge浏览器新特性深度解析,写作ai免费软件

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

运算符重载(2)

1.赋值运算符重载 #include<iostream> using namespace std;class Person { friend void test01(); public:Person(int age){m_Age new int(age);}/*堆区的数据由程序员手动开辟并手动释放*/~Person(){if (m_Age ! NULL){delete m_Age;}}Person& operator(Person &a…

如此建立网络根文件系统 Mount NFS RootFS

安静NFS系统服务 sudo apt-get install nfs-kernel-server 创建目录 sudo mkdir /rootfsLee 将buildroot编译的根文件系统解压缩到 sudo tar xvf rootfs.tar -C /rootfsLee/ 添加文件NFS访问路径 sudo vi /etc/exports sudo /etc/exports文件&#xff0c;添加如下一行 …
最新文章