#include <msp430f149.h>
#ifndef _12864
#define _12864
////////12864 接线如下////////////////串行传输
/*
VSS -- GND
VDD -- 5V
CS/RS -- P6.1
SID/R/W-- P6.2
SCLK /E-- P6.3
RST -- P6.4
PSB -- GND 0串行 1并行传输
VEE----可以不接
LA/BLA/LEOA -- 5V
LD/BLK/LEOK -- GND
*/
//////接口在这里改////
#define LCDDIR P6DIR
#define LCD P6OUT
#define CS BIT1
#define SID BIT2
#define SCLK BIT3
#define RST BIT4
#define MCURate 25000000
//////////
//////////
void ShowText(char StarPos,unsigned char *s);//显示字体,
void Test();//显示屏测试
void lcdinit();//初始化
///////////////////////////////////
#define CS_H LCD|=CS
#define CS_L LCD&=~CS
#define SID_H LCD|=SID
#define SID_L LCD&=~SID
#define SCLK_H LCD|=SCLK
#define SCLK_L LCD&=~SCLK
#define RST_H LCD|=RST
#define RST_L LCD&=~RST
#define delays(x) __delay_cycles(x*10000)
void hzkdis(unsigned char *s);
void write_data(unsigned char Dispdata);
void write_data(unsigned char Dispdata);
void sendbyte(unsigned char zdata);
void write_com(unsigned char cmdcode);
#endif
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID_H;
}
else
{
SID_L;
}
SCLK_L;
SCLK_H; //E pei he xie ru
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS_H;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delays(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口shu ju
* 输入 : dispdata
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS_H;
sendbyte(0xfa); // shu jv shi xian shi shu ju 11111010
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delays(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
LCDDIR|=CS+RST+SCLK+SID;
delays(1);
RST_L;
delays(1);
RST_H;
delays(2);
write_com(0x30); //gong neng she ding
delays(1);
write_com(0x0c); //di zhi gui wei
delays(1);
}
///////////////////////
/*********************************************
名称:ShowText(char StarPos ,unsigned char *s)
输入:输入的首地址 ,输入内容
输出:无
功能:显示输入的文本
***********************************
*/
void LcdShow(char hang,char lie,unsigned char *s)
{
switch(hang)
{
case 1://第一行
write_com(0x80+lie);
break;
case 2://第二行
write_com(0x90+lie);
break;
case 3://第三行
write_com(0x88+lie);
break;
case 4://第四行
write_com(0x98+lie);
break;
}
while(*s > 0)
{
write_data(*s);
s++;
delays(1);
}
}
void gaibian(unsigned char weizhi,unsigned char j)
{
unsigned int date1,date2;
write_com(0x98+weizhi);
date1=j/10;
date2=j%10;
write_data(0x30+date1);
write_data(0x30+date2);
}
unsigned int cn=0;
void chushi()
{
lcdinit();
LcdShow(1,2,"智能小车");
LcdShow(2,0,"显示时间");
LcdShow(2,4,"徐爱昆");
LcdShow(3,0,"============");
LcdShow(4,0,"00时00分00秒 ");
}
void Init_TimerA0()
{
TA0CTL|=MC_1+TACLR+TASSEL_2;//计数模式 清除开始计数 比较模式
TA0CCTL0=CCIE;//比较器使能
TA0CCR0=20000;//比较值设为20000,相当于20ms
__bis_SR_register(GIE);
}
//////////////////////
unsigned int shi=0,fen=0,miao=0;
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;//STOP DOG
Init_TimerA0();
chushi();
while(1);
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TimeA(void)
{
cn++;
if(cn==50)
{
cn = 0;
miao++;
if(miao==59)
{
miao = 0;
fen++;
if(fen==59)
{
fen = 0;
shi++;
if(shi==23)
{
shi = 0;
}
gaibian(0,shi);
}
gaibian(2,fen);
}
gaibian(4,miao);
}
}