完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "config.h" #define RS (1<<8) #define RW (1<<9) #define E (1<<10) #define BUSY (1<<7) #define FIRSTLINE 0x80 #define SECONDLINE 0xc0 unsigned char str1[]="Hello Lpc1602"; unsigned char str2[]="2012 I'm coming"; void DelayMs(unsigned char ms); void CheckBusy(); void WriteCommand(unsigned char command); void WriteData(unsigned char data); void Set_XY(unsigned char x,unsigned char y); void DisplayChar(unsigned char x,unsigned char y,unsigned char data); void DisplayString(unsigned char x,unsigned char y,unsigned char *str); void InitLcd(); //主函数入口 int main() { PINSEL0 &= 0xfffff800;//低11位为IO功能 IO0DIR = 0x7ff;//为输出功能 IO0CLR = 0x7ff;//清零 //初始化LCD1602 InitLcd(); //显示数据 DisplayString(0,0,str1); DisplayString(1,0,str2); while(1); //return 0; } /******************************************************* * 功能:长软件延时,时间为ms ********************************************************/ void DelayMs(unsigned char ms) { unsigned int i; for(;ms>0;ms--) for(i=0;i<50000;i++); } /******************************************************* * 功能:检查LCD是否忙碌,忙碌等待,不忙了返回 ********************************************************/ void CheckBusy() { IO0DIR = 0x700;//0-7输入,8-10输出 ,读状态 while(1) { //读状态,RS=L,RW=H,E=H IO0CLR = RS; IO0SET = RW; IO0SET = E; if(!(IO0PIN & BUSY)) //如果不忙了,返回 { break; } IO0CLR = E;//如果忙了,清空E标志,继续等待 } IO0DIR = 0x7ff;//IO口全部恢复为输出 } /******************************************************* * 功能:写命令(指令)函数 ********************************************************/ void WriteCommand(unsigned char command) { CheckBusy(); //检查是否BUSY ,忙碌一直在此等待 //写指令,RS=L,RW=L,然后D0~D7=指令码,E=高脉冲发送命令 IO0CLR = RS; IO0CLR = RW; IO0CLR = 0xff;//清空端口 IO0SET = command; IO0SET = E;//发送数据 IO0CLR = E;//恢复,以便继续使用 } /******************************************************* * 功能:写数据函数 * 显示数据之前要先设定显示位置 ********************************************************/ void WriteData(unsigned char data) { CheckBusy(); //检查是否BUSY ,忙碌一直在此等待 //写指令,RS=H,RW=L,然后D0~D7=指令码,E=高脉冲发送命令 IO0SET = RS; IO0CLR = RW; IO0CLR = 0xff;//清空端口 IO0SET = data; IO0SET = E;//发送数据 IO0CLR = E;//恢复,以便继续使用 } /******************************************************* * 功能:设置显示位置 * 坐标自动加1 ********************************************************/ void Set_XY(unsigned char x,unsigned char y) { switch(x) { case 0: y+=FIRSTLINE; break; case 1: y+=SECONDLINE; break; } WriteCommand(y); //显示坐标更新 设置数据指针 } /******************************************************* * 功能:在指定位置显示单个字符 ********************************************************/ void DisplayChar(unsigned char x,unsigned char y,unsigned char data) { Set_XY(x,y); WriteData(data); } /******************************************************* * 功能:在指定位置显示字符串 ********************************************************/ void DisplayString(unsigned char x,unsigned char y,unsigned char *str) { Set_XY(x,y); while(*str) { WriteData(*str); str++; } } /******************************************************* * 功能:初始化LCD1602函数 ********************************************************/ void InitLcd() { //写命令 WriteCommand(0x01);//显示清屏,数据指针、所有显示清零 WriteCommand(0x38);//设置16*2显示,5*7点阵,8位数据接口 WriteCommand(0x0f);//显示开及光标设置显示器开、光标开、闪烁开 } |
|
相关推荐
1 个讨论
|
|
只有小组成员才能发言,加入小组>>
1913个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36371 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4405 浏览 0 评论
6065 浏览 1 评论
6775 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4222 浏览 0 评论
627浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
621浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
616浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
698浏览 2评论
803浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 01:11 , Processed in 1.182219 second(s), Total 54, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号