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

📄 lcd.c

📁 lcd程序,1335控制器, 硬件平台:带sed1335LCD驱动器的320*240LCD模块,ads7846伟福仿真机
💻 C
📖 第 1 页 / 共 3 页
字号:
*
*
******************************************************************************************/

/******************************************************************************************
*函数名:		init_24c02
*参数:			无
*返回值:		无
*描述:			IIC初始化,在MAIN中首先调用
*编写:			李满庭
*版本信息:		V1.0			2004年7月8日
******************************************************************************************/
void init_24c02()
{
      scl_IC=0;
      stop();
}


/******************************************************************************************
*函数名:		start
*参数:			无
*返回值:		无
*描述:			启动读写时序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void start()
{
      sda_IC=1;
      delay1();
      scl_IC=1;
      delay1();
      sda_IC=0;
      delay1();
}

/******************************************************************************************
*函数名:		stop
*参数:			无
*返回值:		无
*描述:			停止操作
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void stop()
{
      sda_IC=0;
      delay1();
      scl_IC=1;
      delay1();
      sda_IC=1;
      delay1();
}

/******************************************************************************************
*函数名:		ack
*参数:			无
*返回值:		无
*描述:			应答子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************
void ack()
{
      sda_IC=0;
      clock();
      sda_IC=0;

}



/******************************************************************************************
*函数名:		rd_24c02
*参数:			无
*返回值:		rd_data
*描述:			接收八位的数据
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
uchar rd_24c02(void)
   {
     uchar i;
     uchar rd_data=0;
     for(i=0;i<8;i++)
        {
         rd_data*=2;
         if(clock())
            {
             rd_data++;
            }
        }
     return(rd_data);
}

/******************************************************************************************
*函数名:		send_address
*参数:			adr
*返回值:		0 or 1
*描述:			发送八位的字节地址,在此前做一个伪写操作
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
bit send_address(uchar adr)
{
     start();
     if(send(0XA0))
        {
         return(send(adr));
        }
     else
        return(0);
}

/******************************************************************************************
*函数名:		send
*参数:			a
*返回值:		0 or 1
*描述:			八位移位输出
*编写:			李满庭
*版本信息:		V1.0			2004年7月8日
******************************************************************************************/
bit send(uchar a)
{
      uchar i;
      send_data=a;
      scl_IC=0;
      delay1();
      for(i=0;i<8;i++)
          {
//           sda_IC=(bit)(send_data&0x80);
           sda_IC=(bit)(send_data&0x80);
           send_data=send_data<<1;
           clock();
           }
      sda_IC=1;
      return(~clock());
}

/******************************************************************************************
*函数名:		clock
*参数:			无
*返回值:		sample
*描述:			时钟,同时返回sda的状态,当要检测2402的应答信号时,只要在调用本函数前先把sda拉高,就可以知道器件有没有回送应答信号
*编写:			李满庭
*版本信息:		V1.0			2004年7月8日
******************************************************************************************/
bit clock()
{
      bit sample;
      scl_IC=1;
      delay1();
      sample=sda_IC;
      scl_IC=0;
      delay1();
      return(sample);
}
/******************************************************************************************
*函数名:		read_byte
*参数:			adr_first,num
*返回值:		无
*描述:			读2402函数,采用"随机地址读取"方式,先发一个伪写指导令,指出字节地址
*编写:			李满庭
*版本信息:		V1.0			2004年7月8日
******************************************************************************************/
bit read_byte(uchar adr_first,uchar num)
{
     uchar i;
     for(i=0;i<num;i++)
        {
         if(send_address(adr_first+i))
          {
          start();
          if(send(0xA1))
            {
             Pswnum[i]=rd_24c02();
             stop();
             }
          else
            {
             return(0);
             }
          }
        else
           {
            stop();
            return(0);
           }
        }
        return(1);
}

