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

📄 kaiji.c

📁 这是我自己编写的在LCD上模拟windows开关机的c程序。仿真通过。希望对初学者有一些帮助。
💻 C
字号:
#include "absacc.h"
#include "stdarg.h"
#include "reg52.h"
#include "intrins.h"
#include "math.h"
#include "stdio.h"
#include "zimo.h"
#include "t6963c.h"

#define p1 P1

#define ulong unsigned long
#define uint  unsigned int 
#define uchar unsigned char

 uchar xx[]={48,49,50,51,52,53,54,55,56,57};
 uchar buf=-1,jj=6,ii=0;
 uchar pass[]={6,6,6,6,6,6};
 uchar passbuf[]={0,0,0,0,0,0};

/************************************************/
/* 键盘程序*/
/************************************************/
 uchar keyget()
{  
	uchar scancode,tmpcode;
	
		{
	    scancode = 0xfe;
		while((scancode&0x10)!=0)
			{
			p1=scancode;
			if((p1&0xf0)!=0xf0)
				{
			    tmpcode =(p1&0xf0)|0x0f;
				return((~scancode)+(~tmpcode));
				}
			else scancode = (scancode<<1)|0x01;
		    }
		}
	
	return(0);   
}
/************************************************/
/* 键盘产生及键值判断 */
/************************************************/
void getdata()interrupt 0 using 0
{
 uchar key;
 if(p1!=0xf0)
 shortdelay(500);
 if(p1!=0xf0)
 {key=keyget();
 switch(key)
	{ 
    case 0x11:buf=7;break;
    case 0x21:buf=4;break; 
    case 0x41:buf=1;break;
    case 0x12:buf=8;break;
    case 0x22:buf=5;break;
    case 0x42:buf=2;break;
    case 0x82:buf=0;break;
    case 0x14:buf=9;break;
    case 0x24:buf=6;break;
	case 0x44:buf=3;break;
	case 0x81:buf=0x0f;break;
	case 0x84:buf=0x0a;break;
	case 0x18:buf=0;break;
	case 0x28:buf=0;break;
	case 0x48:buf=0;break;
	case 0x88:buf=0;break;
		default:break;
	}	
		jj++;
		jj++;
		passbuf[ii]=buf;
		ii++;
		p1=0xf0;}
	 
}     
void main(void) 
{  	
   uchar x=0;
   unsigned char i,j,k=1;
   EA=1;
   EX0=1;
   p1=0xf0;		  //查询键盘用
    { shortdelay(1200);
      fnLCMInit();	   //初始化画面
      cls(0);
      cursor(0,0);
	  cls(1);
	  for(i=120;i>0;i--)
	    {Linexy(i,0,i,64,0);
     	 Linexy(240-i,0,240-i,64,0);
		}
		Linexy(0,0,0,64,0);
	  for(i=65;i<=85;i++)
	    {dispchar(8,1,i);
		 dispchar(10,1,i+1);
		 dispchar(12,1,i+2);
		 dispchar(14,1,i+3);
		 dispchar(16,1,151-i);
		 dispchar(18,1,152-i);
		 dispchar(20,1,153-i);
		 dispchar(12,2,150-i);
		 dispchar(14,2,154-i);
		shortdelay(500);}
		 dispchar(8,1,87);
		 dispchar(10,1,69);
		 dispchar(12,1,76);
		 dispchar(14,1,67);
		 dispchar(16,1,79);
		 dispchar(18,1,77);
		 dispchar(20,1,69);
		 dispchar(12,2,71);
		 dispchar(14,2,79);
		 shortdelay(6000);
	   for(i=0;i<32;i++)
	     dispchar(i,3,62);
	   cls(0);
   	  for(i=0;i<4;i++)
	   {for(x=60;x<=180;x=x+4)		
		 {Linexy(60,36,180,36,8); // 横线
	      Linexy(60,44,180,44,8); // 横线
		  Linexy(60,36,60,44,8); // 竖线
		  Linexy(180,36,180,44,8); // 竖线
	      Linexy(x,37,x,43,8);
		  Linexy(x+2,37,x+2,43,8);
		  Linexy(x+4,37,x+4,43,8);
		  Linexy(x+6,37,x+6,43,8);
		  Linexy(x+8,37,x+8,43,8);
	      Linexy(x,37,x,43,0);
		  Linexy(x+2,37,x+2,43,0);
		  Linexy(186,37,186,43,0);
		  Linexy(184,37,184,43,0);
		  Linexy(188,37,188,43,0);
		  if(x==60)
		   dprintf(9,1,"start .     ");
		  if(x==88)
		   dprintf(9,1,"start ..");
		  if(x==120)
		   dprintf(9,1,"start ...");
		  if(x==152)
		   dprintf(9,1,"start ....");
		  }		
	    }
	 cls(0);
	  for(x=0;x<29;x++)			  //人头滑动
	   { shortdelay(500);
	     dprintf(x-2,3,"欢迎使用");
		 dprintf(x-3,3," ");
		 for(i=x*8-8;i<x*8;i++)
	     Linexy(i,0,i,30,0);
		disppic(img0,x,0);
		}
	
	cls(0); 
		i=0;
	  	do 
		 {dprintf(4,0,"请输入密码:"); //密码输入界面
	        Linexy(65,46,150,46,8);// 横线
		    dispchar(jj,2,xx[buf]);
		    if(ii==6)
		     {jj=6;
		      ii=0;
			  buf=-1;
		      for(j=0;j<6;j++)
		    {if(pass[j]!=passbuf[j])
			 break;
			    ;    }
			 if(j==6)
			 {cls(0);
			  dprintf(4,0,"密码正确!");
			  shortdelay(2000);
			  k=0; }
			 else
			 {cls(0);
			  dprintf(4,0,"密码错误!");// 返回重新输入
			  i++;
			   if(i==3)
			   { dprintf(12,0,"密码锁启动");	 //三次不对自动关机
			     dprintf(10,1,"即将关机!");
				 shortdelay(2000);
				 cls(0);
				 dprintf(13,1,"B");
				 shortdelay(2000);
				 dprintf(15,1,"y");
				 shortdelay(2000);
				 dprintf(17,1,"e");
				 shortdelay(2000);
				 dprintf(19,1,"!");
				 shortdelay(2000);
				 for(i=0;i<=120;i++)	 //拉屏关闭
				  { Linexy(i,0,i,64,8); // 竖线
	                Linexy(240-i,0,240-i,64,8); //竖线		
				   }
				   while(1)
				   cls(0); } //
			  shortdelay(2000);
			  dprintf(4,0,"请重新输入:");
			  shortdelay(2000);
			  }
		    }
	   }
	   while(k);
	    for(x=60;x<=170;x=x+1)				//第三画面 画进度条			   
		{dprintf(4,0,"正在加载个人设置……"); 
	     Linexy(60,36,180,36,8); // 横线
	     Linexy(60,44,180,44,8); // 横线
		 Linexy(60,36,60,44,8); // 竖线
		 Linexy(180,36,180,44,8); // 竖线
	     Linexy(x,38,x+10,38,8);
		 Linexy(x,40,x+10,40,8);
		 Linexy(x,42,x+10,42,8);
		 Linexy(x,39,x+10,39,8);
		 Linexy(x,41,x+10,41,8);
		 shortdelay(10);}
		 }
		cls(0);
		dprintf(0,2,"请输入提示语:");
		shortdelay(4000);
		dprintf(15,2,"老");
	    shortdelay(4000);
	    dprintf(17,2,"板");
	    shortdelay(4000);
	    dprintf(19,2,"是");
	    shortdelay(4000);
	    dprintf(21,2,"傻");
	    shortdelay(4000);
	    dprintf(23,2,"吊");
		shortdelay(4000);
		for(x=202,i=57;x<=208,i<=64;i++,x++) //画叉号
		  {Linexy(201,56,x,i,8);		    
		   shortdelay(500);} 
		for(x=201,i=64;x<=209,i>=56;x++,i--)
		  {Linexy(200,64,x,i,8);
		    shortdelay(500);}
		shortdelay(2000);
		cls(0);
		dprintf(8,1,"提示错误");
		dprintf(7,2,"请重新输入!");
		shortdelay(2000);
		cls(0);
		dprintf(0,2,"请输入提示语:");
		 shortdelay(4000);
		dprintf(15,2,"小");
	    shortdelay(4000);
	    dprintf(17,2,"强");
	    shortdelay(4000);
	    dprintf(19,2,"是");
	    shortdelay(4000);
	    dprintf(21,2,"傻");
	    shortdelay(4000);
	    dprintf(23,2,"吊");
		shortdelay(4000);
		for(x=203,i=58;x<=205,i<=60;i++,x++) //画对号
		  {Linexy(202,57,x,i,8);		    
		    shortdelay(500);} 
		for(x=206,i=60;x<=211,i>=55;x++,i--)
		  	{Linexy(205,61,x,i,8);
		     shortdelay(500);}
		shortdelay(2000);
		cls(0);
		dprintf(8,2,"提示正确!");
		shortdelay(2000);
		cls(0);
		while(1)
		{disppic(img1,6,10);
		 disppic(img2,6,10);
		 disppic(img3,6,10);
		 disppic(img4,6,10);
		 disppic(img5,6,10);
		 disppic(img6,6,10);
		 disppic(img7,6,10);
		 disppic(img8,6,10);
		 disppic(img9,6,10);
		 disppic(img10,6,10);
		 disppic(img11,6,10);
	    } 
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -