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

📄 subprogram.h

📁 用SL811做USB主机的源码
💻 H
字号:
/*const unsigned char  codeTab[]={  
	  		   		 	    0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,
         			    // ;0	,1   ,2	  ,3   ,4   ,5   ,6   ,7   ,8   ,9
          			        0xe3,0x85,0x71,0x61,0xf5,0xff,0x89,0xd5,0xc5,0x00,};
         			    // ;L   ,d   ,F   ,E   ,r   ,Dark,y   ,n   ,o	  ,8.
const unsigned char dot[10]={0};
const unsigned char Max[10]={0};



unsigned char bits[8],key_times,p_old,d_old,var_temp;
unsigned int vars[11]={1234};
struct flags {unsigned bit0:1;
	   		  unsigned bit1:1;
			  unsigned bit2:1;
			  unsigned bit3:1;
			  unsigned bit4:1;
	   		  unsigned bit5:1;
			  unsigned bit6:1;
			  unsigned bit7:1;
			  }userflag;		  
#define send_Enable userflag.bit0
#define key_close userflag.bit1
#define key_open userflag.bit2
#define	setup userflag.bit3
#define ready_adc userflag.bit4
#define open_adc userflag.bit5
#define close_adc userflag.bit6
*/
void key_0(void)
{

if (setup) {vars[var_temp]=vars[var_temp]%1000*10+0;}
}
void key_1(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+1;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_2(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+2;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_3(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+3;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_4(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+4;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_5(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+5;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_6(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+6;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_7(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+7;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_8(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+8;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_9(void)
{if (setup) {vars[var_temp]=vars[var_temp]%1000*10+9;}
//	else {	Num=OpenFile((uint8*)&usb_data[0]);
}
void key_d(void)
{ OCR3C= OCR3C-2;
  vars[0]=OCR3C;
}
void key_l(void)
{ OCR3C= OCR3C+2;
  vars[0]=OCR3C;
}
void key_f(void)
{unsigned char temp;
 unsigned int i;

//		temp=ReadFile4Print("ABCDEFGHBIN"); 
 //zxf
// for (i=0;i<512;i++) usb_data[i]=ReadBlockData[i];
//		printf("read file return %x\n",temp);
 		
}
void key_clr(void)
{if (setup) {vars[var_temp]=0;}}
void key_left(void)
{var_temp++;
 if (setup)
 	{if (var_temp==11) var_temp=5;}
 else {if (var_temp==5) var_temp=0;}
}
void key_right(void)
{if (setup)
 	  {if (var_temp==5) {var_temp=11;}}
 else {if (var_temp==0) {var_temp=5;}}
 var_temp--;
}
void key_set(void)
{unsigned char n,temp,bak;
 unsigned int i;

 setup=~setup;
 if (setup)
 	{var_temp=5;
	}
 else { var_temp=0;
 
 	    USB_address=vars[5];
		
  		 n=vars[6];
  		 temp=OpenFile(&Fat_data[n*32]);
		 ReadFile(temp,USB_address,usb_data,512);
		 CloseFile(temp);
		 page=2;
 	  }
 }
void key_dian(void)
{
  	 put_u1(9);//

}
void key_try(void)
{wrfile();
}

void key_bak1(void)
{}
void key_bak2(void)
{}
void key_bak3(void)
{}
void key_bak4(void)
{}
void key_bak5(void)
{}

void Scankey(unsigned char i,unsigned char j)
{static unsigned char key_times=0;

	if (key_close)	   
	   	{if ((i==p_old)&(j==0xff)) key_open=1;}
	else {if (j!=0xff)
		 	 {if ((p_old==i)&(d_old==j))
			 	 {key_times++;
				 if (key_times==8)
				 	{key_times=0;key_close=1;}
				 }	
			  else {p_old=i;d_old=j;}	 
			 }
		 } 
}

void SPI(void)
{unsigned char temp=0,key_value=0;
static unsigned char position=0;
	   	 position++;
		 if (position==8) position=0;

	   	 if (0)
		 	{temp=codeTab[bits[position]];}
		 else
		 	{switch (Max[var_temp])
		   		   {case 1:bits[1]=15;bits[2]=15;bits[3]=15;break;
		   			case 2:bits[2]=15;bits[3]=15;break;
		   			case 3:bits[3]=15;break;
					default:break;}			//数字位数限制
		 	temp=codeTab[bits[position]];
		 	if (((position==dot[var_temp])&(dot[var_temp]!=0))
			   |((position==6)&(var_temp<5))) --temp; 	//小数点处理
		 	}
			
		 PORTB|=(1<<0);//关显示,消隐
		 SPDR=~(1<<position);
		 while (!(SPSR&(1<<SPIF)));
		 key_value=SPDR;	//读入按键的外部数据.
		 SPDR=temp;
		 while (!(SPSR&(1<<SPIF)));
		 temp=SPDR;	
		 PORTB&=(~(1<<0));//开显示
		 Scankey(position,key_value);			
}
void dealkey(void)
{
 	 if (key_open)
	 	{switch (p_old){
				case 0:switch (d_old){
					 		   case 0b01111111:  key_0();break;
							   case 0b10111111:	 key_8();break;
							   default:			 key_left();break;
							   };break;
		 		case 1:	switch (d_old){
					 		   case 0b01111111:  key_7();break;
							   case 0b10111111:	 key_dian();break;
							   default:			 key_bak1();break;
							   };break;
				case 2:switch (d_old){
					 		   case 0b01111111:  key_6();break;
							   case 0b10111111:	 key_f();break;
							   default:			 key_bak2();break;
							   };break;
		 		case 3:	switch (d_old){
					 		   case 0b01111111:  key_5();break;
							   case 0b10111111:	 key_set();break;
							   default:			 key_bak3();break;
							   };break;
				case 4:switch (d_old){
					 		   case 0b01111111:  key_4();break;
							   case 0b10111111:	 key_l();break;
							   default:			 key_bak4();break;
							   };break;
		 		case 5:	switch (d_old){
					 		   case 0b01111111:  key_3();break;
							   case 0b10111111:	 key_right();break;
							   default:			 key_bak5();break;
							   };break;
				case 6:switch (d_old){
					 		   case 0b01111111:  key_2();break;
							   case 0b10111111:	 key_d();break;
							   default:			 key_try();break;
							   };break;
		 		case 7:	switch (d_old){
					 		   case 0b01111111:  key_1();break;
							   case 0b10111111:	 key_9();break;
							   default:			 key_clr();break;
							   };break;
				default:	   break;
				}
		 key_open=key_close=0;}
}

void LED(void)
{	dealkey();
	bits[0]=vars[var_temp]%10;
	bits[1]=vars[var_temp]%100/10;
	bits[2]=vars[var_temp]%1000/100;
	bits[3]=vars[var_temp]%10000/1000;
	
	if (setup)
	     {bits[6]=(var_temp-5)%10;
	      bits[7]=(var_temp-5)/10;
		  bits[5]=15;}
	else {bits[5]=var_temp;
	      bits[6]=18;
		  bits[7]=17;}
}

⌨️ 快捷键说明

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