⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 是一个msp430做的电子钟程序
💻 C
字号:
#include <msp430x14x.h>
#include "12864.c"
#include "key.c"
#include "iic.c"
uchar hour,minute,second;
uchar year,month,day;
uchar ii=0;
void fixshow(void);
void initSys(void);
void initTimer(void);
void disTime(void);//显示时间
void timecount(void);//时间运算
void setupTime(void);//设置时间
void initIIC(void);
void Delay(long);
void returnTime(void);//从存储器得到时间
unsigned char IIC(unsigned char *DataBuff,char ByteQuantity,unsigned int Address, unsigned char ControlByte);//iic操作
unsigned char a[8];//时间存储临时变量
void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  //initSys();
  
  init12864();
  //Delay(100);
  initKey();
  initTimer(); 
  
 
  fixshow(); 
  while(1)
  {
    
    setupTime();
    disTime();
    timecount();
    
  }
  
}  
void initSys(void)
{
  unsigned int x0;
  BCSCTL1&=~XT2OFF;//打开XT2振荡器
  do
  {
    IFG1&=~OFIFG;
    for(x0=0xff;x0>0;x0--);
  }while((IFG1&OFIFG)!=0);
  BCSCTL2=SELM_2+SELS;//选择MCLK,SMCLK为XT2;SELS为选择SMCLK,8M
  //BCSCTL2=SELM_3;//MCLK选择为32.768k
  IFG1&=~OFIFG;
} 

#pragma vector=TIMERA0_VECTOR
__interrupt void timeA()
{
  
  ii++;
  if(ii==20)
  {
    second++;
    ii=0;
  }
}

void fixshow()
{
  clr();
  display(0,32,dian);
  display(0,48,zi);
  display(0,65,zhong);
  display3(2,16,num[2]);
  display3(2,24,num[0]);
  display3(2,32,num[0]);
  display3(2,40,num[8]);
  display(2,48,nian);
  display3(2,64,num[7]);
  display(2,72,yue);
  display3(2,88,num[1]);
  display3(2,96,num[0]);
  display(2,96,ri);
}

void initTimer()
{
  TACTL|=TASSEL_2+ID_3;
  TACTL=TASSEL1+TAR ;//SMCLK, clear TAR
  //#define TASSEL_0            (0*0x100u) /* Timer A clock source select: 0 - TACLK */
  //#define TASSEL_1            (1*0x100u) /* Timer A clock source select: 1 - ACLK  */
  //#define TASSEL_2            (2*0x100u) /* Timer A clock source select: 2 - SMCLK */
  //#define TASSEL_3            (3*0x100u) /* Timer A clock source select: 3 - INCLK */
  CCTL0=CCIE;
  CCR0=50000;
  //#define MC_0                (0*0x10u)  /* Timer A mode control: 0 - Stop */
  //#define MC_1                (1*0x10u)  /* Timer A mode control: 1 - Up to CCR0 */
  //#define MC_2                (2*0x10u)  /* Timer A mode control: 2 - Continous up */
  //#define MC_3                (3*0x10u)  /* Timer A mode control: 3 - Up/Down */
  TACTL|=MC_1;
  
}
void disTime()
{
  display3(4,32,num[1]);
  display3(4,40,num[6]);
  display3(4,48,colon);
  display3(4,56,num[minute/10]);
  display3(4,64,num[minute%10]);
  display3(4,72,colon);
  display3(4,80,num[second/10]);
  display3(4,88,num[second%10]);
}

void timecount()
{
  if(second>=60) 
  {
    second=0;
    minute++;
  }
}

void setupTime()
{
  if(value==1)
  { 
    minute++;
    value=0;
  }
  if(value==2) 
  {
    minute--;
    value=0;
  }
  
  if(value==3)
  {
    hour++;
    value=0;
  }
  if(value==4)
  {
    hour--;
    value=0;
  }
  
  if(value==5)//存储数据
  {
    a[0]=minute;
    a[1]=hour;
    //a[2]=day;
    //a[3]=month;
    iic_check=IIC(a,2,0x00,(AT24_ADD|write));
  }
  
  if(value==6)
  {
    returnTime();
  }
  
}

void Delay(long v)
{
       while(v>0)v--;
}

void returnTime(void)
{
  iic_check=IIC(a,2,0x00,(AT24_ADD|read));
   minute=a[0];
   hour=a[1];
   //day=a[2];
   //month=a[3];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -