打印
[新手园地]

【第六期】NUC120学习笔记三--LCD1602

[复制链接]
1749|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
主函数
#include "includes.h"

uint8_t table1[]=" bbs.21ic.com ";
uint8_t table2[]=" searover79 ";

uint8_t i=0,j=0;

int main (void)
{
UNLOCKREG();
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //使用外部12M晶振

delay_ms(100); //等待外部晶振就绪
LOCKREG();

LCD_GPIO_initial();
LCD_initial();

LCD_command_write(0x80); //写DDRAM地址,第一行
delay_ms(10);
for (i=0;i<16;i++)
{
LCD_data_write(table1[i]);
delay_ms(10);
}

LCD_command_write(0xc0); //写DDRAM地址,第二行
delay_ms(10);
for (j=0;j<16;j++)
{
LCD_data_write(table2[j]);
delay_ms(10);
}

while (1);
}


includes.h
#ifndef __INCLUDES_H__
#define __INCLUDES_H__

#include <NUC1xx.h>
#include <DrvGPIO.h>
#include <DrvSYS.h>
#include "lcd1602.h"

#define uint8_t unsigned char

extern void LCD_GPIO_initial(void);
extern void delay_us(uint32_t t);
extern void delay_ms(uint32_t a);
extern void LCD_command_write(uint8_t com);
extern void LCD_initial(void);
extern void LCD_data_write(uint8_t dat);

#endif

lcd1602.c
/*
** 文件名称:lcd1602.c
** 文件说明:lcd1602液晶显示,8位数据总线
** 管脚分配:
** GPA2:DB0
** GPA3:DB1
** GPA4:DB2
** GPA5:DB3
** GPA6:DB4
** GPA7:DB5
** GPA8:DB6
** GPA9:DB7

** GPC14:RS
** GPC15:RW
** GPC6: EN
** GPE5: VO
*/

#include "lcd1602.h"

/*
** 函数名称:LCD_GPIO_Init
** 函数说明:GPIO初始化,设置为输出模式
*/
void LCD_GPIO_initial(void)
{
DrvGPIO_Open(LCD_DB0,E_IO_OUTPUT);
DrvGPIO_Open(LCD_DB1,E_IO_OUTPUT);
DrvGPIO_Open(LCD_DB2,E_IO_OUTPUT);
DrvGPIO_Open(LCD_DB3,E_IO_OUTPUT);
DrvGPIO_Open(LCD_DB4,E_IO_OUTPUT);
DrvGPIO_Open(LCD_DB5,E_IO_OUTPUT);
DrvGPIO_Open(LCD_DB6,E_IO_OUTPUT);
DrvGPIO_Open(LCD_DB7,E_IO_OUTPUT);

DrvGPIO_Open(LCD_VO,E_IO_OUTPUT);
DrvGPIO_Open(LCD_RS,E_IO_OUTPUT);
DrvGPIO_Open(LCD_RW,E_IO_OUTPUT);
DrvGPIO_Open(LCD_EN,E_IO_OUTPUT);
}

void delay_us(uint32_t t) //延时
{
uint32_t i=0;
while(t--)
{
for (i=0;i<1;i++);
}
}

void delay_ms(uint32_t a)
{
uint32_t j=0;
while(a--)
{
for (j=0;j<1000;j++);
}
}

/*
** 函数名称:LCD_command_write
** 函数说明:液晶写指令子程序
** 输入参数:com
** 输出参数:无
** 返回值: 无
** 其他说明:EN=1,RS=0,RW=0,将DB0-DB7的指令代码写入指令寄存器中
*/
void LCD_command_write(uint8_t com)
{
CLR_EN;
delay_us(5);
CLR_RS;
CLR_RW;
delay_us(5);
SET_EN;
delay_us(5);
GPIOA -> DOUT = com << 2;
// LCD_Data_Port -> DOUT = com << 2;
delay_us(5);
CLR_EN;
delay_us(5);
}

void LCD_initial(void) //液晶初始化
{
LCD_command_write(0x01); //clear display
LCD_command_write(0x06); //I/D=1光标右移AC自动加1,S=0显示不发生移位
LCD_command_write(0x0e); //开显示,显示光标,不闪烁
// LCD_command_write(0x18); //光标和显示一起向左移动,AC值不变
LCD_command_write(0x38); //8位数据总线,2行显示模式,5*7点阵+光标显示模式
}

/*
** 函数名称:LCD_data_write
** 函数说明:液晶写数据子程序
** 输入参数:dat
** 输出参数:无
** 返回值: 无
** 其他说明:EN=0,RS=1,RW=0,将DB0-DB7数据写入数据寄存器中
*/
void LCD_data_write(uint8_t dat)
{
CLR_EN;
delay_us(5);
SET_RS;
CLR_RW;
delay_us(5);
SET_EN;
GPIOA -> DOUT = dat << 2;
// LCD_Data_Port -> DOUT = dat<<2; //不知道这句为什么会报错,而上一句不会
delay_us(5);
CLR_EN;
delay_us(5);
}

lcd1602.h
/*
** 文件名称:lcd1602.h
** 文件说明:lcd1602液晶显示,8位数据总线
** 管脚分配:
** GPA2:DB0
** GPA3:DB1
** GPA4:DB2
** GPA5:DB3
** GPA6:DB4
** GPA7:DB5
** GPA8:DB6
** GPA9:DB7

** GPC14:RS
** GPC15:RW
** GPC6: EN
** GPE5: VO
*/
#ifndef __INCLUDES_H__
#define __INCLUDES_H__

#include <NUC1xx.h>
#include "DrvGPIO.h"

#define LCD_DB0 E_GPA,2 //LCD数据口
#define LCD_DB1 E_GPA,3
#define LCD_DB2 E_GPA,4
#define LCD_DB3 E_GPA,5
#define LCD_DB4 E_GPA,6
#define LCD_DB5 E_GPA,7
#define LCD_DB6 E_GPA,8
#define LCD_DB7 E_GPA,9

#define LCD_Data_Port GPIOA; //LCD数据总线

#define LCD_VO E_GPE,5 //LCD驱动电压
#define LCD_RS E_GPC,14
#define LCD_RW E_GPC,15
#define LCD_EN E_GPC,6

#define CLR_VO DrvGPIO_ClrBit(LCD_VO) //LCD_VO拉低
#define SET_VO DrvGPIO_SetBit(LCD_VO) //LCD_VO拉高
#define CLR_RS DrvGPIO_ClrBit(LCD_RS) //LCD_RS拉低
#define SET_RS DrvGPIO_SetBit(LCD_RS) //LCD_RS拉高
#define CLR_RW DrvGPIO_ClrBit(LCD_RW) //LCD_RW拉低
#define SET_RW DrvGPIO_SetBit(LCD_RW) //LCD_RW拉高
#define CLR_EN DrvGPIO_ClrBit(LCD_EN) //LCD_EN拉低
#define SET_EN DrvGPIO_SetBit(LCD_EN) //LCD_EN拉高

extern void LCD_GPIO_initial(void);
extern void delay_us(uint32_t t);
extern void delay_ms(uint32_t a);
extern void LCD_command_write(uint8_t com);
extern void LCD_initial(void);
extern void LCD_data_write(uint8_t dat);

#endif

相关帖子

沙发
searover79|  楼主 | 2012-4-20 18:47 | 只看该作者
本帖最后由 searover79 于 2012-4-20 18:56 编辑

呵呵,图照的不咋样。

IMG_0381.jpg (1.07 MB )

IMG_0381.jpg

IMG_0382.jpg (1.86 MB )

IMG_0382.jpg

使用特权

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

本版积分规则

26

主题

301

帖子

0

粉丝