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

📄 lcd.c

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


/******************************************************************************************
*函数名:		Initialize
*参数:			无
*返回值:		无
*描述:			初始化LCD子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void Initialize(void)
{
        uint i;

        LcdCommand=0x40;                  /* ---------LCD SYSTEM SET系统设置令,8个参数-------- */
        for(i=0;i<8;i++)                  /*--------------------字符为8*8点阵-----------------*/
          {                               /*---------------8点列字体-----------------*/
          LcdDataWrite=LCD_set[i];        /*---------------14点行/字符体-------------*/
           }                              /* 显示域长度为320dot */
                                          /* 确定液晶工作频率 */
                                          /* 显示屏高度为240dot */
                                          /* 显示屏一行所占显示缓冲区字节数(L) */
                                          /* 显示屏一行所占显示缓冲区字节数(H) */

        LcdCommand=0x44;                  /* --LCD scl_ICROLL显示区设置命令,最多10个参数-- */
        for(i=0;i<8;i++)                  /* 显示1区对应的显示RAM起始高8位地址 */
          {                               /* 显示1区对应的显示RAM起始低8位地址 */
            LcdDataWrite=LCD_scroll[i];   /* 显示1区占用240个dot行             */
           }                              /* 显示2区对应的显示RAM起始低8位地址 */
                                          /* 显示2区对应的显示RAM起始高8位地址 */
                                          /* 显示3区占用240个dot行             */
                                          /* 显示3区对应的显示RAM起始低8位地址 */
                                          /* 显示3区对应的显示RAM起始高8位地址 */

       LcdCommand=0x5a;       /* 水平卷动,初始化时必须清零 */
        LcdDataWrite=0x00;

        LcdCommand=0x5b;       /* 各个显示区的合成方式,1个参数 */
        LcdDataWrite=0x1c;     /* 参数:显示方式为三屏图形叠加,逻辑或 */

        LcdCommand=0x58;       /* 打开显示,1个参数 */

        LcdDataWrite=0x04;     /* 只显示第一个区并关闪烁 */

        LcdCommand=0x4c;       /* 光标自动向右增一?*/

        LcdCommand=0x46;       /* 设定光标位置命令 */
        for(i=0;i<2;i++)        /* 从0000位置开始 */
        {
          LcdDataWrite=0;
        }

        LcdCommand=0x42;       /* 允许MPU连续地把显示数据写入显示区内命令 */

}


