LPC11XX驱动1602程序_12MHz

2019-11-30来源: 51hei关键字:LPC11XX  驱动1602  12MHz

LCD.c文件:


#include "LPC11XX.h"

#include "gpio.h"

#include "main.h"

#include "Delay.h"

#include "LCD.h"


/*-----------设置D0-D7为输出口-------------*/

void Set_GPIO_Output(void)

{

        LPC_GPIO2->DIR |= (0x1<<0);              //设置D0-D7为输出

        LPC_GPIO2->DIR |= (0x1<<1);

        LPC_GPIO2->DIR |= (0x1<<2);

        LPC_GPIO2->DIR |= (0x1<<3);

        LPC_GPIO2->DIR |= (0x1<<4);

        LPC_GPIO2->DIR |= (0x1<<5);

        LPC_GPIO2->DIR |= (0x1<<6);

        LPC_GPIO2->DIR |= (0x1<<7);

}


/*-----------设置D0-D7为输入口-------------*/

void Set_GPIO_Input(void)

{

        LPC_GPIO2->DIR        &= ~(0x1<<0);            //设置D0-D7为输入

        LPC_GPIO2->DIR        &= ~(0x1<<1);

        LPC_GPIO2->DIR        &= ~(0x1<<2);

        LPC_GPIO2->DIR        &= ~(0x1<<3);

        LPC_GPIO2->DIR        &= ~(0x1<<4);

        LPC_GPIO2->DIR        &= ~(0x1<<5);

        LPC_GPIO2->DIR        &= ~(0x1<<6);

        LPC_GPIO2->DIR        &= ~(0x1<<7);         

}


/*-----------LCD端口初始化-------------*/

void LCD_GPIO_Init(void)

{

        //P2口可以用这种方式设置为GPIO,这种方式较合理正式。

        LPC_IOCON->PIO2_0 &= (~0x07);            //设置P2.0~P2.10为GPIO

        LPC_IOCON->PIO2_1 &= (~0x07);

        LPC_IOCON->PIO2_2 &= (~0x07);

        LPC_IOCON->PIO2_3 &= (~0x07);

        LPC_IOCON->PIO2_4 &= (~0x07);

        LPC_IOCON->PIO2_5 &= (~0x07);

        LPC_IOCON->PIO2_6 &= (~0x07);

        LPC_IOCON->PIO2_7 &= (~0x07);

        

        LPC_IOCON->PIO2_8 &= (~0x07);

        LPC_IOCON->PIO2_9 &= (~0x07);

        LPC_IOCON->PIO2_10 &=(~0x07);

        

        

        LPC_GPIO2->DIR |= (0x1<<0);              //设置D0-D7为输出

        LPC_GPIO2->DIR |= (0x1<<1);

        LPC_GPIO2->DIR |= (0x1<<2);

        LPC_GPIO2->DIR |= (0x1<<3);

        LPC_GPIO2->DIR |= (0x1<<4);

        LPC_GPIO2->DIR |= (0x1<<5);

        LPC_GPIO2->DIR |= (0x1<<6);

        LPC_GPIO2->DIR |= (0x1<<7);

        

        LPC_GPIO2->DIR |= (0x1<<8);              //RS 设为输出

        LPC_GPIO2->DIR |= (0x1<<9);              //R/W 设为输出

        LPC_GPIO2->DIR |= (0x1<<10);             //EN 设为输出

        LPC_GPIO3->DIR |= (0x1<<3);              //BackLighting 液晶屏背光设为输出

        

        GPIOSetValue( 3, 3, 1 );                 //BackLighting位写1,开启液晶屏背光,写0关闭液晶屏背光

}


/*-----------写数据到D0-D7-------------*/

void Write_Data_Port(unsigned char Data)

{

        LPC_GPIO2->DATA &= ~(0xff);

  LPC_GPIO2->DATA |=Data;

}


/*-----------读D0-D7的数据-------------*/

unsigned char Read_Data_Port(void)

{

        //unsigned char In_Data=0;

        //In_Data=LPC_GPIO2->DATA;

        //return In_Data;

        return(LPC_GPIO2->DATA);

        

}


/*******************************************************************************

* 函 数 名: uchar Chk_LCD_busy(void)

* 函数功能: 读液晶忙通道数据

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

unsigned char Chk_LCD_busy(void)

{

  unsigned char gR_data;

  unsigned char gwait_time=0xff;    //设置忙超时数

        

        Set_GPIO_Input();                 //接收口设为输入口

        

  LCD_RS_Low();                     //表示状态

  LCD_RW_High();                    //选择读

  LCD_EN_High();

  Delay_Us(30);

        

  gR_data=Read_Data_Port();

        Delay_Us(10);


  while(TESTBIT(gR_data,7))         //表示busy

  {

     --gwait_time;

                

     if(!gwait_time)

     { 

                         LCD_EN_Low();

                         Set_GPIO_Output();           //恢复为输出口

                         return 0; 

                 }

  }

   LCD_EN_Low();

   Set_GPIO_Output();               //恢复为输出口

   return 1;

}


/******************************************************************************

* 函 数 名: void Write_LCD_command(uchar gcmd,uchar gvalue)

* 函数功能: 写指令

* 入口参数: gcmd--指令  gvalue--是否查忙

* 返    回: 无

*******************************************************************************/

void Write_LCD_command(unsigned char gcmd,unsigned char gvalue)

{

   if(gvalue)                       //写命令时大部分情况下是在LCD空闲模式下写

   {

     if(Chk_LCD_busy())

     {

       LCD_RS_Low();                //选择指令

       LCD_RW_Low();                //选择写

                         LCD_EN_High();               //使能

                         Write_Data_Port(gcmd);       //赋指令

       Delay_Us(15);

       LCD_EN_Low();

     }

   }

   else

   {

     LCD_RS_Low();                  //选择指令

     LCD_RW_Low();                  //选择写

                 LCD_EN_High();                 //使能

     Write_Data_Port(gcmd);         //赋指令

     Delay_Us(10);

     LCD_EN_Low();

   }

}


/******************************************************************************

* 函 数 名: void Write_LCD_data(uchar gdata)

* 函数功能: 写数据

* 入口参数: gdata--数据

* 返    回: 无

*******************************************************************************/

/*----------- 写数据 -------------*/

void Write_LCD_data(unsigned char gdata)

{

   if(Chk_LCD_busy())            //写数据必须是在LCD空闲模式下才能写

   {

      LCD_RS_High();             //选择数据

      LCD_RW_Low();              //选择写

                  LCD_EN_High();             //使能

      Write_Data_Port(gdata);

      Delay_Us(15);

      LCD_EN_Low();

   }

}


/******************************************************************************

* 函 数 名: void INIT_LCD(void)

* 函数功能: 初始化1602LCD

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

/*-----------LCD初始化函数-------------*/

void INIT_LCD(void)

{

        LCD_GPIO_Init();

        

  Delay_Ms(15);

  Write_LCD_command(0x38,0);    //设置16X2显示,5X7点阵,8位数据传送,不检测忙信号

  Delay_Ms(5);

  Write_LCD_command(0x38,0);

  Delay_Ms(5);

  Write_LCD_command(0x38,0);    //设置16X2显示,5X7点阵,8位数据传送,不检测忙信号

Delay_Us(10

[1] [2]
关键字:LPC11XX  驱动1602  12MHz 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481613.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:用ARM点亮一个led并闪烁
下一篇:Cortex-M3学习LPC1768 - TFT实验

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

做自己的LPC17xx keil固件库的方法
做自己的LPC17xx固件,主要解决LPC17xx活用问题。Lpc之做自己的keil固件库习惯于 keil 的环境,也刚学了点 stm32,觉得 stm32 的固件库用起很方便的,在 LPCXpresso 上师兄些都讲得过多,也过细,我想“另类”一点,写一篇 keil 的文章Lpc 没有提供有固件库,但看它的例子,想了一下,何不将例子中的文件做成固件库呢?以 gpio 为例:我用的是 mdk410prc.exe,可以从网上下Lpc 的例子 lpc1343.examples.zip将 lpc1343.examples.zip 解压开打开 keilProject->New uVision Project保存
发表于 2019-11-29
做自己的LPC17xx keil固件库的方法
STM32与LPC17XX中的位带(bit-band)操作理解
)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入以上方法可移植到LPC17xx。只是地址不同。
发表于 2019-11-28
LPC1768/17XX之CAN控制器硬件查找表的理解
; CPU通过 APB总线即可设置 CAN 控制器状态,以及读取中断信息和中断状态。       一共有 3 个发送缓冲器(邮箱),这样就可以保证,最少可以发送 3组并发的 CAN 数据; 2 个接收缓冲器(邮箱),这样就可以在 CPU 处理 1 个邮箱的接收数据的同时, 还能用另一个邮箱接收网络上的数据。        LPC17XX CAN 的验收滤波器比较特殊, 它是一个独立于 CAN 控制器的器件,也属于一种外设,不过比较特殊的是,  它是服务于 CAN 控制器的外设,这么做的意义就在于,验收滤波
发表于 2019-11-28
LPC1768/17XX之CAN控制器硬件查找表的理解
uCOS-II移植到LPC17XX方法
1. 知识准备要想对ucos-ii的移植有较深的理解,需要两方面知识:(1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移植几乎都是一样的,要想了解Cortex-M3内核,推荐《ARM Cortex-M3权威指南》(宋岩译);(2)ucos-ii内核原理,推荐《嵌入式实时操作系统uC/OS-II(第2版)》(邵贝贝译)。2. 下载文件ucos-ii移植过程主要涉及三个文件:os_cpu.h, os_cpu_a.asm和os_cpu_c.c实际上,一般情况下,我们想要移植的目标芯片前辈们都已经移植成功过了,我们需要做的就是下载就可以了。需要
发表于 2019-10-14
uCOS-II移植到LPC17XX方法
LPC17XX 学习之系统时钟与功率控制
系统时钟与功率控制一、系统时钟  LPC17XX有三个独立的时钟振荡器,分别是主振荡器(MIAN_OSC)、内部RC振荡器(IRC_OSC)、实时时钟振荡器(RTC_OSC)。LPC17XX时钟框图如下:LPC17XX 时钟框图如上图所示,三个振荡器通过 system clock select 三选一 后经过(或不经过)MAIN PLL 最后经 CPU CLOCK DIVIDER 分频为CPU提供时钟;其中主振荡器(MAIN_OSC)还可通过USB PLL为USB提供时钟;内部RC振荡器(IRC_OSC)还可作为看门狗的时钟源。主振荡器(MIAN_OSC)的工作频率为1MHz~25MHz;内部RC振荡器(IRC_OSC)的额定频率
发表于 2019-05-07
LPC17XX 学习之系统时钟与功率控制
使用AVR来驱动MAXIN的DS18B20
我最近正在研究使用AVR来驱动MAXIN的DS18B20,琢磨了几天,终于把它的驱动程序写好了.使用IAR C++编译器#ifndef DS18B20_H#define DS18B20_H/****************************************只需在源程序里定义以下宏#define seDDS()  (seDB0())#define clDDS()  (clDB0())#define seDS()   (sePB0())#define clDS()   (clPB0())#define GetDS()  
发表于 2019-11-28
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved