?? 12864.c
字號:
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define LCM_Data P2 //定義LCM接口
#define RS P3_3
#define RW P3_4
#define E P3_5
#define CS1 P3_7
#define CS2 P3_6
#define RSTB P0_2
#define SelCS1 0x0
#define SelCS2 0x1
#define Page0 0xB8 //頁面0
#define StartSeg 0x40 //第0列
#define DisplayOn 0x3F //開顯示
#define DisplayOff 0x3E //關顯示
#define StartRow 0xC0 //顯示起始行
/********************************************************************
* 名稱:Invert
* 功能:
* 調用:無
* 輸入:
* 返回值: 無
***********************************************************************
uchar Invert(uchar org_data)
{
uchar inv_data=0,i;
for(i=8;i>0;i--)
{
inv_data=((org_data&0x01)<<(i-1))|inv_data;
org_data>>=1;
}
return inv_data;
} */
uchar code Invert[]=
{
0x0,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0,
0x8,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8,
0x4,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4,
0xc,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc,
0x2,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2,0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2,
0xa,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea,0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa,
0x6,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6,0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6,
0xe,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee,0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe,
0x1,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1,0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1,
0x9,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9,0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9,
0x5,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5,
0xd,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd,
0x3,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3,0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3,
0xb,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb,0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb,
0x7,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7,0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7,
0xf,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff,
};
/********************************************************************
* 名稱: LCM_WRcmd
* 功能:發送控制命令到CS1或CS2
* 調用:無
* 輸入: uchar Wcmd,bit CS1CS2
* 返回值: 無
***********************************************************************/
void LCM_WRcmd(uchar Wcmd,bit CS1CS2)
{
if(CS1CS2==SelCS1)
{
RS = 0;RW = 0;
CS1 = 1;E = 1;
LCM_Data = Invert[Wcmd];
E = 0;CS1 = 0;
}
else
{
RS = 0;RW = 0;
CS2 = 1;E = 1;
LCM_Data = Invert[Wcmd];
E = 0;CS2 = 0;
}
}
/********************************************************************
* 名稱: LCM_WRdata
* 功能:發送數據到CS1或CS2
* 調用:無
* 輸入: uchar Wdata,bit CS1CS2
* 返回值: 無
***********************************************************************/
void LCM_WRdata(uchar Wdata,bit CS1CS2)
{
if(CS1CS2==SelCS1)
{
RS = 1;RW = 0;
CS1 = 1;E = 1;
LCM_Data = Invert[Wdata];
E = 0;CS1 = 0;
}
else
{
RS = 1;RW = 0;
CS2 = 1;E = 1;
LCM_Data = Invert[Wdata];
E = 0;CS2 = 0;
}
}
/********************************************************************
* 名稱:LCM_RDdata
* 功能:接收CS1或CS2的數據
* 調用:無
* 輸入:uchar *p,bit CS1CS2
* 返回值: 無
***********************************************************************
void LCM_RDdata(uchar *p,bit CS1CS2)
{
if(CS1CS2==SelCS1)
{
RS = 1;RW = 1;
LCM_Data = Invert(0xff);
CS1 = 1;E = 1;
*p = Invert(LCM_Data);
E = 0;CS1 = 0;
}
else
{
RS = 1;RW = 1;
LCM_Data = Invert(0xff);
CS2 = 1;E = 1;
*p = Invert(LCM_Data);
E = 0;CS2 = 0;
}
}
/********************************************************************
* 名稱:LCM_RDstatus
* 功能:讀取CS1或CS2的狀態
* 調用:無
* 輸入:uchar *p,bit CS1CS2
* 返回值: 無
***********************************************************************
void LCM_RDstatus(uchar *p,bit CS1CS2)
{
if(CS1CS2==SelCS1)
{
RS = 0; RW = 1;
LCM_Data = Invert(0xff);
CS1 = 1;E = 1;
*p = Invert(LCM_Data);
E = 0;CS1 = 0;
}
else
{
RS = 0; RW = 1;
LCM_Data = Invert(0xff);
CS2 = 1;E = 1;
*p = Invert(LCM_Data);
E = 0;CS2 = 0;
}
}
/********************************************************************
* 名稱:LCM_ClearRAM
* 功能:LCM清顯示緩存
* 調用:LCM_WRcmd,LCM_WRdata
* 輸入:無
* 返回值: 無
***********************************************************************/
void LCM_ClearRAM(void)
{
uchar i,j;
for(i=8;i>0;--i)
{
LCM_WRcmd(Page0|i,SelCS1);
LCM_WRcmd(Page0|i,SelCS2);
LCM_WRcmd(StartSeg,SelCS1);
LCM_WRcmd(StartSeg,SelCS2);
for(j=64;j>0;--j)
{
LCM_WRdata(0x0,SelCS1);
LCM_WRdata(0x0,SelCS2);
}
}
}
/********************************************************************
* 名稱:LCM_Init
* 功能:LCM初始化
* 調用: LCM_ClearRAM,LCM_WRcmd
* 輸入: 無
* 返回值: 無
***********************************************************************/
void LCM_Init(void)
{
//RSTB = 0;
//_nop_();
//RSTB = 1;
//_nop_();
//CS1 = 0;
//CS2 = 0;
//LCM_ClearRAM();
LCM_WRcmd(StartRow,SelCS1);
LCM_WRcmd(StartRow,SelCS2);
LCM_WRcmd(DisplayOn,SelCS1);
LCM_WRcmd(DisplayOn,SelCS2);
}
/********************************************************************
* 名稱:LCM_Dischinese
* 功能:LCM顯示一個16*16字符到指定的位置
* 調用:LCM_WRcmd;LCM_WRdata
* 輸入:uchar *Char,uchar Row(1-4),uchar Col(1-8)
* 返回值: 無
***********************************************************************
void LCM_Dischinese(uchar *Char,uchar Row,uchar Col)
{
uchar DisSeg;
bit i=0,Sel;
Row = 5-Row;
Col = 9-Col;
Char = Char+31;
do{
for(DisSeg=(Col-1)*16;DisSeg<Col*16;DisSeg++)
{
if(DisSeg/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row*2-2)|i,Sel);
LCM_WRcmd(StartSeg|DisSeg%64,Sel);
LCM_WRdata(*(Char--),Sel);
}
i=~i;
}while(i);
}
/********************************************************************
* 名稱:LCM_Disenglish
* 功能:LCM顯示一個6*16字符到指定的位置
* 調用:LCM_WRcmd;LCM_WRdata
* 輸入:uchar *Char,uchar Row(1-4),uchar Col(1-21)
* 返回值: 無
***********************************************************************
void LCM_Disenglish(uchar *Char,uchar Row,uchar Col)
{
uchar DisSeg;
bit i=0,Sel;
Row = 5-Row;
Col = 22-Col;
Char = Char+11;
do{
for(DisSeg=(Col-1)*6;DisSeg<Col*6;DisSeg++)
{
if(DisSeg/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row*2-2)|i,Sel);
LCM_WRcmd(StartSeg|DisSeg%64,Sel);
LCM_WRdata(*(Char--),Sel);
}
i=~i;
}while(i);
}
/********************************************************************
* 名稱:LCM_Dischar
* 功能:LCM顯示一個5*8字符到指定的位置
* 調用:LCM_WRcmd;LCM_WRdata
* 輸入:uchar *Char,uchar Row(1-8),uchar Col(1-25)
* 返回值: 無
***********************************************************************/
void LCM_Dischar(uchar code *Char,uchar Row,uchar Col)
{
uchar DisSeg;
bit Sel;
Row = 9-Row;
Col = 26-Col;
Char = Char+4;
for(DisSeg=(Col-1)*5;DisSeg<Col*5;DisSeg++)
{
if(DisSeg/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row-1),Sel);
LCM_WRcmd(StartSeg|DisSeg%64,Sel);
LCM_WRdata(*(Char--),Sel);
}
}
/********************************************************************
* 名稱:LCM_Disline
* 功能:LCM顯示25個5*8字符到指定的一行位置
* 調用:LCM_WRcmd;LCM_WRdata
* 輸入:uchar *Char,uchar Row(1-8)
* 返回值: 無
***********************************************************************/
void LCM_Disline(uchar code *String,uchar Row)
{
uchar DisSeg,DisNum,*Char;
bit Sel;
Row = 9-Row;
String = String+24;
for(DisNum=1;DisNum<26;DisNum++)
{
Char=Space+(*(String--)-0x20)*5+4;
if(Char==Space+('*'-0x20)*5+4)
continue;
for(DisSeg=(DisNum-1)*5;DisSeg<DisNum*5;DisSeg++)
{
if(DisSeg/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row-1),Sel);
LCM_WRcmd(StartSeg|DisSeg%64,Sel);
LCM_WRdata(*(Char--),Sel);
}
}
}
/********************************************************************
* 名稱:LCM_Ivtchar
* 功能:LCM反顯一個5*8字符到指定的位置
* 調用:LCM_WRcmd;LCM_WRdata
* 輸入:uchar *Char,uchar Row(1-8),uchar Col(1-25)
* 返回值: 無
***********************************************************************/
void LCM_Ivtchar(uchar code *Char,uchar Row,uchar Col)
{
uchar DisSeg;
bit Sel;
Row = 9-Row;
Col = 26-Col;
Char = Char+4;
for(DisSeg=(Col-1)*5;DisSeg<Col*5;DisSeg++)
{
if(DisSeg/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row-1),Sel);
LCM_WRcmd(StartSeg|DisSeg%64,Sel);
LCM_WRdata(~*(Char--),Sel);
}
}
/********************************************************************
* 名稱:LCM_EEDischar
* 功能:LCM從EEPROM讀16*16字模并顯示一個字符到指定的位置
* 調用:LCM_WRcmd;LCM_WRdata
* 輸入:uint Char,uchar Row(1-4),uchar Col(1-8)
* 返回值: 無
***********************************************************************
void LCM_EEDischar(uint Char,uchar Row,uchar Col)
{
uchar DisSeg,EEdata;
bit i=0,Sel;
Row = 5-Row;
Col = 9-Col;
Char = Char+31;
do{
for(DisSeg=(Col-1)*16;DisSeg<Col*16;DisSeg++)
{
if(DisSeg/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row*2-2)|i,Sel);
LCM_WRcmd(StartSeg|DisSeg%64,Sel);
RandomRead(Char--,&EEdata);
LCM_WRdata(EEdata,Sel);
}
i=~i;
}while(i);
}
/********************************************************************
* 名稱:LCM_Disdot
* 功能:在LCM指定的位置顯示一個點
* 調用:LCM_WRcmd;LCM_WRdata;LCM_RDdata
* 輸入:uchar Row(0-63),uchar col(0-127)
* 返回值: 無
***********************************************************************
void LCM_Disdot(uchar Row,uchar col)
{
uchar Lcm_data;
bit Sel;
Row = 63-Row;
col = 127-col;
if(col/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row/8),Sel);
LCM_WRcmd(StartSeg|(col%64),Sel);
LCM_RDdata(&Lcm_data,Sel); //Dummy read
LCM_RDdata(&Lcm_data,Sel);
LCM_WRcmd(StartSeg|(col%64),Sel);
LCM_WRdata(Lcm_data|(0x01<<(Row%8)),Sel);
}
/********************************************************************
* 名稱:LCM_Clrdot
* 功能:在LCM指定的位置消去一個點
* 調用:LCM_WRcmd;LCM_WRdata;LCM_RDdata
* 輸入:uchar Row(0-63),uchar col(0-127)
* 返回值: 無
***********************************************************************
void LCM_Clrdot(uchar Row,uchar col)
{
uchar Lcm_data;
bit Sel;
Row = 63-Row;
col = 127-col;
if(col/64==1)
Sel = SelCS2;
else
Sel = SelCS1;
LCM_WRcmd(Page0|(Row/8),Sel);
LCM_WRcmd(StartSeg|(col%64),Sel);
LCM_RDdata(&Lcm_data,Sel); //Dummy read
LCM_RDdata(&Lcm_data,Sel);
LCM_WRcmd(StartSeg|(col%64),Sel);
LCM_WRdata(Lcm_data&~(0x01<<(Row%8)),Sel);
}*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -