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

📄 main.c

📁 UC/OS 的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
   //RS=0;
  // RW=1;
   while(IO0PIN&0x80)
   {
   	  
      //Dataport=0x00;
      IO1SET = LCD_E;
      //DelayNS(1);
	  	
	  
      IO1CLR = LCD_E;
     
      //dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
     }
    
      //while(1);
      
}




void SendCommandToLCD(uint8 command)	   //写命令到LCD中
{
    CheckState();
    
    IO1CLR = LCD_RS;	 //向LCD发送命令
    IO1CLR = LCD_RW;
    IO0PIN=(IO0PIN & 0xffffff00) | command;	 //command :命令
    IO1SET = LCD_E;
    IO1CLR = LCD_E;
  
}

void SetLine(uint8 page)	//设置页 0xb8是页的首地址
{
  page=0xb8|page; //1011 1xxx		 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
  SendCommandToLCD(page);
}


void SetStartLine(uint8 startline) 	   //设定显示开始行,0xc0是行的首地址
{
  startline=0xc0|startline; //1100 0000
  SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
 }

void SetColumn(uint8 column)	//设定列地址--Y 0-63 ,0x40是列的首地址
{
  column=column &0x3f; //column最大值为64,越出 0=<column<=63
  column= 0x40|column; //01xx xxxx
  SendCommandToLCD(column);
}


 

void SetOnOff(uint8 onoff)	   //开关显示,0x3f是开显示,0x3e是关显示
{
	onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
	SendCommandToLCD(onoff);
}


void WriteByte(uint8 dat)	//写显示数据
{
   CheckState();
   IO1SET = LCD_RS;
   IO1CLR = LCD_RW;
   IO0PIN=(IO0PIN & 0xffffff00) | dat;	//dat:显示数据
   IO1SET = LCD_E;
   IO1CLR = LCD_E;
  }	
	


void SelectScreen(uint8 screen)	  //选择屏幕screen: 0-全屏,1-左屏,2-右屏
{ 						 
   switch(screen)
   { case 0:  IO1CLR = cs1;//全屏
            // _nop_(); _nop_(); _nop_(); 
              IO1CLR = cs2; 
            // _nop_(); _nop_(); _nop_(); 
             break; 
     case 1: IO1CLR = cs1;//左屏
            // _nop_(); _nop_(); _nop_(); 
             IO1SET = cs2;
             //_nop_(); _nop_(); _nop_(); 
             break;
     case 2: IO1SET = cs1;//右屏
            // _nop_(); _nop_(); _nop_(); 
             IO1CLR = cs2;
             //_nop_(); _nop_(); _nop_(); 
             break;
   }
}


void ClearScreen(uint8 screen)	  //清屏screen: 0-全屏,1-左屏,2-右
{ 	
     uint8 i,j;
     SelectScreen(screen);
     
	 for(i=0;i<8;i++)	 //控制页数0-7,共8页
	 {
	        SetLine(i);
			SetColumn(0);
              for(j=0;j<64;j++)	   //控制列数0-63,共64列
			  	{
                  WriteByte(0x00); //写点内容,列地址自动加1
                }
     }
					 
}
	
	
void InitLCD() 	  //初始化LCD
{ 

	CheckState();

	SelectScreen(0);
	SetOnOff(0); //关显示

	SelectScreen(0);
	SetOnOff(1); //开显示

	SelectScreen(0);
	ClearScreen(0);//清屏

	SetStartLine(0); //开始行:0

}


void Display(uint8 ss,uint8 page,uint8 column,uint8 number)
{
	uint8 i;			  //ss选屏参数,page选页参数,column选列参数,number选第几汉字输出
		
	SelectScreen(ss);
	column=column&0x3f;

	SetLine(page);	//写上半页
	SetColumn(column); //控制列
	for(i=0;i<16;i++)  //控制16列的数据输出
	{
	WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
	
	}

	SetLine(page+1);		 //写下半页
	SetColumn(column);	   //控制列
    for(i=0;i<16;i++)	  //控制16列的数据输出
	{
	WriteByte(Hzk[i+32*number+16]);	//i+32*number+16汉字的后16个数据输出
	}

} 



	
void	maininit(void)
			{	
				//IO1CLR = LED;
				PINSEL0 = 0x00000000;			// 选择GPIO
				PINSEL1 = 0x00000000;
				
				PINSEL2 = PINSEL2 & (~0x08);	// P1[25:16]连接GPIO
				IO1DIR  = LEDS8;
				IO0DIR  = LEDS0;
				//IO0SET 	= BUSY;
				IO0PIN=(IO0PIN | 0xffffffff) ;
				IO1PIN=(IO1PIN | 0xffffffff) ;
				TargetInit ();
				InitLCD();
	
		
	
			     
			}
			
void  Task1(void *pdata)
{
    pdata = pdata;                            	/* 避免编译警告 */
                                  /* 目标板初始化 */
    for (;;)																		//(1)
    {
        
        OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 1);			//(4)
        OSTaskCreate (Task3,(void *)0, &TaskledStk[TASK_STK_SIZE - 1], 2);
        while (1)					/* 等待松开按键 */
        {
            OSTimeDly(OS_TICKS_PER_SEC / 50);   /* 延时20毫秒 */					//(5)
        }
    }
}

void  Task2(void *pdata)
{	
	uint8 i=0;
	
    pdata = pdata;                           	/* 避免编译警告 */
   		
   			 
			     
			   ClearScreen(0);//清屏
			    
			   SetStartLine(0);
			   	
			  // Display(2,0,i*16,i); 
			
for(i=0;i<4;i++)
		 {  
			 Display(1,1,i*16,i);
						 //OSTimeDly(10);
			 Display(2,1,i*16,i+4);
						 //OSTimeDly(10);
						 
			 Display(1,3,i*16,i+8);
						 //OSTimeDly(10);
			 Display(2,3,i*16,i+12);
						 
			 Display(1,5,i*16,i+16);
						 //OSTimeDly(10);
			 Display(2,5,i*16,i+20);
		}		
		
			
			OSTimeDly(100);
			
		ClearScreen(0);//清屏
			    
		 SetStartLine(0);	
				while(1)
				{	
					
					 for(i=0;i<4;i++)
					   {
						 
						 OSTimeDly(10);
						 Display(1,1,i*16,i+24);
						 OSTimeDly(10);
						 Display(2,1,i*16,i+28);
						 OSTimeDly(10);			 			 
						 Display(1,3,i*16,i+32);
						 OSTimeDly(10);
						 Display(2,3,i*16,i+36);
						 OSTimeDly(10);
						 Display(1,5,i*16,i+40);
						 OSTimeDly(10);
						 Display(2,5,i*16,i+44);
						 
						}
					
					OSTimeDly(10);
				}
				
	 			
				
			 	
				 
    //OSTaskDel(OS_PRIO_SELF);					/* 删除自己 */						//(4)
}

void  Task3(void *pdata)
{
    pdata = pdata;                          	 	// 避免编译警告

	//PINSEL2 = PINSEL2 & (~0x08);				    // P1[25:16]选择GPIO
				
    IO1DIR |= LED;			                    	// 设置LED1控制口输出
    IO1SET  = LED;
    
   while(1)
    {
        IO1CLR = LED;
        OSTimeDly(10);
        IO1SET = LED;
        OSTimeDly(10);
    }
   
}

int main (void)
{
	maininit();
    OSInit();																//(4)
    OSTaskCreate(Task1, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);	//(5)
    OSStart();																//(6)
    return 0;																//(7)
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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