📄 init.c.bak
字号:
//==============================================================================
//本触摸屏程序只适用于金鹏公司D型液晶模块,显示点数按OCMJ8X15D液晶模块显示,即240X128点阵显示。
//==============================================================================
#include <reg52.h>
sbit lcd_rs =P3^0; //L:存取缓存器,H:存取DDRAM
sbit lcd_wr =P3^1; //L有效
sbit lcd_rd =P3^6; //L有效
sbit lcd_cs1 =P3^3; //L有效
//sbit lcd_cs2 =P3^4; //H有效
sbit lcd_busy =P3^5;
sbit lcd_int =P3^2;
//sbit lcd_rst =P3^7; //L有效
#define lcd_regname P1
#define lcd_regdata P1
#define lcd_regnada P1
#define lcd_data P1
#define lcd_control P3
#define uchar unsigned char
#define uint unsigned int
#define LCD_XMAX 240
#define LCD_YMAX 128
uchar signal;
//=============================================
extern void lcd_regwrite(uchar regname,uchar regdata) small;
extern void lcd_regwr(uchar regnada) small;
extern void lcd_datawrite(uchar wrdata) small;
extern uchar lcd_regread(uchar regname) small;
extern void Delay1ms(uchar Counter) small;
extern void delay(int k) small;
extern void delay1 (int ms) small;
extern void lcd_reset(void) small;
extern void lcd_initial(void) small;
extern void lcd_clear(void) small;
extern void gotoxy(uchar x,uchar y) small;
extern uchar Test_Touch(void) small;
extern uint Touch_X(void) small;
extern uint Touch_Y(void) small;
extern void LCD_Bold(void) small;
extern void LCD_NoBold(void) small;
extern void Print_Hex(uint buf) small;
//==============================================================================
void Delay1ms(uchar Counter)
{
int i,j;
for(i = 0 ; i < Counter ; i++)
{
for(j = 0 ;j < 78 ; j++);
}
}
//.............................................
void delay(int k)
{
int i;
for(i=0;i<k;i++);
}
//.............................................
void delay1 (int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<123;j++);
}
//=============================================
void lcd_regwrite(uchar regname,uchar regdata) small
{ //写资料到缓存器
lcd_regwr(regname);
delay(1);
lcd_regwr(regdata);
}
//.............................................
void lcd_regwr(uchar regnada) small
{
EA=0;
lcd_regnada = regnada;
lcd_cs1 =0; // chip enable.
lcd_rd = 1; //
lcd_rs = 0; // rs = 0;
lcd_wr = 0; // wr = 0;
lcd_wr = 1; // wr = 1;
lcd_rs = 1; // rs = 1;
lcd_cs1 =1; // chip disable.
EA=1;
}
//.............................................
void lcd_datawrite(uchar wrdata) small
{ //写资料到DDRAM
EA=0;
while(lcd_busy == 0);
lcd_data = wrdata;
lcd_cs1 =0; // chip enable.
lcd_rd = 1; //
lcd_rs = 1; // rs = 1;
lcd_wr = 0; // wr = 0;
lcd_wr = 1; // wr = 1;
lcd_rs = 1; // rs = 1;
lcd_cs1 =1; // chip disable.
EA=1;
}
//.............................................
uchar lcd_regread(uchar regname) small
{ //读缓存器
uchar reg_rddata;
lcd_regwr(regname);
EA=0;
lcd_data = 0xff;
lcd_cs1 =0; // chip enable.
lcd_wr = 1; // wr = 1;
lcd_rs = 0; // rs = 0;
lcd_rd = 0; // rd = 0;
reg_rddata = lcd_data;
lcd_rd = 1; // rd = 1;
lcd_rs = 1; // rs = 1;
lcd_cs1 =1; // chip disable.
return reg_rddata;
EA=1;
}
//=============================================
void lcd_reset(void) small
{ //上电复位
delay1(120); // delay 120ms 等待上电复位
lcd_control = 0xff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.
}
//.............................................
void lcd_clear(void) small
{ //清屏
uchar reg_rddata;
lcd_regwrite(0xe0,0x00);
reg_rddata = lcd_regread(0xf0);
reg_rddata |= 0x08;
lcd_regwrite(0xf0,reg_rddata);
}
//==============================================================================
//LCD Initial
//==============================================================================
void LCD_Initial(void) small
{ //按OCMJ8X15D液晶模块(即240X128点阵)初始化
lcd_regwrite(0x00,0xc9); // lcd control register(lcr)
lcd_regwrite(0x01,0xe2); // misc.register(mir)
lcd_regwrite(0x02,0x10); // advance power setup register(apsr)
lcd_regwrite(0x03,0x80); // advance display setup regiser(adsr)
lcd_regwrite(0x10,0x6b); // cursor control register(ccr)
lcd_regwrite(0x11,0x00); // distance of word or lines register(dwlr)
lcd_regwrite(0x12,0x91); // memory access mode register(awrr)
lcd_regwrite(0x21,29); // display window right register(dwrr)
lcd_regwrite(0x31,127); // display window bottom register(dwbr)
lcd_regwrite(0x41,0x00); // display window left register(dwlr)
lcd_regwrite(0x51,0x00); // display window top register(dwtr)
lcd_regwrite(0x20,29); // active window right register(awrr)
lcd_regwrite(0x30,127); // active window bottom register(awbr)
lcd_regwrite(0x40,0x00); // active window left register(awlr)
lcd_regwrite(0x50,0x00); // active window top register(awtr)
lcd_regwrite(0x60,0x00); // cursor position x register(cpxr)
lcd_regwrite(0x61,0x00); // begin segment position register(bgsg)
lcd_regwrite(0x70,0x00); // cursor position y register(cpyr)
lcd_regwrite(0x71,0x00); // shift action range,begin commom register(bgcm)
lcd_regwrite(0x72,0x7f); // shift action range,end commom register(edcm)
lcd_regwrite(0x80,0xaa); // blink time register(btr)
lcd_regwrite(0x81,0x04); // frame rate polarity change at common_fa register(fdca)
lcd_regwrite(0x91,0x00); // frame rate polarity change at common_fb register(fdcb)
lcd_regwrite(0x90,0x2d); // shift clock control register(sccr)
lcd_regwrite(0xa0,0x11); // interrupt setup & status register(frcb)
lcd_regwrite(0xa1,0x00); // key scan control register(kscr)
lcd_regwrite(0xa2,0x00); // key scan data register(ksdr)
lcd_regwrite(0xa3,0x00); // key scan data expand register(kser)
lcd_regwrite(0xb0,0x13); // interrupt column setup register(intx)
lcd_regwrite(0xb1,0x7f); // interrupt row setup register(inty)
lcd_regwrite(0xc0,0x00); // touch panel control register(tpcr)
lcd_regwrite(0xc1,0x35); // adc status register(adcs)
lcd_regwrite(0xc8,0x80); // touch panel segment high byte data register(tpxr)
lcd_regwrite(0xc9,0x80); // touch panel common high byte data register(tpyr)
lcd_regwrite(0xca,0x00); // touch panel segment/common low byte data register(tpzr)
lcd_regwrite(0xd0,0x80); // lcd contrast control register (lccr)
lcd_regwrite(0xe0,0x00); // pattern data register(pdr)
lcd_regwrite(0xf0,0xa0); // font control register(fcr)
lcd_regwrite(0xf1,0x0f); // font size control register
}
//==============================================================================
void gotoxy(uchar x,uchar y) small
{ //定坐标
lcd_regwrite(0x60,(x & 0x3f)); // active window top register(awtr)
lcd_regwrite(0x70,(y & 0xff)); // active window top register(awtr)
}
//==============================================================================
uchar Test_Touch(void)
{
uchar temp, tempT;
EA=0;
temp = lcd_regread(0xc0);//TPCR
temp &= 0xfe;//clear bit0
temp &= 0xfd;//clear bit1
temp &= 0xfb;//clear bit2
temp |= 0x08;//set bit7
lcd_regwrite(0xc0, temp);//TPCR
Delay1ms(2);
tempT=lcd_regread(0xc1);//TPSR
temp &= 0xf7;
lcd_regwrite(0xc0, temp);//TPCR
tempT = tempT & 0x40;
if(tempT == 0x40) return 0x01;
else return 0x00;
EA=1;
}
//==============================================================================
uint Touch_Y(void)
{
uchar temp, tempYL;
uint tempY;
EA=0;
temp = lcd_regread(0xc0);//TPCR
temp &= 0xfe;
lcd_regwrite(0xc0, temp);//TPCR
temp &= 0xfd;
lcd_regwrite(0xc0, temp);//TPCR
temp |= 0x04;
lcd_regwrite(0xc0, temp);//TPCR
temp |= 0x08;
lcd_regwrite(0xc0, temp);//TPCR
Delay1ms(1);
tempY=lcd_regread(0xc9);//TPYR
tempYL=(lcd_regread(0xca)&0xF0)>>4;//TPZR
tempY=(tempY<<2)|tempYL;
return tempY;
EA=1;
}
//==============================================================================
uint Touch_X(void)
{
uchar temp, tempXL;
uint tempX;
EA=0;
temp = lcd_regread(0xc0);//TPCR
temp &= 0xfb;
lcd_regwrite(0xc0, temp);//TPCR
temp &= 0xf7;
lcd_regwrite(0xc0, temp);//TPCR
temp |= 0x01;
lcd_regwrite(0xc0, temp);//TPCR
temp |= 0x02;
lcd_regwrite(0xc0, temp);//TPCR
Delay1ms(1);
tempX=lcd_regread(0xc8);//TPXR
tempXL=(lcd_regread(0xca)&0x0f);//TPZR
tempX=(tempX<<2)|tempXL;
return tempX;
EA=1;
}
//==============================================================================
void LCD_Bold(void)
{
uchar temp;
temp = lcd_regread(0x10);//WCCR
temp |= 0x10;
lcd_regwrite(0x10, temp);//WCCR
}
//==============================================================================
void LCD_NoBold(void)
{
uchar temp;
temp = lcd_regread(0x10);//WCCR
temp &= 0xef;
lcd_regwrite(0x10, temp);//WCCR
}
//==============================================================================
void Print_Hex(uint buf)
{
uint temp,temp1;
temp1=buf;
temp = (temp1 >>8) & 0x0F;
if(temp < 0x0A)
{
temp |= 0x30;
}
else temp = temp + 0x37;
lcd_datawrite(temp);
temp = (temp1 >>4) & 0x0F;
if(temp < 0x0A)
{
temp |= 0x30;
}
else temp = temp + 0x37;
lcd_datawrite(temp);
temp=buf;
temp = temp1 & 0x0F;
if(temp < 0x0A)
{
temp |= 0x30;
}
else temp = temp + 0x37;
lcd_datawrite(temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -