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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5522|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

LPC11XX驅(qū)動(dòng)1602程序_12MHz

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:73735 發(fā)表于 2015-2-18 23:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
LCD.c文件:

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

/*-----------設(shè)置D0-D7為輸出口-------------*/
void Set_GPIO_Output(void)
{
        LPC_GPIO2->DIR |= (0x1<<0);              //設(shè)置D0-D7為輸出
        LPC_GPIO2->DIR |= (0x1<<1);
        LPC_GPIO2->DIR |= (0x1<<2);
        LPC_GPIO2->DIR |= (0x1<<3);
        LPC_GPIO2->DIR |= (0x1<<4);
        LPC_GPIO2->DIR |= (0x1<<5);
        LPC_GPIO2->DIR |= (0x1<<6);
        LPC_GPIO2->DIR |= (0x1<<7);
}

/*-----------設(shè)置D0-D7為輸入口-------------*/
void Set_GPIO_Input(void)
{
        LPC_GPIO2->DIR        &= ~(0x1<<0);            //設(shè)置D0-D7為輸入
        LPC_GPIO2->DIR        &= ~(0x1<<1);
        LPC_GPIO2->DIR        &= ~(0x1<<2);
        LPC_GPIO2->DIR        &= ~(0x1<<3);
        LPC_GPIO2->DIR        &= ~(0x1<<4);
        LPC_GPIO2->DIR        &= ~(0x1<<5);
        LPC_GPIO2->DIR        &= ~(0x1<<6);
        LPC_GPIO2->DIR        &= ~(0x1<<7);         
}

/*-----------LCD端口初始化-------------*/
void LCD_GPIO_Init(void)
{
        //P2口可以用這種方式設(shè)置為GPIO,這種方式較合理正式。
        LPC_IOCON->PIO2_0 &= (~0x07);            //設(shè)置P2.0~P2.10為GPIO
        LPC_IOCON->PIO2_1 &= (~0x07);
        LPC_IOCON->PIO2_2 &= (~0x07);
        LPC_IOCON->PIO2_3 &= (~0x07);
        LPC_IOCON->PIO2_4 &= (~0x07);
        LPC_IOCON->PIO2_5 &= (~0x07);
        LPC_IOCON->PIO2_6 &= (~0x07);
        LPC_IOCON->PIO2_7 &= (~0x07);
       
        LPC_IOCON->PIO2_8 &= (~0x07);
        LPC_IOCON->PIO2_9 &= (~0x07);
        LPC_IOCON->PIO2_10 &=(~0x07);
       
       
        LPC_GPIO2->DIR |= (0x1<<0);              //設(shè)置D0-D7為輸出
        LPC_GPIO2->DIR |= (0x1<<1);
        LPC_GPIO2->DIR |= (0x1<<2);
        LPC_GPIO2->DIR |= (0x1<<3);
        LPC_GPIO2->DIR |= (0x1<<4);
        LPC_GPIO2->DIR |= (0x1<<5);
        LPC_GPIO2->DIR |= (0x1<<6);
        LPC_GPIO2->DIR |= (0x1<<7);
       
        LPC_GPIO2->DIR |= (0x1<<8);              //RS 設(shè)為輸出
        LPC_GPIO2->DIR |= (0x1<<9);              //R/W 設(shè)為輸出
        LPC_GPIO2->DIR |= (0x1<<10);             //EN 設(shè)為輸出
        LPC_GPIO3->DIR |= (0x1<<3);              //BackLighting 液晶屏背光設(shè)為輸出
       
        GPIOSetValue( 3, 3, 1 );                 //BackLighting位寫1,開啟液晶屏背光,寫0關(guān)閉液晶屏背光
}

/*-----------寫數(shù)據(jù)到D0-D7-------------*/
void Write_Data_Port(unsigned char Data)
{
        LPC_GPIO2->DATA &= ~(0xff);
  LPC_GPIO2->DATA |=Data;
}

/*-----------讀D0-D7的數(shù)據(jù)-------------*/
unsigned char Read_Data_Port(void)
{
        //unsigned char In_Data=0;
        //In_Data=LPC_GPIO2->DATA;
        //return In_Data;
        return(LPC_GPIO2->DATA);
       
}

/*******************************************************************************
* 函 數(shù) 名: uchar Chk_LCD_busy(void)
* 函數(shù)功能: 讀液晶忙通道數(shù)據(jù)
* 入口參數(shù): 無
* 返    回: 無
*******************************************************************************/
unsigned char Chk_LCD_busy(void)
{
  unsigned char gR_data;
  unsigned char gwait_time=0xff;    //設(shè)置忙超時(shí)數(shù)
       
        Set_GPIO_Input();                 //接收口設(shè)為輸入口
       
  LCD_RS_Low();                     //表示狀態(tài)
  LCD_RW_High();                    //選擇讀
  LCD_EN_High();
  Delay_Us(30);
       
  gR_data=Read_Data_Port();
        Delay_Us(10);

  while(TESTBIT(gR_data,7))         //表示busy
  {
     --gwait_time;
               
     if(!gwait_time)
     {
                         LCD_EN_Low();
                         Set_GPIO_Output();           //恢復(fù)為輸出口
                         return 0;
                 }
  }
   LCD_EN_Low();
   Set_GPIO_Output();               //恢復(fù)為輸出口
   return 1;
}

/******************************************************************************
* 函 數(shù) 名: void Write_LCD_command(uchar gcmd,uchar gvalue)
* 函數(shù)功能: 寫指令
* 入口參數(shù): gcmd--指令  gvalue--是否查忙
* 返    回: 無
*******************************************************************************/
void Write_LCD_command(unsigned char gcmd,unsigned char gvalue)
{
   if(gvalue)                       //寫命令時(shí)大部分情況下是在LCD空閑模式下寫
   {
     if(Chk_LCD_busy())
     {
       LCD_RS_Low();                //選擇指令
       LCD_RW_Low();                //選擇寫
                         LCD_EN_High();               //使能
                         Write_Data_Port(gcmd);       //賦指令
       Delay_Us(15);
       LCD_EN_Low();
     }
   }
   else
   {
     LCD_RS_Low();                  //選擇指令
     LCD_RW_Low();                  //選擇寫
                 LCD_EN_High();                 //使能
     Write_Data_Port(gcmd);         //賦指令
     Delay_Us(10);
     LCD_EN_Low();
   }
}

/******************************************************************************
* 函 數(shù) 名: void Write_LCD_data(uchar gdata)
* 函數(shù)功能: 寫數(shù)據(jù)
* 入口參數(shù): gdata--數(shù)據(jù)
* 返    回: 無
*******************************************************************************/
/*----------- 寫數(shù)據(jù) -------------*/
void Write_LCD_data(unsigned char gdata)
{
   if(Chk_LCD_busy())            //寫數(shù)據(jù)必須是在LCD空閑模式下才能寫
   {
      LCD_RS_High();             //選擇數(shù)據(jù)
      LCD_RW_Low();              //選擇寫
                  LCD_EN_High();             //使能
      Write_Data_Port(gdata);
      Delay_Us(15);
      LCD_EN_Low();
   }
}

/******************************************************************************
* 函 數(shù) 名: void INIT_LCD(void)
* 函數(shù)功能: 初始化1602LCD
* 入口參數(shù): 無
* 返    回: 無
*******************************************************************************/
/*-----------LCD初始化函數(shù)-------------*/
void INIT_LCD(void)
{
        LCD_GPIO_Init();
       
  Delay_Ms(15);
  Write_LCD_command(0x38,0);    //設(shè)置16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)傳送,不檢測忙信號(hào)
  Delay_Ms(5);
  Write_LCD_command(0x38,0);
  Delay_Ms(5);
  Write_LCD_command(0x38,0);    //設(shè)置16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)傳送,不檢測忙信號(hào)
        Delay_Us(100);
  Write_LCD_command(0x38,1);    //設(shè)置16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)傳送,檢測忙信號(hào)
  Write_LCD_command(0x08,1);    //關(guān)閉顯示、無光標(biāo)、檢測忙信號(hào)
  Write_LCD_command(0x01,1);    //清屏、光標(biāo)歸位、AC=0、檢測忙信號(hào)
        Delay_Ms(2);
  Write_LCD_command(0x06,1);    //顯示光標(biāo)右移位置、檢測忙信號(hào)
  Write_LCD_command(0x0C,1);    //顯示功能開、無光標(biāo)、檢測忙信號(hào)
}

