主函数
#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
|