?? subfuncs.c
字號:
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
extern const unsigned char shuzi_table[];
#define LCD_DataIn P4DIR=0x00 //數據口方向設置為輸入
#define LCD_DataOut P4DIR=0xff //數據口方向設置為輸出
#define LCD2MCU_Data P4IN
#define MCU2LCD_Data P4OUT
#define LCD_CMDOut P3DIR|=0x07 //P3口的低三位設置為輸出
#define LCD_RS_H P3OUT|=BIT0 //P3.0
#define LCD_RS_L P3OUT&=~BIT0 //P3.0
#define LCD_RW_H P3OUT|=BIT1 //P3.1
#define LCD_RW_L P3OUT&=~BIT1 //P3.1
#define LCD_EN_H P3OUT|=BIT2 //P3.2
#define LCD_EN_L P3OUT&=~BIT2 //P3.2
/*******************************************
函數名稱:Delay_1ms
功 能:延時約1ms的時間
參 數:無
返回值 :無
********************************************/
void Delay_1ms(void)
{
uchar i;
for(i = 150;i > 0;i--) _NOP();
}
/*******************************************
函數名稱:Delay_Nms
功 能:延時N個1ms的時間
參 數:n--延時長度
返回值 :無
********************************************/
void Delay_Nms(uint n)
{
uint i;
for(i = n;i > 0;i--) Delay_1ms();
}
/*******************************************
函數名稱:Write_Cmd
功 能:向液晶中寫控制命令
參 數:cmd--控制命令
返回值 :無
********************************************/
void Write_Cmd(uchar cmd)
{
uchar lcdtemp = 0;
LCD_RS_L;
LCD_RW_H;
LCD_DataIn;
do //判忙
{
LCD_EN_H;
_NOP();
lcdtemp = LCD2MCU_Data;
LCD_EN_L;
}
while(lcdtemp & 0x80);
LCD_DataOut;
LCD_RW_L;
MCU2LCD_Data = cmd;
LCD_EN_H;
_NOP();
LCD_EN_L;
}
/*******************************************
函數名稱:Write_Data
功 能:向液晶中寫顯示數據
參 數:dat--顯示數據
返回值 :無
********************************************/
void Write_Data(uchar dat)
{
uchar lcdtemp = 0;
LCD_RS_L;
LCD_RW_H;
LCD_DataIn;
do //判忙
{
LCD_EN_H;
_NOP();
lcdtemp = LCD2MCU_Data;
LCD_EN_L;
}
while(lcdtemp & 0x80);
LCD_DataOut;
LCD_RS_H;
LCD_RW_L;
MCU2LCD_Data = dat;
LCD_EN_H;
_NOP();
LCD_EN_L;
}
/*******************************************
函數名稱:Ini_Lcd
功 能:初始化液晶模塊
參 數:無
返回值 :無
********************************************/
void Ini_Lcd(void)
{
LCD_CMDOut; //液晶控制端口設置為輸出
Delay_Nms(500);
Write_Cmd(0x30); //基本指令集
Delay_1ms();
Write_Cmd(0x02); // 地址歸位
Delay_1ms();
Write_Cmd(0x0c); //整體顯示打開,游標關閉
Delay_1ms();
Write_Cmd(0x01); //清除顯示
Delay_1ms();
Write_Cmd(0x06); //游標右移
Delay_1ms();
Write_Cmd(0x80); //設定顯示的起始地址
}
/*******************************************
函數名稱:Disp_HZ
功 能:控制液晶顯示漢字
參 數:addr--顯示位置的首地址
pt--指向顯示數據的指針
num--顯示字符個數
返回值 :無
********************************************/
void Disp_HZ(uchar addr,const uchar * pt,uchar num)
{
uchar i;
Write_Cmd(addr);
for(i = 0;i < (num*2);i++)
Write_Data(*(pt++));
}
/*******************************************
函數名稱:Clear_GDRAM
功 能:清除液晶GDRAM中的隨機數據
參 數:無
返回值 :無
********************************************/
void Clear_GDRAM(void)
{
uchar i,j,k;
Write_Cmd(0x34); //打開擴展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x80);
for(k = 0;k < 16;k++)
{
Write_Data(0x00);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x88);
for(k = 0;k < 16;k++)
{
Write_Data(0x00);
}
}
Write_Cmd(0x30); //回到基本指令集
}
/*******************************************
函數名稱:Draw_PM
功 能:在整個液晶屏幕上畫圖
參 數:無
返回值 :無
********************************************/
void Draw_PM(const uchar *ptr)
{
uchar i,j,k;
Write_Cmd(0x34); //打開擴展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x80);
for(k = 0;k < 16;k++)
{
Write_Data(*ptr++);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x88);
for(k = 0;k < 16;k++)
{
Write_Data(*ptr++);
}
}
Write_Cmd(0x36); //打開繪圖顯示
Write_Cmd(0x30); //回到基本指令集
}
/*******************************************
函數名稱:Draw_TX
功 能:顯示一個16*16大小的圖形
參 數:Yaddr--Y地址
Xaddr--X地址
dp--指向圖形數據存放地址的指針
返回值 :無
********************************************/
void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp)
{
uchar j;
uchar k=0;
Write_Cmd(0x01); //清屏,只能清除DDRAM
Write_Cmd(0x34); //使用擴展指令集,關閉繪圖顯示
for(j=0;j<16;j++)
{
Write_Cmd(Yaddr++); //Y地址
Write_Cmd(Xaddr); //X地址
Write_Data(dp[k++]);
Write_Data(dp[k++]);
}
Write_Cmd(0x36); //打開繪圖顯示
Write_Cmd(0x30); //回到基本指令集模式
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -