📄 ocmj15x20d(7843触摸屏).c
字号:
lcd_cs1 =1; // chip disable.
return(reg_rddata);
}
//=============================================
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_reset(void) small
{ //上电复位
delay1(120); // delay 120ms 等待上电复位
lcd_control = 0xff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.
}
//.............................................
void lcd_initial(void) small
{ //初始化
lcd_regwrite(0x00,0xc9); // lcd control register(lcr)
lcd_regwrite(0x01,0xf2); // 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,0x27); // display window right register(dwrr)
lcd_regwrite(0x31,0xef); // 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,0x27); // active window right register(awrr)
lcd_regwrite(0x30,0xef); // 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,0xef); // shift action range,end commom register(edcm)
lcd_regwrite(0x80,0xaa); // blink time register(btr)
lcd_regwrite(0x81,0x00); // 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,0x06); // 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,0x27); // interrupt column setup register(intx)
lcd_regwrite(0xb1,0xef); // interrupt row setup register(inty)
lcd_regwrite(0xc0,0x00); // touch panel control register(tpcr)
lcd_regwrite(0xc1,0x0a); // 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 lcd_clear(void) small
{ //清屏
uchar reg_rddata;
lcd_regwrite(0xe0,0x00);
reg_rddata = lcd_regread(0xf0);
reg_rddata |= 0x08;
lcd_regwrite(0xf0,reg_rddata);
}
//.............................................
void lcd_photo(uchar code *pho) small
{ //显示图形
uchar i,j,k;
uchar code *pp;
gotoxy(0,0);
for(k=0;k<4;k++)
{
pp=pho;
for(j=0;j<60;j++)
{
for(i=0;i<40;i++)
{
lcd_datawrite(*pp);
++pp;
}
}
}
}
//.............................................
void lcd_lattice(uchar data1,uchar data2) small
{ //显示点阵
uchar i,j;
gotoxy(0,0);
for(j=0;j<60;j++)
{
for(i=0;i<80;i++)
{
lcd_datawrite(data1);
}
for(i=0;i<80;i++)
{
lcd_datawrite(data2);
}
}
}
//.............................................
void lcd_character(uchar code *cha,int count) small
{ //显示中文或字符
int i;
for(i=0;i<count;i++)
{
lcd_datawrite(*cha);
++cha;
}
}
//.............................................
void lcd_character1(int count) small
{ //显示中文或字符
lcd_datawrite(count);
}
//.............................................
extern void gotoxy(uchar x,uchar y) small
{ //定坐标
lcd_regwrite(0x60,x); // active window top register(awtr)
lcd_regwrite(0x70,y); // active window top register(awtr)
}
//=============================================
WriteCharTo7843(unsigned char num)
{
unsigned char count=0;
DCLK=0;
for(count=0;count<8;count++)
{
num<<=1;
DIN=CY;
DCLK=0; _nop_();_nop_();_nop_();
DCLK=1; _nop_();_nop_();_nop_();
}
}
ReadFromCharFrom7843()
{
unsigned char count=0;
unsigned int Num=0;
for(count=0;count<12;count++)
{
Num<<=1;
DCLK=1; _nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();
if(DOUT) Num++;
}
return(Num);
}
void start()
{
DCLK=0;
CS=1;
DIN=1;
DCLK=1;
CS=0;
}
void go() interrupt 0
{
uint X=0,Y=0;
start(); //启动SPI
//while(BUSY1); //如果BUSY信号不好使可以删除不用
delay(2);
for(r=0;r<4;r++)
{
WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
//while(BUSY1); //如果BUSY信号不好使可以删除不用
//delay(2);
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
x[r]=ReadFromCharFrom7843(); //读X轴坐标
WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
y[r]=ReadFromCharFrom7843(); //读Y轴坐标
}
CS=1;
ip=1;
X=(x[0]+x[1]+x[2]+x[3])/4;
Y=(y[0]+y[1]+y[2]+y[3])/4;
tabx[0]=(Y/1000);
tabx[1]=(Y-tabx[0]*1000)/100;
tabx[2]=(Y-tabx[0]*1000-tabx[1]*100)/10;
tabx[3]=(Y-tabx[0]*1000-tabx[1]*100-tabx[2]*10);
taby[0]=(X/1000);
taby[1]=(X-taby[0]*1000)/100;
taby[2]=(X-taby[0]*1000-taby[1]*100)/10;
taby[3]=(X-taby[0]*1000-taby[1]*100-taby[2]*10);
lcd_clear();
lcd_regwrite(0x10,0x2b);
lcd_regwrite(0x00,0xcd);
gotoxy(0x00,0x00);
lcd_character(tab4,160);
for(r=0;r<4;r++)
{
gotoxy(19+r,32);
lcd_character1(tab5[tabx[r]]);
}
for(r=0;r<4;r++)
{
gotoxy(19+r,48);
lcd_character1(tab5[taby[r]]);
}
delay1(300);
}
void main (void)
{
SP=0x5f;
lcd_reset();
lcd_initial();
lcd_clear();
IE=0x81;
IT0=0;
while(1)
{
IE=0x00;
lcd_regwrite(0x10,0x29);
lcd_regwrite(0x00,0xcd);
gotoxy(0x00,0x00);
lcd_character(tab1,600);
IE=0x81;
delay1(3000);
IE=0x00;
lcd_regwrite(0x00,0xc5);
lcd_lattice(0xcc,0xcc);
IE=0x81;
delay1(3000);
IE=0x00;
lcd_regwrite(0x00,0xc5);
lcd_lattice(0x33,0x33);
IE=0x81;
delay1(3000);
IE=0x00;
lcd_regwrite(0x10,0x2b);
lcd_regwrite(0x00,0xcd);
gotoxy(0x00,0x00);
lcd_character(tab1,600);
IE=0x81;
delay1(3000);
IE=0x00;
lcd_regwrite(0x00,0xc5);
lcd_lattice(0xcc,0x33);
IE=0x81;
delay1(3000);
IE=0x00;
lcd_regwrite(0x00,0xc5);
lcd_photo(tab2);
IE=0x81;
delay1(3000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -