⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd640480.c

📁 640480彩色液晶显示程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			}
	      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 + -