/***** 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[i]==PASS[i])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=0;PW[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[i];
else j=PW[i];
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[i]=MODIFY_BUF[i];}
//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);
电子密码锁LCD12864中文显示
需积分: 16 46 浏览量
2010-05-17
13:11:56
上传
评论
收藏 88KB RAR 举报
lcx87
- 粉丝: 0
- 资源: 18
最新资源
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