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

📄 main.c

📁 第3章-μCOS-II基础实验 3.2-GPIO实验 3.3-时器实验 3.4-PWM实验 3.5-RTC实验 3.6-信号量使用
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Chenxibing
** Modified date:		2005-03-10
** Version:
** Descriptions:		EasyARM2131 基于uCOS-II的GPIO输出实验。
**
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"
#include  "zk.h"

#define   RES		(1<<1)	
#define   SCLK	(1<<4)		
#define   DC		(1<<5)		
#define   SD		(1<<6)		
#define   CE		(1<<7)	


#define  LCD_InterFace RES|SCLK|DC|SD|CE;
#define	  LED1	(1 << 18)           	// P1.18控制LED1

#define	Task0StkLengh	64				// 定义用户任务0的堆栈长度
#define	TaskLED1StkSize	128				// 定义任务TaskLED1的堆栈长度
 
OS_STK	Task0Stk [Task0StkLengh];		// 定义用户任务0的堆栈
OS_STK	TaskLED1Stk [TaskLED1StkSize];	// 定义任务TaskLED1的堆栈

void  Task0(void *pdata);				// Task0 任务0
void  TaskLED1(void *data);				// 任务TaskLED1
void  show(unsigned char * pStrings,unsigned char x,unsigned char y);
void  LCD_Init(void);
void Write_Data(unsigned char Data);
void Write_Command(unsigned char Command);
/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :c语言的主函数,由它启动多任务环境
*********************************************************************************************************
*/
int main (void)
{
	OSInit ();																										
	OSTaskCreate (Task0,(void *)0, &Task0Stk[Task0StkLengh - 1], 2);		
	OSStart ();
	return 0;															
}

/*
********************************************************************************************************
** 									Task0 任务0
** 							完成目标板初始化和创建TaskLED1任务
********************************************************************************************************
*/

void Task0	(void *pdata)
{
	pdata = pdata;
	TargetInit ();
	OSTaskCreate (TaskLED1,(void *)0, &TaskLED1Stk[TaskLED1StkSize - 1], 3);		
	
	while (1)
	{
		OSTimeDly(10);
	}
}

/*
********************************************************************************************************
** 									TaskLED1
** 								    LED1任务
********************************************************************************************************
*/
void  TaskLED1(void *pdata)
{
                        	 	// 避免编译警告
	unsigned char i,j,m;	
	unsigned char const string[]="I love you!";
	
	pdata = pdata;  
	
   PINSEL0 = 0x00000000;			// 管脚设置为GPIO
   PINSEL1 = 0x00000000;			
   IODIR=RES|SCLK|DC|SD|CE|LED1;   
    LCD_Init();				    	// LCD初始化 
    for (;;)
    {
    		 for(j=0;j<4;j++)
		 	{	
    				show((unsigned char *)("I love you!"),0,j);
    				        OSTimeDly(OS_TICKS_PER_SEC/4 );
    		}
//        IO1CLR = LED1;

//        IO1SET = LED1;
/*
 for(j=0;j<4;j++)
		 	{	
    				show((unsigned char *)("bridge!"),0,j);
    				        OSTimeDly(OS_TICKS_PER_SEC/4);
    		}		
*/

    }
}

/****************************************************************************
* 名称:Writer command ()
* 功能:
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Write_Command(unsigned char Command)

{  unsigned char i; 


          IOCLR=DC;              // A0=0 COMMAND
          
          IOSET=CE;
	   IOSET=SD;
	   IOSET=SCLK;
	   
          IOCLR=CE;              
                               
          for (i=0;i<8;i++)
          {
          
          	IOCLR=SCLK;
          
          	if( Command &0x80) IOSET=SD;else IOCLR=SD;
			
          	
          	Command<<=1;
          	
          	
          	IOSET=SCLK;
          	
          	
          }      
              
           IOSET=DC|CE;              // A0=1 no COMMAND
                       
                
}  

/****************************************************************************
* 名称:Writer data ()
* 功能:
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Write_Data(unsigned char Data)

{  unsigned char i; 

	   IOSET=DC;		 // A0=1  DATA
	   IOSET=CE;
	   IOSET=SD;
	   IOSET=SCLK;
	   
          IOCLR=CE;              
                               
          for (i=0;i<8;i++)
          {
          	IOCLR=SCLK;
          	if( Data &0x80) IOSET=SD;else IOCLR=SD;
          	
          	Data<<=1;
          	
          	IOSET=SCLK;
          	
          }      
              
           IOSET=DC|CE;              // A0=1 DATA
                       
                
}           
unsigned long  fun(unsigned long x)
{
if(x>1)
return(x*fun(x-1));
else
return(1);	

}


/****************************************************************************
* 名称:LCD_Initt()
* 功能:
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  LCD_Init(void)
{   
unsigned char i,j;	

	   
	   IOSET=RES|DC|CE|SCLK|SD;
	    
//		wait_ms(100);
OSTimeDly(OS_TICKS_PER_SEC / 40);

        IOSET=RES;
//        wait_ms(1);         // DELAY 1mS
OSTimeDly(OS_TICKS_PER_SEC / 40);
        IOCLR=RES;         // RESET CHIP
//        wait_ms(1);         // DELAY 1mS
OSTimeDly(OS_TICKS_PER_SEC / 40);      
        IOSET=RES;          //su reset low time = 300ns
//        wait_ms(1);         // DELAY 1mS
OSTimeDly(OS_TICKS_PER_SEC / 40);




//INIT CHIP

         //       MOV     A,#00100011B    ; 0,0,1,MX,MY,PD,H1,H0       
          //      CALL    WR_INST         ; SET H[1:0]=11 ; MX=0(COM0->COM66); MY=0(SEG0->SEG101); PD=0
           Write_Command(0x23);

          //      MOV     A,#10010110B    ; 1,0,0,1,BE1,BE0,PC1,PC0                                 
         //       CALL    WR_INST         ; BE1,BE0=10(DEFAULT);PC1,PC0=11-->5

		  Write_Command(0x96);  
		  ;
         //       MOV     A,#00100001B    ; 0,0,1,MX,MY,PD,H1,H0       
         //       CALL    WR_INST         ; SET H[1:0]=01 ; MX=0(COM0->COM66); MY=0(SEG0->SEG101); PD=0

		 Write_Command(0x21);

		
           //     MOV     A,#11001011B    ; 1,VOP6,VOP5,VOP4,VOP3,VOP2,VOP1,VOP0
           //     CALL    WR_INST         ; VOP=9V=6.75+0.03*75;  75=4Bh ;                              

		Write_Command(0xcb);

										; 
           //     MOV     A,#00010010B    ; 0,0,0,1,0,BS2,BS1,BS0
            //    CALL    WR_INST         ; BIAS=010=1/9

		Write_Command(0x12);

		   
		// 0 0 0 0 0 0 1 DO X x Top/bottom row mode set

		Write_Command(0x0c);

		   
         //       MOV     A,#00100000B    ; 0,0,1,MX,MY,PD,H1,H0       
         //       CALL    WR_INST         ; SET H[1:0]=00 ; MX=0(COM0->COM66); MY=0(SEG0->SEG101); PD=0


			Write_Command(0x20);
		 
          //      MOV     A,#10000000B    ; 1,X6,X5,X4,X3,X2,X1,X0                   
          //      CALL    WR_INST         ; X=0

		Write_Command(0x80);

	
           //     MOV     A,#01000000B    ; 0,1,0,0,Y3,Y2,Y1,Y0                          	
          //      CALL    WR_INST         ; Y=0                             	

		Write_Command(0x40);

		  
          //      MOV     A,#00000101B    ; 0,0,0,0,0,1,0,PRS
         //       CALL    WR_INST         ; PRS=1


		Write_Command(0x05);

		
         //       MOV     A,#00001100B    ; 0,0,0,0,1,D,0,E                                 
          //      CALL    WR_INST         ; D,E=1,0=DISPLAY ON


		 Write_Command(0x0c);
         //       MOV     A,#00100000B    ; 0,0,1,MX,MY,PD,H1,H0       
         //       CALL    WR_INST         ; SET H[1:0]=00 ; MX=0(COM0->COM66); MY=0(SEG0->SEG101); PD=0
	
		Write_Command(0x20);
		 
		 for(i=0;i<10;i++)
		 {

		 Write_Command(0x40|i);         //Y ADDRESS SET Y=0~8 page0~8
		 Write_Command(0x83);         //X ADDRESS SET X=0
		 
			 for(j=0;j<96;j++)
		 	{
		 		Write_Data(0x0f);
				
			 }	
		 }
		 
}
void  show(unsigned char * pStrings,unsigned char x,unsigned char y)
{   
unsigned char i,j;	


		x=x*5+3;
		Write_Command(0x20);
		Write_Command(0x40|y);          //Y ADDRESS SET Y=0~8 page0~8
		Write_Command(0x80);        	 //X ADDRESS SET X=0
		
			 for(j=0;j<96;j++)
		 	{
		 		Write_Data(0x00);
				
			 }	

		Write_Command(0x40|y);          //Y ADDRESS SET Y=0~8 page0~8
		Write_Command(0x80|x);         //X ADDRESS SET X=0

	
	
		
		 for(i=0;i<strlen((const char * )  pStrings);i++)
		 {
			
		 
			 for(j=0;j<5;j++)
		 	{
		 		 
		 		Write_Data(dot[((unsigned char)pStrings[i]-0x20)*5+j]);

			 }	

		 }
		 




}


   
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/
/*
void  TaskLED1(void *pdata)
{
    pdata = pdata;                          	 	// 避免编译警告

	PINSEL1 = PINSEL1 & (~(0x03 << 4));				// P1.18选择GPIO				
    IO1DIR |= LED1;			                    	// 设置LED1控制口输出
    IO1SET  = LED1;
    
    for (;;)
    {
        IO1CLR = LED1;
        OSTimeDly(OS_TICKS_PER_SEC / 4);
        IO1SET = LED1;
        OSTimeDly(OS_TICKS_PER_SEC / 2);
    }
}
*/

⌨️ 快捷键说明

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