打印

MSP430F5529 RCT求官方例程

[复制链接]
2376|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奕者1999|  楼主 | 2014-7-31 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
奕者1999|  楼主 | 2014-7-31 15:49 | 只看该作者
#include  "msp430f5529.h"
typedef unsigned char uchar;
typedef unsigned int  uint;
void Init_Rtc(void);
void Init_Clk(void);
void Init_System(void);
int sec=0;
int min=0;
int hour=0;
/*************************************************
  函数(模块)名称:void Init_System(void)
  功能:  该程序系统初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:          void                         
  输出参数:           void
函数返回值说明 :void               
  使用的资源                   
  其它说明:                      
*************************************************/
void Init_System(void)
{
   Init_Clk();                                 //调用时钟函数
   Init_Rtc();                                 //RTC 初始化
   P3DIR |= BIT6;                              //P1.0为输出
   P3OUT |= BIT6;
   P3DIR |= BIT7;                              //P7.7为输出
   P3OUT &= ~BIT7;
   __bis_SR_register( GIE);
}

/*************************************************
  函数(模块)名称:void Init_Rtc(void)
  功能:  RTC初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:          void                         
  输出参数:           void
函数返回值说明 :void               
  使用的资源                   
  其它说明:                      
*************************************************/
void Init_Rtc(void)
{                                             // BCD码日历格式输出                                                            
        
       RTCCTL01 = RTCHOLD + RTCMODE + RTCTEV_0;
       RTCPS0CTL =   RT0PSHOLD ;             //配置两个计数器分频                                 
       RTCPS1CTL  =  RT1PSHOLD ;
       RTCSEC =  54;                       //初始化秒         
       RTCMIN =  59 ;                      //初始化分钟
       RTCHOUR =8;                        //初始化小时
       RTCCTL01 &= ~RTCHOLD;                 //打开RTC模块              
       RTCPS0CTL &= ~RT0PSHOLD;              //打开RTCPS0CTL
       RTCPS1CTL &= ~RT1PSHOLD;              //打开RTCPS1CTL
       RTCCTL0 |= RTCRDYIE + RTCTEVIE;         //打开安全访问使能 ,闹钟使能  
  
}
/*************************************************
  函数(模块)名称:void Init_Clk(void)
  功能: 时钟初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:          void                         
  输出参数:           void
函数返回值说明 :void               
  使用的资源                   
  其它说明:                      
*************************************************/
void Init_Clk(void)
{
     P5SEL |= BIT4+BIT5;                         //启动XT1                                
     UCSCTL1 = DCORSEL_2;                   //DCO 范围配置            
     UCSCTL4 = SELM_3 + SELA_0 + SELS_4;    //设置时钟源           
     while (SFRIFG1 & OFIFG)                //等待时钟系统正常工作            
     {
          UCSCTL7 &= ~(  XT1LFOFFG + DCOFFG);
          SFRIFG1 &= ~OFIFG;
     }        
}

    uchar yi[16]= {"  新型全自动机  "};
    uchar er[16]= {"    械磨床      "};
    uchar san[16]={"  时间          "};
    uchar si[16]= {"加工零件数:     "};
    int cnt=0;
#define LCD_DataIn    P1DIR=0x00    //数据口方向设置为输入
#define LCD_DataOut   P1DIR=0xff    //数据口方向设置为输出
#define LCD2MCU_Data  P1IN
#define MCU2LCD_Data  P1OUT
#define LCD_CMDOut    P3DIR|=0x07     //P3口的低三位设置为输出
#define LCD_RS_H      P3OUT|=BIT0      //P3.0
#define LCD_RS_L      P3OUT&=~BIT0     //P3.0
#define LCD_RW_H      P3OUT|=BIT1      //P3.1
#define LCD_RW_L      P3OUT&=~BIT1     //P3.1
#define LCD_EN_H      P3OUT|=BIT2      //P3.2
#define LCD_EN_L      P3OUT&=~BIT2     //P3.2
/*************************************************
  函数(模块)名称:void Init_Rtc(void)
  功能:  RTC初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:          void                         
  输出参数:           void
函数返回值说明 :void               
  使用的资源                   
  其它说明:                      
*************************************************/

