1960|0

6931

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

MSP430F5529 RCT求官方例程 [复制链接]

#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;         
  }   
}

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表