void ee_Erase(void)
{
	uint16_t i;
	uint8_t buf[EE_SIZE];
	
	/* 填充缓冲区 */
	for (i = 0; i < EE_SIZE; i++)
	{
		buf[i] = 0xFF;
	}
	
	/* 写EEPROM, 起始地址 = 0,数据长度为 256 */
	if (ee_WriteBytes(buf, 0, EE_SIZE) == 0)
	{
		printf("擦除eeprom出错!\r\n");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,110,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,110,"擦除EEPROM出错!",RED);			
		#endif 
		return;
	}
	else
	{
		printf("擦除eeprom成功!\r\n");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,110,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,110,"擦除EEPROM成功!",BLUE);			
		#endif 
	}
}
 void Lcd_List(char page)
{	

#ifdef WORD_MODE				//文字版
	char i;
	char lcd_char[28];												//+4是为了预留空间的实验编号
	
	
	select_index_boardtest=0;														//重新显示新的一页时重置select_index
	Lcd_GramScan( 1 );												//设置扫描方向
	LCD_Clear(12,86,206,145,BACKGROUND);
	
	
	sprintf(lcd_char,"第 %0d/%0d 页",current_page_boardtest,all_page_boardtest);		//显示页码
	LCD_DispEnCh(30,235,(const uint8_t *)lcd_char,BLUE);
		
	/* 打开playlist,读取音频文件名 */
	for(i=0;(i+PER_PAGE*(page-1))<TEST_NUM && i< PER_PAGE;i++)								//仅显示第一页
	{	
	
		sprintf(lcd_char,"%0d.%s",PER_PAGE*(page-1)+i+1,test_name[(PER_PAGE*(page-1) + i)]);			//拼接出歌曲列表
		
		LCD_DispEnCh(22,87+i*18,(const uint8_t *)lcd_char,BLACK);										//显示

	}	
	
#else			//图标版
	char i;
	char lcd_char[28];												//+4是为了预留空间的实验编号
	char pic_name[50];
	
	select_index_boardtest=0;														//重新显示新的一页时重置select_index
	Lcd_GramScan( 1 );												//设置扫描方向
	LCD_Clear(12,94,212,160,BACKGROUND);//BLUE BACKGROUND
	
	
	sprintf(lcd_char,"第 %0d/%0d 页",current_page_boardtest,all_page_boardtest);		//显示页码
	LCD_DispEnCh(30,235,(const uint8_t *)lcd_char,BLUE);
		
	/* 打开playlist,读取音频文件名 */
	for(i=0;(i+PER_PAGE*(page-1))<TEST_NUM && i< PER_PAGE;i++)								//仅显示第一页
	{		
		sprintf(pic_name,"/boardtest/ISO_MINI/ui_test%d.bmp",PER_PAGE*(page-1)+i+1);

		if(i<=((PER_PAGE/2)-1))
		{
				Lcd_show_bmp(160, 166-(70*i),pic_name);
		}
		else
		{
				Lcd_show_bmp(91, 166-(70*(i-(PER_PAGE/2))),pic_name);

			}
	}		
	
#endif

}
Beispiel #3
0
/*
 * 要想图片显示成功
 * 需把字库拷贝到sd卡上,然后把sd卡插到开发板的卡槽上
 */
int main(void)
{

	
		LCD_Init();	
		LCD_Clear(0, 0, 240, 320, BACKGROUND);		
		  
		/* USART1 config */
		//USART1_Config();  
		//printf("\r\n this is a fatfs test demo \r\n");
		
	/* 初始化sd卡文件系统,因为汉字的字库放在了sd卡里面 */
		Sd_fs_init();	
	
		/* 设置Lcd Gram 扫描方向为: 左上角 -> 右下角*/
		//Lcd_GramScan( 1 );
		LCD_DispStr(5, 5, (uint8_t *)"fatfs init success", RED);
		LCD_DispStr(5, 25, (uint8_t *)"insure the sdcard has insert......", RED);
	
	  LCD_DispStrCH(50, 50, (uint8_t *)"野火开发板", RED);
	  LCD_DispEnCh(5, 90, "Welcome to use 野火 ISO Stm32 开发板 bigo------", RED);
	
		/* 显示BMP图片 */
		Lcd_show_bmp(0, 0,"/wildfire.bmp");
		Lcd_show_bmp( 10,10,"/pic1.bmp");		
    Lcd_show_bmp( 170,0,"/pic2.bmp");  
	
		while(1);
}
Beispiel #4
0
void ADC_Test(void)
{
  // 局部变量,用于保存转换计算后的电压值 	 
  float ADC_ConvertedValueLocal; 
	
		#ifdef LCD_DISPLAY
			uint8_t lcd_char[20];
		#endif
  
  /* enable adc1 and config adc1 to dma mode */
	ADC1_Init();
	
	printf("\r\n ----这是一个ADC实验(DMA传输)----\r\n");
	
	while (1)
	{
		ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3; // 读取转换的AD值
	
		printf("\r\n The current AD value = 0x%04X \r\n", ADC_ConvertedValue); 
		printf("\r\n The current AD value = %f V \r\n",ADC_ConvertedValueLocal); 
		
		#ifdef LCD_DISPLAY
			sprintf(lcd_char,"电压值:%f V",ADC_ConvertedValueLocal);
			LCD_DispEnCh(20,150,lcd_char,BLUE);		

		#endif
		
		ADC_Delay(0x4fffee);  
	}
}
void Lcd_Note(uint8_t test_num)
{
	uint8_t lcd_char[50];
	Lcd_GramScan( 1 );												//设置扫描方向
	LCD_Clear(12,86,206,165,BACKGROUND);			//清除屏幕
	
//	LCD_Clear(12,72,215,152,BACKGROUND);							//RED	 清除				
	//LCD_DispEnCh(50,90,test_name[test_num-1],RED);	
	
	sprintf(lcd_char,"%s程序运行中:",test_name[test_num-1]);

	LCD_DispEnCh(15,90,lcd_char,BLACK);		
	
	
	LCD_DispEnCh(10,230,"软件或硬件复位返回选择界面",BLACK);	
	
	



}
/**
  * @brief  lcd_list 显示歌曲列表
  * @param  歌曲列表的页码
  * @retval none
  */
static void lcd_list(char page)
{	
	char i;
	char music_name[MUSIC_NAME_LEN];	
	char lcd_char[MUSIC_NAME_LEN+4];					//+4是为了预留空间的歌曲编号
	FIL name_file;
	
	
	select_index=0;														//重新显示新的一页时重置select_index
	Lcd_GramScan( 1 );												//设置扫描方向
	LCD_Clear(12,86,206,145,BACKGROUND);
	
	
	sprintf(lcd_char,"第 %0d/%0d 页",current_page,all_page);		//显示页码
	LCD_DispEnCh(30,235,(const uint8_t *)lcd_char,BLUE);
	

	sprintf(lcd_char,"音量:%2d",voice);													//显示音量
	LCD_DispEnCh(155,235,(const uint8_t *)lcd_char,BLUE);
	
	
	/* 打开扫描记录到的歌单 */ 
	fres = f_open (&name_file, "0:mp3player/lcdlist.txt", FA_READ);	
	
	/* 打开playlist,读取音频文件名 */
	for(i=0;(i+8*(page-1))<file_num && i< 8;i++)								//仅显示第一页
	{	
		fres = f_lseek (&name_file, (8*(page-1) + i)*FILE_NAME_LEN);			//文件中的歌曲名按FILE_NAME_LEN来偏移
		fres = f_read(&name_file, music_name, MUSIC_NAME_LEN, &rw_num);		//只读取MUSIC_NAME_LEN长度的字符,太长的话LCD不够空间显示
		
		music_name[MUSIC_NAME_LEN-1]='\0';												//把最后一个元素设置为'\0'防止没有结束符号而溢出
		
		sprintf(lcd_char,"%0d.%s",8*(page-1)+i+1,music_name);			//拼接出歌曲列表
		
		LCD_DispEnCh(22,87+i*18,(const uint8_t *)lcd_char,RED);										//显示

	}
	
	fres = f_close (&name_file);
}
/*
 * 函数名:Time_Display
 * 描述  :显示当前时间值
 * 输入  :-TimeVar RTC计数值,单位为 s
 * 输出  :无
 * 调用  :内部调用
 */	
void Time_Display(uint32_t TimeVar,struct rtc_time *tm)
{
	   static uint32_t FirstDisplay = 1;
	   uint32_t BJ_TimeVar;
	   uint8_t str[15]; // 字符串暂存  	
	
		#ifdef LCD_DISPLAY
		
		
		uint8_t lcd_char[70];
		#endif

	   /*  把标准时间转换为北京时间*/
	   BJ_TimeVar =TimeVar + 8*60*60;

	   to_tm(BJ_TimeVar, tm);/*把定时器的值转换为北京时间*/	
	
	  if((!tm->tm_hour && !tm->tm_min && !tm->tm_sec)  || (FirstDisplay))
	  {
	      
	      GetChinaCalendar((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str);	
					printf("\r\n 今天新历:%0.2d%0.2d,%0.2d,%0.2d", str[0], str[1], str[2],  str[3]);
	
	      GetChinaCalendarStr((u16)tm->tm_year,(u8)tm->tm_mon,(u8)tm->tm_mday,str);
					printf("\r\n 今天农历:%s\r\n", str);
	
	     if(GetJieQiStr((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str))
					printf("\r\n 今天农历:%s\r\n", str);
	
	      FirstDisplay = 0;
	  }	 	  	

		#ifdef LCD_DISPLAY
		
		
		sprintf(lcd_char,"%d年(%s年)%d月%d日(星期%s) %0.2d:%0.2d:%0.2d" ,tm->tm_year, zodiac_sign[(tm->tm_year-3)%12], tm->tm_mon, tm->tm_mday, 
	                    WEEK_STR[tm->tm_wday], tm->tm_hour, 
	                    tm->tm_min, tm->tm_sec);
		
		LCD_DispEnCh(20,180,lcd_char,BLUE);		

		
		#endif
		
		
	  /* 输出时间戳,公历时间 */
	  printf(" UNIX时间戳 = %d 当前时间为: %d年(%s年) %d月 %d日 (星期%s)  %0.2d:%0.2d:%0.2d\r",TimeVar,
	                    tm->tm_year, zodiac_sign[(tm->tm_year-3)%12], tm->tm_mon, tm->tm_mday, 
	                    WEEK_STR[tm->tm_wday], tm->tm_hour, 
	                    tm->tm_min, tm->tm_sec);
}
/* 
 * ISO 自动整板测试 
 */
void ISO_AutoTest(void)
{
	uint32_t i=0x10ffff;
	uint8_t board_state = 1;
	uint8_t board_test = 0x55;
	
  /* 液晶初始化先于串口,不然会有bug,至于是什么原因我也不知道:( */
  LCD_Init();
	
	USART1_Config();	
	
		/* 初始化sd卡文件系统,因为汉字的字库放在了sd卡里面 */
	Sd_fs_init();	
  
	LCD_Clear(0,0,240,320,WHITE);
	
	LCD_DispStr(50,10,"ISO board auto test ",BLUE);
	
  USART1_Config();			
	
	SysTick_Init();
	
	/* LED 端口初始化 */
	LED_GPIO_Config();	
	
	LED1_ON;
	LED2_ON;
	LED3_ON;
	
	/*按键*/
	Key1_GPIO_Config();
  Key2_GPIO_Config();
	
	
	/* EEPROM测试 */
	LCD_DispEnCh(20,40,"1.EEPROM 自检中",BLUE);
	/*-----------------------------------------------------------------------------------*/  
  if (EEPROM_AutoTest() == 0) //坏
	{
		board_state = 0;	
		LCD_DispEnCh(20,40,"1.EEPROM 检测失败!",RED);
	}
	else
	{
		LCD_DispEnCh(20,40,"1.EEPROM 检测通过!",BLUE);

	}		

	/* FLASH 测试 */
	
	LCD_DispEnCh(20,70,"2.FLASH 自检中",BLUE);
	
	if(FLASH_AutoTest() == 0) //坏
	{
		board_state = 0;
		LCD_DispEnCh(20,70,"2.FLASH 检测失败!",RED);
	}
	else
	{
		LCD_DispEnCh(20,70,"2.FLASH 检测通过!",BLUE);

	}
	
	/* RTC测试 */
	
	LCD_DispEnCh(20,100,"3.RTC 自检中",BLUE);
	
	if(RTC_AutoTest() == 0) //坏
	{
		board_state = 0;
		LCD_DispEnCh(20,100,"3.RTC 检测失败!",RED);
	}
	else
	{
		LCD_DispEnCh(20,100,"3.RTC 检测通过!",BLUE);

	}
	
		/* FM测试 */
	
	LCD_DispEnCh(20,130,"4.FM 自检中",BLUE);
	
	if(RDA5807_FM_AutoTest() == 0) //坏
	{
		board_state = 0;
		LCD_DispEnCh(20,130,"4.FM检测失败!",RED);
	}
	else
	{
		LCD_DispEnCh(20,130,"4.FM检测通过",BLUE);

	}
	/* mp3 sd 喇叭测试 */
	/* 关闭systick定时器 以免影响mp3播放效果*/
	SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
	
	LCD_DispEnCh(20,160,"5.MP3及喇叭自检中",BLUE);
	
	if(MP3_AutoTest() == 0) //坏
	{
		board_state = 0;
		LCD_DispEnCh(20,160,"5.sd 卡错误!!!            ",RED);
	}
	else
	{
		LCD_DispEnCh(20,160,"5.请确认喇叭是否有声音",BLUE);

	}	
	
		
	if(board_state == 0)// 测试不通过
	{
			LCD_DispEnCh(20,220,"自检测试不通过!!!",RED);
			while(1);
		}
		
	/* 按键测试 */
	LCD_DispEnCh(20,190,"6.请检查按键及led灯 ",BLUE);			

		
	while(i--)
	{
		/* 按键测试 */
		if(	Key_Scan(GPIOA,GPIO_Pin_0) == KEY_ON)
		{	
				key_state =~key_state;
				LED1_TOGGLE;
				LED2_TOGGLE;
				LED3_TOGGLE;
			
			}
		
		if(	Key_Scan(GPIOC,GPIO_Pin_13)== KEY_ON)
		{
				key_state =~key_state;
				LED1_TOGGLE;
				LED2_TOGGLE;
				LED3_TOGGLE;

			}
	}	
	
   
	ee_WriteBytes(&board_test,0,1); //自测成功,写入标记
	Soft_Reset();	

}
/*
 * 根据串口不同的命令执行不同的程序
 * 用户也可以自行添加相应的程序
 */
void Board_Test(void)
{  
  while( 1 )
  {    
		
		
    switch( rec_cmd )
    {
		
			
			case 1:					//来自液晶触摸
      case '1':				//来自串口数据
        printf("按回车返回菜单 \r\n");
        printf("实验现象:LED1 LE2 LED3 轮流闪烁 \r\n");
				Lcd_Note(1);
				LCD_DispEnCh(20,110,"实验现象:LED1 LE2 LED3 轮流闪烁",BLUE);		
        LED_Test();         
        break;
      
			case 2:
      case '2':
        printf("按回车返回菜单 \r\n");
        printf("实验现象:KEY1控制LED1反转,KEY2控制LE2反转 \r\n");
				Lcd_Note(2);
				LCD_DispEnCh(20,110,"实验现象:KEY1控制LED1反转,KEY2控制LE2反转",BLUE);		
        Key_Test();        
        break;
      
			case 3:
      case '3':
        printf("按回车返回菜单 \r\n");
        printf("实验现象:串口打印出:eeprom读写测试成功 \r\n");
				Lcd_Note(3);
        Eeprom_Test();
        break;
      
			case 4:
      case '4':
				printf("按回车返回菜单 \r\n");
        printf("实验步骤 \r\n");
        printf("1-按照提示在串口中输入时间\r\n");
        printf("实验现象:串口输出新历农历和时间戳\r\n");
				Lcd_Note(4);
				LCD_DispEnCh(20,110,"实验说明:初始时间为程序固定的时间,若下面显示的时间每秒更新一次则说明RTC模块正常",BLUE);		

        RTC_Test();
        break;
      
			case 5:
      case '5':
        printf("按回车返回菜单 \r\n");
        printf("实验现象:串口每隔一段时间打印出采集到的电压值 \r\n         旋转ISO上的电位器,可使用电压值在0~3.25之间变动\r\n");
				Lcd_Note(5);
				LCD_DispEnCh(20,110,"实验说明:电压范围0-3.3 V,可调整电位器改变电压",BLUE);		
        ADC_Test();   
        break;
			
			case 6:
      case '6':
 				testing_state = SB_FM ;
        printf("按回车返回菜单 \r\n");
        printf("实验步骤 \r\n");
        printf("1-将ISO上的MP3-FM-SPK开关拨到FM档位\r\n");
        printf("2-接上耳机,同时耳机也是天线,当搜不到台的时候可移动耳机线接收信号\r\n");
        printf("实验现象:KEY1向上自动搜台,搜到台LED1亮。KEY2向下自动搜台,搜到台LED2亮 \r\n");
				Lcd_Note(6);
				LCD_DispEnCh(20,110,"实验说明:1-将ISO上的MP3-FM-SPK开关拨到FM档位",BLUE);
				LCD_DispEnCh(20,145,"2-接上耳机,同时耳机也是天线,当搜不到台的时候可移动耳机线接收信号",BLUE);
				LCD_DispEnCh(20,195,"稍后将进入FM收音机界面,硬件复位时返回",BLUE);
//				delay(0xFFFF);
//				delay(0xFFFF);
//				delay(0xFFFF);
//				delay(0xFFFF);
				RDA5807_FM_Test();
        break;
      
			case 7:
      case '7':
    		testing_state=SB_MP3;
        printf("按回车返回菜单 \r\n");
				printf("实验步骤 \r\n");
        printf("1-将ISO上的MP3-FM-SPK开关拨到MP3档位\r\n");
        printf("2-接上耳机,选择音乐即可播放,点击屏幕中的野火logo可以使用扬声器\r\n");
				Lcd_Note(7);
				LCD_DispEnCh(20,110,"实验说明:1-将ISO上的MP3-FM-SPK开关拨到MP3档位",BLUE);
				LCD_DispEnCh(20,145,"2-接上耳机,选择音乐即可播放,点击屏幕中的野火logo可以使用扬声器",BLUE);
				LCD_DispEnCh(20,195,"稍后将进入MP3界面,硬件复位时返回",BLUE);
//				delay(0xFFFF);
//				delay(0xFFFF);
//				delay(0xFFFF);
//				delay(0xFFFF);
				MP3_test();
        break;
      
			case 8:
      case '8':
      	printf("按回车返回菜单 \r\n");
        printf("实验现象:串口打印信息:CAN回环测试成功同时LED1和LED2亮\r\n");
				Lcd_Note(8);
				LCD_DispEnCh(20,110,"实验说明:CAN回环测试,不需要外部接线",BLUE);		
				CAN_Loopback_Test(); 
        break;
      
			case 9:
      case '9':
     
			  printf("按回车返回菜单 \r\n");
        printf("实验步骤 \r\n");
        printf("1-在ISO上插上DHT11模块 \r\n");
        printf("实验现象:串口打印出:湿度为xxxRH,温度为xxx℃ \r\n");
				Lcd_Note(9);
				LCD_DispEnCh(20,110,"实验说明:把DHT11模块接入开发板,正常时在屏幕显示温湿度",BLUE);		
        DHT11_Test();   
		  
        break;
      
			case 10:
      case 'a':
				printf("按回车返回菜单 \r\n");
        printf("实验步骤 \r\n");
        printf("1-在ISO上插上DS18b20模块 \r\n");
        printf("实验现象:串口每隔1s打印一次温度值,同时led1闪烁一次\r\n");
				Lcd_Note(10);
				LCD_DispEnCh(20,110,"实验说明:把DS18b20模块接入开发板,正常时在屏幕显示温度,同时LED闪烁",BLUE);		
				DS18B20_Test(); 
        break;
      
			case 11:
      case 'b': 
				printf("按回车返回菜单 \r\n");
        printf("实验步骤\r\n");
        printf("1-在ISO上插上SD卡,容量需小于32GB\r\n");
        printf("2-用microusb线连接电脑和ISO上的供电的microusb口(并不是 usb to uart) \r\n");
        printf("实验现象:串口会打印出:野火 ISO STM32 USB MASS STORAGE 实验\r\n         LED1闪烁,同时SD卡会在电脑上模拟出一个U盘\r\n");
        Lcd_Note(11);
				LCD_DispEnCh(20,110,"实验说明:1-在ISO上插上SD卡,容量需小于32GB",BLUE);		
				LCD_DispEnCh(20,150,"2-用microusb线连接电脑和ISO上的供电的microusb口(并不是 usb to uart)",BLUE);		
				LCD_DispEnCh(20,195,"正常时LED1闪烁,同时SD卡会在电脑上模拟出一个U盘",BLUE);		
				UsbMassStorage_Test();    

        break;
			
			case 12:
      case 'c':
        printf("按回车返回菜单 \r\n");
        printf("实验步骤 \r\n");
        printf("1-在ISO上插上摄像头模块(火眼OV7725)\r\n");
        printf("实验现象:液晶实时显示摄像头拍回来的图像\r\n");
				Lcd_Note(12);
				LCD_DispEnCh(20,110,"实验说明:把摄像头模块接入到ISO开发板中,正常时稍后液晶会显示摄像头拍回来的图像,使用硬件复位退出",BLUE);		
        delay(0xFFFF);
//				delay(0xFFFF);
//				delay(0xFFFF);
//				delay(0xFFFF);
				Camera_Test();  //采用二、三级代码优化会出错      
        break;
      
			case 13:
      case 'd': 
        printf("按回车返回菜单 \r\n");
        printf("实验步骤 \r\n");
        printf("1-在ISO上插上ENC28J60以太网模块,以太网模块用网线连接电脑或者路由器\r\n");
        printf("2-在DOS模式下输入命令: ping 192.168.1.15 \r\n");
        printf("3-电脑的IP地址或者局域网内的电脑的IP地址必须是192.168.1.x\r\n  但不能是192.168.1.15 \r\n");
        Lcd_Note(13);
				LCD_DispEnCh(20,110,"实验说明:1-在ISO上插上以太网模块,以太网模块用网线连接电脑或者路由器",BLUE);	
				LCD_DispEnCh(20,160,"2-在DOS模式下输入命令: ping 192.168.1.15  (能ping通表示正常)",BLUE);	
				LCD_DispEnCh(20,193,"3-电脑IP地址或者局域网内电脑的IP地址必须是192.168.1.x",BLUE);	

				ENC28J60_Test(); 
        break;
      
     
			case 14:
      case 'e':
        printf("按回车返回菜单 \r\n");
        printf("实验现象:LED1在PWM信号的控制下在呼吸\r\n");
				Lcd_Note(14);
				LCD_DispEnCh(20,110,"实验说明:LED1在PWM信号的控制下在呼吸",BLUE);		
        Breathing_Test();        
        break;
       
			case 15:
      case 'f':
        printf("按回车返回菜单 \r\n");
        printf("实验步骤\r\n");
        printf("1-在ISO上插上SRAM模块\r\n");
        printf("实验现象:串口打印出SRAM测试成功,同时LED2闪烁\r\n");
				Lcd_Note(15);	
				LCD_DispEnCh(20,110,"Please connect SRAM module to ISO board",BLUE);		
				delay(50000);
				SRAM_Test();      
        break;
      
			case 16:
      case 'g':
        printf("按回车返回菜单 \r\n");
        printf("实验步骤\r\n");
        printf("1-在ISO上插上NORFLASH模块\r\n");
        printf("实验现象:串口打印出NORFLASH测试成功,同时LED2闪烁\r\n");
        printf("\r\n 擦除时间有点长,请耐心等待...... \r\n");
				Lcd_Note(16);
				LCD_DispEnCh(20,110,"实验说明:测试时把NORFLASH模块接入到ISO开发板中,擦除时间有点长,请耐心等待......",BLUE);		
        NORFLASH_Test();      
        break;
      
			case 17:
      case 'h':
        printf("按回车返回菜单 \r\n");
        printf("实验步骤\r\n");
        printf("1-在ISO上插上NANDFLASH模块\r\n");
        printf("实验现象:串口打印NANDFLASH Test finished,同时LE1闪烁r\n");
        Lcd_Note(17);
				LCD_DispEnCh(20,110,"实验说明:测试时把NANDFLASH模块接入到ISO开发板中,正常时会显示NANDFLASH的ID",BLUE);		
				NANDFLASH_Test();      
        break;   
           
                        
      default:       
        break;
    }
  }
}
/*
 * eeprom AT24C02 读写测试
 */
void Eeprom_Test(void)
{
  uint16_t i;
	uint8_t write_buf[EE_SIZE];
  uint8_t read_buf[EE_SIZE];
  
/*-----------------------------------------------------------------------------------*/  
  if (ee_CheckOk() == 0)
	{
		/* 没有检测到EEPROM */
		printf("没有检测到串行EEPROM!\r\n");
		
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,128,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,128,"没有检测到串行EEPROM!",RED);			
		#endif 	
		
			
		while (1);	/* 停机 */
	}
/*------------------------------------------------------------------------------------*/  
  /* 填充测试缓冲区 */
	for (i = 0; i < EE_SIZE; i++)
	{		
		write_buf[i] = i;
	}
/*------------------------------------------------------------------------------------*/  
  if (ee_WriteBytes(write_buf, 0, EE_SIZE) == 0)
	{
		printf("写eeprom出错!\r\n");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,128,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,128,"写EEPROM出错!",RED);			
		#endif 	
		
		return;
	}
	else
	{		
		printf("写eeprom成功!\r\n");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,128,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,128,"写EEPROM成功!",BLUE);			
		#endif 	
		
	}
  
  /*写完之后需要适当的延时再去读,不然会出错*/
  ee_Delay(0x0FFFFF);
/*-----------------------------------------------------------------------------------*/
  if (ee_ReadBytes(read_buf, 0, EE_SIZE) == 0)
	{
		printf("读eeprom出错!\r\n");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,146,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,146,"读EEPROM出错!",RED);			
		#endif 
		
		return;
	}
	else
	{		
		printf("读eeprom成功,数据如下:\r\n");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,146,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,146,"读EEPROM成功!",BLUE);			
		#endif 
		
	}
/*-----------------------------------------------------------------------------------*/  
  for (i = 0; i < EE_SIZE; i++)
	{
		if(read_buf[i] != read_buf[i])
		{
			printf("0x%02X ", read_buf[i]);
			printf("错误:EEPROM读出与写入的数据不一致");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,165,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,165,"错误:EEPROM读出与写入的数据不一致!",RED);			
		#endif 
			return;
		}
    printf(" %02X", read_buf[i]);
		
		if ((i & 15) == 15)
		{
			printf("\r\n");	
		}		
	}
  printf("eeprom读写测试成功\r\n");
		#ifdef LCD_DISPLAY
		//	LCD_Clear(20,165,206,16,BACKGROUND);			//清除屏幕
			LCD_DispEnCh(20,165,"EEPROM读写测试成功!",BLUE);			
		#endif 
  while(1);
}