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

📄 main.c

📁 CH375移植到S3C44B0
💻 C
📖 第 1 页 / 共 2 页
字号:
	      {   for(i=0;i<MsgCnt;i++)      
	          {   	
	              LCD_PrinSet(0,i*14);
	              LCD_Printf("消息%d:%s\n",(U16)(i+1),MsgBuf[i]);
	          }    
	      }
	      else
	      {   LCD_WritePixel(0,0,320-1,240-16,BmpPt);
	      					//在LCD上面显画面 刷新
	      	  Cnt=MsgCnt-15;
	      	  for(i=0;i<15;i++)      
	          {   	
	              LCD_PrinSet(0,i*14);
	              LCD_Printf("消息%d:%s\n",(U16)(i+Cnt+1),MsgBuf[i+Cnt]);
	          }    
	      }
	}
	if(pt[0]==0xf1)				//按键选择时更新消息的内容
	{
	    LCD_WritePixel(0,0,320-1,240-16,BmpPt);
	    					//在LCD上面显画面 刷新
	    Where=pt[3];			//获取菜单项目有关信息
	    NowMenu=pt[1];
	    if(MsgCnt>0)
	    {
	    	LCD_PrinSet(0,Where*14);
	    	LCD_BGColor =Red;
	    	LCD_Printf("消息%d:%s\n",(U16)(NowMenu+1),MsgBuf[NowMenu]);
	    	LCD_BGColor =Blue;
	    }
	    if(MsgCnt>=2)
	    {
	    	for(i=Where;i>0;i--)	        //显示上半部分菜单选项
		{
		    LCD_PrinSet(0,(i-1)*14);
		    LCD_Printf("消息%d:%s\n",(U16)(NowMenu+1-(Where-i+1)),MsgBuf[NowMenu-(Where-i+1)]);
		    if((NowMenu-Where+i-1)==0)
		    	break;
		}
		for(i=Where+1;i<MaxBar;i++)	//显示下半部分菜单选项
		{   
		    if(NowMenu==MsgCnt-1)
		    	break;
		    LCD_PrinSet(0,i*14);
		    LCD_Printf("消息%d:%s\n",(U16)(NowMenu+1+(i-Where)),MsgBuf[NowMenu+(i-Where)]);
		    if((NowMenu+1+(i-Where))==MsgCnt)
		    	break;
		}
	    }
	}
	if(pt[0]==0xf2)				//消息移动时候恢复
	{
	    Where=pt[3];			//获取菜单项目有关信息
	    ItemBackup=pt[2];
	    NowMenu=pt[1];
	    LCD_PrinSet(0,Where*14);
	    LCD_BGColor =Red;
	    LCD_Printf("消息%d:%s\n",(U16)(NowMenu+1),MsgBuf[NowMenu]);
	    LCD_BGColor =Blue;
	    if(ItemBackup>NowMenu)
	    {
	    	LCD_PrinSet(0,(Where+1)*14);
	    	LCD_Printf("消息%d:%s\n",(U16)(ItemBackup+1),MsgBuf[ItemBackup]);
	    }
	    else if(ItemBackup<NowMenu)
	    {
	    	LCD_PrinSet(0,(Where-1)*14);
	    	LCD_Printf("消息%d:%s\n",(U16)(ItemBackup+1),MsgBuf[ItemBackup]);
	    }
	}
	if(pt[0]==0xA0)
	{
	    LCD_WritePixel(0,0,320-1,240-16,BmpPt);
	    					//在LCD上面显画面 刷新
	    Glib_FilledRectangle(113,91,209,147,High_Low(Green));
	    Glib_Rectangle(113,91,209,147,High_Low(Red));
	    Glib_Line(113,105,209,105,High_Low(Red));
	    Glib_Line(114,148,209,148,Black);
	    Glib_Line(115,149,209,149,Black);
	    Glib_Line(210,91,210,149,Black);
	    FontOver(1);			//叠加显示
	    LCD_TextOut("请选择背景图片:",115,93);		
	    LCD_TextOut(" 2 荷花.BMP ",115,121);
	    LCD_TextOut(" 3 动漫.BMP ",115,134);
	    FontOver(0);		//恢复非叠加显示
	    LCD_BGColor=Purple;
	    LCD_PenColor=Yellow;
	    LCD_TextOut(" 1 青蛙.BMP ",115,108);
	    LCD_PenColor=Black;
	}
	if(pt[0]==0xA1)
	{
	    switch(pt[2])
	    {
	        case 0:
	            LCD_BGColor=Green;
	            LCD_TextOut(" 2 荷花.BMP ",115,121);
	    	    LCD_TextOut(" 3 动漫.BMP ",115,134);
	    	    LCD_BGColor=Purple;
	    	    LCD_PenColor=Yellow;
	    	    LCD_TextOut(" 1 青蛙.BMP ",115,108);
	    	    LCD_PenColor=Black;
	            break;
	        case 1:
	            LCD_BGColor=Green;
	            LCD_TextOut(" 1 青蛙.BMP ",115,108);
	    	    LCD_TextOut(" 3 动漫.BMP ",115,134);
	    	    LCD_BGColor=Purple;
	    	    LCD_PenColor=Yellow;
	            LCD_TextOut(" 2 荷花.BMP ",115,121);
	    	    LCD_PenColor=Black;
	            break;
	        case 2:
	            LCD_BGColor=Green;
	            LCD_TextOut(" 1 青蛙.BMP ",115,108);
	            LCD_TextOut(" 2 荷花.BMP ",115,121);
	    	    LCD_BGColor=Purple;
	    	    LCD_PenColor=Yellow;
	    	    LCD_TextOut(" 3 动漫.BMP ",115,134);
	    	    LCD_PenColor=Black;
	            break;
	    }
	}
	if(pt[0]==0xa2)
	{
	    switch(pt[2])
	    {
	    	case 0:
	           BmpPt=acFROG;
	           break;
	    	case 1:
	    	    BmpPt=acLOTUS;
	    	    break;
	    	case 2:
	    	    BmpPt=acShrek;
	    	    break;
	    }
	    pt=(INT8U *)malloc(6000);
	    LCD_ReadPixel(113,91,210,149,pt);
	    LCD_WritePixel(0,0,320-1,240-16,BmpPt);
	    					//在LCD上面显示新的画面
	    LCD_WritePixel(113,91,210,149,pt);
	    					//恢复原来部分
	    free(pt);				//释放空间
	}
	if(pt[0]==0xa3)
	{
	    RtcGetTime(SysTime);
    	    LCD_PenColor =Black;			 
            LCD_BGColor =White;			
            LCD_PrinSet(68,163);
            LCD_Printf("%04d年%2d月%2d日%02d时%02d分%02d秒",SysTime->year,SysTime->month,SysTime->day,SysTime->hour,SysTime->min,SysTime->sec);
	}
	if(pt[0]==0x01)
	{
	    ErrPt=(INT8U *)malloc(1950);
	    LCD_ReadPixel(113,105,220,122,ErrPt);
	    Glib_FilledRectangle(113,105,220,122,High_Low(Red));
	    LCD_BGColor=Red;
	    LCD_TextOut("提示:U盘读写出错",115,108);
	}
	if(pt[0]==0x02)
	{
	    LCD_WritePixel(113,105,220,122,ErrPt);  //恢复原来部分				
	    free(ErrPt);				//释放空间
	}
	if(pt[0]==0x03)
	{
	    Glib_FilledRectangle(113,105,220,122,High_Low(Red));
	    LCD_BGColor=Red;
	    LCD_TextOut("提示:U盘没有连接",115,108);
	}
	if(pt[0]==0x04)
	{
	    LCD_BGColor=Black;
	    Glib_FilledRectangle(0,0,320-1,240-16,Black);
	    LCD_PenColor=Green;
	    LCD_TextOut("文件<\\Msg.TXT>中记录的信息如下:",0,0);
	    LCD_PrinSet(0,14);
	    LCD_PenColor=White;
            LCD_Printf("%s",FILE_DATA_BUF);
            LCD_PenColor=Black;
	}
    }
}

/**********************************************************************************
文件操作函数,理应放在另一个C文件,此处为了方便。
**********************************************************************************/
UINT8	mCopyCodeStringToIRAM( UINT8 *iDestination, UINT8 *iSource )
{
	UINT8	i = 0;
	while ( *iDestination = *iSource ) 
	{
		iDestination ++;
		iSource ++;
		i ++;
	}
	return( i );
}
//////////////////////////
UINT8 File_Enumer(UINT8 *path,char type)		//0为刷新文件数目;1为枚举文件;返回为文件数目-1(含0开始)
{
	UINT8 i;
	UINT16 j;
	if(type)
		Uart_Printf("Enumer files:");
	for ( j = 0; j < 255; j ++ )  //最多搜索前255个文件
	{ 
		i = mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, path);  //搜索文件名,*为通配符,适用于所有文件或者子目录 
		mCmdParam.Open.mPathName[ i ] = j;  		// 根据字符串长度将结束符替换为搜索的序号,从0到255
		i = CH375FileOpen(); 				// 打开文件,如果文件名中含有通配符*,则为搜索文件而不打开 
		if ( i == ERR_MISS_FILE ) {return(j-1);break;} 	// 再也搜索不到匹配的文件,已经没有匹配的文件名 
		if ( i == ERR_FOUND_NAME ) 			// 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 
		{   
		   if(type)
				Uart_Printf( "%03d:%s", (unsigned int)j, mCmdParam.Open.mPathName );// 显示序号和搜索到的匹配文件名或者子目录名 
			continue;  //继续搜索下一个匹配的文件名,下次搜索时序号会加1 
		}
		else // 出错 
		{  			
			mStopIfError( i );
			break;
		}
	}	
}
/////////////////////////////////////////////////
/* 检查操作状态*/
INT8U Msg[2];
INT8U   Error=0x01;
void	mStopIfError( U8 iError )
{
	if ( iError == ERR_SUCCESS ) return;  /* 操作成功 */
	Error=0x01;
	OSQPost(ReMsgQeue,(void*)&Error);      //发送出错提示
	OSTimeDly(800);
	Error=0x02;
	OSQPost(ReMsgQeue,(void*)&Error);      //发送出错提示
	CH375Reset();           	       //复位CH375芯片
	OSTimeDly(100);
	CH375LibInit();         		//初始化CH375程序库和CH375芯片,操作成功返回0
	Msg[0]=0;
}
/**********************************************************************************
数据保存到U盘的任务。
***********************************************************************************/
void TaskDataSave (void *pdata)
{   
    INT8U i,*pt,err;
    while(1)
    {
    	while ( CH375DiskStatus != DISK_CONNECT )  /* 查询CH375中断并更新中断状态,等待U盘插入 */		
	    OSTimeDly(50);
	for ( i = 0; i < 5; i ++ )
	{  							/* 有的U盘总是返回未准备好,不过可以被忽略 */
	    if ( CH375DiskReady( ) == ERR_SUCCESS ) break;  /* 查询磁盘是否准备好 */
	}
	pt=(INT8U *)OSMboxPend(MyMbox,0,&err);
	
	strcpy( mCmdParam.Open.mPathName, "\\MSG.TXT");  /* 文件名,该文件在根目录下 */
	i = CH375FileOpen();  /* 打开文件 */
        if ( i == ERR_SUCCESS ) 
        {  /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */
	    mCmdParam.ByteLocate.mByteOffset = 0xffffffff;  /* 移到文件的尾部 */
	    i = CH375ByteLocate( );
	}
	else if ( i == ERR_MISS_FILE )
	{  /* 没有找到文件,必须新建文件 */
	//  mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/MY_ADC.TXT" );  /* 文件名,该文件在根目录下,刚才已经提供给CH375FileOpen */
	    i = CH375FileCreate( );  /* 新建文件并打开,如果文件已经存在则先删除后再新建 */
	}
	else 
	    mStopIfError( i );  /* 打开文件时出错 */	    
	i = sprintf( mCmdParam.ByteWrite.mByteBuffer, "%04d年%2d月%2d日%02d时%02d分%02d秒\xd\xa %s \xd\xa",SysTime->year,SysTime->month,SysTime->day,SysTime->hour,SysTime->min,SysTime->sec,pt);
    	mCmdParam.ByteWrite.mByteCount = i;  /* 指定本次写入的字节数,单次读写的长度不能超过MAX_BYTE_IO */
	i = CH375ByteWrite( );  /* 以字节为单位向文件写入数据,单次读写的长度不能超过MAX_BYTE_IO */
	mStopIfError( i );
	mCmdParam.Modify.mFileAttr = 0xff;  /* 输入参数: 新的文件属性,为0FFH则不修改 */
	mCmdParam.Modify.mFileTime = MAKE_FILE_TIME( SysTime->hour,SysTime->min, SysTime->sec );  /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */
	mCmdParam.Modify.mFileDate = MAKE_FILE_DATE(SysTime->year,SysTime->month,SysTime->day);  /* 输入参数: 新的文件日期: 2004.05.18 */
	mCmdParam.Modify.mFileSize =0xffffffff; //输入参数: 新的文件长度,以字节为单位写文件应该由程序库关闭文件时自动更新长度,所以此处不修改
	i = CH375FileModify( );  /* 修改当前文件的信息,修改日期和长度 */
	mCmdParam.Close.mUpdateLen =1;  //自动计算文件长度  
        i = CH375FileClose( );
        mStopIfError( i );
    }
}
/**********************************************************************************
设置任务,现在改为显示时间动态刷新任务。
***********************************************************************************/
void TaskSysSet (void *pdata)			//用于时间的刷新
{   INT8U Temp=0xa3;
    while(1)
    {
    	OSTimeDly(200);
	OSQPost(ReMsgQeue,(void*)&Temp);
    }
}
/***********************************************************************************
FILE_DATA_BUF[];
************************************************************************************/
void TaskDataView (void *pdata)
{
    INT8U i;
    UINT16 SecCount;
    UINT32 NewSize;
    while(1)
    {
    	if(CH375DiskStatus != DISK_CONNECT)
    	    Msg[0]=0x03;
    	else
    	{       Msg[0]=0x04;
    		strcpy( mCmdParam.Open.mPathName, "\\MSG.TXT");  /* 文件名,该文件在根目录下 */
    	     	i = CH375FileOpen( );
    	     	mStopIfError( i );
		if ( CH375vFileSize > FILE_DATA_BUF_LEN ) 
		{ 
			SecCount = FILE_DATA_BUF_LEN / 512;  /* 由于演示板用的62256只有32K字节,其中CH375子程序用512字节,所以只读取不超过63个扇区,也就是不超过32256字节 */
			NewSize = FILE_DATA_BUF_LEN;  /* 由于RAM有限所以限制长度 */
		}
		else 
		{  /* 如果原文件较小,那么使用原长度 */
			SecCount = ( CH375vFileSize + 511 ) >> 9;  /* (CH375vFileSize+511)/512, 计算文件的扇区数,因为读写是以扇区为单位的,先加511是为了读出文件尾部不足1个扇区的部分 */
			NewSize = (UINT16)CH375vFileSize;  /* 原文件的长度 */
		}
		mCmdParam.Read.mSectorCount = SecCount;  /* 读取全部数据,如果超过60个扇区则只读取60个扇区 */
		/*			current_buffer = & FILE_DATA_BUF[0];  如果文件读写的数据的复制方式为"外部子程序",那么需要设置存放数据的缓冲区的起始地址 */
		CH375vFileSize += 511;  /* 默认情况下,以扇区方式读取数据时,无法读出文件尾部不足1个扇区的部分,所以必须临时加大文件长度以读取尾部零头 */
		i = CH375FileRead( );  /* 从文件读取数据 */
		CH375vFileSize -= 511;  /* 恢复原文件长度 */
    	}
    	OSQPost(ReMsgQeue,(void*)Msg);
    	OSTaskDel(OS_PRIO_SELF);
    }
}

⌨️ 快捷键说明

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