硬件部分
四位数码管(F3461AH)*2
38译码器(74LS138)*1
MSP430G2553单片机
微动按键*1
软件实现
使用TimerA0进行时间计数,每1000ms进入一次CCR0中断,执行时间逻辑:
秒钟变量加到60则清零并将分钟变量加一
分钟变量加到60则清零并将小时变量加一
,小时变量加到24则清零并将日期变量和星期变量都加一
星期变量加到8则变为1
日期变量:先判断是否是闰年并且是否是2月,若思,则对平年的二月天数加一判断;若不是二月,则正常查表判断月份.大于该月天数,则清零并将月份加一
月份加到13时清零并将年份变量加一
每计数到ACLK产生65个脉冲,则进入CCR2,显示一位数码管
CCR1初值为327,但不使能中断,只有当按下按键后,才使能CCR1的中断并且关闭按键按键所在外部中断.使能中断后,在十次中断中判断按键是否是抖动,若是抖动,将各标识变量清零并关闭CCR1中断,且使能按键所在外部中断;若十次中断后按键仍然未松开,则表明按键按下,做出对应动作,并且清零各标识变量,关闭CCR1中断,使能按键所在外部中断.
优点
低功耗,使用低功耗模式LPM3,即关闭除低速时钟ACLK外的所有时钟,MCU仅在中断时唤醒
不足
因时间紧张,仅实现检测按键,未实现按键逻辑部分
因管脚较少,导致按键稍少,解决方法:
是将数码管位选管脚改为使用P1部分IO和P2部分IO,以释放出P1IO,使用P1IO的ADC实现按键,理论上可实现无限个按键
添加芯片74hc595串改并芯片,释放出5个P1IO脚
关键字:MSP430G2553 闹钟 数码管
引用地址:
基于MSP430G2553的闹钟
推荐阅读最新更新时间:2024-11-05 13:43
74HC595驱动8段数码管的程序
//使用STM32F103作为MCU,74HC595驱动8段数码管的程序 #define HC595_OE_H() GPIO_SetBits(GPIOB, GPIO_Pin_12) #define HC595_OE_L() GPIO_ResetBits(GPIOB, GPIO_Pin_12) #define HC595_RCK_H() GPIO_SetBits(GPIOB, GPIO_Pin_13) #define HC595_RCK_L() GPIO_ResetBits(GPIOB, GPIO_Pin_13) #define HC595_SCK_H() GPIO_SetBits(GPIOB, GPIO_Pin_14) #de
[单片机]
msp430g2553的ADC10多通道输入
msp430g2553有8个外部通道可以输入,下面将完成3路输入控制3个LED亮灭的程序。 寄存器说明 msp430g2553的ADC10寄存器 代码说明 在熟悉adc10的几个寄存器后,来看代码 1、ADC10CTL1 = INCH_5+CONSEQ_1;控制寄存器设置了最高的通道和转换模式。 2、ADC10AE0|= BIT5+BIT4+BIT3;输入使能寄存器设置了要输入的引脚。 3、采样次数和存放位置: ADC10DTC1 = 0x03;设置采样次数 unsigned int a ={0}; ADC10SA = (unsigned int)a; 存放地址 若p1.5,p1.4,p1.3输入,采样3次,通道序列单次(转换模式
[单片机]
PLC实现LED数码管动态扫描数据显示
PLC的数据显示功能一直是困扰PLC使用的难题。在PLC的应用中,经常要监测一些重要数据,但PLC的数据显示通常是使用外部显示设备,如显示屏或触摸屏,而这些显示设备的价格一般比较昂贵,对一些小型系统来说更浪费。因此,如何显示PLC的数据,并尽可能做到高效率、高稳定性、抗干扰能力强、硬件投资少,是许多设计中需要考虑的问题。笔者使用的西门子S7-200 PLC中有专门的指令控制LED数码管显示,SEG IN,OUT指令就是将IN端输入字节的低4位确定的16进制数自动转换为相对应的7段LED数码管各段的代码,并送到输出字节OUT端显示。若采用静态LED数码显示,PLC显示一位十进制数据需要7个输出点予以控制,如果要显示n位数据,则需要
[电源管理]
数码管动态显示(定时器中断方式)+小数点+高位为0不显示
1 仿真现象 2 程序设计 2.1 主程序 #include REG52.H #include DisplaySmg.h #include Timer0.h unsigned int adc_result = 1234; void disp_num(void) //显示四位十进制数 { if(adc_result =1000) //千位 { LedBuf = adc_result/1000; } else { LedBuf =23; //不显示 } if(adc_result =100)
[单片机]
7.静态数码管
工作原理: LED显示器两种显示结构:段显示(7段,米字型)和点阵显示(58、88) 共阴接法:8个LED阴极相连(不一定要接到GND)开发板使用的是共阴数码管 共阳接法:8个LED阳极相连接(不一定要接+5V) LED显示器提供的编码为一个字节(8位,七段数码管加小数点)dp为最高位,a为最低位 共阴数码管码表: 0:0x3f 00111111 1:0x06 00000110 2:0x5b 01011011 3:0x4f 01001111 4:0x66 01100110 5:0x6d 01101101 6:0x7d 01111101 7:0x07 00000111 8:0x7f 01111111 9:0x6f 011
[单片机]
串行口通信 AD采集信号,显示在数码管,发送给上位机
一. 程序功能 用AD以1HZ的频率采集模拟信号,然后转换成数字量,显示在数码管上,再将其以1200bps发送到计算机,在计算机上显示. 二. 程序源码 #include reg52.h #include intrins.h //需要用到_nop_()函数 #define uchar unsigned char #define uint unsigned int sbit dula = P2 ^ 6; //申明U1锁存器的锁存端 sbit wela = P2 ^ 7; //申明U2锁存器的锁存端 sbit adwr = P3 ^ 6; //申明AD的WR端口 sbit
[单片机]
凌阳61单片机使用7段数码管显示数字时钟的程序
#include SPCE061v004.h #include unspmacro.h //中断函数定义 void IRQ1(void) __attribute__((ISR)); void IRQ5(void) __attribute__((ISR)); void IRQ6(void) __attribute__((ISR)); enum { RUN, CHGSECOND, CHGMINUTE, CHGHOUR } clock_status; //时钟的状态 unsigned int hour,minute,second; unsigned int show_hour, show_minute, show_sec
[单片机]
51单片机学习记录——数码管动态显示
正在学习51的数码管以及中断,打算利用六位数码管实现一个时钟的功能。 但使用数码管输出时,如果不添加延时语句,那么一直有显示混乱的现象,有时完全无法分辨清楚数字。 如果在传送完数据以后延时1ms,显示混乱情况会好转。 同时发现延时的时间越长,显示效果越好。但是当然,相应的显示稳定程度也会下降,即数码管闪烁。 程序中在送完段选数据以后已经使用了参考书中的 消影 语句: 1 dula=1; 2 P0=table ; 3 dula=0; 4 P0=0xff;// 消影 可是这个语句只是在有延时的情况下才有效果,如果我不写延时语句,那么显示依旧混乱。 虽然在显示过程延时不会影响中断的计时,但是我总不想依赖for语句写出来的延
[单片机]