久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5334|回復: 0
打印 上一主題 下一主題
收起左側

LPC1114驅動1602液晶程序(第一部分)

[復制鏈接]
跳轉到指定樓層
樓主
ID:73735 發表于 2015-2-18 23:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
說明:第二部分為驅動程序核心部分,需要第二部分:http://www.zg4o1577.cn/bbs/dpj-31563-1.html

第二部分LCD.h文件:

LCD.h文件

#ifndef     __LCD_H__
#define     __LCD_H__


#define   TESTBIT(a,b) ((a)&(1<<(b)))

#define                LCD_RS_Low()                 LPC_GPIO2->DATA &=~(1<<8)          //給P2.8位寫0
#define                LCD_RS_High()                 LPC_GPIO2->DATA |=(1<<8)           //給P2.8位寫1

#define                LCD_RW_Low()                 LPC_GPIO2->DATA &=~(1<<9)          //給P2.9位寫0
#define                LCD_RW_High()                 LPC_GPIO2->DATA |=(1<<9)           //給P2.9位寫1

#define                LCD_EN_Low()     LPC_GPIO2->DATA &=~(1<<10)         //給P2.10位寫0
#define                LCD_EN_High()    LPC_GPIO2->DATA |=(1<<10)          //給P2.10位寫1




void Set_GPIO_Output(void);
void Set_GPIO_Input(void);

void LCD_GPIO_Init(void);
void Write_Data_Port(unsigned char Data);

unsigned char Read_Data_Port(void);
unsigned char Chk_LCD_busy(void);

void Write_LCD_command(unsigned char gcmd,unsigned char gvalue);
void Write_LCD_data(unsigned char gdata);

void INIT_LCD(void);
void Display_LCD_string(unsigned char gadd_start,unsigned char gline,unsigned char glength,const unsigned char *pdata);

void DispChar_XY_LCD(unsigned char x,unsigned char y,unsigned char gdata);
void DispNum_XY_LCD(unsigned char x,unsigned char y,unsigned char gdata);

void Clear_Display(void);

#endif

system_LPX11xx.c(時鐘配置程序)

#include <stdint.h>
#include "LPC11xx.h"

#define CLOCK_SETUP           0

#define MAIN_PLL_SETUP        0
#define MAIN_CLKSRCSEL_Val    0x00000001
#define MAIN_PLL_M_Val        0x00000003
#define MAIN_PLL_P_Val        0x00000001
#define SYS_AHB_DIV_Val       4/* 1 through 255, typical is 1 or 2 or 4 */

/*
//-------- <<< end of configuration section >>> ------------------------------
*/

/*----------------------------------------------------------------------------
  DEFINES
*----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
  Define clocks
*----------------------------------------------------------------------------*/
#define XTAL        (12000000UL)        /* Oscillator frequency               */
#define OSC_CLK     (      XTAL)        /* Main oscillator frequency          */
#define IRC_OSC     (12000000UL)        /* Internal RC oscillator frequency   */
#define WDT_OSC     (  250000UL)        /* WDT oscillator frequency           */

/*----------------------------------------------------------------------------
  Clock Variable definitions
*----------------------------------------------------------------------------*/
uint32_t ClockSource = IRC_OSC;
uint32_t SystemFrequency = IRC_OSC; /*!< System Clock Frequency (Core Clock)  */
uint32_t SystemAHBFrequency = IRC_OSC;

/**
* Misc. clock generation modules
*
* @param  none
* @return none
*
* @brief  Setup the microcontroller system.
*         Initialize the System and update the SystemFrequency variable.
*/
void Main_PLL_Setup ( void )
{
  uint32_t regVal;

  ClockSource = OSC_CLK;
  LPC_SYSCON->SYSPLLCLKSEL = MAIN_CLKSRCSEL_Val;   /* Select system OSC--PLL時鐘源選中系統振蕩器 */
  LPC_SYSCON->SYSPLLCLKUEN = 0x01;                 /* Update clock source */
  LPC_SYSCON->SYSPLLCLKUEN = 0x00;                 /* toggle Update register once */
  LPC_SYSCON->SYSPLLCLKUEN = 0x01;
  while ( !(LPC_SYSCON->SYSPLLCLKUEN & 0x01) );    /* Wait until updated 等待系統振蕩器鎖定*/

  regVal = LPC_SYSCON->SYSPLLCTRL;
  regVal &= ~0x1FF;
  LPC_SYSCON->SYSPLLCTRL = (regVal | (MAIN_PLL_P_Val<<5) | MAIN_PLL_M_Val);/* P=1, M=4 */

  /* Enable main system PLL, main system PLL bit 7 in PDRUNCFG. */
  LPC_SYSCON->PDRUNCFG &= ~(0x1<<7);              /* PDRUNCFG第七位寫0,即系統PLL上電 */
  while ( !(LPC_SYSCON->SYSPLLSTAT & 0x01) );    /* Wait until it's locked */

  LPC_SYSCON->MAINCLKSEL = 0x01;              /* Select PLL clock output--選擇PLL輸出作為主時鐘 */
  LPC_SYSCON->MAINCLKUEN = 0x01;              /* Update MCLK clock source --允許更新主時鐘*/
  LPC_SYSCON->MAINCLKUEN = 0x00;              /* Toggle update register once */
  LPC_SYSCON->MAINCLKUEN = 0x01;
  while ( !(LPC_SYSCON->MAINCLKUEN & 0x01) );    /* Wait until updated 等待主時鐘鎖定*/

  LPC_SYSCON->SYSAHBCLKDIV = SYS_AHB_DIV_Val;    /* SYS AHB clock, typical is 1 or 2 or 4 --SYSAHBCLKDIV的值為1,即不分頻 AHB時鐘為12*4=48MHz*/

#if MAIN_PLL_SETUP
  SystemFrequency = ClockSource * (MAIN_PLL_M_Val+1);    /*系統時鐘=時鐘源*4MHz*/
#else
  SystemFrequency = ClockSource;
#endif
  SystemAHBFrequency = (uint32_t)(SystemFrequency/SYS_AHB_DIV_Val);   /*AHB時鐘=系統時鐘/AHB分頻值*/
  return;
}

/**
* Initialize the system
*
* @param  none
* @return none
*
* @brief  Setup the microcontroller system.
*         Initialize the System and update the SystemFrequency variable.
*/
void SystemInit (void)
{
  //uint32_t i;

#ifdef __DEBUG_RAM   
  LPC_SYSCON->SYSMEMREMAP = 0x1;/* remap to internal RAM */
#else
#ifdef __DEBUG_FLASH   
  LPC_SYSCON->SYSMEMREMAP = 0x2;/* remap to internal flash */
#endif
#endif

#if (CLOCK_SETUP)                       /* Clock Setup */
  /* bit 0 default is crystal bypass,
  bit1 0=0~20Mhz crystal input, 1=15~50Mhz crystal input. */
  LPC_SYSCON->SYSOSCCTRL = 0x01;

  /* main system OSC run is cleared, bit 5 in PDRUNCFG register */
  LPC_SYSCON->PDRUNCFG &= ~(0x1<<5);    /* PDRUNCFG的第五位寫0,即系統系統振蕩器上電 */
  /* Wait 200us for OSC to be stablized, no status
  indication, dummy wait. */
  for ( i = 0; i < 0x100; i++ );

#if (MAIN_PLL_SETUP)
  Main_PLL_Setup();  
#endif

#endif/* endif CLOCK_SETUP */

  /* System clock to the IOCON needs to be enabled or
  most of the I/O related peripherals won't work. */
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16);                  //使能IO配置模塊的時鐘
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<8);                   //開啟定時器Timer16_1時鐘


LPC_SYSCON->SYSAHBCLKDIV = SYS_AHB_DIV_Val;
SystemAHBFrequency = (uint32_t)(SystemFrequency/SYS_AHB_DIV_Val);   /*AHB時鐘=系統時鐘/AHB分頻值*/

  return;
}

main.c程序:


#include "LPC11XX.h"
#include "gpio.h"
#include "timer16.h"
#include "main.h"
#include "Delay.h"
#include "LCD.h"
#include "Key.h"

const unsigned char P[] = {"Bei-Jing"};

int main(void)
{
SystemInit();                             //系統初始化--主要是設置主時鐘和開啟所需模塊時鐘
GPIOInit();                                //GPIO初始化--主要是開啟GPIO時鐘


LPC_IOCON->PIO0_3 &= (~0x07);              //設置P2.0為GPIO
LPC_GPIO0->DIR |= (0x1<<3);                //設置P0.3為輸出


INIT_LCD();


DispChar_XY_LCD(15, 0, 'A');               //顯示A

DispChar_XY_LCD(15, 1, 'Y');               //顯示Y

Display_LCD_string(1, 0, 8, P);
Display_LCD_string(1, 1, 8, P);


while(1)
{
    GPIOSetValue( 0, 3, 0 );                 //給P0.3位寫0

Delay_Ms(1000);                          //延時

GPIOSetValue( 0, 3, 1 );                 //給P0.3位寫1

Delay_Ms(1000);                          //延時
  }
}

Delay.c程序:(延時程序使用Timer16_1實現)

#include "LPC11XX.h"
#include "gpio.h"
#include "timer16.h"
#include "Delay.h"

/*系統時鐘配置為48MHz,AHB不分頻,一次定時器時鐘為48Mhz,因此得出以下分頻值,匹配值*/

void Delay_Us(unsigned int DelayTimes)     /** setup timer #1 for delay */
{
//LPC_SYSCON->SYSAHBCLKCTRL |= (1<<8);     /*開啟定時器Timer16_1時鐘--時鐘配置中開啟該時鐘*/
  LPC_TMR16B1->TCR = 0x02;               /* reset timer */
  LPC_TMR16B1->PR  = 3;                 /* set prescaler to zero 根據AHB時鐘確定分頻值*/
  LPC_TMR16B1->MR0 = DelayTimes;             /* 所需的延時時間 */
  LPC_TMR16B1->IR  = 0xff;               /* reset all interrrupts 復位所有的中斷*/
  LPC_TMR16B1->MCR = 0x04;               /* stop timer on match --達到匹配停止*/
  LPC_TMR16B1->TCR = 0x01;               /* start timer 啟動定時器*/

while (LPC_TMR16B1->TCR & 0x01);           /*等待直到時間到*/
LPC_TMR16B1->TCR = 0x00;               /* Close timer --關閉定時器*/
}

void Delay_Ms(unsigned int DelayTimes)       /** setup timer #1 for delay */
{
//LPC_SYSCON->SYSAHBCLKCTRL |= (1<<8);       //開啟定時器Timer16_1時鐘
  LPC_TMR16B1->TCR = 0x02;               /* reset timer */
  LPC_TMR16B1->PR  = 3000;               /* set prescaler to zero */
  LPC_TMR16B1->MR0 = DelayTimes;
  LPC_TMR16B1->IR  = 0xff;               /* reset all interrrupts */
  LPC_TMR16B1->MCR = 0x04;               /* stop timer on match */
  LPC_TMR16B1->TCR = 0x01;               /* start timer */

while (LPC_TMR16B1->TCR & 0x01);           /*等待直到時間到*/
LPC_TMR16B1->TCR = 0x00;               /* Close timer */
}

void Delay_Sec(unsigned int DelayTimes)      /* * setup timer #1 for delay */
{
//LPC_SYSCON->SYSAHBCLKCTRL |= (1<<8);     //開啟定時器Timer16_1時鐘
  LPC_TMR16B1->TCR = 0x02;               /* reset timer */
  LPC_TMR16B1->PR  = 3000000;           /* set prescaler to zero */
  LPC_TMR16B1->MR0 = DelayTimes;
  LPC_TMR16B1->IR  = 0xff;               /* reset all interrrupts */
  LPC_TMR16B1->MCR = 0x04;               /* stop timer on match */
  LPC_TMR16B1->TCR = 0x01;               /* start timer */

while (LPC_TMR16B1->TCR & 0x01);           /*等待直到時間到*/
LPC_TMR16B1->TCR = 0x00;               /* Close timer */
}


Delay.h程序:(延時程序使用Timer16_1實現)


#ifndef     __DELAY_H__
#define     __DELAY_H__

void Delay_Us(unsigned int DelayTimes);            /*微秒延時函數*/

void Delay_Ms(unsigned int DelayTimes);            /*毫秒延時函數*/

void Delay_Sec(unsigned int DelayTimes);          /*秒延時函數*/



#endif








分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看成人小视频 | www.天天操| 麻豆av网| 成人精品福利 | 久久久69 | 日韩一区二区免费视频 | 国产高清精品一区二区三区 | 欧洲一区二区三区 | 国产精品亚洲综合 | 久久综合欧美 | 欧美jizzhd精品欧美巨大免费 | 亚洲精品视频免费 | 日本欧美大片 | 欧美一区二区在线观看 | 亚洲a视频 | 久久精品国产亚洲a | 国产成人精品一区二区三 | 九九综合 | 久久不卡| 国产视频福利一区 | 精品一区二区久久久久久久网站 | 国产精品亚洲片在线播放 | 欧美电影大全 | 成人免费在线视频 | av一二三区 | 中文字幕亚洲精品在线观看 | 欧美日韩国产精品一区二区 | 国产一区二区三区四区 | 亚洲一区二区 | 天天干天天操天天爽 | 欧美一级α片 | 精品欧美 | 精久久久 | 中文一区 | 伊人精品在线 | 国产成人久久av免费高清密臂 | 五月婷婷激情网 | 成人av播放 | 国产精品一区在线 | 午夜影院视频 | 日本三级线观看 视频 |