新闻中心

EEPW首页>嵌入式系统>设计应用> 用MSP430的32768Hz晶振写的时钟

用MSP430的32768Hz晶振写的时钟

作者: 时间:2016-12-02 来源:网络 收藏


}

本文引用地址://m.amcfsurvey.com/article/201612/324675.htm

void Clock(void)
{
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(2,shi);
}
write_sfm(5,fen);
}
write_sfm(8,miao);

}

void keyscan()
{

if(keyin!=0x0f)
{
delay(5); //延时消抖
if(keyin != 0x0f) //再次检测按键状态
{
temp=keyin;
while(keyin != 0x0f); //等待按键被放开
if(temp==0x0e)
{
keynum++;
switch(keynum)
{
case 1:
_DINT();
// CCTL0 &=~ CCIE; //两种停止时钟的方法效果一样
write_com(0x80+0x40+9);
write_com(0x0f);//光标开始闪
break;
case 2:
write_com(0x80+0x40+6);break;
case 3:
write_com(0x80+0x40+3);break;
case 4:
keynum=0;
write_com(0x0c);//开显示,光标不显示
_EINT();
// CCTL0|=CCIE; //使用相应打开时钟的方法
break;
}
}
if(temp==0x0d)
{
// while(keyin != 0x0d); //等待按键被放开
switch(keynum)
{
case 1:
miao++;
if(miao==60)miao=0;
write_sfm(8,miao);
write_com(0x80+0x40+9);
break;
case 2:
fen++;
if(fen==60)fen=0;
write_sfm(5,fen);
write_com(0x80+0x40+6);
break;
case 3:
shi++;
if(shi==24)shi=0;
write_sfm(2,shi);
write_com(0x80+0x40+3);
break;
}
}

if(temp==0x0b)
{
// while(keyin != 0x0d); //等待按键被放开
switch(keynum)
{
case 1:
miao--;
if(miao==-1)miao=59;
write_sfm(8,miao);
write_com(0x80+0x40+9);
break;
case 2:
fen--;
if(fen==-1)fen=59;
write_sfm(5,fen);
write_com(0x80+0x40+6);
break;
case 3:
shi--;
if(shi==-1)shi=23;
write_sfm(2,shi);
write_com(0x80+0x40+3);
break;
}
}

}
}
}

int main( void )
{ P6DIR|=BIT3;
P6OUT|=BIT3;
//上两句是打开1602的背光电源

WDTCTL = WDTPW + WDTHOLD;

lcd_init();
delay(500);

write_com(0x80+0x40+4);
write_data(:);
write_com(0x80+0x40+7);
write_data(:);
write_sfm(2,shi);
write_sfm(5,fen);
write_sfm(8,miao);


CCR0 = 32768 - 1;//设置定时器A的中断时间为1S
TACTL = TASSEL_1 + MC_1; //计数时钟ACLK, 增计数模式
CCTL0 |= CCIE; //使能CCR0比较中断
_EINT();//打开全局中断


P1DIR = 0xf0; //设置P1.0~P.3为输入状态
// P1DIR = BIT7; //设置P1.0~P.3为输入状态,P1.7为输出
// P1OUT = 0;
//以上两句是在没有独立按键情况下把P1_7拉低成为地线

while(1)
{
keyscan();
//本程序如果加低功耗模式会使按键功能失效
}
}

/*******************************************
函数名称:TimerA_ISR
功 能:定时器A的中断服务函数
********************************************/
#pragmavector=TIMERA0_VECTOR
__interrupt void TimerA_ISR(void)
{
Clock();
}
//到此时钟加按键完成


上一页 1 2 下一页

关键词:MSP430晶振时

评论


技术专区

关闭