/******************************************************************************************
*函数名:		Chang_display
*参数:			无
*返回值:		无
*描述:			改画面预处理子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void Chang_display()
{
       LcdCommand=0x58;
       Clear_display();
}



/******************************************************************************************
*函数名:		PSW_num
*参数:			Key_num
*返回值:		无
*描述:			键盘按键输密码功能执行子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void PSW_num(uchar Key_num)
{
        uchar i,j;
//        uchar a;
//        uchar clear_psw;
        do                                   //   |
         {                                   //   |
//         delay(0xFF);                      //   |
         i=Key_check();                      //    >等待释放键盘
         delay(0x660);                        //   |
         }                                   //   |
        while(i);                            //   |
        num++;
     if(Key_num==10)                         // 如果为取消键,则清理密码及提示
      {
       Clear_Warning();
       Clear_pswstar();
       num=255;
      }
      else                                   //非取消键则进行密码识别
      {
        if(num<6)                            //键入键数小于六次时
          {
           if(Key_num==11)                   //为确认键时,显示输入位数不够
              {
                  Clear_Warning();
                  WriteWork(130,1,ZKno_full,2,32,8,0);
                  Clear_pswstar();
                  num=255;
                  not_full=1;
               }
           if(!not_full)
                 {
                   PswErr=0;
                   Clear_Warning();
                   WriteWork(101,12+num,ZKnum+16*Key_num,1,16,1,0);
                   Pswnum_buff[num]=Key_num;
                  }
          }
        if(!_testbit_(not_full))
        {
        if(num>=5)
          {
            if(Key_num==11)
               {
                 PswErr=0;
                 for(j=0;j<6;j++)
                    {
                     if(Pswnum[j]!=Pswnum_buff[j])
                        {
                         PswErr=1;
                        }
                    }
                 if(PswErr)
                      {
                      WriteWork(130,4,ZKPswErr,2,32,5,0);
                      WriteWork(130+20,4,ZKPswErr+32*5,2,32,5,0);
                      num=255;
                      Clear_pswstar();
                      }

                 else
                      {Chang_display();
                      Working();
                      LcdCommand=0x59;
                      PswDisplay=0;}
               }
            }
           }
       }
}



/******************************************************************************************
*函数名:		Clear_Warning
*参数:			无
*返回值:		无
*描述:			清除输入密码出错时的警告提示子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void Clear_Warning()
{
          uchar j;
          for(j=0;j<15;j++)
              {
                WriteWork(130,1+j,ZKnone,2,32,1,0);
                WriteWork(130+20,1+j,ZKnone,2,32,1,0);
              }
}

/******************************************************************************************
*函数名:		Clear_pswstar
*参数:			无
*返回值:		无
*描述:			清除输入密码出错时的星号子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void Clear_pswstar()
{   uchar i;
    for(i=0;i<6;i++)
        {

         WriteWork(101,12+i,ZKnone,1,16,1,0);

         }
}

/******************************************************************************************
*函数名:		Key
*参数:			无
*返回值:		按键识别码或者0
*描述:			确认有键按下子程序,主要添加了软件去抖动功能
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
uchar Key()
{
        uchar Key_num;

        Key_num=0;
//        Key_num=Key_check();
        if(Key_check()==0)
           return(0) ;
        else
           {delay(0x660);
           if(Key_num=Key_check())
             return(Key_num) ;
           else
             return(0);
            }
}

/******************************************************************************************
*函数名:		Key_check
*参数:			无
*返回值:		0或者按键识别码
*描述:			键盘扫扫描子程序,有键按下则返回按键识别码,无则返回0
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
uchar Key_check()
{
        uchar i;
        uchar P1_num;                 //P1口读取的数据
//        uchar idata num_H;                  //返回键盘值高位
//        uchar idata num_L;                  //返回键盘值低位
        uchar P1_num_f;               //某置低电平时取反数

        P1=P1|0XF0;
        output=0xEF;
        for(i=0;i<4;i++)
        {   P1=P1|0xf0;
            output=output|0x0f;
            P1=P1&output;
            P1_num=P1;
            P1_num_f=P1_num|0x0f;
            P1_num_f=~P1_num_f;
            if(output&P1_num_f)
            {
              /* num_H=P1_num&0xF0;
               num_L=_iror_(output,4);
               num_L=num_L&0x0F;*/
               P1_num=P1_num&0xf0;
               num_and=i+P1_num;
               return(num_and);
            }
            output=output<<1;
         }
        return(0);
}

/********************************************************************************
*********************************************************************************
*********************************************************************************
********************************************************************************/


/******************************************************************************************
*函数名:		format_mcu
*参数:			无
*返回值:		无
*描述:			初始化MCU子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void format_mcu()
{
//        uchar i;
        TMOD=0X02;
        TL0=TH0=-1000;
        ET0=1;
        TR0=1;
        num=255;
        init_24c02();
/*        for(i=0;i<6;i++)
            {
             Pswnum[(i)]=i;
           }
        write_byte(0,6); */
        PswDisplay=1;
        read_byte(0,6);
        delay(0x10);
        LCD_reset=0;
        LCD_reset=1;
        Initialize();           //Lcd初始化
        LcdCommand=0x4f;        // 光标地址自动向下增一
        Chang_display();
        TurnOnWork();
        LcdCommand=0x59;        //开机画面,输入开机密码
        EA=1;

}

/**********************************************************************
*
*              各中断处理函数
*
***********************************************************************/

/******************************************************************************************
*函数名:		Timer0_int
*参数:			无
*返回值:		无
*描述:			定时器0中断服务子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void Timer0_int(void) interrupt 1 using 1
{
      Timer0Num_1++;
      if(Timer0Num_1>25)
         {
           Timer0Num_1=0;
           Timer0Num_0++;
           if(Timer0Num_0>35)
              {
                Timer0Num_0=0;
                Bit_key=1;
               }
          }
      else
      {
         Bit_key=0;
      }
}

/******************************************************************************************
*函数名:		delay
*参数:			无
*返回值:		无
*描述:			延时子程序
*编写:			李满庭
*版本信息:		V1.0			2004年7月7日
******************************************************************************************/
void delay(uint delNum)
{
 uint i;
for(i=0;i<delNum;i++)
   {
    ;
    }
}
void delay1(void)
{
  _nop_();
  _nop_();
}






⌨️ 快捷键说明

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