?? msp430驅動12864-3圖形點陣液晶.txt
字號:
#include <MSP430x14x.h>
//***************數據類型定義****************************
#define uint unsigned int
#define uchar unsigned char
//***************液晶控制線定義****************************
#define RS BIT1 //P3.1
#define RW BIT0 //P3.0
#define E BIT7 //P2.7
#define CS1 BIT3 //P3.3
#define CS2 BIT2 //P3.2
#define RST BIT1 //P2.1
//數據線:p4口
//**************漢字定義為16*16,縱向,大小10,D0--D7 ,字體 Times NewRoman**************
const unsigned char code1[]={64,66,66,66,254,66,66,66,66,254,66,67,98,64,0,0,32,32,16,8,7,0,0,0,0,63,0,0,0,0,0,0};//開
const unsigned char code2[]={8,8,248,15,8,248,32,48,44,35,32,40,48,96,0,0,32,17,10,4,10,17,0,63,17,17,17,17,63,0,0,0};//始
const unsigned char code3[]={8,8,136,255,72,72,4,4,4,4,252,4,6,4,0,0,1,17,32,31,0,0,0,0,16,32,31,0,0,0,0,0};//打
const unsigned char code4[]={0,252,68,68,66,67,2,0,252,4,4,4,252,0,0,0,0,15,8,4,4,2,2,0,63,0,2,4,3,0,0,0};//印
const unsigned char code5[]={4,4,132,196,52,12,23,20,20,212,52,20,6,4,0,0,2,1,0,63,0,1,1,17,33,31,1,1,1,1,0,0};//存
const unsigned char code6[]={64,32,248,7,64,204,32,40,168,255,168,176,172,32,0,0,0,0,63,0,0,31,10,1,63,20,20,20,63,0,0,0};//儲
const unsigned char code7[]={16,97,134,64,254,2,250,2,254,0,252,0,255,0,0,0,2,62,1,32,19,8,7,8,51,0,19,32,31,0,0,0};//測
const unsigned char code8[]={0,32,32,190,170,170,170,170,170,170,170,191,34,32,0,0,0,32,40,47,42,42,42,63,42,42,42,47,40,32,0,0};//量
const unsigned char code9[]={32,33,230,0,128,136,136,255,136,136,255,136,136,136,0,0,16,8,7,8,16,40,36,35,32,32,47,32,32,32,0,0};//進
const unsigned char code10[]={16,136,68,227,24,32,34,34,34,34,226,35,50,32,0,0,1,0,0,63,0,0,0,0,16,32,31,0,0,0,0,0};//行
const unsigned char code11[]= {0,248,8,8,8,8,255,8,8,8,8,252,8,0,0,0,0,1,1,1,1,1,63,1,1,1,1,1,0,0,0,0};//中
const unsigned char code12[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,0,0,0};//點
const unsigned char code100[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32};//線
//******************函數聲明*******************************
void Init_Clock(void);
void Init_IO(void);
void Init_LCD (void);
void delay (uint us);
void delayl(uint ms);
void WriteCommand_L (uchar com1);
void WriteCommand_R (uchar com2);
void WriteData_L (uchar dat1);
void WriteData_R(uchar dat2);
void ClearScreen(void);
void AllScreen(void);
void StateCheck(void);
void WriteWord(uchar colum,uchar page, const uchar *code);
void DrawLine(void);
//*************系統主程序**********************************
void main( void )
{
WDTCTL=WDTPW+WDTHOLD; //關閉看門狗
Init_Clock();
Init_IO();
Init_LCD ();
WriteWord(0,6, code1);
WriteWord(16, 6, code2);
WriteWord(48, 6, code3);
WriteWord(64, 6, code4);
WriteWord(96,6, code5);
WriteWord(112, 6, code6);
WriteWord(16, 2, code7);
WriteWord(32, 2, code8);
WriteWord(48, 2, code9);
WriteWord(64, 2, code10);
WriteWord(80, 2, code11);
WriteWord(96, 2, code12);
DrawLine();
}
//**********************IO初始化***************************
void Init_IO(void)
{
P1DIR=0; //設置為輸入
P1SEL=0; //設置為一般IO
P1OUT=0X00;
P2DIR=0;
P2SEL=0;
P2OUT=0X00;
P3DIR=0;
P3SEL=0;
P3OUT=0X00;
P4DIR=0;
P4SEL=0;
P4OUT=0X00;
P5DIR=0;
P5SEL=0;
P5OUT=0X00;
P6DIR=0;
P6SEL=0;
P6OUT=0X00;
}
//*****************高頻時鐘初始化**************************
void Init_Clock(void)
{
//UTCTL1 = SSEL0;
// BCSCTL1=0X00;
//BCSCTL2=0X00;
unsigned int iq0;
BCSCTL1&=~XT2OFF; //打開XT2振蕩器
do
{
IFG1 &= ~OFIFG; // 清除振蕩器失效標志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延時,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判斷XT2是否起振
BCSCTL2=SELM_2+SELS; //選擇MCLK、SMCLK為XT2,
BCSCTL2|=DIVM_2; //MCLK 4分頻 MCLK=2MHZ
BCSCTL2|=DIVS_2; //SMCLK 4分頻 SMCLK=2MHZ
}
//***************延時子程序******************************
void delay (uint us)
{
while(us--);
}
void delayl (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1000;j++)
;
}
//*****************狀態檢查*********************************
void StateCheck(void)
{ uchar cradd1;
P3OUT&=~RS;
P3OUT|=RW; //RS=0,R/W=1,以便讀液晶狀態
P4DIR=0x00; //P4口為輸入口
do
{
P2OUT|=E; //E=1
cradd1=P4IN;
P2OUT&=~E; //E=0
}
while((cradd1&0x80)!=0);
}
//***************寫指令代碼子程序(左)*******************
void WriteCommand_L (uchar com1)
{ P3OUT&=~CS1; //cs1=0
P3OUT|=CS2; //cs2=1 選擇左半屏
StateCheck(); //檢查是否忙
P3OUT&=~RW; //rw=0
P4DIR=0xff; //P4口為輸出口
P4OUT=com1;
P2OUT|=E; //E=1
P2OUT&=~E; //E=0
}
//*****************寫指令代碼子程序(右)*******************
void WriteCommand_R (uchar com2)
{ P3OUT|=CS1; //cs1=1
P3OUT&=~CS2; //cs2=0
StateCheck(); //檢查是否忙
P3OUT&=~RW; //rw=0
P4DIR=0xff; //P4口為輸出口
P4OUT=com2;
P2OUT|=E; //E=1
P2OUT&=~E; //E=0
}
//****************寫顯示數據子程序(左)**********************
void WriteData_L (uchar dat1)
{
P3OUT&=~CS1; //cs1=0
P3OUT|=CS2; //cs2=1
StateCheck(); //檢查是否忙
P3OUT|=RS; //rs=1
P3OUT&=~RW; //rw=0
P4DIR=0xff; //P4口為輸出口
P4OUT=dat1;
P2OUT|=E; //E=1
P2OUT&=~E; //E=0
}
//****************寫顯示數據子程序(右)**********************
void WriteData_R(uchar dat2)
{
P3OUT|=CS1; //cs1=1
P3OUT&=~CS2; //cs2=0
StateCheck(); //檢查是否忙
P3OUT|=RS; //rs=1
P3OUT&=~RW; //rw=0
P4DIR=0xff; //P4口為輸出口
P4OUT=dat2;
P2OUT|=E; //E=1
P2OUT&=~E; //E=0
}
//******************清屏 ************************
void ClearScreen(void)
{ uchar i,j;
for(i=0;i<8;i++)
{ WriteCommand_L(i|0xb8); //設置頁地址
WriteCommand_R(i|0xb8);
WriteCommand_L(0x40); //設置列地址
WriteCommand_R(0x40);
for(j=0;j<64;j++) //寫0x00
{ WriteData_L(0x00);
WriteData_R(0x00);
}
}
}
//******************滿屏 ************************
void AllScreen(void)
{ uchar i,j;
for(i=0;i<8;i++)
{ WriteCommand_L(i|0xb8); //設置頁地址
WriteCommand_R(i|0xb8);
WriteCommand_L(0x40); //設置列地址
WriteCommand_R(0x40);
for(j=0;j<64;j++) //寫0xff
{ WriteData_L(0xff);
WriteData_R(0xff);
}
}
}
//****************LCD初始化******************************
void Init_LCD (void)
{
P2DIR|=BIT1; //P2.7為輸出口
P2OUT&=~RST; //RST=0,LCD復位
delayl(50); //延時
P2OUT|=RST; //rst=1
delayl(50);
P3DIR|=BIT3; //P3.3為輸出口
P3OUT&=~CS1; //CS1=0
P3DIR|=BIT2; //P3.2為輸出口
P3OUT&=~CS2; //CS2=0
P3DIR|=BIT1; //P3.1為輸出口
P3OUT&=~RS; //RS=0
P3DIR|=BIT0; //P3.0為輸出口
P3OUT&=~RW; //RW=0
P2DIR|=BIT7; //P2.7為輸出口
P2OUT&=~E; //E=0
WriteCommand_L(0xc0);WriteCommand_R(0xc0); //顯示開始行
WriteCommand_L(0x3f);WriteCommand_R(0x3f); //開顯示
ClearScreen();
}
//***********************寫漢字*********************************
void WriteWord (uchar colum,uchar page, const uchar *code)//page2:頁 colum2:列 code2:字代碼
{
uchar i,j,colum0;
uchar flag;
for(j=0;j<2;j++)
{ WriteCommand_L(page|0xb8); //頁
WriteCommand_R(page|0xb8);
colum0=colum;
if(colum0>63) //右屏
{ colum0=colum0-64;
WriteCommand_R(colum0|0x40);
flag=1;
}
else //左屏
{
WriteCommand_L(colum0|0x40);
flag=0;
}
//*********************
for(i=0;i<16;i++)
{
if(flag==0)
{
WriteData_L(*code);
}
else
{
WriteData_R(*code);
}
code++;
if(colum0==64) //列=64
{
colum0=0;
if(flag==0)
{
flag=1;
WriteCommand_R(colum0|0x40);
}
else
{
break;
}
}
// colum++;
}
page++;
}
}
//*******************畫線*********************************
void DrawLine(void)
{
uchar i,j=0;
for(i=0;i<8;i++)
{
WriteWord(j,4,code100);
j+=16;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -