我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 760|回复: 0

电子密码锁LCD12864中文显示

[复制链接]

该用户从未签到

28

主题

35

回帖

67

积分

二级逆天

积分
67

社区居民终身成就奖

QQ
发表于 2015-5-11 13:31:20 | 显示全部楼层 |阅读模式
[/free]/***** LCD 12864 with KS0108B controller display driver *****/

#define uchar unsigned char
#include<drive_functions.h>
#include<get_keys.h>
bit verify=0;
bit cursor=1;
bit modify_flag=0,modify=0;
uint time_counter=0;
uchar counter=0,j=0,i,k;
uchar PASS[8]={1,2,3,4,5,6,7,8};
uchar PW[8]={0,0,0,0,0,0,0,0};
uchar PW_NULL[8]={0,0,0,0,0,0,0,0};
uchar MODIFY_BUF[8]={0,0,0,0,0,0,0,0};


/****************************verify pw  ************************/
bit VerifyAray(void)
{
        uchar i;
        bit temp=FAULSE;
        for(i=0;i<8;i++)
            {
            if(PW==PASS)temp=TRUE;

              else
               {
                 temp=FAULSE;
                 i=8;                       //end for loop
                 }
                 }
               return(temp);
    }


/*********************** main ************************/

void main(void)
{
    E=1;
    DspOn();
    ClearLCD();

//    IT0=1;
//    IT1=1;
//    EX0=1;
//    EX1=1;

    TMOD=0x10;
    ET1=1;
    EA=1;
    TH1=0x00;
    TL1=0x00;
    TR1=1;
   
    while(1)
    {
        /******************fist line****************************/
    uchar i;
    SetStartLine(0);
re_input:
    for(i=0;i<4;i++)
    {
    SetPage(0);
    SetColumn(i<<4);                           // i*16
    DspUp(&QING_SHU[i-1][32],1);
    DspUp(&QING_SHU[i-1+4][32],2);

    SetPage(1);
    SetColumn(i<<4);                          // i*16
    DspDown(&QING_SHU[i-1][32],1);
    DspDown(&QING_SHU[i-1+4][32],2);
    }

    /**************second line***************************/

    for(i=0;i<4;i++)
    {
    SetPage(6);
    SetColumn(i<<4);                           // i*16
    DspUp(&QING_CHU[i-1][32],1);
    DspUp(&QING_CHU[i+4-1][32],2);

    SetPage(7);
    SetColumn(i<<4);                          // i*16
    DspDown(&QING_CHU[i-1][32],1);
    DspDown(&QING_CHU[i+4-1][32],2);
    }

/***************************光标显示***********************************/
if(counter<8)           //如果输入到第8位,光标不再显示
{
if(cursor)
{
    i=counter;
    SetPage(2);
    SetColumn((i<4)?(i*16)(i-4)*16));                           
    DspUp(&GUANG_BIAO_KONG[-1][32],(i<4)?1:2);

    SetPage(3);
    SetColumn((i<4)?(i*16)(i-4)*16));                          
    DspDown(&GUANG_BIAO_KONG[-1][32],(i<4)?1:2);
    }

else
{
    i=counter;
    SetPage(2);
    SetColumn((i<4)?(i*16)(i-4)*16));                           
    DspUp(&GUANG_BIAO_KONG[0][32],(i<4)?1:2);

    SetPage(3);
    SetColumn((i<4)?(i*16)(i-4)*16));                          
    DspDown(&GUANG_BIAO_KONG[0][32],(i<4)?1:2);
    }  
   
}

/***********************get key's value**************************/

if(CheckState())
        {
            delay();
            
            if(CheckState())
            {
                key=GetKeys();
               
               if(key==0x82)                     //clear input
               {
                     if(modify_flag){counter=0;MODIFY_BUF[8]=PW_NULL[8];}
                  else {counter=0W[8]=PW_NULL[8];}
                  
                    for(i=0;i<8;i++)            
                       {   
                        SetPage(2);
                        SetColumn(i<<4);                           
                        DspUp(&GUANG_BIAO_KONG[0][32],1);
                        DspUp(&GUANG_BIAO_KONG[0][32],2);

                        SetPage(3);
                        SetColumn(i<<4);
                        DspDown(&GUANG_BIAO_KONG[0][32],1);
                        DspDown(&GUANG_BIAO_KONG[0][32],2);
                        
                        }
                  }

              else if(key==0x88)                       //verify password
              {   
                    if(modify_flag){modify=1;goto modify_operation;}
                      else {verify=1;goto verify_password;}
                     
                    }
               
              else if(counter<8)                      //get keys
                    {
                    switch(key)
                        {
                          case 0x84:
                                      if(modify_flag)MODIFY_BUF[counter]=0;
                                    else PW[counter]=0;
                                    break;
                         case 0x42:
                                     if(modify_flag)MODIFY_BUF[counter]=1;
                                    else PW[counter]=1;
                                    break;
                         case 0x44:
                                     if(modify_flag)MODIFY_BUF[counter]=2;
                                    else PW[counter]=2;
                                    break;
                         case 0x48:
                                     if(modify_flag)MODIFY_BUF[counter]=3;
                                    else PW[counter]=3;
                                    break;
                         case 0x22:
                                     if(modify_flag)MODIFY_BUF[counter]=4;
                                    else PW[counter]=4;
                                    break;
                         case 0x24:
                                     if(modify_flag)MODIFY_BUF[counter]=5;
                                    else PW[counter]=5;
                                    break;
                         case 0x28:
                                     if(modify_flag)MODIFY_BUF[counter]=6;
                                    else PW[counter]=6;
                                    break;
                         case 0x12:
                                     if(modify_flag)MODIFY_BUF[counter]=7;
                                    else PW[counter]=7;
                                    break;
                         case 0x14:
                                     if(modify_flag)MODIFY_BUF[counter]=8;
                                    else PW[counter]=8;
                                    break;
                         case 0x18:
                                     if(modify_flag)MODIFY_BUF[counter]=9;
                                    else PW[counter]=9;
                                    break;
                         default:
                                     break;
                            }
                        counter++;
                  }

            
           }
           }

/************************display password input **************************/

for(i=0;i<counter;i++)   
  {   
      if(modify_flag==1)j=MODIFY_BUF;
    else j=PW;
    SetPage(2);
    SetColumn((i<4)?(i*16)(i-4)*16));                           
    DspUp(&NUMBER_ARRY[j-1][32],(i<4)?1:2);

    SetPage(3);
    SetColumn((i<4)?(i*16)(i-4)*16));                          
    DspDown(&NUMBER_ARRY[j-1][32],(i<4)?1:2);
}



/*******************************verify_password*************************/

verify_password:    if(verify)
                    {

                        if(VerifyAray())
                          {
                           ClearLCD();
                loop1:     for(i=0;i<4;i++)
                            {
                            SetPage(0);
                            SetColumn(i<<4);                           // i*16
                            DspUp(&TONG_GUO[i-1][32],1);
                            DspUp(&TONG_GUO[i-1+4][32],2);

                            SetPage(1);
                            SetColumn(i<<4);                          // i*16
                            DspDown(&TONG_GUO[i-1][32],1);
                            DspDown(&TONG_GUO[i-1+4][32],2);
                           
                            SetPage(6);
                            SetColumn(i<<4);                           // i*16
                            DspUp(&TONG_GUO_TI_SHI[i-1][32],1);
                            DspUp(&TONG_GUO_TI_SHI[i-1+4][32],2);

                            SetPage(7);
                            SetColumn(i<<4);                          // i*16
                            DspDown(&TONG_GUO_TI_SHI[i-1][32],1);
                            DspDown(&TONG_GUO_TI_SHI[i-1+4][32],2);
                            }

                            if(CheckState())
                            {
                                delay();
            
                                if(CheckState())
                                    {
                                        key=GetKeys();
               
                                           if(key==0x82)
                                        {counter=0;verify=0;goto re_input;}

                                        else if(key==0x88)
                                        {counter=0;modify_flag=1;verify=0;goto re_input;}
                                        }
                                }
   
                         else  goto loop1;
                            }
                      else
                      {
                              ClearLCD();
                    loop2:    for(i=0;i<4;i++)
                            {
                            SetPage(0);
                            SetColumn(i<<4);                           // i*16
                            DspUp(&BU_TONG_GUO[i-1][32],1);
                            DspUp(&BU_TONG_GUO[i-1+4][32],2);

                            SetPage(1);
                            SetColumn(i<<4);                          // i*16
                            DspDown(&BU_TONG_GUO[i-1][32],1);
                            DspDown(&BU_TONG_GUO[i-1+4][32],2);

                            SetPage(6);
                            SetColumn(i<<4);                           // i*16
                            DspUp(&TONG_GUO_TI_SHI[i-1][32],1);
                           
                            SetPage(7);
                            SetColumn(i<<4);                          // i*16
                            DspDown(&TONG_GUO_TI_SHI[i-1][32],1);
                        
                                }
                            if(CheckState())
                                {
                                    delay();
            
                                if(CheckState())
                                    {
                                        key=GetKeys();
               
                                           if(key==0x82)
                                        {counter=0;verify=0;goto re_input;}
                                        }
                                        }
                            else goto loop2;
                            }
                            }

}
//}


/*********************modify password operation *********************/

modify_operation:  if(modify)
                    {
                        modify_flag=0;
                          if(1)
                           {
                             for(i=0;i<8;i++){PASS=MODIFY_BUF;}
                              //PASS[8]=MODIFY_BUF[8];
                           
                           
                            ClearLCD();
                                                
                    loop3:    for(i=0;i<4;i++)
                            {
                            SetPage(0);
                            SetColumn(i<<4);                           // i*16
                            DspUp(&GAI_CHENG_GONG[i-1][32],1);
                            DspUp(&GAI_CHENG_GONG[i-1+4][32],2);
                            SetPage(1);
                            SetColumn(i<<4);                          // i*16
                            DspDown(&GAI_CHENG_GONG[i-1][32],1);
                            DspDown(&GAI_CHENG_GONG[i-1+4][32],2);

                            SetPage(2);
                            SetColumn(i<<4);                           // i*16
                            DspUp(&GAI_HOU_TI_SHI[i-1][32],1);
                            DspUp(&GAI_HOU_TI_SHI[i-1+4][32],2);
                            SetPage(3);
                            SetColumn(i<<4);                          // i*16
                            DspDown(&GAI_HOU_TI_SHI[i-1][32],1);
                            DspDown(&GAI_HOU_TI_SHI[i-1+4][32],2);

                            j=PASS;
                            k=PASS[i+4];

                            SetPage(4);
                            SetColumn(i<<4);
                            DspUp(&NUMBER_ARRY[j-1][32],1);
                            DspUp(&NUMBER_ARRY[k-1][32],2);
                            SetPage(5);
                            SetColumn(i<<4);
                            DspDown(&NUMBER_ARRY[j-1][32],1);
                            DspDown(&NUMBER_ARRY[k-1][32],2);


                            SetPage(6);
                            SetColumn(i<<4);                           // i*16
                            DspUp(&TONG_GUO_TI_SHI[i-1][32],1);
                            SetPage(7);
                            SetColumn(i<<4);                          // i*16
                            DspDown(&TONG_GUO_TI_SHI[i-1][32],1);
                                }
                            if(CheckState())
                                {
                                    delay();
            
                                if(CheckState())
                                    {
                                        key=GetKeys();
               
                                           if(key==0x82)
                                        {counter=0;modify=0;ClearLCD();goto re_input;}
                                        }
                                        }
                            else goto loop3;
                            }
                            }
                    
                        }

/*******timer1 interrupt to change cursor display on and off ******/

void Timer1(void) interrupt 3 using 1
{
   
    TH1=0x00;
    TL1=0x00;
    TR1=1;
    if(time_counter>10)
    {
        time_counter=0;
        cursor=~cursor;
        }
     else time_counter++;

     }  
   
   

/************* INT0 interrupt to scroll up by press switch P3.2 **********************/

/*void INT0_ON(void) interrupt 0 using 2
{
    direction=UP;
    }


/************** INT1 interrupt to scroll down by press switch P3.3***********************/

/*void INT1_OFF(void) interrupt 2 using 3
{
    direction=DOWN;
    }
*/

[free]
购买主题 本主题需向作者支付 1 枚金币 才能浏览
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

每日签到,有金币领取。


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表