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

📄 main.c

📁 一个用ucosII写的lcd1602的驱动程序 已经调试通过
💻 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:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"

#define	TaskStkLengh	64			//Define the Task0 stack length 定义用户任务0的堆栈长度

#define RS_H IOSET=1<<10
#define RS_L IOCLR=1<<10
#define RW_H IOSET=1<<11
#define RW_L IOCLR=1<<11
#define EN_H IOSET=1<<12
#define EN_L IOCLR=1<<12
 
OS_STK	Task0Stk [TaskStkLengh];		//Define the Task0 stack 定义用户任务0的堆栈
OS_STK  LcdTaskStk[TaskStkLengh];

void 	Task0(void *pdata);			//Task0 任务0
void    LcdTask(void *pdata);    //定义用户任务堆栈


uint8 str1[]="ARM+";
uint8 str2[]="C/OS II";
uint8 str3[]="I LOVE YOU!";


void is_ready()   //判断busy
{
  IODIR=0xffffff00;    //低八位设置成输入口 
  
		RS_L;
		RW_H;
		EN_H;;
		while((IOPIN & 0x00000080)==0x80);
		
	                //等待D7送出0信号,说明处于可读写状态了
  EN_L;            //如果不加此句,则出来后EN为高,则出现写两次的情况
  IODIR=0xffffffff;    //设置回为输出口
}


void en_toggle()       //产生EN高脉冲子程序
{
  EN_L;
  EN_H;
  EN_L;
}
void write_cmd(uint8 cmd)
{
  is_ready();
  IOPIN=(IOPIN&0xffffff00)|cmd;//写入命令
    RS_L;
    RW_L;
  
  en_toggle();
}
void write_data(uint8 indata)
{
  is_ready();
  
  IOPIN=(IOPIN&0xffffff00)|indata;
  RS_H;
  RW_L;
 
  en_toggle();

}
void set_position(uint8 row,uint8 col)  //
{
  uint8 p;
  if(row==1)
  {p=0x80+col-1;
   write_cmd(p);}      //第一行
  else
  {p=0xc0+col-1;       //第二行
   write_cmd(p);}
}
void write_str(uint8 *pt)
{
  uint8 i=0;
  //write_cmd(addr);
  while(pt[i]!='\0')
  {
    write_data(pt[i]);
    i++;
  }
}
void init_lcd()
{
   write_cmd(0x01);    //清屏幕
   
   write_cmd(0x38);
   write_cmd(0x0f);
   write_cmd(0x06);
   
}




        int main (void)
{
	OSInit ();																										
	OSTaskCreate (Task0,(void *)0, &Task0Stk[TaskStkLengh - 1], 2);		
	OSStart ();
	return 0;															
}
/*********************************************************************************************************
**                            Task0 任务0
********************************************************************************************************/

		void Task0	(void *pdata)
{
	pdata = pdata;
	TargetInit ();        //目标板初始化
	
	OSTaskCreate (LcdTask,(void *)0, &LcdTaskStk[TaskStkLengh - 1], 4);
	
	OSTaskDel(OS_PRIO_SELF);  //删除任务自身,并进行任务调度
	
}


void LcdTask(void *pdata)
{
   pdata=pdata;
   
   PINSEL0=0x00000000;
   PINSEL1=0x00000000;
   IODIR=0xffffffff;    //先设置为输出

   OSTimeDly(10);    //延时50ms
   
   init_lcd();
   
  // write_cmd(0x80);
  // write_data('a');
   set_position(1,3);
    //write_cmd(0x80);
    write_str(str1);//arm+
    write_data(0xe4);//u
    write_str(str2);  //c/os
    set_position(2,3);
    write_str(str3);
   while(1)
   {
       OSTimeDly(1);
   }
      
}
   
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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