?? lcd_bottom.c
字號:
/*******************************************************************************
文 件: Lcd_Bottom.c LCD 底層文件(Lcd_Bottom.c)包含下列文件:
包含函數(shù):
lcd_init() LCD初始化
clearscr1() 清除第一顯示緩沖區(qū)
clearscr2() 清除第二顯示緩沖區(qū)
clearscr3() 清除第三顯示緩沖區(qū)
clearline() 清除點(x1,y1)到點(x2,y2)的一條直線
dot() 畫點
NoDot() 消點
DrawaLevel() 畫水平實線 level
DrawaLevel1() 畫水平虛線
DrawaVertical() 畫垂直實線 vertical
DrawaVertical1() 畫垂直虛線
DrawArea() 畫矩形
liner() 畫任意兩點之間的直線
DrawBar() 畫條形圖
ClearBar() 清條形圖
Display1() 顯示24x24點陣漢字
Display2() 顯示16x16點陣漢字
*******************************************************************************/
#include "DSP281x_Device.h"
/*******************************************************************************************
LCD液晶屏總線片選地址線定義:
******************************************************************************************/
// 若液晶屏不受控,檢查J16 跳線是否插入左邊兩個引腳。
//#define LCD_DAT (*((volatile Uint16 *)0x35FE))
//#define LCD_COM (*((volatile Uint16 *)0x35FF))
// 若液晶屏不受控,檢查J16 跳線是否插入右邊兩個引腳。
#define LCD_DAT (*((volatile Uint16 *)0x39FE))
#define LCD_COM (*((volatile Uint16 *)0x39FF))
// 本文件的函數(shù)原型聲明放在 “DSP281x_GlobalPrototypes.h”頭文件中。
extern const Uint16 LIB8x16[];
extern const Uint16 LIB16x16[];
/******************************************************************************
函數(shù)名稱: lcd_init(void)
函數(shù)功能: LCD初始化
輸入?yún)?shù): 無
輸出參數(shù): 無
注意!
LCD 命令寄存器指針方式定義: LCD_COM=(*((volatile unsigned int *)0x39FF))
LCD 數(shù)據(jù)寄存器指針方式定義: LCD_DAT=(*((volatile unsigned int *)0x39FE))
******************************************************************************/
void lcd_init(void)
{
LCD_COM = 0x40; // 初始化設(shè)置(SYSTEM SET),帶8個參數(shù)
LCD_DAT = 0x30; // P1: DR 0 IV 1 W/S M2 M1 M0
// 0 0 1 1 0 0 0 0
// DR 輔助位移時鐘周期的選擇位,通常選取DR=0
// IV 負(fù)向字符顯示時屏面邊界選擇為,IV=0,為畫面首
// 行作為邊界,IV=1,則無邊界,通常選取IV=1
// W/S 適配驅(qū)動系統(tǒng)選擇位,W/S=0,為單屏結(jié)構(gòu)液晶顯示
// 驅(qū)動系統(tǒng)
// M2,M1,M0 字符法生器的字體選擇位,M2=0 M1=0 M0=0:
// 內(nèi)部 CGROM+CGRAM1 (8*8點陣)
LCD_DAT = 0x87; // P2: WF 0 0 0 0 FX
// 1 0 0 0 0 1 1 1
// WF 交流驅(qū)動波形選擇位,WF=0為C型驅(qū)動波形,16行
// 反轉(zhuǎn)一次,WF=1為B型驅(qū)動波形,每一幀反轉(zhuǎn)一次
// 通常WF=1
// FX 字符體寬度設(shè)置參數(shù)(點列數(shù)),FX取值0-7,代表
// 1-8點列/字符體
LCD_DAT = 0x07; // P3: WF 0 0 0 FY
// 0 0 0 0 0 1 1 1
// FY 字符體高度設(shè)置參數(shù)(點行數(shù)),FY取值0-FH,代表
// 1-16點行/字符體
LCD_DAT = 0x28; // P4 C/R
// 0 0 1 0 0 1 1 1
// C/R 有效顯示窗口寬度設(shè)置參數(shù),此處設(shè)置40個字節(jié)
// 寬度
LCD_DAT = 0x2C; // P5 TC/R
// 0 0 1 0 1 1 0 0
// TC/R 驅(qū)動頻率的時間常數(shù),TC/R >= C/R +4
LCD_DAT = 0xF0; // P6 L/F
// 1 1 1 0 1 1 1 1
// L/F 當(dāng)W/S=0,單屏結(jié)構(gòu)時,液晶顯示驅(qū)動系統(tǒng)一幀的
// 掃描行數(shù),其倒數(shù)為占空比系數(shù),一幀240行掃描
//
LCD_DAT = 0x28; // P7 APL
// 0 0 1 0 1 0 0 0
// 在顯示區(qū)內(nèi)分配給一個顯示行的字節(jié)數(shù)。
LCD_DAT = 0x00; // P8 APH
// 0 0 0 0 0 0 0
// AP 在顯示存儲器內(nèi)分配給一個顯示行的字節(jié)數(shù)。
// APL,APH分別為AP的低8位和高8位。通常AP取
// 值為C/R +1或大于C/R值的整數(shù),這里一行分
// 配40個字節(jié)
/******************************************************************************
關(guān)于液晶屏顯示域設(shè)置的說明
本液晶屏驅(qū)動芯片為寬工作電壓型(2.7V-5.5V)SED1335,屏內(nèi)配有容量為32768個字節(jié)
的靜態(tài)存儲器(SRAM) 62c256,下面將該存儲器分成3個顯示區(qū)域:
第一顯示區(qū): 0x0000-0x2BFF(共10752個字節(jié),液晶屏滿屏占9600+240個字節(jié)),
第二顯示區(qū): 0x2A00-0x53FF(共10752個字節(jié)),
第二顯示區(qū): 0x5400-0x7DFF(共10752個字節(jié)),三個顯示區(qū)共占32256個字節(jié)。
******************************************************************************/
LCD_COM = 0x44; // 顯示域設(shè)置(SCR0LL),帶10個參數(shù)
LCD_DAT = 0x00; // SAD1L=0x00
LCD_DAT = 0x00; // SAD1H=0x00,顯示一區(qū)首地址SAD1=0x0000
LCD_DAT = 0xF0; // 顯示一區(qū)所控制的顯示屏上的行數(shù)SL1=0xF0=240
LCD_DAT = 0x00; // SAD2L=0x00
LCD_DAT = 0x2A; // SAD2H=0x2A,顯示二區(qū)首地址SAD2=0x2A00
LCD_DAT = 0xF0; // 顯示二區(qū)所控制的顯示屏上的行數(shù)SL2=0xF0=240
LCD_DAT = 0x00; // SAD3L=0x00
LCD_DAT = 0x54; // SAD3H=0x54,顯示三區(qū)首地址SAD3=0x5400
LCD_DAT = 0x00; // SAD4L=0x00
LCD_DAT = 0x00; // SAD4H=0x00,顯示四區(qū)首地址SAD4=0x0000
LCD_COM = 0x5A; // 點位移設(shè)置(HDOT SCR),帶1個參數(shù)
LCD_DAT = 0x00;
LCD_COM = 0x5B; // 顯示合成設(shè)置(OVLAY),帶1個參數(shù)P
// P: 0 0 0 OV DM2 DM1 MX1 MX0
LCD_DAT = 0x1C; // 0 0 0 1 1 1 0 0
// 0V=1:為三重合成顯示; MX1=0,MX0=0: L1+L2+L3
// 簡單邏輯或合成; DM2=1: 設(shè)置顯示三區(qū)為圖形
// 顯示屬性,其數(shù)據(jù)均作為圖形數(shù)據(jù)處理;
// DM1=1: 設(shè)置顯示一區(qū)為圖形顯示屬性,其數(shù)據(jù)
// 均作為圖形數(shù)據(jù)處理;
LCD_COM = 0x59; // 顯示合狀態(tài)設(shè)置(DISP ON/OFF),開顯示。 帶1個參數(shù)P
// P: FP5 FP4 FP3 FP2 FP1 FP0 FC1 FC0
LCD_DAT = 0x54; // 0 1 0 1 0 1 0 0
// FC1=0,FC0=0: 光標(biāo)顯示關(guān)閉
// FP1=0,FP0=1: 顯示一區(qū)顯示狀態(tài),畫面顯示,但不閃爍
// FP3=0,FP2=1: 顯示二,四區(qū)顯示狀態(tài),
// 畫面顯示,但不閃爍
// FP5=0,FP4=1: 顯示三區(qū)顯示狀態(tài),畫面顯示,但不閃爍
}
/******************************************************************************
函數(shù)名稱: clearscr1(void)
函數(shù)功能: 清除第一顯示緩沖區(qū):0x0000-0x29ff
輸入?yún)?shù): 無
輸出參數(shù): 無
******************************************************************************/
void clearscr1(void)
{
Uint16 i;
LCD_COM = 0x46; // 光標(biāo)指針設(shè)置 帶2個參數(shù)
LCD_DAT = 0x00;
LCD_DAT = 0x00;
LCD_COM = 0x4c; // 光標(biāo)移動方向設(shè)置,不帶參數(shù)。光標(biāo)向右移動
LCD_COM = 0x42; // 數(shù)據(jù)寫入設(shè)置,帶若干參數(shù)
for (i=0;i<0x2A00;i++)
LCD_DAT=0x00;
}
/******************************************************************************
函數(shù)名稱: clearscr2(void)
函數(shù)功能: 清除第二顯示緩沖區(qū):0x2a00-0x53ff
輸入?yún)?shù): 無
輸出參數(shù): 無
******************************************************************************/
void clearscr2(void)
{
Uint16 i;
LCD_COM = 0x46; // 光標(biāo)指針設(shè)置 帶2個參數(shù)
LCD_DAT = 0x00;
LCD_DAT = 0x2A;
LCD_COM = 0x4c; // 光標(biāo)移動方向設(shè)置,不帶參數(shù)。光標(biāo)向右移動
LCD_COM = 0x42; // 數(shù)據(jù)寫入設(shè)置,帶若干參數(shù)
for (i=0x2A00;i<0x5400;i++)
LCD_DAT=0x00;
}
/******************************************************************************
函數(shù)名稱: clearscr3(void)
函數(shù)功能: 清除第三顯示緩沖區(qū):0x5400-0x7FFF
輸入?yún)?shù): 無
輸出參數(shù): 無
******************************************************************************/
void clearscr3(void)
{
Uint16 i;
LCD_COM = 0x46; // 光標(biāo)指針設(shè)置 帶2個參數(shù)
LCD_DAT = 0x00;
LCD_DAT = 0x54;
LCD_COM = 0x4c; // 光標(biāo)移動方向設(shè)置,不帶參數(shù)。光標(biāo)向右移動
LCD_COM = 0x42; // 數(shù)據(jù)寫入設(shè)置,帶若干參數(shù)
for (i=0x5400;i<0x8000;i++)
LCD_DAT=0x00;
}
/******************************************************************************
函數(shù)名稱: dot(Uint16 x,Uint16 y,Uint16 part)
函數(shù)功能: 畫點
輸入?yún)?shù): 第一形參x(1<=x<=320),為所在點的列數(shù);
第二形參y(1<=y<=240),為所在點的行數(shù)。x,y用于確定畫點坐標(biāo)。
第三形參part,為顯示緩沖區(qū)選擇參數(shù),
當(dāng)part=1,選擇第一顯示緩沖區(qū)(0x0000-0x29ff)
當(dāng)part=2,選擇第二顯示緩沖區(qū)(0x2a00-0x53ff)
當(dāng)part=3,選擇第三顯示緩沖區(qū)(0x5400-0x7fff)
輸出參數(shù): 無
結(jié)構(gòu)說明: union
共用體包含2個成員: 一個是無符號16位數(shù)total,另一個是包含(low及high)
2個成員的結(jié)構(gòu)體類型。它們共占同一段內(nèi)存單元。從下面程序可以看出:通過對
d.total進(jìn)行賦值,可以完成對結(jié)構(gòu)體2個成員(low及high)的賦值。
320*240 Lcd液晶屏一屏含76800個點。從左上頂角第一點開始,從左到右從
上到下每8點為一個字節(jié),共9600個順序字節(jié)懇桓鱟紙詰乃承蠔偶次
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -