打印
[新手园地]

LCD1602小试

[复制链接]
1821|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
参照各位前辈的代码写了个1602的显示,接了个电位调对比度。
 /*---------------------------------------------------------------------------------------------------------*/
//实现功能: LCD1602显示
//创建时间: 2012/09/24
//修改时间:
//创建人员: Mr.Moon
/*---------------------------------------------------------------------------------------------------------*/

#include <stdio.h>
#include "NUC1xx.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"
/******宏定义LCD1602 RS RW EN 管脚************/
#define LCD_RS E_GPC,15 //LCD1602的RS
#define LCD_EN E_GPC,7 //LCD1602的EN
#define LCD_RW E_GPC,6 //LCD1602的WR
/******宏定义LCD1602 RS RW EN 高低电平************/
#define L_LCD_RS DrvGPIO_ClrBit(LCD_RS) //RS=0
#define H_LCD_RS DrvGPIO_SetBit(LCD_RS) //RS=1
#define L_LCD_EN DrvGPIO_ClrBit(LCD_EN) //EN=0
#define H_LCD_EN DrvGPIO_SetBit(LCD_EN) //EN=1
#define L_LCD_RW DrvGPIO_ClrBit(LCD_RW) //RW=0
#define H_LCD_RW DrvGPIO_SetBit(LCD_RW) //RW=1



int8_t table1[]={"bbs.21ic.com"};
int8_t table2[]={"Mr.Moon"};


/************************************************************************************
** Function name: Init_GPIO
** Descriptions: GPIO初始
** input parameters: none
** output parameters: none
** Returned value: none
*************************************************************************************/

void Init_GPIO(void)
{
/* D0~D7----PA0-PA7 */
DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 5,E_IO_OUTPUT);
DrvGPIO_Open( E_GPA, 6, E_IO_OUTPUT);
DrvGPIO_Open( E_GPA, 7, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 8, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 9, E_IO_OUTPUT );

DrvGPIO_Open( E_GPC, 15, E_IO_OUTPUT); //RS
DrvGPIO_Open( E_GPC, 6, E_IO_OUTPUT); //RW
DrvGPIO_Open( E_GPC, 7, E_IO_OUTPUT ); //EN


}

/************************************************************************************
** Function name: Init_System
** Descriptions: 系统设置
** input parameters: none
** output parameters: none
** Returned value: none
*************************************************************************************/
void Init_System(void)
{
UNLOCKREG();
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //SYSCLK->WRCON.XTL12M_EN = 1;
DrvSYS_Delay(5000);
LOCKREG();
}


/************************************************************************************
** Function name: write_com
** Descriptions: LCD1602写指令
** input parameters: com
** output parameters: none
** Returned value: none
*************************************************************************************/

void write_com(uint8_t com)
{
L_LCD_RS;
DrvGPIO_SetPortBits(E_GPA,com<<2);
H_LCD_EN;
DrvSYS_Delay(2000); //延时200ns建立数据,根据LCD1602手册来确定延时时间
L_LCD_EN;
}


/************************************************************************************
** Function name: write_data
** Descriptions: LCD1602写数据
** input parameters: dat
** output parameters: none
** Returned value: none
*************************************************************************************/
void write_data(uint8_t dat)
{
H_LCD_RS;
DrvGPIO_SetPortBits(E_GPA,dat<<2);
H_LCD_EN;
DrvSYS_Delay(2000); //延时200ns建立数据,根据LCD1602手册来确定延时时间
L_LCD_EN;
}

/************************************************************************************
** Function name: write_bit_data
** Descriptions: LCD1602写字符串
** input parameters: table字符串指针 y=1第一行 y=2第二行 x第几位
** output parameters: none
** Returned value: none
*************************************************************************************/
void write_bit_data(int8_t *table,uint8_t y,uint8_t x)
{
uint8_t b=0;
if(y==1){write_com(0x80+x);} //第一行
if(y==2){write_com(0x80+0x40+x);}//第二行
while(table!= '\0') //判断字符串是不是最后一位
{
write_data(table); //显示字符
b++;
}
}

/************************************************************************************
** Function name: Init_LCD
** Descriptions: LCD1602初始
** input parameters: none
** output parameters: none
** Returned value: none
*************************************************************************************/
void Init_LCD(void)
{

L_LCD_RW;
write_com(0x01); // 只写数据 所以RW拉低
write_com(0x38);
write_com(0x38); //一定要写两次0x38;否则只显示第一行
write_com(0x0f); //开显示,显示光标,光标闪烁
write_com(0x06);//当写一个字符后地址指针+1;且光标加1,当写一个字符整屏不移动
}


/************************************************************************************
** Function name: int main
** Descriptions: 主函数
** input parameters: none
** output parameters: none
** Returned value: none
*************************************************************************************/
int main (void)
{
Init_System();
Init_GPIO();
Init_LCD();
DrvGPIO_ClrBit(E_GPE,5); //接LCD1602 VSSPin,需要强制输出0,做GND用
DrvGPIO_Open(E_GPC,14,E_IO_QUASI); //对比度调节,我焊的个电位来调对比度,

write_bit_data(table1,1,2);
write_bit_data(table2,2,4);
while(1);
}

相关帖子

沙发
月亮先生|  楼主 | 2012-9-24 23:51 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

0

粉丝