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