📄 复件 7.c.bak
字号:
#include <AT89X51.H>
unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f, //定义段码
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x40,0x00,0xbf,0x86,
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef};
unsigned char weima[]={0xfe,0xfd,0xfb,0xf7, //定义扫描位码
0xef,0xdf,0xbf,0x7f};
unsigned char shijian[8]={0,0,16,0,0,16,0,0}; //时间存储单元
unsigned char lucheng[8]={0,0,18,0,16,0,18,0}; //路程存储单元
char jiage[8]={2,19,17,0,19,17,5,20} ; //价格存储单元
unsigned char zongjia[8]={0,18,17,17,17,0,18,0} ; //总价存储单元
char mima[8]={16,16,16,16,16,16,16,16} ; //输密码存储单元
unsigned char mima1[8]={1,2,3,4,5,6,7,8}; //原始密码存储单元
unsigned char lu,x,y,cuo=0,hour1,w=0,m=0,n; //定义相关变量
int i;
unsigned char dis;
char second;
char minite,minite2;
char hour;
unsigned int tcnt,tcnt2;
unsigned char ms,a,c;
sbit k0=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
bit k=0;
delay(int t) //延时子程序
{
int s,e;
for(s=0;s<t;s++)
for(e=0;e<100;e++);
}
yijian() //一键是否按下子程序
{
char q=0;
if(k0==0)
{
delay(2);
if(k0==0)
{
q=1;
while(1) if(k0==1) break;
}
}
return q;
}
erjian() //二键是否按下子程序
{
char q=0;
if(k1==0)
{
delay(2);
if(k1==0)
{
q=1;
while(1) if(k1==1) break;
}
}
return q;
}
shangjian() //三键是否按下子程序
{
char q=0;
if(k2==0)
{
delay(2);
if(k2==0)
{
q=1;
while(1) if(k2==1) break;
}
}
return q;
}
kaiguan() //白天晚上转换开关
{
char q=0;
if(k3==0)
{
delay(2);
if(k3==0)
{
q=1;
}
}
return q;
}
mi() //输入密码子程序
{
char h; //定义局部变量
if(w==1) //检测是否已经输错三次
{goto loop;} //错三次跳到程序最后
a=5; //显示模块开关
for(i=7;i>=0;i--) //循环八次
{
while(1)
{
if(shangjian()==1) //三键按下,数据减1
{
mima[i]--;
if(mima[i]<0|mima[i]>9) mima[i]=9;
}
if(erjian()==1) //二键按下,数据加1
{
mima[i]++;
if(mima[i]>9) mima[i]=0;
}
if(yijian()==1) //一键按下,移到下一位
break;
}
}
for(i=0;i<=7;i++) //循环核对密码
if(mima[i]!=mima1[i]) break;
if(i<=7) //检查是否对8次
{
cuo++; //错误次数加1
if(cuo>=3) //错误次数到3清0并不允许再输入
{
cuo=0;
w=1;
}
h=0;
}
else h=1;
for(i=7;i>=0;i--) //输完后数据清除
{
mima[i]=16;
}
loop:if(w==1) return 0; //错三次,返回0
return h;
}
gaimi() //改密码子程序
{
if(w==1) //判断是否已错三次
{goto loop;}
if(mi()==1) //进入输密码子程序
{
a=6; //改密码显示开关
for(i=7;i>=0;i--) //循环8次改变密码数据
{
while(1)
{
if(erjian()==1)
{
mima1[i]++;
if(mima1[i]>9) mima1[i]=0;
}
if(yijian()==1)
break;
}
}
}
loop:if(w==1) return 0; //错三次,返回0
}
tiaoshi() //调时间子程序
{
if(w==1)
goto loop;
k=1; //停止计时
for(i=7;i>0;i=i-3) //对时、分、秒进行循环
{
while(1)
{
if(erjian()==1) //二键按下,加1
{
if(i==7) //调整时间部分
{
hour++; //小时加1
if(hour==24)
hour=0;
}
if(i==4) //调整分钟部分
{
minite++; //分钟加1
if(minite==60)
minite=0;
}
if(i==1) //调整秒钟部分
{
second++; //秒加1
if(second==60)
second=0;
}
}
if(shangjian()==1) //三键按下,减1
{
if(i==7)
{
hour--;
if(hour<0)
hour=23;
}
if(i==4)
{
minite--;
if(minite<0)
minite=59;
}
if(i==1)
{
second--;
if(second<0)
second=59;
}
}
if(yijian()==1) break; //一键按下,移到下一位
}
if(yijian()==1) break; //跳出循环,显示时间
}
k=0; //开始计时
loop:1;
}
jijia()
{
TR1=1; //开计数器1
a=1; //计价单元显示
while(1)
{
if(yijian()==1) //按下一键,每过10秒循环显示路程和总价
{
a=3;
}
if(erjian()==1) //按下二键,暂停/开始
{
TR1=~TR1;
}
if(shangjian()==1) //按下三键,停止
{
k=~k;
if(k==1) //第一次按下,停止计价
{
TR1=0;
a=4;
}
if(k==0) //第二次按下,显示时间,数据清0
{
a=0;
lucheng[5]=0;
lucheng[6]=18;
lucheng[7]=0;
zongjia[0]=18;
zongjia[1]=0;
zongjia[5]=0;
zongjia[6]=18;
zongjia[7]=0;
break;
}
}
}
}
gaijia() //改价子程序
{
a=2; //改价显示
i=8;
while(1)
{
if(shangjian()==1) //三键按下,退出程序
goto loop;
if(erjian()==1) //二键按下,进入输密码程序
{
if(mi()==1) //密码正确,跳出循环
{
a=2;
break;
}
else
{
a=0;goto loop; //密码错误,退出
}
}
if(yijian()==1) //按下一键,进入改密码单元
{
gaimi();
goto loop;
}
}
for(i=7;i>=0;i--) //循环8次
{
if(i==5|i==2) continue; //如果是第二位或第五位,不改
if((i==7|i==4|i==1)&jiage[i]<18) jiage[i]=18; //一、四、七位显示小数点
while(1)
{
if(shangjian()==1) //按下三键,价格减1
{
jiage[i]--;
if(jiage[i]<0|jiage[i]==17)
jiage[i]=jiage[i]+10;
}
if(erjian()==1) //按下二键,价格加1
{
jiage[i]++;
if(jiage[i]==10|jiage[i]==28)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -