?? 串口.c
字號:
#ifndef _L12864_H_
#define _L12864_H_
#include <msp430x14x.h>
#define LCD_CS BIT7 //LCD_CS -> P2.7
#define LCD_CS_DIR P2DIR
#define LCD_CS_HI P2OUT |= LCD_CS
#define LCD_CS_LO P2OUT &= ~LCD_CS
#define LCD_DAT BIT6 //LCD_DAT -> P2.6
#define LCD_DAT_DIR P2DIR
#define LCD_DAT_IN P2IN
#define LCD_DAT_HI P2OUT |= LCD_DAT
#define LCD_DAT_LO P2OUT &= ~LCD_DAT
#define LCD_CLK BIT5 //LCD_CLK -> P2.5
#define LCD_CLK_DIR P2DIR
#define LCD_CLK_HI P2OUT |= LCD_CLK
#define LCD_CLK_LO P2OUT &= ~LCD_CLK
#define LCD_PSB BIT0 //LCD_PSB -> P4.0
#define LCD_PSB_DIR P4DIR
#define LCD_PSB_HI P4OUT |= LCD_PSB
#define LCD_PSB_LO P4OUT &= ~LCD_PSB
#define LCD_RST BIT2 //LCD_RST -> P4.2
#define LCD_RST_DIR P4DIR
#define LCD_RST_LO P4OUT &= ~LCD_RST
#define LCD_RST_HI P4OUT |= LCD_RST
void LCD_Init(void);
unsigned char CheckBusy(void);
void LCD_Delayt(unsigned int dtime);
void LCD_WriteComm(unsigned char wdata);
void LCD_WriteByte(unsigned char wdata);
void LCD_SetXY(unsigned char X,unsigned char Y);
void LCD_WriteDEC(unsigned char X,unsigned char Y,unsigned char Num);
void LCD_WriteString(unsigned char X,unsigned char Y,unsigned char *String);
void LCD_Init(void) {
LCD_RST_DIR |= LCD_RST; //RST -> 復位輸出
LCD_RST_LO; //復位狀態
LCD_PSB_DIR |= LCD_PSB;
LCD_PSB_LO;
LCD_CLK_DIR |= LCD_CLK;
LCD_CLK_LO;
LCD_DAT_DIR |= LCD_DAT;
LCD_DAT_LO;
LCD_CS_DIR |= LCD_CS;
LCD_CS_LO;
LCD_RST_HI;
LCD_WriteComm(0x30); //設定基本指令集
LCD_WriteComm(0x01); //清除顯示
LCD_WriteComm(0x02); //地址歸位
LCD_WriteComm(0x0c); //開顯示狀態
LCD_WriteComm(0x03);
LCD_WriteComm(0x06); //進入設定點
}
void LCD_Delayt(unsigned int dtime) {
unsigned int itemp;
for(itemp=0;itemp<dtime;itemp++);
}
unsigned char CheckBusy(void) {
unsigned char itemp;
unsigned char Read = 0XFC; //判斷是否忙的指令
unsigned char Read_H,Read_L;
LCD_CS_LO;
LCD_CLK_LO;
LCD_DAT_LO;
LCD_CS_HI;
for(itemp=0;itemp<8;itemp++) {
if((Read<<itemp) & BIT7)
LCD_DAT_HI;
else
LCD_DAT_LO;
LCD_CLK_HI;
_NOP();
LCD_CLK_LO;
}
LCD_DAT_DIR &= ~LCD_DAT;
for(itemp=0;itemp<8;itemp++) {
LCD_CLK_LO;
LCD_CLK_HI;
Read<<=1;
if((LCD_DAT_IN&LCD_DAT) == LCD_DAT)
Read |= BIT0;
else
Read &= ~BIT0;
}
Read_H = Read;
for(itemp=0;itemp<8;itemp++) {
LCD_CLK_LO;
LCD_CLK_HI;
Read<<=1;
if((LCD_DAT_IN&LCD_DAT) == LCD_DAT)
Read |= BIT0;
else
Read &= ~BIT0;
}
LCD_CS_LO;
LCD_DAT_DIR |= LCD_DAT;
LCD_DAT_LO;
Read_L = Read>>4;
Read = Read_H|Read_L;
return(Read);
}
void LCD_WriteComm(unsigned char wdata) {
unsigned char itemp;
unsigned char jtemp=0xf8;
do {
itemp = CheckBusy();
}while(itemp&0x80);
LCD_CS_LO;
LCD_CLK_LO;
LCD_DAT_LO;
LCD_CS_HI;
for(itemp=0;itemp<8;itemp++) {
if((jtemp<<itemp) & BIT7)
LCD_DAT_HI;
else
LCD_DAT_LO;
LCD_CLK_HI;
_NOP();
LCD_CLK_LO;
}
jtemp = wdata&0xf0;
for(itemp=0;itemp<8;itemp++) {
if((jtemp<<itemp) & BIT7)
LCD_DAT_HI;
else
LCD_DAT_LO;
LCD_CLK_HI;
_NOP();
LCD_CLK_LO;
}
itemp = wdata&0x0f;
jtemp = (itemp<<4)&0xf0;
for(itemp=0;itemp<8;itemp++) {
if((jtemp<<itemp) & BIT7)
LCD_DAT_HI;
else
LCD_DAT_LO;
LCD_CLK_HI;
_NOP();
LCD_CLK_LO;
}
LCD_CS_LO;
}
void LCD_WriteByte(unsigned char wdata) {
unsigned char itemp;
unsigned char jtemp=0xfa;
do {
itemp = CheckBusy();
}while(itemp&0x80);
LCD_CS_LO;
LCD_CLK_LO;
LCD_DAT_LO;
LCD_CS_HI;
for(itemp=0;itemp<8;itemp++) {
if((jtemp<<itemp) & BIT7)
LCD_DAT_HI;
else
LCD_DAT_LO;
LCD_CLK_HI;
_NOP();
LCD_CLK_LO;
}
jtemp = wdata&0xf0;
for(itemp=0;itemp<8;itemp++) {
if((jtemp<<itemp) & BIT7)
LCD_DAT_HI;
else
LCD_DAT_LO;
LCD_CLK_HI;
_NOP();
LCD_CLK_LO;
}
itemp = wdata&0x0f;
jtemp = (itemp<<4)&0xf0;
for(itemp=0;itemp<8;itemp++) {
if((jtemp<<itemp) & BIT7)
LCD_DAT_HI;
else
LCD_DAT_LO;
LCD_CLK_HI;
_NOP();
LCD_CLK_LO;
}
LCD_CS_LO;
}
void LCD_SetXY(unsigned char X, unsigned char Y) {
switch(Y) {
case 1:
LCD_WriteComm(0x7F + X);
break;
case 2:
LCD_WriteComm(0x8F + X);
break;
case 3:
LCD_WriteComm(0x87 + X);
break;
case 4:
LCD_WriteComm(0x97 + X);
}
}
void LCD_WriteString(unsigned char X,unsigned char Y,unsigned char *String) {
unsigned char temp;
LCD_SetXY(X,Y);
temp = *String;
while(temp!=0) {
LCD_WriteByte(temp);
temp = *(++String);
}
}
void LCD_WriteDEC(unsigned char X,unsigned char Y,unsigned char Num) {
LCD_SetXY(X,Y);
LCD_WriteByte((Num/10) + 0x30);
LCD_WriteByte((Num%10) + 0x30);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -