PIC16F91x系列单片机驱动1602液晶屏程序
数 名: void Write_1602_data(uchar gdata) * 函数功能: 写数据 * 入口参数: gdata--数据 * 返 回: 无 *******************************************************************************/ /*----------- 写数据 -------------*/ void Write_1602_data(uchar gdata) { if(Chk_1602_busy()) //写数据必须是在LCD空闲模式下才能写 { LCD_RS=1; //选择数据 LCD_RW=0; //选择写 PORTC=gdata; LCD_EN=1; //使能 Delay_US(30); LCD_EN=0; Delay_US(10); } } /****************************************************************************** * 函 数 名: void INIT_1602(void) * 函数功能: 初始化1602LCD * 入口参数: 无 * 返 回: 无 *******************************************************************************/ /*-----------1602初始化函数-------------*/ void INIT_1602(void) { Delay_Ms(15); Write_1602_command(0x38,0); //设置16X2显示,5X7点阵,8位数据传送,不检测忙信号 Delay_Ms(5); Write_1602_command(0x38,0); Delay_Ms(5); Write_1602_command(0x38,0); //设置16X2显示,5X7点阵,8位数据传送,不检测忙信号 Write_1602_command(0x38,1); //设置16X2显示,5X7点阵,8位数据传送,检测忙信号 Write_1602_command(0x08,1); //关闭显示、无光标、检测忙信号 Write_1602_command(0x01,1); //清屏、光标归位、AC=0、检测忙信号 Write_1602_command(0x06,1); //显示光标右移位置、检测忙信号 Write_1602_command(0x0c,1); //显示功能开、无光标 } /****************************************************************************** * 函 数 名: void Display_1602_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata) * 函数功能: 显示字符串 * 入口参数: gadd_start-列号,uchar gline-行号,glength-数据长度,pdata-数组元素 * 返 回: 无 *******************************************************************************/ /*-----------显示字符串-------------*/ // 列号 行号 数据长度 数组元素 void Display_1602_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata) { uchar gaddress; uchar *pdat; uchar gcount=0; if(!gline) //第0行 { gaddress=0x80+gadd_start; } //地址对应 else { gaddress=0xc0+gadd_start; } //第一行 for(;gcount Write_1602_command(gaddress,1); //设定数据地址 Write_1602_data(*pdata); //取设定地址里的数据 gaddress++; pdata++; } } /****************************************************************************** * 函 数 名: void Display_1602(uchar x,uchar y,uchar gdata) * 函数功能: 指定位置显示字符 * 入口参数: x-起始地址横坐标,y-起始地址纵坐标,gdata-要显示的字符 * 返 回: 无 *******************************************************************************/ /*-----------指定位置显示字符-------------*/ void DispChar_XY_1602(uchar x,uchar y,uchar gdata) { uchar gaddress; if(!y) { gaddress=0x80+x; } else { gaddress=0xc0+x; } Write_1602_command(gaddress,1); //设定数据地址 Write_1602_data(gdata); } /*-----------指定位置显示数字-------------*/ void DispNum_XY_1602(uchar x,uchar y,uchar gdata) { uchar gaddress; if(!y) { gaddress=0x80+x; } else { gaddress=0xc0+x; } Write_1602_command(gaddress,1); //设定数据地址 Write_1602_data(gdata+0x30); } /*-----------清屏-------------*/ void Clear_Display(void) { Write_1602_command(0x01,1); Delay_Ms(5); } void Open_Disp(void) { Write_1602_command(0x0c,1); } void Close_Disp(void) { Write_1602_command(0x08,1); } /*-----------显示光标-------------*/ void Display_Cursor(void) { Write_1602_command(0x06,1); //显示光标右移位置、检测忙信号 Write_1602_command(0x0D,1); //显示功能开、无光标 } /*-----------1602端口初始化-------------*/ void Port_1602_Init(void) { PORTA=0x00; CMCON0=0xff; ANSEL = 0x00; TRISA=0X00; PORTC=0x00; TRISC=0x00; LCDCON=0x00; } Display.h如下: #ifndef __Display_H__ #define __Display_H__ #define uchar unsigned char #define uint unsigned int #define TESTBIT(a,b
PIC16F91x系列单片机1602液晶 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)