参照各位前辈的代码写了个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);
- }
|