/******************************************************************************************
*函数名:		write_byte
*参数:			adr_first,num
*返回值:		无
*描述:			写2402函数,采用字节写入方式
*编写:			李满庭
*版本信息:		V1.0			2004年7月9日
******************************************************************************************
bit write_byte(uchar adr_first,uchar num)
{
      uchar i;
      for(i=0;i<num;i++)
         {
         if(send_address(adr_first+i)&&send(Pswnum[i]))
            {
             stop();
             delay(100);
             }
         else
            {
             return(0);
            }
         }
      return(1);
}

/******************************************************************************************
*函数名:		Working
*参数:			无
*返回值:		无
*描述:			工作画面子程序,当用户在开机画面输入正确密码后可进入此画面
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void Working()
{
//      uchar i;
      WriteWork(3,8,ZKbdt,3,72,8,0);
      WriteWork(205,4,ZKmggls,2,32,5,0);
      WriteWork(205,14,ZKguohao,1,16,2,4);
      WriteWork(205,15,ZKzhuhai,2,32,2,0);
      WriteWork(205,20,ZKkjsy,2,32,8,0);
      WriteWork(222,6,ZKcarise_int,1,16,30,0);
//      WriteWork(100,7,ZKnum+num*16,1,16,1,0);
}


/******************************************************************************************
*函数名:		TurnOnWork
*参数:			无
*返回值:		无
*描述:			开机画面子程序,在此画面用户输入正确密码方可进入工作画面
*编写:			李满庭
*版本信息:		V1.0			2004年6月20日
******************************************************************************************/
void TurnOnWork()
{

      uchar i,j,k,l;
      uchar b;

// ||y是y轴坐标,x是x轴的坐标,*ZiKu首地址,x_size字体宽度,size占字节的个数,num显示个数,空格个数 ||
      WriteWork(100,1,ZKqsrmm,2,32,6,0);    //显示"请输入密码:"
      b=12;
      do
      {
            WriteWork(117,b,ZKheng,1,1,1,0);    //显示"_____________"
            b++;
      }
      while(b<18);
      //3*4个方框
      for(l=0;l<4;l++)                                            //3*4个方框
         {  for(k=0;k<3;k++)
              {for(j=0;j<2;j++)
                  {                                               //显示两行
                   for(i=0;i<5;i++)                               //显示一行5个段
                       WriteWork((30+j*22)+l*45,(20+i)+k*6,ZKheng,1,1,1,0);
                   };

                   for(i=0;i<23;i++)
                      {                                             //显示左竖
                       WriteWork((30+i)+l*45,19+k*6,ZKdian_r,1,1,1,0);
                       };
                   for(i=0;i<23;i++)
                       {
                       WriteWork((30+i)+l*45,25+k*6,ZKdian_l,1,1,1,0);   //显示右竖
                       };
                   for(i=0;i<23;i++)
                      {                                             //显示左竖
                       WriteWork((30+i)+l*45,19,ZKdian_rr,1,1,1,0);
                       };
               };
          };
      //1~9的数字,并把这些数字放到每一个小方框里面
      for(i=0;i<3;i++)
             {
               WriteWork(32+i*45,22,ZKnum+i*48,1,16,3,5);
             };
      //数字0,把此数字放到第四行中间的方框里面
      WriteWork(32+3*45,28,ZKnum+144,1,16,1,0);
      //确定取消,把确定放到第四行左力方框里面
      for(i=0;i<2;i++)
            {
                WriteWork(33+3*45,20+i*12,ZKOK+i*64,2,32,2,1);
             };
}


/******************************************************************************************
*函数名:		SetCursor
*参数:			Y,X
*返回值:		无
*描述:			设定光标,定出显示位置子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void SetCursor(uchar Y,uchar X)
{
       //
        char dpl_l,dph_h;
        dpl_l=(Y*40+X)&0xff;     /*利用XY座标计算出光标地址的高低八位*/
        dph_h=(Y*40+X)/256;
        delay(0x9);
        LcdCommand=0x46;       /* 设定光标位置命令 */
        LcdDataWrite=dpl_l;        /* 从**位置开始 */
        LcdDataWrite=dph_h;
        delay(0x9);
        LcdCommand=0x42;       /* 允许MPU连续地把显示数据写入显示区内命令 */
}

/******************************************************************************************
*函数名:		Clear_display
*参数:			无
*返回值:		无
*描述:			清LCD所有显示缓冲区子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void Clear_display()
{
      uchar i,j;
      for(i=0;i<40;i++)
         { SetCursor(0,i);
               for(j=0;j<240;j++)
                  LcdDataWrite=0x0;
         };
}

/******************************************************************************************
*函数名:		Writework
*参数:			y,x,Ziku,x_size,size,num,space
*返回值:		无
*描述:			写数据到LCD子程序,y是y轴坐标,x是x轴的坐标,*ZiKu首地址,x_size字体宽度,size占字节的个数,num显示个数
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void WriteWork(uchar y,uchar x,uchar * ZiKu,uchar x_size,uint size,uchar num,uchar space_num)
{
      uint i;
      uchar j,k;
      uchar *pt;
      uchar space=0;
      pt=ZiKu;
      for(k=0;k<num;k++)
      {
        ZiKu=pt+k*size;
        for(j=0;j<x_size;j++)
        {
          SetCursor(y,x+j+x_size*k+space);         // 设定光标,允许显示
          for(i=j;i<size;)
            { LcdDataWrite=ZiKu[i];
              i+=x_size;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -