PIC16 单片机 LCD1602 驱动 程序 PIC16F877A PIC16F887

发布者:温柔阳光最新更新时间:2022-01-30 来源: eefocus关键字:PIC16  单片机  LCD1602  驱动  程序  PIC16F877A  PIC16F887 手机看文章 扫描二维码
随时随地手机看文章

在这里插入图片描述


/* LCD显示相关 */

#define DATA 1                                                       /* LCD写数据时为1 */

#define COM 0                                                       /* LCD写命令时为0 */

#define LINE1 0b10000000

#define LINE2 0b11000000


#define LCD_E RD6

#define LCD_RW RD5

#define LCD_RS RD4

void LCD_WRITE_4( unsigned char R1, unsigned char FLAG );

void LCD_WRITE( unsigned char R1, unsigned char FLAG );

unsigned char LCD_READ( void );

void LCD_BUSY( void );

void LcdWriteChar( unsigned char x, unsigned char y, char s );

void lcd_dispaly_str( unsigned char x, unsigned char y, char *s );

void LCD_CSH( void );

/* LCD写4位命令 */

void LCD_WRITE_4( unsigned char R1, unsigned char FLAG )

{

LCD_RW = 0; NOP();

LCD_RS = FLAG;

PORTD &= 0xF0;

LCD_E = 1; NOP();

PORTD |= R1;

NOP(); NOP();

LCD_E = 0; NOP();

LCD_RS = 0; NOP();

PORTD &= 0xF0;

}


/* LCD写命令 */

void LCD_WRITE( unsigned char R1, unsigned char FLAG )

{

unsigned char R2;


LCD_BUSY();

LCD_RW = 0; NOP();

LCD_RS = FLAG;

R2 = (R1 >> 4) & 0x0F;

PORTD &= 0xF0; NOP();

LCD_E = 1;

PORTD |= R2;

NOP(); NOP();

LCD_E = 0;


R2 = R1 & 0x0F;

PORTD &= 0xF0; NOP();

LCD_E = 1; NOP();

PORTD |= R2;

NOP(); NOP();

LCD_E = 0; NOP();

LCD_RS = 0; NOP();

PORTD &= 0xF0;

}


/* 读LCD状态 */

unsigned char LCD_READ( void )

{

unsigned char R1;

TRISD = 0x0F;

LCD_RS = 0; NOP();

LCD_RW = 1;

NOP(); NOP();

LCD_E = 1;

NOP(); NOP();

NOP(); NOP();

R1 = 0;

R1 = (PORTD << 4) & 0xF0;

LCD_E = 0;

NOP(); NOP();

NOP(); NOP();

LCD_E = 1;

NOP(); NOP();

R1 |= (PORTD & 0x0F);

LCD_E = 0; NOP();

LCD_RW = 0;

TRISD = 0x00;

return(R1);

}

/* 检测LCD是否忙 */

void LCD_BUSY( void )

{

unsigned char R1;

do

{

R1 = LCD_READ();

}

while ( (R1 & 0x80) == 0x80 );

}

/* 写字符 */

void LcdWriteChar( unsigned char x, unsigned char y, char s )

{

if ( y == 0 )

{

LCD_WRITE( 0x80 + x, COM );

}else {

LCD_WRITE( 0xC0 + x, COM );

}


LCD_WRITE( s, DATA );

}

/* 写字符串 */

void lcd_dispaly_str( unsigned char x, unsigned char y, char *s )

{

if ( y == 0 )

{

LCD_WRITE( 0x80 + x, COM );

}else {

LCD_WRITE( 0xC0 + x, COM );

}


while ( *s )

{

LCD_WRITE( *s, DATA );

s++;

}

}


/* LCD初始化 */

void LCD_CSH( void )

{

TRISD = 0x00; /* RD方向输出 */


__delay_ms( 20 );


LCD_WRITE_4( 0b0011, COM );

__delay_ms( 5 );

LCD_WRITE_4( 0b0011, COM );

__delay_ms( 10 );

LCD_WRITE_4( 0b0011, COM );

__delay_ms( 10 );


LCD_WRITE_4( 0b0010, COM );


LCD_BUSY();

LCD_WRITE( 0b00101000, COM );

LCD_WRITE( 0b00001100, COM );

LCD_WRITE( 0b00000001, COM );

__delay_ms( 2 );

LCD_WRITE( 0b00000110, COM );

}

/* 游标闪烁 */

void SetCurPosition( unsigned char x, unsigned char y )

{

unsigned char temp;


temp = x & 0x0f;

y &= 0x01;

if ( y )

temp |= 0x40;  /* 如果在第2行 */

temp |= 0x80;


LCD_WRITE( temp, COM );

LCD_WRITE( 0x0f, COM );

}



/* 关游标 */

void LCD_DELET_CUR_P( void )

{

LCD_WRITE( 0x0c, COM );

}


使用:

LCD_CSH();

lcd_dispaly_str(0,0,"dasdasas");


关键字:PIC16  单片机  LCD1602  驱动  程序  PIC16F877A  PIC16F887 引用地址:PIC16 单片机 LCD1602 驱动 程序 PIC16F877A PIC16F887

上一篇:PIC单片机开发需注意的几个问题
下一篇:单片机 步进电机 驱动程序 ULN2003 28BYJ-48 5线4相电机 PIC16F877A

推荐阅读最新更新时间:2024-11-17 03:34

基于stm32单片机的Grayhill编码器/开关软件设计
1、初识编码器,像示波器的旋转按钮,可左旋右旋,还可以按下,我们使用的是Grayhill编码器,如下图所示: 从图中可以看出,该编码器一共有6个IO,从1-6分别为GND,GND,C,B,A,VCC,。 其中VCC和GND接3.3V和GND,A、B对应旋转时电平的跳变IO,C对应按下时电平的跳变IO。 (1) 硬件电路设计上,为了方便代码编写与理解,最好把编码器的A、B接到单片机相邻的GPIO中,即使用同一个中断处理函数,比如本设计A、B分别接到PB12和PB11。C接任一个GPIO,当成中断使用。 (2) 顺时针和逆时针旋转编码器时,慢慢旋转一个单位(手指头会有明显旋转到位的感觉),用万用表测量A、B对应的IO
[单片机]
基于stm32<font color='red'>单片机</font>的Grayhill编码器/开关软件设计
单片机:STC89C52的最小单元
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 标准功能 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外
[单片机]
<font color='red'>单片机</font>:STC89C52的最小单元
vxworks中断服务程序
中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。调试中经常采用后一种方式。在VxWorks中有两个不同的函数可提供挂中断:intConnect和pciIntConnect。两者的区别是intConnect使用的中断向量是独占的,pcilntConnect则可在各个不同的ISR之间共享中断向量。实际上pcilntConnect内部调用了 intConnect函数,在内部使用一个链表来管理多个不同的ISR。pciln
[工业控制]
WinCE的OLED驱动程序设计
  随着计算机技术和嵌入式技术的迅猛发展, 嵌入式软、硬件设计需求越来越广泛, 嵌入式软件开发, 特别是嵌入式软件的驱动开发,成为一个热点。   Windows CE是一个新的、可移植的、实时的、模块化的操作系统,具有简捷、高效的完全抢先式多任务操作核心,支持强大的通信和图形显示功能, 能够适应广泛的系统需求, 在最新一代的工业和家用电子设备中得到了广泛的应用。   在进行嵌入式Windows CE 项目开发的过程中, 经常需要根据需求定制显示屏, 如何为定制的显示屏开发Windows CE 驱动程序成为嵌入式系统开发的关键步骤。本文在深入研究Windows CE 驱动程序工作原理的基础上, 以维信诺VGG13264C 132×6
[电源管理]
WinCE的OLED<font color='red'>驱动</font><font color='red'>程序</font>设计
PIC中档单片机的中断总结
与51或者其他系列的单片机相比,PIC 单片机的中断机制有其特殊之处,针对我们一些初学者存在的一些问题和疑惑,我在此做一个个人总结,不当的地方,请站友们指正。 先摘引三个对PIC中断理解的回帖,然后我再对中断活动的过程、应该注意的事项、及一个疑惑进行较详细的总结和解释。 --------------- john frank :关于pic中断有些不明白的地方 借用大虾的程序; ;******************** 中断服务代码 btfss INTCON,T0IE ; 判断是否为T0中断 goto other_int btfss INTCON,T0IF ; it ’s the t
[应用]
采用P87LPC764单片机中央空调智能管理系统
  常见的控制方法是按“高、中、低、关”分档模式控制,其缺点是房间的温度需要手动调节,各种环境因素的变化常常会使人感到不适。风机转速控制方案,采用变频器调速控制,有效地解决了上述问题,达到了室内温度自动调节的目的,大大的节省了能源。   中央空调系统主要由制冷机、冷却水循环系统、冷冻水循环系统,风机盘管系统和散热水塔组成。制冷机通过压缩机将制冷剂压缩成液态后送蒸发器中与冷冻水进行热交换,将冷冻水制冷,冷冻水泵将冷冻水送到各风机风口的冷却盘管中,由风机吹送冷风达到降温的目的。在系统中,冷动泵、冷却泵、水塔风扇变频器采用开环控制,由维护人员根据季节不同和负荷的变化进行调节,在每一个房间内都安装热交换器和循环风机,通过控制风机的转速来
[单片机]
采用P87LPC764<font color='red'>单片机</font>中央空调智能管理系统
51单片机8×8LED点阵显示数字与字符
#include AT89X52.H unsigned char code tab ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code digittab ={ {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},// ,0*/ {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},// ,0*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},// _ ,0*/ {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF}
[单片机]
连结USB闪存盘与PIC微控制器的简单方案
本文介绍利用低成本PIC微控制器通过USB2.0全速桥接器芯片连接USB闪存盘之设计方法,其着眼于PIC微控制器及VNC1L智能型USB Host桥接器芯片之嵌入式接口的硬件设计,以及说明如何在PIC微控制器进行程序开发,使普遍存在的USB闪存盘能在广泛的嵌入式应用中作为卸除式的储存媒体。 背景简介 今日USB装置几乎无所不在,市面上充斥着各式各样的USB闪存盘和各种USB外围装置,由于这些装置大多是属于 USB Slave,应用领域也就局限在PC市场。近来USB闪存盘的价格快速滑落,刺激出新的应用,如何在原有产品上使用USB闪存盘成为许多公司的难点。想要在8与16位微控制器中增加USB Host的功能,设计过程、
[单片机]

推荐帖子

享用一生的智慧书
享用一生的智慧书————本书收藏了210个启迪人生的故事,在所有智慧之上,我们更应学会思考,应以何样态度解读人生第一部分反败为胜第二部分自我拯救第三部分主宰自己第四部分智慧人生第五部分意志胜利享用一生的智慧书好书!顶!!!回复:享用一生的智慧书回复:享用一生的智慧书谢谢回复:享用一生的智慧书非常感谢回复:享用一生的智慧书顶!:D回复:享用一生的智慧书好书!谢谢!回复:享用一生的智慧书ding回复:享用一生的智
SuperStar515 嵌入式系统
STM件I2C驱动0.96OLED显示屏
STM32的硬件I2C我前前后后折腾了不下半个月,突然感觉自己效率低,在浪费时间,不过好在今天终于用32的此内容由EEWORLD论坛网友七月秋原创,如需转载或用于商业用途需征得作者同意并注明出处STM件I2C驱动0.96OLED显示屏
七月秋 stm32/stm8
开发环境出了问题
小弟家中使用vs2005环境,以前安了winmobile的中文sdk,但是最近建了一个新的工程,以前可以选择使用什么模拟器(活动解决方案平台)里有中文的模拟器,但是现在只有一个英文的,编译调试时就启动一个英文的模拟器,这是咋回事呀,怎么让环境找到我的中文模拟器。中文的模拟器是可以单独打开的,但是环境就是没有中文sdk模拟器的这个选项。多谢各位高手指教。开发环境出了问题去看看VS2005菜单:工具/设备仿真器管理器中是否有你的中文模拟器如果没有,得装试试
一诺千金 嵌入式系统
MSP430F247两串口中断为什么不能同时工作?
芯片为MSP430F247有两个串口收发模块,同时设置串口接收中断时,只有串口1模块响应中断串口0模块没有响应。当设置两个中的任意其中一个时则都是正常响应对应中断的。代码如下://******************************************************************************#includemsp430.hintmain(void){WDTCTL=WDTPW+WDTHOLD;//StopWDTif(CA
Duan 微控制器 MCU
μC/OS—Ⅱ在TMS320LF2407上的移植及应用
μC/OS—Ⅱ在TMS320LF2407上的移植及应用μC/OS—Ⅱ在TMS320LF2407上的移植及应用
fish001 微控制器 MCU
单片机操作2.4寸TFT彩屏的源码与大家共享!含SD驱动!
元旦在淘宝上,花39个银子,淘了块2.4寸的TFT彩屏模块,,用店主提供的代码,用STC的51单片机,驱动起来,也显示图片了,发帖庆祝,现将店主提供的源码,拿来与大家共享。希望对大家有帮助。单片机操作2.4寸TFT彩屏的源码与大家共享!含SD驱动!下载了STC单片机好用哦下载了STC单片机好用哦STC单片机好用哦谢谢楼主分享。回复楼主vitadesign的帖子分享快乐支持啊,谢谢分享学习学习学习谢谢,顶一下upup谢谢分享学习一下谢谢
vitadesign 单片机
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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