/* 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");
上一篇:PIC单片机开发需注意的几个问题
下一篇:单片机 步进电机 驱动程序 ULN2003 28BYJ-48 5线4相电机 PIC16F877A
推荐阅读最新更新时间:2024-11-17 03:34
推荐帖子
- 享用一生的智慧书
- 享用一生的智慧书————本书收藏了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 单片机
设计资源 培训 开发板 精华推荐
- 基于AT89S51数字电子密码锁
- 使用 Richtek Technology Corporation 的 RT9088GQW 的参考设计
- XRP6658EVB,XRP6658 同步电流模式 PWM 降压转换器评估板
- LTC6990CS6#TRMPBF 使用 8 位 DAC 编程控制振荡器 NDIV 的典型应用
- 具有串行接口的 LED 显示驱动器参考设计
- 基于鸿蒙Hi3861主控16路舵机控制板
- 用于简单时钟振荡器的 NCP300LSN44T1 4.4V 电压检测器的典型应用
- 具有 5V 输出的 LT1076IR 正负转换器的典型应用
- 使用 ON Semiconductor 的 ILC7082 的参考设计
- 基于UPD78F0865MC MCU的SPC56XXMB、SPC56评估主板