📄 4x8b.c
字号:
#include <reg52.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <intrins.h>
#define data_ora P1 //MCU P1<------> LCM
#define uchar unsigned char
#define uint unsigned int
sbit req =P3^0; //请求信号,H有效
sbit busy=P3^1; //H:已收到数据并在处理中,L:空闲可接收数据
sbit DCLK=P2^7; //根据用户自己的定义
sbit CS=P2^6;
sbit DIN=P2^5;
sbit DOUT=P2^3;
sbit ip=P3^2;
//sbit BUSY1=P0^1;
uchar tabx[4];
uchar taby[4];
uchar code tab[]={
"中文 图形 返回"
};
uchar code tab2[]={
"肇庆金鹏电子公司"
"触摸屏测试进行中"
};
uchar code tab3[]={
"请按第一行的菜单"
"显示对应的效果图"
};
uchar code tab1[]={
/*-- 调入了一幅图像
/*-- 宽度x高度=128x64 --*/
0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x1F,0xF0,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x3E,0xFC,0x00,0x00,0x00,
0x00,0x00,0x7F,0xE0,0x00,0x03,0xE0,0x00,0x00,0x00,0x00,0xE0,0x86,0x00,0x00,0x00,
0x00,0x01,0xFF,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x01,0x80,0x81,0x80,0x00,0x00,
0x00,0x01,0xFE,0x00,0x00,0x3F,0xE3,0x80,0x00,0x00,0x02,0x00,0x80,0xC0,0x00,0x00,
0x00,0x00,0x7C,0x00,0x00,0x3F,0xC3,0xDE,0x00,0x00,0x04,0x00,0x80,0x60,0x00,0x00,
0x00,0x00,0x7F,0xFE,0x00,0x0F,0xC1,0xFE,0x00,0x00,0x0C,0x00,0x80,0x30,0x00,0x00,
0x00,0x03,0xFF,0xFF,0x80,0x19,0xC0,0xFF,0x00,0x00,0x18,0x00,0x80,0x10,0x00,0x00,
0x00,0x07,0x7F,0xFF,0xC0,0x19,0xC0,0xFF,0x00,0x00,0x10,0x00,0x80,0x18,0x00,0x00,
0x00,0x0C,0xEE,0x1F,0xC0,0x1D,0xDC,0xEE,0x00,0x00,0x10,0x00,0x80,0x08,0x00,0x00,
0x00,0x10,0xEF,0xE0,0x00,0x1F,0x9F,0xFE,0x00,0x00,0x20,0x00,0x80,0x08,0x00,0x00,
0x00,0x21,0xDF,0xE0,0x00,0x1B,0x8F,0xDC,0x00,0x00,0x20,0x00,0x80,0x08,0x00,0x00,
0x00,0x63,0xFF,0x00,0x00,0x1F,0xFF,0xDC,0x00,0x00,0x20,0x00,0x80,0x0C,0x00,0x00,
0x00,0x47,0xBE,0x80,0x00,0x3F,0xFF,0xFC,0x30,0x00,0x20,0x01,0x80,0x04,0x00,0x00,
0x00,0x7F,0x07,0x6C,0x00,0x3F,0xFF,0xF8,0x30,0x00,0x20,0x03,0xC0,0x04,0x00,0x00,
0x00,0x3E,0x4F,0xFE,0x00,0x3D,0xFD,0xF8,0x30,0x00,0x20,0x0C,0x60,0x08,0x00,0x00,
0x00,0x00,0x7F,0xFE,0x00,0x3B,0x7D,0xB8,0x70,0x00,0x20,0x18,0x30,0x08,0x00,0x00,
0x00,0x03,0xFC,0x60,0x00,0x0F,0x7C,0x80,0xF0,0x00,0x30,0x30,0x0C,0x08,0x00,0x00,
0x00,0x1F,0xF0,0x60,0x00,0x3E,0x7E,0x07,0xF0,0x00,0x10,0xC0,0x06,0x08,0x00,0x00,
0x00,0x1F,0xF0,0x60,0x00,0xFC,0xFF,0xFF,0xF0,0x00,0x19,0x80,0x03,0x10,0x00,0x00,
0x00,0x00,0xF0,0x60,0x00,0xFF,0xE3,0xFF,0xE0,0x00,0x0B,0x00,0x01,0xB0,0x00,0x00,
0x00,0x00,0xE0,0x60,0x00,0xEF,0xE0,0x00,0x00,0x00,0x0C,0x00,0x00,0xE0,0x00,0x00,
0x00,0x00,0xE0,0x60,0x00,0x43,0xC0,0x00,0x00,0x00,0x06,0x00,0x00,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x01,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x1C,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void send (uchar dat);
//void WriteCharTo7843();
//void ReadFromCharFrom7843();
void main ()
{
void wr_zb(uchar comm,uchar addr_x,uchar addr_y);
void send(uchar dat);
void delay1 (uint ms);
void delay (uint us);
void start(void);
void disptouch(void);
void go(void);
void disp_chn (uchar code *chn);
void disp_chn1 (uchar code *chn);
void disp_img (uchar code *img);
SP=0x5f;
req=0;
busy=1;
disp_chn(tab);
wr_zb(0xf9,4,16);
send(0x58);
wr_zb(0xf9,11,16);
send(0x59);
wr_zb(0xf9,5,16);
send(0x3d);
wr_zb(0xf9,12,16);
send(0x3d);
if(ip==0)
{
delay(10000);
if(ip==0)
{
ip=0;
go();
}
}
}
void disp_chn (uchar code *chn)
{
uchar i;
for(i=2;i<10;i++)
{
wr_zb(0xf0,i,0);
send(chn[(i-2)*2]-0xa0);
send(chn[(i-2)*2+1]-0xa0);
}
}
void disp_chn1 (uchar code *chn)
{
uchar i;
for(i=2;i<10;i++)
{
wr_zb(0xf0,i,2);
send(chn[(i-2)*2]-0xa0);
send(chn[(i-2)*2+1]-0xa0);
}
for(i=2;i<10;i++)
{
wr_zb(0xf0,i,3);
send(chn[(i+6)*2]-0xa0);
send(chn[(i+6)*2+1]-0xa0);
}
}
/*-----------------显示图形-----------------*/
void disp_img (uchar code *img)
{
uchar i,j;
for(j=31;j<64;j++)
{
for(i=4;i<20;i++)
{
wr_zb(0xf3,i,j);
send(img[(j-31)*16+i-4]);
}
}
}
/*---------------延时子程序----------------*/
void delay (uint us)
{
while(us--);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1000;j++)
;
}
/*------------写命令或数据到LCD--------------*/
void wr_zb (uchar comm,uchar addr_x,uchar addr_y)
{
send(comm);
send(addr_x);
send(addr_y);
}
void send (uchar dat) //写命令或数据
{
while(busy==1)
;
data_ora=dat;
req=1;
while(busy==0)
;
req=0;
}
WriteCharTo7843(unsigned char num) //SPI写数据
{
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() //SPI 读数据
{
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() //SPI开始
{
DCLK=0;
CS=1;
DIN=1;
DCLK=1;
CS=0;
}
void disptouch()
{uchar r;
for(r=6;r<10;r++)
{ wr_zb(0xf9,r,16);
send(tabx[r-6]+48);
}
for(r=13;r<17;r++)
{ wr_zb(0xf9,r,16);
send(taby[r-13]+48);
}
}
void go()
{
unsigned int X=0,Y=0;
//uchar e,q;
//delay(10000);
//中断后延时以消除抖动,使得采样数据更准确
start(); //启动SPI
//while(BUSY1); //如果BUSY信号不好使可以删除不用
delay(2);
WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
//while(BUSY1); //如果BUSY信号不好使可以删除不用
delay(2);
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
X=ReadFromCharFrom7843(); //读X轴坐标
WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
Y=ReadFromCharFrom7843(); //读Y轴坐标
CS=1;
ip=1;
tabx[0]=(X/1000);
tabx[1]=(X-tabx[0]*1000)/100;
tabx[2]=(X-tabx[0]*1000-tabx[1]*100)/10;
tabx[3]=(X-tabx[0]*1000-tabx[1]*100-tabx[2]*10);
taby[0]=(Y/1000);
taby[1]=(Y-taby[0]*1000)/100;
taby[2]=(Y-taby[0]*1000-taby[1]*100)/10;
taby[3]=(Y-taby[0]*1000-taby[1]*100-taby[2]*10);
if(X>3000)
if(Y>2600)
disp_chn1(tab2);
if(X<2500)
if(X>1600)
if(Y>2600)
disp_img(tab1);
if(X<1600)
if(Y>2600)
disp_chn1(tab3);
if(Y<2600)
send(0xf4);
/*e=160-(X-300)/28;
q=64-(Y-300)/56;
send(0xf4);
wr_zb(0xf2,e,q);
wr_zb(0xf2,e,q+1);
wr_zb(0xf2,e+1,q);
wr_zb(0xf2,e+1,q+1);*/
disptouch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -