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

📄 main.c

📁 atmega32对ch375的读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	GICR=0x80;                      //开外部中断
	sei();       
	
	
	
    Usart_init();
	tishi();

	 Usart_Send_Str(pstr);
	flag=1;
	key=0xFF;
	hj=0;
	do_flag=0;
	
	j=0;
	f=0;
	c=0;
	
	

	
	
	
	
	CH375_PORT_INIT( );
while(1)
{
while(do_flag)
{
switch(key)
{	
	    case 0x0:
		case 0x1:
		
		
		
		
		case 0x2:
		
		
		
		
		case 0x3:
		
		
		
		case 0x4:
		
		
		
		
		case 0x5:
		case 0x6:
									if((!set_flag)&&(key==0x6))
										{
										

									if (c>503)c=0;
									//p1=&data[c];p2=&data[c+12];p3=&data[c+24];p4=&data[c+36];
									//		dis_str(p1,p2,p3,p4);
									//Start();
									lcd_system1();
									for(char o=0;o<12;o++)
									{name_tem[o]=data[c+o];}
												c=c+12;do_flag=0;
											break;}
		
		
		case 0x7:
		
		case 0x8:
		case 0x9: 
		
												if((!set_flag)&&(key==0x9))
		
												{c=c-12;
													if (c<0||c>503) c=0;
		
											//	Start();
											lcd_system1();
											for(char o=0;o<12;o++)
									{name_tem[o]=data[c+o];}
													do_flag=0;
													break;}
	
												j=0;hj=0;
											if (set_flag){
												if (s5==4)s5=0;
													start_set();}	do_flag=0;break;
		
		
		case 0xd:
													{j=0;hj=0;
												i = CH375LibInit( ); 
															mStopIfError( i );
	
												mDelaymS1( 100 );  
											while ( CH375DiskStatus < DISK_CONNECT ) {  /* 查询CH375中断并更新中断状态,等待U盘插入 */
											if ( CH375DiskConnect( ) == ERR_SUCCESS ) {j=1;break;}  /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */
											mDelaymS1( 100 );
													}
		
												mDelaymS1( 250 ); 
												for ( i = 0; i < 5; i ++ ) { 
											mDelaymS1( 100 );
		
													if ( CH375DiskReady( ) == ERR_SUCCESS ) 
																	{
													break;}  /* 查询磁盘是否准备好 */
																}
		
		
													t=0;
	    
													pCodeStr = (UINT8 *)"/*";
													for ( c = 0; c < 254; c ++ ) {  /* 最多搜索前254个文件 */
											strcpy( (char *)mCmdParam.Open.mPathName, (char *)pCodeStr );  /* 搜索文件名,*为通配符,适用于所有文件或者子目录 */
													i = strlen( (char *)mCmdParam.Open.mPathName );  /* 计算文件名长度,以处理文件名结束符 */
										mCmdParam.Open.mPathName[ i ] = c;  /* 根据字符串长度将结束符替换为搜索的序号,从0到255 */
												i = CH375FileOpen( );  /* 打开文件,如果文件名中含有通配符*,则为搜索文件而不打开 */
													if ( i == ERR_MISS_FILE ) break;  /* 再也搜索不到匹配的文件,已经没有匹配的文件名 */
												if ( i == ERR_FOUND_NAME ) {  /* 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 */
															//printf( "  match file %03d#: %s\n", (unsigned int)c, mCmdParam.Open.mPathName );  /* 显示序号和搜索到的匹配文件名或者子目录名 */
													if (t<504)
																	{
															for (i=0;i<12;t++,i++)		
													data[t]=mCmdParam.Open.mPathName[i];
															//Usart_Send_Data(data,11);
															}
		
			
												continue;  /* 继续搜索下一个匹配的文件名,下次搜索时序号会加1 */
															}
												else {  /* 出错 */
													mStopIfError( i );
																	break;}}
															c=0;
	    
																	lcd("中国地质大学北京","  文件已读取完毕",	"请按键 6或 9选择","    查看文件    ");
	
	
		
		
																		do_flag=0;break;}
		
		
	
		
		case 0xe:
																		{j=0;hj=0;
																set_flag=1;
															s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;x=0;t=0;
																start_set();
		
																	do_flag=0;break;
																	}
		
		
		
		
		case 0xf:
																			j=0;
																				if(set_flag)
																						{
																				h=0;
	
																			name[0]=s2;name[1]=s1;name[2]=s4;name[3]=s3;
																			Start3();
																		s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;x=0;t=0;
																			set_flag=0;
																		}do_flag=0;break;
		
		
		
	 case 0x0a:
						
					
					do_flag=0;
					break;





case 0xb:
	
													{
										  lcd("中国地质大学北京","................",    "  数据传输中....","................");		
										  //lcd("中国地质大学北京","................",	"  数据传输中....","................");
											UDR=0x55;
										while(!(UCSRA&0x20));
												UDR=0x55;
										while(!(UCSRA&0x20));
											UDR=0x55;
											while(!(UCSRA&0x20));
												UDR=0x55;
															while(!(UCSRA&0x20));
																UDR=0x55;
															while(!(UCSRA&0x20));


	   
		
		
											i = CH375LibInit( ); 
												mStopIfError( i );
		
																		mDelaymS1( 100 );  
														while ( CH375DiskStatus < DISK_CONNECT ) {  /* 查询CH375中断并更新中断状态,等待U盘插入 */
														if ( CH375DiskConnect( ) == ERR_SUCCESS ) {j=1;break;}  /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */
															mDelaymS1( 100 );
																}
		
													mDelaymS1( 250 ); 
														for ( i = 0; i < 5; i ++ ) { 
														mDelaymS1( 100 );
				
															if ( CH375DiskReady( ) == ERR_SUCCESS ) 
															{
																		break;}  /* 查询磁盘是否准备好 */
															}
       
	   
	   
	   
																	
															//strcpy( (char *)mCmdParam.Open.mPathName, "/454500.TXT" );
															
															for(char e=0;e<12;e++)
															{
															mCmdParam.Open.mPathName[e]=name_tem[e];
															}
																	i = CH375FileOpen( );
																			for(i=0;i<64;i++)
														{mCmdParam.Read.mSectorCount =1;
																		CH375FileRead();
																		if (s8==0) break;
																//for(t=0;t<512;t++)
																//{data[t]=FILE_DATA_BUF[t];}
																Usart_Send_Data(FILE_DATA_BUF,512);
			
															}
		
																	i = CH375FileClose( );
																mStopIfError( i );
																lcd("中国地质大学北京","................",	"  数据传输结束..","................");
																//lcd("中国地质大学北京","测试波形输出....",	"1 正弦波  2 方波","3 三角波 4......");
																	//tishi1();
																do_flag=0;
																	UDR=0x55;
																while(!(UCSRA&0x20));
																UDR=0x55;
																while(!(UCSRA&0x20));
																UDR=0x55;
															while(!(UCSRA&0x20));
																UDR=0x55;
															while(!(UCSRA&0x20));
																UDR=0x55;
															while(!(UCSRA&0x20));
														//lcd("中国地质大学北京","................",	"....输出完毕....","................");		
															break;
																	}


    case 0x0c:
									{c=0;x=0;hj=0;

										lcd("中国地质大学北京","................",	"  数据传输中....","................");
												i = CH375LibInit( ); 
												mStopIfError( i );
	
													mDelaymS1( 100 );  
										while ( CH375DiskStatus < DISK_CONNECT ) {  /* 查询CH375中断并更新中断状态,等待U盘插入 */
											if ( CH375DiskConnect( ) == ERR_SUCCESS ) {j=1;break;}  /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */
												mDelaymS1( 100 );
											}
		
											mDelaymS1( 250 ); 

   
									for ( i = 0; i < 5; i ++ ) { 
								mDelaymS1( 100 );
		
									if ( CH375DiskReady( ) == ERR_SUCCESS ) 
											{
									break;}  /* 查询磁盘是否准备好 */
											}
 
     

										mDelaymS1( 100 );  
										while ( CH375DiskStatus < DISK_CONNECT ) {  /* 查询CH375中断并更新中断状态,等待U盘插入 */
										if ( CH375DiskConnect( ) == ERR_SUCCESS ) {break;}  /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */
												mDelaymS1( 100 );
															}
		
												mDelaymS1( 250 ); 
											for ( i = 0; i < 5; i ++ ) { 
												mDelaymS1( 100 );
		
												if ( CH375DiskReady( ) == ERR_SUCCESS ) 
												{
												break;}  /* 查询磁盘是否准备好 */
												}
											if (h==100)
											h=0;
											mCmdParam.Create.mPathName[0]='/';       
										mCmdParam.Create.mPathName[1]=name[0]+0x30;         
										mCmdParam.Create.mPathName[2]=name[1]+0x30;   
												mCmdParam.Create.mPathName[3]=name[2]+0x30;         
										mCmdParam.Create.mPathName[4]=name[3]+0x30;
											mCmdParam.Create.mPathName[5]=0X30+h/10;        
										mCmdParam.Create.mPathName[6]=0X30+h%10; 
										mCmdParam.Create.mPathName[7]='.';         
											mCmdParam.Create.mPathName[8]='T';
											mCmdParam.Create.mPathName[9]='X';
										mCmdParam.Create.mPathName[10]='T';
										mCmdParam.Create.mPathName[11]='\0';
														h++;
												i = CH375FileOpen( );  /* 打开文件 */
										if ( i == ERR_SUCCESS ) {  /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */
			
											mCmdParam.Locate.mSectorOffset = 0xffffffff;  /* 移到文件的尾部,CH375子程序库内部是将文件长度按扇区长度512进行取整处理 */
									i = CH375FileLocate( );  /* 以扇区为单位移到文件尾部,如果文件尾部有不足一个扇区的零头数据则被忽略,如果不做处理那么零头数据将可能被写入数据覆盖 */
											mStopIfError( i );
												}
												else if ( i == ERR_MISS_FILE )
												{
												//strcpy( (char *)mCmdParam.Create.mPathName, "\\FF.TXT" );  
											i = CH375FileCreate( ); 
											mStopIfError( i );
												}
											mDelaymS1( 150 );

												UDR=0xFF;
												while(!(UCSRA&0x20));
												UDR=0xFF;
											while(!(UCSRA&0x20));
											UDR=0xFF;
												while(!(UCSRA&0x20));
												
													UDR=0xFF;
												while(!(UCSRA&0x20));
													UDR=0xFF;
												while(!(UCSRA&0x20));
												
												
												//x=0;
												//sei();   
												UCSRB =0x98; 
											while(1&s7)
														{    

											write_times++; 
		
											while(flag&s7);
												flag=1;
												j=1;
											while(j&s7)
															{
											for(t=0;t<512;t++)
												{
												FILE_DATA_BUF[t]=data[t];
														}
													t=0;	 
									mCmdParam.Write.mSectorCount=1;
												CH375FileWrite( ); 
												mCmdParam.Write.mSectorCount=0;
												CH375FileWrite( );
													j=0;
												}    
	  
											if (write_times==64) {
				
											break;}    //Usart_Send_Str(pstr);
		


   
													} 
										write_times=0;
											i = CH375FileClose( );
										mStopIfError( i );
										UCSRB =0x08;
					for(t=0;t<512;t++)
					{
	               data[t]=0;}

										lcd("中国地质大学北京","................",	"  数据传输结束..","................");
				do_flag=0;
					break;}








				default:break;

	





								}//switch
								}//while(do_flag)
					}//while(1)
							}//main














SIGNAL(SIG_UART_RECV)
				{	
	// if (write_times==5)cli();
			data[x]= UDR;
			x++;
	 ///if (x%2)LED_0;
	 //else LED_1;
			if (x==512)  {x=0;flag=0;}
	
		}
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		void DelayMs111(uint i) //1ms 
		{	uint j; 
			for(;i!=0;i--) 
			{for(j=4000;j!=0;j--) 
			{;}
		} 
	} 

	uchar ZLG7290_GetKey(void) 
			{uchar rece; 
			rece=0; 
			rece=twi_read_byte(zlg7290,1);//键值寄存器Key地址是01H,所以此处Address=1;zlg7290为从机 
			DelayMs111(10); 
			return rece; 
			} 
	


















		SIGNAL(SIG_INTERRUPT1)		//INT1为7920送入的中断
		{
		do_flag=1;
	 
		key=ZLG7290_GetKey(); //取得按键数值 
		switch(key)					//在LED上显示键值,原来的值右移一位。	
		{	
		
			case 0x01:key=1;break; 		
			case 0x02:key=2;break;
			case 0x03:key=3;break;	
			case 0x04:key=0xa;s7=0;s8=0;break;	
			case 0x09:key=4;break; 	
			case 0x0A:key=5;break; 
			case 0x0B:key=6;break;								
			case 0x0C:key=0xb;s8=1;break;
			case 0x19:key=0xe;break; 
			case 0x1A:key=0;break; 								 
			case 0x1B:key=0xf;break;
			case 0x1C:key=0xd;break;
			case 0x11:key=7;break;			 						 
			case 0x12:key=8;break;	
			case 0x13:key=9;break;
			case 0x14:key=0xc;s7=1;break;													
			default:key=0xfF;break; 
		}
		
        if(key<0xa)
		set();
		if (set_flag)
		if (s5==5)
		s5=0;
		if (s5!=5)
		s5++;
	
}



⌨️ 快捷键说明

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