?? a08htest.c
字號:
//***********************************************
//A08htest.c--為A08機型手控器液晶模塊測試試驗程序
//1、采用江門億都YG160104點陣液晶模塊顯示
//2、控制單片機--PIC18LF452
//**********************************************
#include <pic18.h>
#define UCHAR unsigned char
#define UINT unsigned int
//I/O口定義
#define bCS1B RC0
#define bCS2 RC1
#define bRESET RC2
#define bRS RC3
#define bRW RC5
#define bEN RC4
#define bBackLed RE0
//讀狀態寄存器
UCHAR ReadState()
{
UCHAR mTemp;
bRS=0;bRW=1;//bEN=0;
bCS1B=0;bCS2=1;
asm("nop");asm("nop");
bEN=1;
asm("nop");
mTemp=PORTD;
bEN=0;
bCS1B=1;bCS2=0;
return(mTemp);
}
//寫指令
void WriteIns(UCHAR mInsWord)
{
bRS=0;bRW=0;//bEN=0;
bCS1B=0;bCS2=1;
asm("nop");asm("nop");
bEN=1;
asm("nop");
PORTD=mInsWord;
asm("nop");
bEN=0;
bCS1B=1;bCS2=0;
}
//寫顯示數據
void WriteData(UCHAR mDisData)
{
bRS=1;bRW=0;//bEN=0;
bCS1B=0;bCS2=1;
asm("nop");asm("nop");
bEN=1;
asm("nop");
PORTD=mDisData;
asm("nop");
bEN=0;
bCS1B=1;bCS2=0;
}
//讀顯示數據
//圖形描述
//圖形子元素
const UCHAR ROU_16[]=
{
//*-- 文字: 揉 --*/
//*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x10,0x10,0xFE,0x90,0x50,0x80,0x92,0x52,0x32,0xFA,0x1A,0x16,0x32,0x10,0x00,
0x04,0x44,0x82,0x7F,0x00,0x40,0x42,0x22,0x1A,0x07,0xFF,0x0A,0x32,0x62,0x22,0x00,
};
const UCHAR NIE_16[]=
{
//*-- 文字: 捏 --*/
//*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x10,0x10,0xFF,0x50,0x10,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,
0x02,0x42,0x81,0x7F,0x00,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x40,0x00,
};
const UCHAR QIAO_16[]=
{
//*-- 文字: 敲 --*/
//*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x04,0x04,0x74,0x55,0x56,0x54,0x74,0x04,0xC4,0x40,0x7F,0x48,0x48,0xC8,0x48,0x00,
0xFF,0x01,0x1D,0x15,0x15,0x5D,0x81,0x7F,0x40,0x23,0x14,0x18,0x66,0xC1,0x40,0x00,
};
const UCHAR JI_16[]=
{
//*-- 文字: 擊 --*/
//*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x80,0x88,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0xC0,0x80,0x00,
0x00,0x00,0x00,0x7E,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x7E,0x00,0x00,0x00,
};
//圖形元素
const struct BmpStruct
{
UCHAR mPage; //起始頁(0~12)
UCHAR mColumn; //起始列(0~159)
UCHAR mHight; //圖形子元素高度(1~13)
UCHAR mWidth; //圖形子元素寬度 (1~160)
UCHAR mSubElemUnit; //圖形子元素個數
const UCHAR *mSubElemTab[6]; //圖形子元素地址表
};
//圖形
const struct BmpStruct Bmp1[]=
{
{0,0,2,16,2,{ROU_16,NIE_16}},
{2,0,2,16,4,{ROU_16,NIE_16,QIAO_16,JI_16}},
};
//連續寫子元素的數據
void DrawSubElemData(UCHAR mPage,UCHAR mColumn,UCHAR mHight,UCHAR mWidth,UCHAR *pSubElemTab)
{
UCHAR mTempPage,mTempColumn;
UCHAR mTempHight,mTempWidth;
UCHAR mDisData;
UCHAR i,x;
UCHAR mTempY;
mTempHight=mHight;mTempWidth=mWidth;
mTempPage=mPage;mTempColumn=mColumn;
for(x=0;x<mTempHight;x++)
{
WriteIns(mTempPage|0xb0);
mTempColumn=mColumn;
mTempColumn>>=4;
mTempColumn &=0x0f;
mTempColumn |=0x10;
WriteIns(mTempColumn);
mTempColumn=mColumn;
mTempColumn &=0x0f;
WriteIns(mTempColumn);
//bRS=1;bRW=0;bEN=0;
//bCS1B=0;bCS2=1;
asm("nop");asm("nop");
for(i=0;i<mTempWidth;i++)
{
mDisData=pSubElemTab[i];
WriteData(mDisData);
//PORTD=mDisData;
//asm("nop");
//bEN=1;
//asm("nop");
//bEN=0;
}
//bCS1B=1;bCS2=0;
mTempPage++;
}
}
//畫圖形
void DrawBmp(const struct BmpStruct *pBmpTab,UCHAR mBmpUnit)
{
UCHAR mTempPage1,mTempColumn1;
UCHAR mTempHight1,mTempWidth1;
UCHAR mTempSubElemUnit1;
UCHAR i,x;
for(i=0;i<mBmpUnit;i++)
{
//畫圖形元素
mTempPage1=pBmpTab[i].mPage;
mTempColumn1=pBmpTab[i].mColumn;
mTempHight1=pBmpTab[i].mHight;
mTempWidth1=pBmpTab[i].mWidth;
mTempSubElemUnit1=pBmpTab[i].mSubElemUnit;
for(x=0;x<mTempSubElemUnit1;x++)
{
//畫圖形子元素
mTempColumn1=mTempColumn1+(x*mTempWidth1);
DrawSubElemData(mTempPage1,mTempColumn1,mTempHight1,mTempWidth1,pBmpTab[i].mSubElemTab[x]);
}
}
}
UCHAR mDisData;
void DrawBmpxx(UCHAR mPage,UCHAR mColumn,const UCHAR *pStringTab)
{
UCHAR mTempPage,mTempColumn;
UCHAR i,x;
UCHAR mPageCount;
mTempPage=mPage;
mPageCount=0;
for(x=0;x<2;x++)
{
WriteIns(mTempPage|0xb0);
mTempColumn=mColumn;
mTempColumn>>=4;
mTempColumn &=0x0f;
mTempColumn |=0x10;
WriteIns(mTempColumn);
mTempColumn=mColumn;
mTempColumn &=0x0f;
WriteIns(mTempColumn);
bRS=1;bRW=0;bEN=0;
bCS1B=0;bCS2=1;
asm("nop");asm("nop");
for(i=0;i<16;i++)
{
mDisData=pStringTab[i+16*mPageCount];
//WriteData(mDisData);
PORTD=mDisData;
asm("nop");
bEN=1;
asm("nop");
bEN=0;
}
bCS1B=1;bCS2=0;
mTempPage++;
mPageCount++;
}
}
UCHAR mTempTime;
void Delay1ms(UCHAR mDelayTime)
{
while(mDelayTime)
{
mDelayTime--;
mTempTime=50;
while(mTempTime)
{
mTempTime--;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");
}
}
}
//液晶模塊初始化
void ModuleInt()
{
bRESET=0;
Delay1ms(50);
bRESET=1;
Delay1ms(5);
bCS1B=0;
WriteIns(0x48); //set duty
WriteIns(0x68);
Delay1ms(1);
WriteIns(0xa0); //set ADC
Delay1ms(1);
WriteIns(0xc0); //set SHL
Delay1ms(1);
WriteIns(0x44); //set COM0
WriteIns(0x00);
Delay1ms(1);
WriteIns(0xab); //set OSC
Delay1ms(1);
WriteIns(0x67); //set DC/DC+++++++++
Delay1ms(1);
WriteIns(0x26); //set Ra/Rb
Delay1ms(1);
WriteIns(0x81); //set Register
WriteIns(56);
Delay1ms(1);
WriteIns(0x57); //set BIAS
Delay1ms(1);
WriteIns(0x2c); //set Power control
WriteIns(0x2e);
WriteIns(0x2f);
Delay1ms(30);
}
//液晶模塊清屏
void ModuleClr()
{
UCHAR mTempColumn,mTempPage;
UCHAR i;
bCS1B=0;
for(mTempPage=0;mTempPage<13;mTempPage++)
{
WriteIns(mTempPage|0xb0);
WriteIns(0x10);
WriteIns(0x00);
for(mTempColumn=0;mTempColumn<160;mTempColumn++)
{
WriteData(0x00);
}
}
}
//系統初始化
void SystemInt()
{
ADCON0=0x00;
ADCON1=0x06;
TRISA=0x00;
TRISB=0x00;
TRISC=0x00;
TRISD=0x00;
TRISE=0x00;
bCS1B=1;bCS2=1;bEN=0;
}
//主程序
const UCHAR *pSubElemTab;
void main()
{
SystemInt();
bBackLed=1;
bCS1B=0;
ModuleInt();
ModuleClr();
WriteIns(0xaf); //display on
while(1)
{
DrawBmpxx(0,0,ROU_16);
DrawBmpxx(0,16,NIE_16);
DrawBmpxx(0,32,QIAO_16);
DrawBmpxx(0,48,JI_16);
DrawBmpxx(0,64,ROU_16);
DrawBmpxx(0,80,NIE_16);
DrawBmpxx(0,96,QIAO_16);
DrawBmpxx(0,112,JI_16);
DrawBmpxx(0,128,ROU_16);
DrawBmpxx(0,144,NIE_16);
DrawBmpxx(2,0,ROU_16);
DrawBmpxx(2,16,NIE_16);
DrawBmpxx(2,32,QIAO_16);
DrawBmpxx(2,48,JI_16);
DrawBmpxx(2,64,ROU_16);
DrawBmpxx(2,80,NIE_16);
DrawBmpxx(2,96,QIAO_16);
DrawBmpxx(2,112,JI_16);
DrawBmpxx(2,128,ROU_16);
DrawBmpxx(2,144,NIE_16);
DrawBmpxx(4,0,ROU_16);
DrawBmpxx(4,16,NIE_16);
DrawBmpxx(4,32,QIAO_16);
DrawBmpxx(4,48,JI_16);
DrawBmpxx(4,64,ROU_16);
DrawBmpxx(4,80,NIE_16);
DrawBmpxx(4,96,QIAO_16);
DrawBmpxx(4,112,JI_16);
DrawBmpxx(4,128,ROU_16);
DrawBmpxx(4,144,NIE_16);
DrawBmpxx(6,0,ROU_16);
DrawBmpxx(6,16,NIE_16);
DrawBmpxx(6,32,QIAO_16);
DrawBmpxx(6,48,JI_16);
DrawBmpxx(6,64,ROU_16);
DrawBmpxx(6,80,NIE_16);
DrawBmpxx(6,96,QIAO_16);
DrawBmpxx(6,112,JI_16);
DrawBmpxx(6,128,ROU_16);
DrawBmpxx(6,144,NIE_16);
DrawBmpxx(8,0,ROU_16);
DrawBmpxx(8,16,NIE_16);
DrawBmpxx(8,32,QIAO_16);
DrawBmpxx(8,48,JI_16);
DrawBmpxx(8,64,ROU_16);
DrawBmpxx(8,80,NIE_16);
DrawBmpxx(8,96,QIAO_16);
DrawBmpxx(8,112,JI_16);
DrawBmpxx(8,128,ROU_16);
DrawBmpxx(8,144,NIE_16);
DrawBmpxx(10,0,ROU_16);
DrawBmpxx(10,16,NIE_16);
DrawBmpxx(10,32,QIAO_16);
DrawBmpxx(10,48,JI_16);
DrawBmpxx(10,64,ROU_16);
DrawBmpxx(10,80,NIE_16);
DrawBmpxx(10,96,QIAO_16);
DrawBmpxx(10,112,JI_16);
DrawBmpxx(10,128,ROU_16);
DrawBmpxx(10,144,NIE_16);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -