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

📄 复件 7.c.bak

📁 刚学时编的小程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
#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 + -