lcd.c

来自「在LPC2132上实现I/O方式的LCD1602显示」· C语言 代码 · 共 136 行

C
136
字号
/**--------------File Info-------------------------------------------------------------------------------
** File name:			lcd.c
** Last modified Date:  2006-10-14
** Last Version:		1.0
** Descriptions:		lcd function 
**
**------------------------------------------------------------------------------------------------------
** Created by:			hujing
** Created date:		2006-10-14
** Version:				1.0
** Descriptions:		The original version
**
**----------------------------------------------------------------------------------------------------*/

#include "config.h"
/*空指令*/

void Delay(uint8 ms)
{							// 延时子程序
	uint8 i;
	uint8 m;
	while(ms--)
	{
		for(i = 0; i< 250; i++)
		{
		  m=0;
		  m=1;
		}
	}
}
uint32 bf(void)
{    uint32 a;
     IO0DIR=0X20018000;//设置P0.29,P0.16,P0.15为输出;P0.4-P0.11(D0-D7)为输入
     
    
     IO1CLR=0x00030000;//245(2)数据读入ARM
      
     IO0CLR=1<<16; //RS(D/I)=0
     IO0SET=1<<15; //R/W=1
     IO0SET=1<<29; //E=1
     Delay(1);   
     a=IO0PIN&0X00000FF0;
     IO0CLR=1<<29; //E=0
     return(a);
    
}
       
/*写指令*/
void WRCOMD(uint8 x)
    {
    
    uint32 y=x;//把8位的x转换成32位y,y的低8位为x里的内容。
    y=y&0x000000FF;//将Y的高24位清零
    /*状态位BF=0时LCD可写*/
    while((bf()&0x00000800)!=0);
    /*指令写*/
     IO0DIR=0X20018FF0;//设置P0.29,P0.16,P0.15为输出;P0.4-P0.11(D0-D7)为输出
   
     IO1SET=0x00020000;//245(2)数据读入LCD
     IO1CLR=1<<16;//使能245(2) P1.16=0
     
     IO0CLR=1<<16; //RS(D/I)=0
     IO0CLR=1<<15; //R/W=0
     IO0CLR=1<<29; //E=0
     Delay(1);
     IO0PIN=(IO0PIN&0XFFFFF00F)|(y<<4);
     Delay(1);
     
     IO0SET=1<<29; //E=1
    
     Delay(1);
     
     IO0CLR=1<<29; //E=0
           
    }
     
/*写数据*/
void WRDATA(uint8 x)
    {
    uint32 y=x;//把8位的x转换成32位y,y的低8位为x里的内容。
    y=y&0x000000FF;//将Y的高24位清零
    
   /*状态位BF=0时LCD可写*/
    while((bf()&0x00000800)!=0);
   
    /*数据写*/
     IO0DIR=0X20018FF0;//设置P0.29,P0.16,P0.15为输出;P0.4-P0.11(D0-D7)为输出
     
     
     IO1SET=0x00020000;//245(2)数据读入LCD
     IO1CLR=1<<16;//使能245(2) P1.16=0
     
     IO0SET=1<<16; //RS(D/I)=1
     IO0CLR=1<<15; //R/W=0
     IO0CLR=1<<29; //E=0
     Delay(1);
     IO0PIN=(IO0PIN&0XFFFFF00F)|(y<<4);
     Delay(1);
     
     IO0SET=1<<29; //E=1
    
     Delay(1);
     
     IO0CLR=1<<29; //E=0
           
    }     
/*初始化*/     
void INITIAL(void) 
   {
   WRCOMD(0X38);
   WRCOMD(0X0C);
   WRCOMD(0X06);
   WRCOMD(0X01);
   }
/*清屏*/   
void CLEAR(void)
   {
   WRCOMD(0X01);
   }
/*定写入位置*/
void POSITION(uint8 p)
   {
    WRCOMD(p|0X80);
    }
/*数据显示*/
void OUTPUT(uint8 o)
   {     
   WRDATA(o);
   } 

/**********END OF FILE**********************/     
     
     
     
     
     

⌨️ 快捷键说明

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