lpc1114驱动1602_0802程序
图1.LPC1114驱动LCD1602
图2.LPC1114驱动LCD0802
LCD1602和LCD0802用的程序是一样的。
lcd.h文件中,代码如下:
#ifndef __LCD0802_H__ #define __LCD0802_H__ #include "lpc11xx.h" #define OUT_DATA(value)?? ? LPC_GPIO2->DATA =(value<<4) #define RS_LOW? LPC_GPIO3->DATA&=~(1<<0) #define RS_HIGH? LPC_GPIO3->DATA|=(1<<0) #define WR_LOW? LPC_GPIO3->DATA&=~(1<<1) #define WR_HIGH? LPC_GPIO3->DATA|=(1<<1) #define EN_LOW? LPC_GPIO3->DATA&=~(1<<2) #define EN_HIGH? LPC_GPIO3->DATA|=(1<<2) extern void delay_0802(uint16_t us); extern void write_com(uint16_t com); extern void write_date(uint16_t dat); extern void init_0802(void); extern void lcd_show(void); #endif
lcd.c文件中,代码如下:
#include "lcd.h" #include "lpc11xx.h" void delay_0802(uint16_t us) { ?? ?uint16_t i,j; ?? ?for(i=0;i<100;i++) ?? ??? ?for(j=0;j<us;j++); } void write_com(uint16_t value) { ? EN_LOW; ?? ?RS_LOW; ?? ?WR_LOW; ?? ?OUT_DATA(value); ?? ?delay_0802(10); ?? ?EN_HIGH; ?? ?delay_0802(20); ?? ?EN_LOW; } void write_date(uint16_t value) { ? EN_LOW; ?? ?RS_HIGH; ?? ?WR_LOW; ?? ?OUT_DATA(value); ?? ?delay_0802(10); ?? ?EN_HIGH; ?? ?delay_0802(20); ?? ?EN_LOW; } void init_0802(void) { ?? ?LPC_GPIO2->DIR|=0xFF0;?? ??? ??? // 设置P2口高8位引脚为输出,用作LCD8位并行数据 ?? ?LPC_GPIO2->DATA |= 0XFF0;?? ??? // P2口高8位引脚置高 ?? ?LPC_GPIO3->DIR|=0x007;?? ??? ??? // P3口P3.0到P3.3为输出,用作LCD控制引脚 ?? ?LPC_GPIO3->DATA |= 0x007;?? ??? // P3口P3.0到P3.3置高 ? delay_0802(300); ?? ?write_com(0x38); ?? ?delay_0802(100); ?? ?write_com(0x38); ?? ?delay_0802(100); ?? ?write_com(0x38); ?? ?delay_0802(100); ?? ?write_com(0x0c); ?? ?delay_0802(100); ?? ?write_com(0x06); ?? ?delay_0802(100); ?? ?write_com(0x01); ?? ?delay_0802(100); }
main.c文件中,代码如下:
/************************************************** ?* 名称:LPC1114 驱动LCD0802 1602 ?* 主频:50Mhz(外部接10MHz晶振,倍频5倍) ?* 作者:Ration(瑞生电子网CEO) ?* 时间:2013年12月5日(整理) ?* 版权:版权归<单片机学习网>所有,传播请保持完整性 ?* ?* 更多程序请访问:https://rationmcu.com ?*************************************************/ #include "lpc11xx.h" #include "lcd.h" uint8_t table1[8]=" Hello? "; uint8_t table2[8]=" World? "; void delay_ms(uint16_t ms) { ?? ?uint16_t i,j; ?? ?for(i=0;i<5000;i++) ?? ??? ?for(j=0;j<ms;j++); } void lcd_show(void) { ?? ?uint8_t j; ?? ?write_com(0x80); ?? ?for(j=0;j<8;j++) ?? ?{ ?? ??? ?write_date(table1[j]); ?? ??? ?delay_0802(10); ?? ?} ?? ?write_com(0x80+0x40); ?? ?for(j=0;j<8;j++) ?? ?{ ?? ??? ?write_date(table2[j]); ?? ??? ?delay_0802(10); ?? ?} } int main() { ?? ?delay_ms(100); ? init_0802(); ?? ?lcd_show(); ?? ?while(1) ?? ?{?? ? ?? ??? ?; ??? ?} }
源码下载:1602(KEIL4工程)