void Ini_rtc(void)
{                                             // BCD码日历格式输出                                                                     
       RTCCTL1 =RTCBCD+RTCHOLD+RTCMODE;
       RTCPS0CTL =   RT0PSHOLD ;             //配置两个计数器分频                                 
       RTCPS1CTL  =  RT1PSHOLD ;
       RTCSEC =  0x22;                       //初始化秒         
       RTCMIN =  0X00 ;                      //初始化分钟
       RTCHOUR =0X08;                        //初始化小时
       RTCDOW = 0X02 ;                     
       RTCTIM1 = 0X0411;   
      RTCDAY =  0x24;                       //日期初始化                  
       RTCMON =  0X08 ;                      //初始化月份
       RTCYEAR = 0x2014;                     //初始化年份                 
       RTCAMINHR = 0X2200 + BIT7;                 //闹钟小时和分钟设置
       RTCADOWDAY = 0X2402;                  //闹钟星期和日期设置
       RTCCTL01 &= ~RTCHOLD;                 //打开RTC模块              
       RTCPS0CTL &= ~RT0PSHOLD;              //打开RTCPS0CTL
       RTCPS1CTL &= ~RT1PSHOLD;              //打开RTCPS1CTL
       RTCCTL0 |= RTCRDYIE + RTCTEVIE;         //打开安全访问使能 ,闹钟使能  
  
}
/*******************************************
函数名称:Delay_1ms
功    能:延时约1ms的时间
参    数:无
返回值  :无
********************************************/
void Delay_1ms(void)
{
        uchar i;
        for(i = 150;i > 0;i--)  _NOP();
}
/*******************************************
函数名称:Delay_Nms
功    能:延时N个1ms的时间
参    数:n--延时长度
返回值  :无
********************************************/
void Delay_Nms(uint n)
{
    uint i;
    for(i = n;i > 0;i--)    Delay_1ms();
}
/*******************************************
函数名称:Write_Cmd
功    能:向液晶中写控制命令
参    数:cmd--控制命令
返回值  :无
********************************************/
void Write_Cmd(uchar cmd)
{
    uchar lcdtemp = 0;
    LCD_RS_L;
    LCD_RW_H;
    LCD_DataIn;  
    do                       //判忙
    {   
        LCD_EN_H;
               _NOP();                                       
               lcdtemp = LCD2MCU_Data;
               LCD_EN_L;
    }
    while(lcdtemp & 0x80);
   
    LCD_DataOut;   
    LCD_RW_L;                 
    MCU2LCD_Data = cmd;
    LCD_EN_H;
    _NOP();                                                                         
    LCD_EN_L;
}
/*******************************************
函数名称:Write_Data
功    能:向液晶中写显示数据
参    数:dat--显示数据
返回值  :无
********************************************/
void  Write_Data(uchar dat)
{
    uchar lcdtemp = 0;   
        
    LCD_RS_L;
    LCD_RW_H;  
    LCD_DataIn;   
    do                       //判忙
    {   
        LCD_EN_H;
        _NOP();                                               
        lcdtemp = LCD2MCU_Data;
        LCD_EN_L;      
    }
    while(lcdtemp & 0x80);  
   
    LCD_DataOut;
    LCD_RS_H;
    LCD_RW_L;  
        
    MCU2LCD_Data = dat;
    LCD_EN_H;
    _NOP();
    LCD_EN_L;
}  
/*******************************************
函数名称:Ini_Lcd
功    能:初始化液晶模块
参    数:无
返回值  :无
********************************************/
void Ini_Lcd(void)
{                  
    LCD_CMDOut;    //液晶控制端口设置为输出
   
    Delay_Nms(500);
    Write_Cmd(0x30);   //基本指令集
    Delay_1ms();
    Write_Cmd(0x02);   // 地址归位
    Delay_1ms();
        Write_Cmd(0x0c);   //整体显示打开,游标关闭
    Delay_1ms();
        Write_Cmd(0x01);   //清除显示
    Delay_1ms();
        Write_Cmd(0x06);   //游标右移
    Delay_1ms();
        Write_Cmd(0x80);   //设定显示的起始地址
}

/*************************************************************
程序功能:在12864液晶上显示ASCII常用字符
-------------------------------------------------------------
跳线设置:将跳线座J5的1脚(+)和2脚短接,选择并行数据传输方式
-------------------------------------------------------------
测试说明:观察液晶显示
**************************************************************/
/*
将工件数装换为显示
*/
void zhuan_cnt(void)
{
int i;
i=cnt;
si[15]=i%10+0x30;
i=i/10;
si[14]=i%10+0x30;
i=i/10;
si[13]=i%10+0x30;
i=i/10;
si[12]=i%10+0x30;
i=i/10;
si[11]=i%10+0x30;
}
/*
rtc时间转换
*/

void zhuan_rtc(void)
{

san[15]=sec%10+'0';
san[14]=sec/10+'0';
san[13]=':';
san[12]=(min%10)+'0';
san[11]=(min/10)+'0';
san[10]=':';
san[9]=(hour%10)+'0';
san[8]=(hour/10)+'0';
san[7]=':';

}
void dis( void )
{
    uint i;
    zhuan_rtc();
    zhuan_cnt();
      Write_Cmd(0x80);            //写第一行的显示地址
    for(i = 0; i < 16; i++)
      Write_Data(yi[i]);     //显示0x30~0x3f对应的字符
    Write_Cmd(0x90);            //写第二行的显示地址
    for(i = 0; i < 16; i++)
      Write_Data(er[i]);     //显示0x40~0x4f对应的字符
    Write_Cmd(0x88);            //写第三行的显示地址
    for(i = 0; i < 16; i++)
      Write_Data(san[i]);     //显示0x50~0x5f对应的字符
    Write_Cmd(0x98);            //写第四行的显示地址
    for(i = 0; i < 16; i++)
      Write_Data(si[i]);     //显示0x60~0x6f对应的字符  
}

/***************************主函数***************************/
void main(void)
{
   uint i,j;
WDTCTL = WDTPW + WDTHOLD;    //关狗
Ini_Lcd();                  //初始化液晶
Init_System(); //初始化rtc
for(;;)
{
dis();
for(i = 100; i > 0; i--)        //延时一会
    {
        for(j = 1000; j > 0; j--)
          _NOP();   
    }
}
}
/************************ RTC中断*****************************/
#pragma vector=RTC_VECTOR
__interrupt void basic_timer(void)
{   
  switch(RTCIV)
  {
       case 2 : P3OUT ^= BIT6;
       sec=RTCSEC;                       //初始化秒         
       min=RTCMIN;                      //初始化分钟
       hour=RTCHOUR;     
       break;             //RTCRDYIFG
       case 4 ://P3OUT ^= BIT6;
       break;        
       case 6 : break;              //RTCAIFG
       case 8 : break;
       case 10 : break;         
  }   
}

使用特权

评论回复
板凳
奕者1999|  楼主 | 2014-7-31 15:49 | 只看该作者
本人已经做出下面是程序

使用特权

评论回复
地板
回忆只是个缺| | 2019-5-28 12:35 | 只看该作者
很不错,感谢分享,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