?? lcd128_64.c
字號:
#include "app_ex_main.h"
#include "app_ex_util.h"
#include "RF04EB.h"
#include "hal.h"
#include "Font.h"
//#include "mydefine.h"
#include "Font.h"
#define DATA 1
#define COMMAND 0
/****************************************************
* B) Command Table per device *
****************************************************/
#define DisplayOff 0xAE
#define DisplayOn 0xAF
#define DisplayStart 0x40
#define PageAddr 0xB0
#define ColAddrHi 0x10
#define ColAddrLo 0x00
#define SegRemapOff 0xA0
#define SegRemapOn 0xA1
#define NormalDisp 0xA6
#define ReverseDisp 0xA7
#define ExitEntireD 0xA4
#define EntEntireD 0xA5
#define EnterRMW 0xE0
#define ExitRMW 0xEE
#define SWRest 0xE2
#define ComRemapOff 0xC0
#define ComRemapOn 0xC8
#define PwrCtrlReg 0x28
#define OPampBuffer 0x01
#define IntReg 0x02
#define IntVolBstr 0x04
#define IntRegRatio 0x20
#define ContCtrlReg 0x81
#define CmdMuxRatio 0x48
#define CmdBiasRatio 0x50
#define DispOffset 0x44
#define IconModeOn 0xA3
#define IconModeOff 0xA2
#define NlineInver 0x4C
#define DCDCconver 0x64
#define PowersavStandby 0xA8
#define PowersavSleep 0xA9
#define PowersavOff 0xE1
#define InterOsc 0xAB
#define Device SSD1821 /* device under demo */
#define ColNo 132 /* number of Column/Seg on LCD glass*/
#define RowNo 64 /* number of Row/Com/Mux */
#define PS 1 /* fixed to Parallel mode */
#define PageNo 10 /* Total no of RAM pages */
#define IconPage 10 /* Icon Page number */
#define All0 6 /* 3 for all 0, 4 for all 1 */
#define All1 4
#define iIntRegValue 1 /*Internal Regulator Resistor Ratio Value */
#define iContCtrlRegValue 16 /* Contrast Control Register Value */
#define iIntRegValuea 20 /*Internal Regulator Resistor Ratio Value */
#define iContCtrlRegValuea 16 /* Contrast Control Register Value */
#define iIntRegValueb 1 /*Internal Regulator Resistor Ratio Value */
#define iContCtrlRegValueb 16 /* Contrast Control Register Value */
#define MSGNo 16
#define MSGLength 22
#define SSLNameNo 4
#define DevicePg 0 //RAM page for showing device name
#define FeaturePg 1 //RAM page for showing feature
#define GRAPHICNo 13
#define xlogo 38
#define ylogo 5
#define xsolomon 91
#define ysolomon 2
#define xsystech 81
#define ysystech 2
#define xlimited 70
#define ylimited 2
#define xcc 16
#define ycc 2
#define xpageq 128
#define ypageq 4
#define horizonal 0
#define d_time 60
////////////////////////////////////////////////////////////////////////////////////////////
void Print8(INT16U y,INT16U x, INT8U ch[],INT16U yn);
INT8U ContrastValue = 80;//對比度
void delay1(INT8U jj)
{
INT8U i;
for(i=0; i<jj; i++);
}
void delay_us(INT16U s)
{
INT16U i;
for(i=0; i<s; i++);
for(i=0; i<s; i++);
}
//******************************************************************************
//函數(shù)名:void Write595(INT8U dat)
//輸入:數(shù)據(jù)
//輸出:無
//功能描述:595寫數(shù)據(jù),一次寫入8位
//******************************************************************************
void Write595(INT8U dat)
{
INT8U ii;
for(ii = 0 ; ii < 8; ii++)
{
if(dat & 0x80) LCD_595_DAT = 1;
else LCD_595_DAT = 0;
dat <<= 1;
LCD_595_CK = 1;
LCD_595_CK = 0;
}
LCD_595_LD = 1;
LCD_595_LD = 0;
}
//*****************************************************************************
//*****************************************************************************
//函數(shù)名:WriteLCD(INT8U fs, INT8U da)
//功能描述:fs:1為命令,0為數(shù)據(jù) da:待寫數(shù)據(jù)
//*****************************************************************************
void WriteLCD(INT8U fs, INT8U da)
{
delay1(1);
LCD_CS1 = 0;
LCD_RW = 0; //寫操作
delay1(1);
if(fs){
LCD_RS = 1;
}
else{
LCD_RS = 0;
}
delay1(1);
Write595(da);
LCD_E = 1;// = 1;
delay1(1);
LCD_E = 0;// = 0;
delay1(1);
LCD_CS1 = 1;
}
/*
INT8U ReadLCD(INT8U fs)
{
INT8U temp = 0;
LCD_CS1 = 0;
NOP;
NOP;
NOP;
NOP;
do{
LCD_RW = 1;
LCD_RS = 0;
LCD_E = 1;
NOP;
NOP;
temp = P1 & 0x80;
LCD_E = 0;
}while(temp != 0);
if(fs){
LCD_RS = 1;
}
else{
LCD_RS = 0;
}
LCD_E = 1;
NOP;
NOP;
NOP;
NOP;
temp = P1;
LCD_E = 0;
LCD_CS1 = 1;
return(temp);
}
*/
void SetRamAddr(INT8U x ,INT8U y)
{
INT8U temp;
temp = 0x0f & x;
WriteLCD(COMMAND , PageAddr|temp);
temp = 0x0f & (y >> 4);
WriteLCD(COMMAND , ColAddrHi|temp);
temp = 0x0f & y;
WriteLCD(COMMAND , ColAddrLo|temp);
}
/*******************************************************************************
//函數(shù)名:void SetContrast(INT8U Gain, INT8U Step)
//功能:lcd對比度設(shè)定
//輸入:Gain,灰度 Step,對比度
//輸出:無
********************************************************************************/
void SetContrast(INT8U Gain, INT8U Step)
{
WriteLCD(COMMAND , IntRegRatio | (0x0f & Gain)); //設(shè)定內(nèi)部電阻
WriteLCD(COMMAND , ContCtrlReg); //設(shè)定內(nèi)部對比控制器
WriteLCD(COMMAND , 0x3f & Step);
}
/*******************************************************************************
//函數(shù)名:void InitDisplay(void)
//功能:lcd設(shè)定為正常顯示狀態(tài)
//輸入:無
//輸出:無
********************************************************************************/
void InitDisplay(void)
{
WriteLCD(COMMAND , DisplayOff); //關(guān)顯示
WriteLCD(COMMAND , SegRemapOn); //ks0713/ssd1815
WriteLCD(COMMAND , ComRemapOn); //ssd1815
SetContrast(iIntRegValue, iContCtrlRegValue); //設(shè)定缺省對比度
WriteLCD(COMMAND , PwrCtrlReg | IntVolBstr | IntReg | OPampBuffer); //turn on booster, regulator & divider
WriteLCD(COMMAND , DisplayOn); //開顯示
}
/*******************************************************************************
//函數(shù)名:void contrastctrl(INT8U start,stop)
//功能:lcd對比度調(diào)整
//輸入:無
//輸出:無
********************************************************************************/
void contrastctrl(INT8U start, INT8U stop)
{
INT8U i;
if (start < stop)
{
for (i=start; i<stop; i+=1)
{
SetContrast(iIntRegValue, i); //slowly turn on display
delay_us(80);
}
}
else
{
for (i=start; i>stop; i-=1)
{
SetContrast(iIntRegValue, i); //slowly turn off display
delay_us(120);
}
}
}
void ClearScreen(void)
{
INT8U x,y;
for(x = 0;x < 8 ;x++){
for(y = 0 ; y < 128 ; y++){
SetRamAddr(x , y);
WriteLCD(DATA , 0x00);
}
}
}
void LCDInit(void)
{
P1DIR |= 0xFF;
P2DIR |= 0xFF;
P0DIR |= 0xFF;
P1_2 = 0;
delay_us(1000);
WriteLCD(COMMAND , 0xE2);//復(fù)位
delay_us(1000);
WriteLCD(COMMAND , 0xA3);
delay_us(1000);
WriteLCD(COMMAND , 0xA0);
delay_us(1000);
WriteLCD(COMMAND , 0xC8);
delay_us(1000);
WriteLCD(COMMAND , 0x24);
delay_us(1000);
WriteLCD(COMMAND , 0x81);
delay_us(1000);
WriteLCD(COMMAND , 0x14);
delay_us(1000);
WriteLCD(COMMAND , 0x2F);
delay_us(1000);
WriteLCD(COMMAND , 0x40);//從第一列開始顯示
delay_us(1000);
WriteLCD(COMMAND , 0xB0);
delay_us(1000);
WriteLCD(COMMAND , 0x10);
delay_us(1000);
WriteLCD(COMMAND , 0x00);
delay_us(1000);
WriteLCD(COMMAND , 0xAF);
WriteLCD(COMMAND , 0x81);
WriteLCD(COMMAND , 0x1b);
ClearScreen();
SetContrast(20,80);
}
/*******************************************************************************
//函數(shù)名:void Print6(INT8U xx, INT8U yy, INT8U ch1[], INT8U yn)
//功能:顯示6*8字符串
//輸入:xx ,yy 坐標(biāo),ch1待顯示的字符串,yn是否反黑
//輸出:無
********************************************************************************/
void Print6(INT8U xx, INT8U yy, INT8U ch1[], INT8U yn)
{
INT8U ii = 0;
INT8U bb = 0;
unsigned int index = 0 ;
while(ch1[bb] != '\0')
{
index = (unsigned int)(ch1[bb] - 0x20);
index = (unsigned int)index*6;
for(ii=0;ii<6;ii++)
{
SetRamAddr(xx , yy);
if(yn == 0)
{
WriteLCD(DATA, ~FontSystem6x8[index]);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -