📄 lcd640480.c
字号:
}
else //汉字
{
switch (hztype)
{
case 1:
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) // 查找定位
{
if((c1 == GB_16[j].Index[0]) && (c2 == GB_16[j].Index[1]))
break;
}
break;
case 2:
for(j=0;j<sizeof(GB_32)/sizeof(GB_32[0]);j++) // 查找定位
{
if((c1 == GB_32[j].Index[0]) && (c2 == GB_32[j].Index[1]))
break;
}
break;
case 3:
for(j=0;j<sizeof(GB_48)/sizeof(GB_48[0]);j++) // 查找定位
{
if((c1 == GB_48[j].Index[0]) && (c2 == GB_48[j].Index[1]))
break;
}
break;
default:
break;
}
for(c1=0;c1<2*hztype;c1++)
{
for(c2=0;c2<16*hztype;c2++)
{
if(hztype==1)
{dd=GB_16[j].Msk[c2*2 + c1];}
else if(hztype==2)
{dd=GB_32[j].Msk[c2*4 + c1];}
else
{dd=GB_48[j].Msk[c2*6 + c1];}
for(m=0;m<8;m++)
{
if((dd>>(7-m))&1==1)
PutPixel( uRow+8*(c1+hztype*i)+m,uCol+c2,c);//画点
}
}
}
i++;
}
/* if(uRow >= 640) // 光标后移
{
uCol += 16; // Y坐标
uRow = 0; // X坐标
if( uCol >= 480 ) uCol = 0;
} */
i++; //当字符输入字符为ASCLL时i加1,为汉字时i再加1 左右两个字节
}
}
/*******************************触摸屏相关子子程序**************************/
/*****************SPI开始**********************/
void start()
{
DCLK=0;
CS=1;
DIN=1;
DCLK=1;
CS=0;
}
/****************SPI写数据******************/
void ads7843_wr(unsigned char num)
{
uchar i=0;
DCLK=0;
for(i=0;i<8;i++)
{
if(num&0x80)
{ DIN=1; }
else
{ DIN=0; }
DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效
DCLK=1; _nop_();_nop_();_nop_();
num=num<<1;
}
}
/******************SPI 读数据*************/
uint ads7843_rd()
{
uchar i=0;
uint Num=0;
for(i=0;i<12;i++)
{
Num=Num<<1;
DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
DCLK=0; _nop_();_nop_();_nop_();
if(DOUT)
{ Num++; }
}
return(Num);
}
void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据
{
unsigned int X=0,Y=0,X1=0,Y1=0;
//sl=0;//into上接电位变为零,使采样数据正确
//pint0=0;//into上接电位变为零,使采样数据正确
//delay(100); //中断后延时以消除抖动,使得采样数据更准确
while(!cm_ok)//数据稳定就退出
{ start(); //启动SPI
//while(BUSY); //如果BUSY信号不好使可以删除不用
delay(2);
ads7843_wr(0x90); //送控制字 10010000 即用差分方式读X坐标详细请见有关资料
//while(BUSY); //如果BUSY信号不好使可以删除不用
//{}
delay(2);
DCLK=1; _nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();
//delay(50000);
if(!zd_time)//第一次中断
{ X=ads7843_rd(); }
else
{ X1=ads7843_rd(); }
ads7843_wr(0xD0); //送控制字 11010000 即用差分方式读Y坐标详细请见有关资料
DCLK=1; _nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();
//delay(50000);
if(!zd_time)//第一次中断
{ Y=ads7843_rd();
zd_time=1;
}
else
{ Y1=ads7843_rd();
zd_time=0;
}
CS=1;
if(!zd_time)//一次按下中断了两次了
{ if(X>X1-50)
{ if(X<X1+50)
{ if(Y>Y1-50)
{ if(Y<Y1+50) //两次测得的AD值相等认为按下按键有效
{
IE0=0;//个清除外中斷0的中斷請求
cm_ok=1;
changeXY(X,Y);
}
}
}
}
}
}
cm_ok=0;//相连两次AD值是不是相近,是的(置1)退出while
}
void changeXY(uint x,uint y) //x,y坐标转化为液晶坐标
{
uint xx,yy;uchar hang;
xx=(x-640)/10;
yy=(y-560)/13;
hang=hangzhi(yy);
}
unsigned char hangzhi(uchar y) //判断第几行的按键
{
uchar hang;
if(y>195&&y<230)
{hang=4;}
return(hang);
}
/********************************************************************
函 数 名:main()
功 能:主程序
说 明:
入口参数:num
返 回 值:无
***********************************************************************/
void main()
{
//EA=1;
//EX0=1; //开外中断0
//IT0=1; //下降沿中断
//IP=0x01;//外中断0高中断
delay1MS(10); //延时
LCD_BG=0;
Color_s=0; //使用256色
lcdclear(0x00); //快速清屏 黑色
delay1MS(10);
//clearlcd(0xff); //快速清屏 白色
//delay1MS(10);
//Glib_ClearScr(0); //清屏 黑色
//delay1MS(10); //延时
//Glib_Rectangle(10,10,310,20,0xc0); //画框 蓝色
//delay1MS(10); //延时
//Glib_FilledRectangle( 10,30,310,40,0x38);//填充 绿色
//delay1MS(10); //延时
//Glib_circle(100,100,50,0x07); //画圆 红色
//delay1MS(10); //延时
//write_chinese24(10,180,0x3f,jing_24 ); //写24点阵汉字 晶 黄色
//write_chinese24(50,180,0x3f+10,chang_24 ); //写24点阵汉字 昌 (黄+10)色
//write_chinese24(90,180,0x3f+20,ri_24 ); //写24点阵汉字 日 (黄+20)色
//write_chinese24(130,180,0x3f+30,sheng_24 ); //写24点阵汉字 盛 (黄+30)色
delay1MS(10); //延时
// write_chinese12(170,190,0x3f+40,ke_12 ); //写12点阵汉字 科 (黄+40)色
write_chinese12(190,190,0x3f+50,ji_12 ); //写12点阵汉字 技 (黄+50)色
delay1MS(10); //延时
putBMP(50,50,500,400,TU); //贴50X50点阵的图片
delay1MS(10);
delay1MS(10);
delay1MS(10);
//putstr(0,100,nihao,0xc0,1,strlen(nihao));
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -