?? splc501user.c
字號:
//***************************************************************************//
//文件描述:SPLC501用戶接口驅動程序,
//
//聲明: 小丑 20050519 Sunnorth Mz Design
//
//
//***************************************************************************//
#include "SPLC501User.h"
extern unsigned int Asii8;
extern unsigned int Asii16;
extern void F_SPLC501_Initial_IO(void);
extern void F_SPLC501_Write_Com(unsigned int Command);
extern void F_SPLC501_Write_Data(unsigned int SendData);
extern unsigned int F_SPLC501_Read_Data(void);
extern unsigned int F_SPLC501_Read_Status(void);
unsigned int CurPaintMode; //Show Mode Cover of XOR
unsigned int CurPowerMode; //Show the Power Mode of LCD501
unsigned int CurLCDSet; //Show the LCD Set灰度
unsigned int CurScroll; //Show the scroll dotes
unsigned int CurScrMode; //顯示正相/反相(1/0)
unsigned int CurASCIIFont; //當前ASCII碼的字號(8X16/6X8)
//***************************************************************************//
//程序:F_LCD_ON_OFF(unsigned int SetCom)
//描述:液晶開關函數 C語言調用
//參數:unsigned int SetCom SetCom=0:LCD Off SetCom!=0:LCD On
//聲明:小丑 20050519 sunnorth Mz Design
//注意:破壞R1寄存器,保護R1
//***************************************************************************//
void F_LCD_ONOFF(unsigned int SetCom)
{
if(SetCom) //ON LCD
F_SPLC501_Write_Com(M_LCD_ON);
else //OFF LCD
F_SPLC501_Write_Com(M_LCD_OFF);
}
//***************************************************************************//
//程序:LCD501_Init(unsigned int InitialData)
//描述:液晶顯示初始化函數 C語言調用
//參數:unsigned int InitialData 初始化顯示的字
//聲明:xinqiang 20050519 sunnorth Mz Design
//注意:破壞R1寄存器,保護R1
//***************************************************************************//
void LCD501_Init(unsigned int InitialData)
{
unsigned int i,j;
F_SPLC501_Initial_IO(); //Initial LCD IO
F_SPLC501_Write_Com(M_LCD_ON); //LCD On
F_SPLC501_Write_Com(M_LCD_POWER_ALL); //設置上電控制模式
F_SPLC501_Write_Com(M_LCD_ELE_VOL); //電量設置模式(顯示亮度)
F_SPLC501_Write_Com(0x0012); //指令數據0x0000~0x003f
F_SPLC501_Write_Com(M_LCD_VDD_SET); //V5內部電壓調節電阻設置
F_SPLC501_Write_Com(M_LCD_VDD); //LCD偏壓設置,V3時選
F_SPLC501_Write_Com(M_LCD_COM_NOR); //Com 掃描方式設置
F_SPLC501_Write_Com(M_LCD_SEG_REV); //Segment方向選擇
F_SPLC501_Write_Com(M_LCD_ALL_LOW); //全屏點亮/變暗指令
F_SPLC501_Write_Com(M_LCD_ALL_NOR); //正向反向顯示控制指令
F_SPLC501_Write_Com(M_LCD_STATIC_OFF); //關閉靜態指示器
F_SPLC501_Write_Com(0x0000); //指令數據
// F_SPLC501_Write_Com(0x00ee); //讀寫改模式結束指令
F_SPLC501_Write_Com(M_LCD_BEGIN_LINE+0); //設置顯示起始行對應RAM
for(i=0;i<8;i++) //往LCD中填充初始化的顯示數據
{
F_SPLC501_Write_Com(M_LCD_COL_PAGE+i);
F_SPLC501_Write_Com(M_LCD_COL_LINE_LOW);
F_SPLC501_Write_Com(M_LCD_COL_LINE_HIG);
for(j=0;j<128;j++)
{
F_SPLC501_Write_Data(InitialData);
}
}
CurPaintMode = 0;
CurPowerMode = 1; //now is normal mode
CurLCDSet = 8;
CurScroll = 0;
CurScrMode = 1;
CurASCIIFont = 1;
}
//======================================================
// 程序: void LCD501_Power(unsigned int ModeCode)
// 描述: SPLC501電源管理,進入參數指定的模式,而當LCD在SLEEP和STDBY模式下時,
// 調用該函數會使LCD喚醒
// 參數: ModeCode - 可以是下列參數之一:
// 1 PWR_ON: 正常工作模式
// 2 PWR_SLEEP: 睡眠模式,屏幕不顯示,但內容在喚醒后仍保留
// 3 PWR_STDBY: 待機模式,比SLEEP省電,但顯示內容會丟失
// 0 PWR_OFF: 關閉電源
// 聲明: xinqiang 20050624 sunnorth Mz Design
// 注意: 無
//======================================================
void LCD501_Power(unsigned int ModeCode)
{
if(CurPowerMode == PWR_SLEEP)
{
F_SPLC501_Write_Com(M_LCD_ALL_LOW);
F_SPLC501_Write_Com(M_LCD_STATIC_ON);
F_SPLC501_Write_Com(0x0003);
CurPowerMode = 1;
}
else if(CurPowerMode == PWR_STDBY)
{
F_SPLC501_Write_Com(M_LCD_ON);
F_SPLC501_Write_Com(M_LCD_ALL_LOW);
CurPowerMode = 1;
}
else{
switch(ModeCode)
{
case PWR_ON:
F_SPLC501_Write_Com(M_LCD_ON);
break;
case PWR_SLEEP:
F_SPLC501_Write_Com(M_LCD_STATIC_OFF);
F_SPLC501_Write_Com(0x0000);
F_SPLC501_Write_Com(M_LCD_OFF);
F_SPLC501_Write_Com(M_LCD_ALL_LIGNT);
break;
case PWR_STDBY:
F_SPLC501_Write_Com(M_LCD_STATIC_ON);
F_SPLC501_Write_Com(0x0003);
F_SPLC501_Write_Com(M_LCD_OFF);
F_SPLC501_Write_Com(M_LCD_ALL_LIGNT);
break;
default://POW_OFF
F_SPLC501_Write_Com(M_LCD_OFF);
break;
}//
CurPowerMode = ModeCode;
}
}
//***************************************************************************//
// 程序: void LCD501_SetContrast(unsigned int Contrast)
// 描述: 設置顯示對比度 C語言調用
// 參數: Contrast - 對比度值,范圍從0到31,數值越大對比度越高
// 返回: 無
// 聲明: xinqiang 20050624 Mz Design
// 注意: 無
//***************************************************************************//
void LCD501_SetContrast(unsigned int Contrast)
{
if(Contrast>0x003f)
Contrast = 0x003f;
F_SPLC501_Write_Com(M_LCD_ELE_VOL); //電量設置模式(顯示亮度)
F_SPLC501_Write_Com(Contrast); //電量設置模式(顯示亮度)
CurLCDSet = Contrast;
}
//***************************************************************************//
// 程序: unsigned int LCD501_GetContrast(void)
// 描述: 獲取顯示對比度 C語言調用
// 參數: 無
// 返回: 當前顯示的對比度值
// 聲明: xinqiang 20050624 Mz Design
// 注意: 無
//***************************************************************************//
unsigned int LCD501_GetContrast(void)
{
return CurLCDSet;//
}
//***************************************************************************//
// 程序: void LCD501_ScrollUp(unsigned int Rows)
// 描述: 屏幕向上滾動 C語言調用
// 參數: Rows 屏幕向上滾動的像素數,范圍從1到64
// 返回: null
// 聲明: xinqiang 20050624 Mz Design
// 注意: 無
//***************************************************************************//
void LCD501_ScrollUp(unsigned int Rows)
{
CurScroll = CurScroll+Rows;
while(CurScroll>=SCR_MAX_ROW)
CurScroll -= SCR_MAX_ROW;
F_SPLC501_Write_Com(M_LCD_BEGIN_LINE+CurScroll); //設置顯示起始行對應RAM
}
//***************************************************************************//
// 程序: unsigned int LCD501_GetScroll(void)
// 描述: 獲取屏幕已經向上滾動的值 C語言調用
// 參數: 無
// 返回: 屏幕已經向上滾動的值
// 聲明: xinqiang 20050624 Mz Design
// 注意: 無
//***************************************************************************//
unsigned int LCD501_GetScroll(void)
{
return CurScroll;//
}
//***************************************************************************//
// 程序: void LCD501_ReverseColor(void)
// 描述: 屏幕反色顯示。每執行一次該函數,屏幕顏色翻轉一次。 C語言調用
// 參數: 無
// 返回: 無
// 聲明: xinqiang 20050624 Mz Design
// 注意: 無
//***************************************************************************//
void LCD501_ReverseColor(void)
{
if(CurScrMode)//
{
F_SPLC501_Write_Com(M_LCD_ALL_REV); //正向反向顯示控制指令
CurScrMode = 0;
}
else
{
F_SPLC501_Write_Com(M_LCD_ALL_NOR); //正向反向顯示控制指令
CurScrMode = 1;
}
}
//***************************************************************************//
//程序:LCD501_ClrScreen(unsigned int Mode)
//描述:液晶整屏清屏函數 C語言調用
//參數:unsigned int Mode 清屏類型Mode=1 則全點亮,Mode=0 內全清零
//聲明:小丑 20050519 sunnorth Mz Design
//注意:破壞R1寄存器,保護R1
//***************************************************************************//
void LCD501_ClrScreen(unsigned int Mode)
{
unsigned int i,j;
if(Mode)
Mode = 0x00ff;
else
Mode = 0x0000;
for(i=0;i<8;i++)
{
F_SPLC501_Write_Com(M_LCD_COL_PAGE+i);
F_SPLC501_Write_Com(M_LCD_COL_LINE_LOW);
F_SPLC501_Write_Com(M_LCD_COL_LINE_HIG);
F_SPLC501_Write_Com(0xee); //讀改寫模式結束指令
for(j=0;j<128;j++)
{
F_SPLC501_Write_Data(Mode);
}
}
}
//***************************************************************************//
//程序:F_LCD_LineRun(unsigned int line)
//描述:液晶顯示起始行設置函數 C語言調用 (滾屏功能用)
//參數:unsigned int line 起始RAM行,0~63
//聲明:小丑 20050527 sunnorth Mz Design
//注意:破壞R1寄存器,保護R1
//***************************************************************************//
void F_LCD_LineRun(unsigned int line)
{
if(line>=64)
line = 0;
F_SPLC501_Write_Com(M_LCD_BEGIN_LINE+line); //設置顯示起始行對應RAM
}
//***************************************************************************//
//程序:void F_LCD_WOSCASII(unsigned int x,unsigned int page,unsigned int d)
//描述:OSD取的ASCII字符顯示函數 C語言調用
//參數:x 顯示字符的起始列(0~128) page 顯示字符的起始頁(0~6)
// d ASCII碼
//聲明:小丑 20050519 sunnorth Mz Design
//注意:僅用于顯示用OSD取字模工具取的16X16、16X12字模的ASCII字符
//***************************************************************************//
/*void F_LCD_WOSCASII(unsigned int x,unsigned int page,unsigned int d)
{
unsigned int untype;
unsigned int *word;
int i,j,m;
unsigned int x_low,x_hight;
d = d-33;
word = (unsigned int)encoding_00+(d*17);
untype = *(word++);
i = untype>>8;
j = (untype&0xff);
x_low = (x&0x000f)+ M_LCD_COL_LINE_LOW; //定位列地址設置的低位指令
x_hight = ((x>>4)&0x000f)+M_LCD_COL_LINE_HIG; //定位列地址設置的高位指令
for(;i>0;)
{
i = i-8;
F_SPLC501_Write_Com(M_LCD_COL_PAGE+page);
F_SPLC501_Write_Com(x_low);
F_SPLC501_Write_Com(x_hight);
for(m=0;m<j;m++)
{
if(i)
untype = *(word+m);
else
untype = (*(word+m)>>8);
untype = untype&0x00ff;
F_SPLC501_Write_Data(untype);
}
page++;
}
}*/
//***************************************************************************//
// 程序: void LCD501_SetPaintMode(unsigned int ModeCode)
// 描述: 設置圖形顯示模式
// 參數: ModeCode - 圖形顯示模式,可以是下列數值之一:
// 0 PAINT_COVER: 覆蓋顯示。圖形所在位置的原有顯示內容將被覆蓋掉
// 1 PAINT_SET: 疊加顯示。圖形所在位置中原有的黑色點將被保留
// 2 PAINT_CLR: 擦除顯示。圖形反色顯示,但圖形所在位置中原有的白
// 色點將被保留
// 3 PAINT_REV: 異或顯示。圖形中每一個點與原有的點做異或,即如果
// 圖形中某點的顏色與其所在位置原有的顏色相同,則
// 該點顯示白色,如果新顏色與原來顏色不同,則該點
// 顯示黑色
// 4 PAINT_RECO 取反并覆蓋顯示。原始圖像數據取反,然后圖形所在位置
// 的原有顯示內容將被覆蓋掉
// 返回: 無
// 聲明: xinqiang 20050810 Mz Design
// 注意:
//***************************************************************************//
void LCD501_SetPaintMode(unsigned int ModeCode)
{
if(ModeCode > 4)
ModeCode = PAINT_COVER;
CurPaintMode = ModeCode;
}
//***************************************************************************//
// 程序: unsigned int LCD501_GetPaintMode(void)
// 描述: 設置圖形顯示模式
// 參數: 無
// 返回: ModeCode - 圖形顯示模式,可以是下列數值之一:
// 0 PAINT_COVER: 覆蓋顯示。圖形所在位置的原有顯示內容將被覆蓋掉
// 1 PAINT_SET: 疊加顯示。圖形所在位置中原有的黑色點將被保留
// 2 PAINT_CLR: 擦除顯示。圖形反色顯示,但圖形所在位置中原有的白
// 色點將被保留
// 3 PAINT_REV: 異或顯示。圖形中每一個點與原有的點做異或,即如果
// 圖形中某點的顏色與其所在位置原有的顏色相同,則
// 該點顯示白色,如果新顏色與原來顏色不同,則該點
// 顯示黑色
// 4 PAINT_RECO 取反并覆蓋顯示。原始圖像數據取反,然后圖形所在位置
// 的原有顯示內容將被覆蓋掉
// 聲明: xinqiang 20050810 Mz Design
// 注意:
//***************************************************************************//
unsigned int LCD501_GetPaintMode(void)
{
return CurPaintMode;
}
//***************************************************************************//
//程序:void LCD501_PutPixel(unsigned int x,unsigned int y)
//描述:畫點子程序
//參數:x 要畫點的x坐標 y 要畫的點的y坐標
//返回:無
//聲明:xinqiang 20050521 sunnorth Mz Design
//注意:無
//***************************************************************************//
void LCD501_PutPixel(unsigned int x,unsigned int y)
{
unsigned int x_low,x_hight; //定義列地址的高低位指令
unsigned int Dot_Mask_Buf=0x0001;
unsigned int y_Page; //用于存放要畫點的位置所在的byte數據位置
x = x+4;
x_low = (x&0x000f); //定位列地址設置的低位指令
x_hight = ((x>>4)&0x000f)+0x10; //定位列地址設置的高位指令
y_Page = y&0x07; //取低三位
while(y_Page!=0)
{
Dot_Mask_Buf = Dot_Mask_Buf<<1;
y_Page--;
}
y_Page = y>>3; //Get the page of the byte
F_SPLC501_Write_Com(M_LCD_COL_PAGE+y_Page);
F_SPLC501_Write_Com(x_low);
F_SPLC501_Write_Com(x_hight);
F_SPLC501_Write_Com(0xe0); //設置為讀寫改模式
y_Page = F_SPLC501_Read_Data(); //
switch(CurPaintMode)
{
case PAINT_CLR: y_Page = y_Page&(~Dot_Mask_Buf);
break;
// case PAINT_SET: y_Page = y_Page|Dot_Mask_Buf;
// break;
case PAINT_REV: x = y_Page^Dot_Mask_Buf; x = x&Dot_Mask_Buf;
y_Page = (y_Page&(~Dot_Mask_Buf))|x;
break;
default: y_Page = y_Page|Dot_Mask_Buf;
break;
}
F_SPLC501_Write_Data(y_Page); //
F_SPLC501_Write_Com(0xee); //讀寫改模式結束
}
//***************************************************************************//
//程序:void LCD501_Line(unsigned int x,unsigned int y,unsigned int e_x,
// unsigned int e_y)
//描述:畫直線程序
//參數:x 要畫線的x起點坐標 y 要畫的線的y起點坐標
// e_x 要畫線的x 終點坐標 e_y 要畫的線的y起點坐標
//返回:無
//聲明:小丑 200505121 sunnorth Mz Design
//注意:
//***************************************************************************//
void LCD501_Line(unsigned int x,unsigned int y,unsigned int e_x,unsigned int e_y)
{
int Offset_x,Offset_y,Offset_k = 0;
int Err_d = 1;
if(y>e_y)
{
Offset_x = x;
x = e_x;
e_x = Offset_x;
Offset_x = y;
y = e_y;
e_y = Offset_x;
}
Offset_x = e_x-x;
Offset_y = e_y-y;
LCD501_PutPixel(x,y);
if(Offset_x<=0)
{
Offset_x = x-e_x;
Err_d = -1;
}
if(Offset_x>Offset_y)
{
while(x!=e_x)
{
if(Offset_k>0)
{
y+=1;
Offset_k += (Offset_y-Offset_x);
}
else Offset_k += Offset_y;
x+=Err_d;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -