- /*---------------------------------------------------------------------------------------------------------*/
- /* */
- /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved. */
- /* */
- /*---------------------------------------------------------------------------------------------------------*/
- #include <stdio.h>
- #include "NUC1xx.h"
- #include "NUC1xxM051Seriescfg.h"
- #include "Driver\DrvGPIO.h"
- #include "Driver\DrvSYS.h"
- #define LCD_POWER_ON DrvGPIO_ClrBit(E_GPE,5); //接LCD1602 VSSPin,需要强制输出0,做GND用
- #define LCD_VO_Adj DrvGPIO_ClrBit(E_GPC,14); //对比度调节
- char table1[]={"HOT250"};
- uint8_t i;
- /*************************************************************************************
- ** Function name: DelayMs
- ** Descriptions: 延时1ms子程序
- ** input parameters: 无
- ** output parameters: 无
- ** Returned value: 无
- *************************************************************************************/
- void DelayMs(uint32_t z)
- {
- uint32_t i,j;
- for(i=z;i>0;i--)
- for(j=2000;j>0;j--);
- }
- void delay_nus(unsigned int t)
- {
- unsigned int i=0;
- while(t--)
- {
- for(i=0;i<1;i++);
- }
- }
- void delay_nms(unsigned char n)
- {
- unsigned char i,j;
- unsigned int k;
- i=12; //主频多少i就多少
- //延时用这个很无奈,不同的系统有不同的方法
- //好在只有初始化时使用,对系统影响不大
- for(;i>0;i--)
- {
- for(j=0;j<n;j++)
- {
- for(k=0;k<980;k++);
- }
- }
- }
- 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
- }
- void Init_System(void)
- {
- /* Unlock the locked registers before access */
- UNLOCKREG(x); //寄存器锁定键地址寄存器(RegLockAddr) :有些系统控制寄存器需要被保护起来,以防止误操作而影响芯片运行,
- //这些寄存器在上电复位到用户解锁定之前是锁定的。用户可以连续依次写入“59h”, “16h” “88h”到0x5000_0100解锁定.
- /* Enable the 12MHz oscillator oscillation */
- DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //SYSCLK->PWRCON.XTL12M_EN = 1;
- /* Waiting for 12M Xtal stable */
- //while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1); //SYSCLK->CLKSTATUS.XTL12M_STB
- /*eClkSrc - [in] E_SYS_XTL12M / E_SYS_XTL32K / E_SYS_OSC22M / E_SYS_OSC10K / E_SYS_PLL */
- // Note: Only some of NuMicro NUC100 Series support this function.
- DrvSYS_Delay(5000);
- LOCKREG(x);
- //向“0x5000_0100”写入任何值,就可以重锁保护寄存器
- }
- void write_com(uint8_t com)
- {
- //ChkBusy();
- /*RS----PB2 写指令 拉低 */
- DrvGPIO_ClrBit(E_GPC,15);
- //GPIOA->DOUT |= (com << 2);
- //DelayMs(1);
- delay_nms(1);
- DrvGPIO_SetPortBits(E_GPA,com<<2);
- /* EN---PB3 */
- DrvGPIO_SetBit(E_GPC,7);
- // DelayMs(4);
- delay_nms(1);
- DrvGPIO_ClrBit(E_GPC,7);
- //DelayMs(6);
- }
- void write_dat(uint8_t dat)
- {
- // ChkBusy();
- /*RS----PB14 写指令 拉高 */
- DrvGPIO_SetBit(E_GPC,15);
- // DrvGPIO_ClrBit(E_GPB,13);
- // delay_nus(2);
- //DrvGPIO_SetPortBits(E_GPA,dat<<2);
- //GPIOA->DOUT |= (dat<<2);
- //DelayMs(1);
- delay_nms(1);
- GPIOAs.DOUT.Regs = (dat << 2);
- /* EN---PB12 */
- DrvGPIO_SetBit(E_GPC,7);
- delay_nus(2);
- //DelayMs(4);
- DrvGPIO_ClrBit(E_GPC,7);
- //DelayMs(5);
- //DrvGPIO_ClrBit(E_GPB,14);
- }
- /*************************************************************************************
- ** Function name: Init_LCD
- ** Descriptions: LCD初始化程序
- ** input parameters: 无
- ** output parameters: 无
- ** 介绍 : RS----PB14
- RW----PB13
- EN----PB12
- D0~D7----PA0-PA7
- *************************************************************************************/
- void Init_LCD(void)
- {
- /* 只写数据 所以RW拉低*/
- DrvGPIO_ClrBit(E_GPC,6);
- //DelayMs(1);
- write_com(0x01);
- write_com(0x38);
- //DelayMs(5);
- write_com(0x0f); //开显示,显示光标,光标闪烁
- write_com(0x06);//当写一个字符后地址指针+1;且光标加1,当写一个字符整屏不移动
- DelayMs(10);
- }
- /*************************************************************************************
- ** Function name: main
- ** Descriptions: LED2跟随LED1的亮灭而灭亮测试程序
- ** 现 象:下载代码,运行程序,则LED1亮LED2灭 LED1灭LED2亮循环反复
- ** input parameters: 无
- ** output parameters: 无
- ** Returned value: 无
- *************************************************************************************/
- int main (void)
- {
- Init_System();
- Init_GPIO();
- Init_LCD();
- LCD_POWER_ON;
- LCD_VO_Adj;
- write_com(0x80+0x14);
- for(i=0;i<10;i++)
- {
- write_dat(table1[i]);
- write_com(0x18);
- DelayMs(400);
- }
- while(1);
- }
今天装了大叔的HOTISP新版本 很给力啊 不错不错啊
实现现象
显示不是很清晰 一是手机像素不高 二是 因为没有使用PWM调背光 或者用电位器调 而是直接拉低的 所以显示不是很清晰
|