程序比较多,所以写成了几个文件,同时应用了相当多的标识位来进行信号传递。
我觉得边看程序边画它的流程图会更好地帮助我们读程序。
1.0 main.c文件
#include<reg52.h>
#include<string.h>
#include"mydefine_2.h"
static void delay(unsigned int N)//N
ms延时_12MHz/准确性高
{
unsigned int i=0,j=0;
for(i=1;i<=N;i++)
for(j=1;j<=355;j++)
;
}
void clock()
{
key_clock=0;
delay(15);
key_clock=1;
}
void init()
{
key_LCD=0;
init_1602();
TMOD=0x01;
TH0=0x3C;//=(65535-5000)/256
TL0=0xAF;//(65535-5000)%256
EA=1;
ET0=1;
TR0=0;
EA=1;//外部中断0唤醒CPU(空闲方式)
EX0=1;
IT0=1;
command(0x80);
lcd_display(7);
}
void main()
{
init();
while(1)
{
temp=keyboard_matrix();//扫描输入
if(temp)//有按键输入信息
{
clock();//按键声
TR0=0;//关闭计时
timer=0;
receive(temp);//输入的字符串长度为length(
<= 10)
if(i!=length)//输入时显示"*"
{
command(0xC0+length);//为显示密码输入设定位置
display('*');
i=length;
}
switch(temp)//根据按键号调用任务
{
//修改密码
case
12: if((flag_allow) &&
(flag_amend==0))//输入密码正确的条件下可以更改
{
table_input[0]='\0';
flag_display=3;//请输入新密码
flag_confirm=1;//确认键进入确认修改密码功能
flag_amend=1;//每次按下修改键时都是第一次输入新密码
length=0;
//重按修改键时也是第一次输入新密码
i=0;
}
else
{
flag_confirm=0;//恢复初始态
flag_amend=0;
lcd_display(1);//密码不正确
delay(500);