|
#include "msp430x24x.h"
typedef unsigned char uchar;
typedef unsigned int uint;
/***************宏定义*********************************/
#define DataDir P1DIR //数据选择
#define DataPORT P1OUT //输出。
#define Busy 0x80
#define CtrLDDir P2DIR
#define CLR_RS P2OUT&=~BIT2; //RS=P2.2 0
#define SET_RS P2OUT|=BIT2; // 1
#define CLR_RW P2OUT&=~BIT1; //RW=P2.1 0
#define SET_RW P2OUT|=BIT1; // 1
#define CLR_EN P2OUT&=~BIT0; //EN=P2.0 0
#define SET_EN P2OUT|=BIT0; // 1
/*******************************************************/
uchar ta××e[]=" 2010-06-05 ";
uchar ta××e1[]=" ^-^23:59:58 ^-^";
uchar i=0,tt=0;
uint miao,shi,fen;
uchar NUM_LED[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90};
void delay_lcd(void)
{
for(i=0;i<200;i++);
}
/***************检测忙信号*********************/
void WaitForEna××e(void)
{
DataDir &=0X00; //将P4口切换到输入状态
CLR_RS;
SET_RW;
_NOP();
SET_EN;
_NOP();
_NOP();
while((P1IN & Busy) != 0); //检测忙标志
CLR_EN;
P1DIR|=0XFF; //将P1口切换到输出状态
}
/***************写指令*********************/
void LcdWriteCommand(uchar cmd)
{
CLR_RS;
CLR_RW;
_NOP();
DataPORT=cmd; //将命令写入数据端口。
_NOP();
SET_EN //产生使能脉冲信号。
_NOP();
_NOP();
CLR_EN;
}
/***************写数据*********************/
void LcdWriteData(uchar Data)
{
SET_RS ;
CLR_RW;
DataPORT=Data; //数据写入数据端口。
_NOP();
SET_EN //产生使能脉冲信号。
_NOP();
_NOP();
CLR_EN;
}
/***************LCD初始化*********************/
void Lcdinit(void)
{
CtrLDDir|=0xff; // 控制I0口为输出模式 P2DIR
DataDir=0xff; //数据端口为输出. P1DIR
LcdWriteCommand(0x38); //显示模式设置
LcdWriteCommand(0x06); //读写字符时,地址指针加1 ,整体不移动。
LcdWriteCommand(0x0c); //显示开,不开光标,不闪烁
LcdWriteCommand(0x08); //关闭显示
LcdWriteCommand(0x01); //清显示,光标复位到地址00H
}
void sfm(uchar add,uchar data)
{
uchar shi,ge;
shi=data/10;
ge=data%10;
LcdWriteCommand(0x80+0x40+add);
LcdWriteData(0x30+shi);
LcdWriteData(0x30+ge);
}
void main(void)
{
uchar m,n;
WDTCTL = WDTPW+WDTHOLD;
TACTL=TASSEL_2+ID_3+MC_1; //DCO(8KHZ). 8分频。 UP to CCR0 1Us
CCTL0=CCIE; /* Capture/compare interrupt ena××e */
CCR0=10000;
Lcdinit();
_BIS_SR(LPM3_bits+GIE);
//LcdWriteCommand(0x80);
for(m=0;m<13;m++)
{
delay_lcd();
LcdWriteData(ta××e[m]);
delay_lcd();
delay_lcd();
}
LcdWriteCommand(0x80+0x40);
for(n=0;n<16;n++)
{
delay_lcd();
LcdWriteData(ta××e1[n]);
delay_lcd();
//delay_lcd();
}
while(1)
{
if(tt==10)
{
tt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
sfm(4,shi);
}
sfm(7,fen);
}
sfm(10,miao);
}
}
}
// 看门狗中断服务子程序
#pragma vector= TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
tt++;
LPM3_EXIT;
}
为什么只是个位变化 但是十位不变化呢?谢谢大家
|
|