/******************************************************************************
* 函 數(shù) 名: void Display_LCD_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata)
* 函數(shù)功能: 顯示字符串
* 入口參數(shù): gadd_start-列號(hào),uchar gline-行號(hào),glength-數(shù)據(jù)長度,pdata-數(shù)組元素
* 返    回: 無
*******************************************************************************/
/*-----------顯示字符串-------------*/
//                                       列號(hào)                  行號(hào)                數(shù)據(jù)長度                   數(shù)組元素
void Display_LCD_string(unsigned char gadd_start,unsigned char gline,unsigned char glength,const unsigned char *pdata)
{
   unsigned char gaddress;
   //uchar *pdat;
   unsigned char gcount=0;

   if(!gline)                               //第0行
   { gaddress=0x80+gadd_start; }            //地址對(duì)應(yīng)
   else
   { gaddress=0xc0+gadd_start; }            //第一行

   for(;gcount<glength;gcount++)
   {
      Write_LCD_command(gaddress,1);        //設(shè)定數(shù)據(jù)地址
      Write_LCD_data(*pdata);               //取設(shè)定地址里的數(shù)據(jù)
      gaddress++;
      pdata++;
   }
}

/******************************************************************************
* 函 數(shù) 名: void DispChar_XY_LCD(uchar x,uchar y,uchar gdata)
* 函數(shù)功能: 指定位置顯示字符
* 入口參數(shù): x-起始地址橫坐標(biāo),y-起始地址縱坐標(biāo),gdata-要顯示的字符
* 返    回: 無
*******************************************************************************/
void DispChar_XY_LCD(unsigned char x,unsigned char y,unsigned char gdata)
{
   unsigned char gaddress;

   if(!y)
   { gaddress=0x80+x; }

   else
   { gaddress=0xc0+x; }

   Write_LCD_command(gaddress,1);   //設(shè)定數(shù)據(jù)地址
   Write_LCD_data(gdata);
}

/******************************************************************************
* 函 數(shù) 名: void DispNum_XY_LCD(uchar x,uchar y,uchar gdata)
* 函數(shù)功能: 指定位置顯示數(shù)字
* 入口參數(shù): x-起始地址橫坐標(biāo),y-起始地址縱坐標(biāo),gdata-要顯示的數(shù)字
* 返    回: 無
*******************************************************************************/
void DispNum_XY_LCD(unsigned char x,unsigned char y,unsigned char gdata)
{
   unsigned char gaddress;

   if(!y)
   { gaddress=0x80+x; }

   else
   { gaddress=0xc0+x; }

   Write_LCD_command(gaddress,1);   //設(shè)定數(shù)據(jù)地址
   Write_LCD_data(gdata+0x30);
}

/*-----------清屏-------------*/
void Clear_Display(void)
{
  Write_LCD_command(0x01,1);
  Delay_Ms(5);
}


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






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

使用道具 舉報(bào)

沙發(fā)
ID:190499 發(fā)表于 2017-4-17 16:30 | 只看該作者
能否把其他頭文件也分享一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:190499 發(fā)表于 2017-4-17 17:24 | 只看該作者
把其他頭文件也分享一下吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久小视频 | 免费亚洲成人 | 青青草av网站 | 免费的av网站 | 久久久久国 | 国产一区二区三区四区 | 中文字幕1区| 久久人体 | 日本免费在线观看视频 | 精品久久久久久久久久 | 天天综合成人网 | 亚洲精品一区二区 | 亚洲国产一区二区三区四区 | 久久久久久久久久影视 | 免费高清av | 日韩欧美一区二区三区 | 成人片免费看 | 久久成人av电影 | 伊人成人免费视频 | 99小视频 | 亚洲精品一区二区三区蜜桃久 | 精品自拍视频在线观看 | 在线亚洲一区 | 欧美日韩高清一区 | 久久久久国产一区二区三区 | 欧美日韩视频在线播放 | 妖精视频一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 亚洲精品视频免费 | 中文字幕一区二区三区四区五区 | 精品久久久久久国产 | 国产免费一区 | 日韩一级黄色毛片 | 免费视频一区二区三区在线观看 | 成人免费小视频 | 99热这里都是精品 | 91国产精品 | 亚洲国产成人精品女人久久久 | 色综合久久天天综合网 | 久久久久久女 | 欧美一级黑人aaaaaaa做受 |