MSP430G2553数码管计时(并行数据)

MSP430G2553数码管计时(并行数据传输)

一、设计要求

​ 基于MSP430G2553单片机系统,利用并行数据传输,实现数码管的计时显示。(笔者也是小白一枚,若有错误请原谅并指出)

设计软件:CCS、Proteus

二、一位数码管显示

1、电路设计

​ 在Proteus中搭建MSP430G2553的最小系统,选用驱动芯片74HC245和共阴极数码管7SEG-COM-CAT-GRN,限流电阻选取合适的值,不能太大,否则无法驱动数码管导致不显示。在这里插入图片描述

2、代码设计

CCS的工程创建在此不必赘述,此代码较为简单,只需要使用while循环和一个自定义的延时函数即可。首先利用for循环定义了一个单位为ms的延时函数,由于是利用for循环的语句执行时间来计算的,可能会不太准确。根据电路的连接方式,确定BIT0-BIT6对应的数码管的显示位置,得到下图,根据图位置组合出数字1-9的代码显示。在这里插入图片描述
​ 如下,便是对应电路连接方式的数码管数字显示对应关系

P2OUT=BIT0+BIT1+BIT4+BIT5+BIT6;//9      
P2OUT=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;//8
P2OUT=BIT4+BIT5+BIT6;//7
P2OUT=BIT0+BIT1+BIT2+BIT3+BIT4+BIT6;//6
P2OUT=BIT0+BIT1+BIT3+BIT4+BIT6;//5
P2OUT=BIT0+BIT1+BIT4+BIT5;//4
P2OUT=BIT0+BIT3+BIT4+BIT5+BIT6;//3
P2OUT=BIT0+BIT2+BIT3+BIT5+BIT6;//2
P2OUT=BIT1+BIT2;//1

​ 工程代码如下:

#include <msp430.h> 
/**

 * main.c
   */
   void delay_ms(int ms)//延时函数
   {
   for(;ms>0;ms--) __delay_cycles(1000);
   }

int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer关闭看门狗
	P2DIR |= BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;//将P2设置为输出,P2DIR使P2口的方向寄存器

	while(1)
	{
	
	      P2OUT=BIT0+BIT1+BIT4+BIT5+BIT6;//9
	      delay_ms(50);
	      P2OUT=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;//8
	      delay_ms(50);
	      P2OUT=BIT4+BIT5+BIT6;//7
	      delay_ms(50);
	      P2OUT=BIT0+BIT1+BIT2+BIT3+BIT4+BIT6;//6
	      delay_ms(50);
	      P2OUT=BIT0+BIT1+BIT3+BIT4+BIT6;//5
	      delay_ms(50);
	      P2OUT=BIT0+BIT1+BIT4+BIT5;//4
	      delay_ms(50);
	      P2OUT=BIT0+BIT3+BIT4+BIT5+BIT6;//3
	      delay_ms(50);
	      P2OUT=BIT0+BIT2+BIT3+BIT5+BIT6;//2
	      delay_ms(50);
	      P2OUT=BIT1+BIT2;///1
	      delay_ms(50);
	}


	return 0;

}

三、两位数码管显示

1、电路设计

基于一位数码管电路,再添加一组驱动芯片和数码管即可,用单片机的P1口进行控制。
在这里插入图片描述

2、代码设计

具体代码分析已在注释详细给出

#include <msp430.h> 


/**

 * main.c
   */
   unsigned char code_seg7[10]={
                            BIT1+BIT2+BIT3+BIT4+BIT5+BIT6,//0
                            BIT1+BIT2,//1
                            BIT0+BIT2+BIT3+BIT5+BIT6,//2
                            BIT0+BIT3+BIT4+BIT5+BIT6,//3
                            BIT0+BIT1+BIT4+BIT5,//4
                            BIT0+BIT1+BIT3+BIT4+BIT6,//5
                            BIT0+BIT1+BIT2+BIT3+BIT4+BIT6,//6
                            BIT4+BIT5+BIT6,//7
                            BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6,//8
                            BIT0+BIT1+BIT4+BIT5+BIT6//9
                            };


void delay_ms(int ms)//延时函数
{
    for(;ms>0;ms--) __delay_cycles(1000);
}

int main(void)
{
    unsigned char data_seg7,ten_data,one_data;//定义显示数据,十位数码管数据,个位数码管数据
    
	WDTCTL = WDTPW | WDTHOLD;	// 关闭看门狗
	
	P1DIR |= BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;//将P1设置为输出,P2DIR使P2口的方向寄存器
	P2DIR |= BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;//将P2设置为输出,P2DIR使P2口的方向寄存器

	while(1)
	{
	    for(data_seg7=1;data_seg7<32;data_seg7++)
	    {
	        ten_data = data_seg7/10;              //对10整除取得十位数据
	        one_data = data_seg7%10;              //对10取余取得个位数据
	        P1OUT=code_seg7[ten_data];            //P1口输出十位数据
	        P2OUT=code_seg7[one_data];            //P2口输出个位数据
	
	        delay_ms(50);
	    }
	}
	
	return 0;

}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值