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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32f103驅動lcd程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:188556 發表于 2017-4-11 18:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "stm32f10x.h"
#include"12864.h"
#include"delay.h"       
/************************************************************************************************
//FILE:液晶12864驅動程序
  //DATE:2012/07/11
************************************************************************************************/
/************************************************************************************************
@f_name: void LCD12864_InitPort(void)
@brief:         初始化硬件端口配置
@param:         None
@return: None
************************************************************************************************/
void LCD12864_InitPort(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;        //定義結構體               
       
        RCC_APB2PeriphClockCmd(GPIOCLK|RCC_APB2Periph_AFIO, ENABLE);  //使能功能復用IO時鐘,不開啟復用時鐘不能顯示
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);    //把調試設置普通IO口

        GPIO_InitStructure.GPIO_Pin  = LCD_GPIO_DAT;                //數據口配置成開漏輸出模式,此模式下讀輸入寄存器的值得到IO口狀態
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   //開漏輸出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
        GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);    //IO口初始化函數(使能上述配置)

        GPIO_InitStructure.GPIO_Pin  = LCD_GPIO_CMD;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽輸出   
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);

        GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);          //初始化IO口配置
        GPIO_Write(LCD12864_GPIO ,0xffff);          
}
/************************************************************************************************
@f_name: void NOP(void)
@brief:         延時函數
@param:         None
@return: None
************************************************************************************************/
void NOP(void)
{ u8 i;        for(i=0; i<100; i++); }
/************************************************************************************************
@f_name: u8 LCD12864_busy(void)
@brief:         檢測忙狀態
@param:         None
@return: None
************************************************************************************************/
u8 LCD12864_busy(void)
{
        u8 x;
        LCD_RS(0);
        LCD_RW(1);  
        LCD_EN(1);
        NOP();
        NOP();
        x=Text_Busy;
        LCD_EN(0);
        return x;
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief:         寫指令
@param:         u8 dat  輸入指令
@return: None
************************************************************************************************/
void LCD12684_Wcmd(u8 dat)
{
        while(LCD12864_busy()); //忙檢測
        LCD_RS(0);      
        LCD_RW(0);
        LCD_EN(0);
        NOP();
        NOP();
        LCD_WriteData(dat);          
        NOP();
        NOP();
        LCD_EN(1);
        NOP();
        NOP();
        LCD_EN(0);
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief:         寫數據
@param:         u8 dat 輸入數據
@return: None
************************************************************************************************/
void LCD12684_Wdat(u8 dat)
{
        while(LCD12864_busy()); //忙檢測
        LCD_RS(1);      
        LCD_RW(0);
        LCD_EN(0);
        NOP();
        NOP();
        LCD_WriteData(dat);         
        NOP();
        NOP();
        LCD_EN(1);
        NOP();
        NOP();
        LCD_EN(0);
}
/************************************************************************************************
@f_name: void LCD12864_Init(void)
@brief:         液晶初始化
@param:         None
@return: None
************************************************************************************************/
void LCD12864_Init(void)
{       
        LCD_PSB(1);   //并口方式   
        LCD_RST(0);   //液晶復位        低電平有效
    delay_ms(3);                  
    LCD_RST(1);          //置高電平等待復位
    delay_ms(3);

        LCD12684_Wcmd(0x34);    //擴充指令操作
    delay_ms(5);
    LCD12684_Wcmd(0x30);    //基本指令操作
    delay_ms(5);
    LCD12684_Wcmd(0x0c);   //顯示開,關光標
    delay_ms(5);
    LCD12684_Wcmd(0x01);   //清除LCD的顯示內容
    delay_ms(5);
}
/************************************************************************************************
@f_name: void LCD12864_Clr(void)
@brief:         清屏
@param:         None
@return: None
************************************************************************************************/
void LCD12864_Clr(void)
{
        LCD12684_Wcmd(0x34);   //擴充指令操作        “繪圖”
    delay_ms(5);
    LCD12684_Wcmd(0x30);    //基本指令操作
    delay_ms(5);
        LCD12684_Wcmd(0x01);   //清屏
    delay_ms(5);
}
/************************************************************************************************
@f_name: void LCD12864_Pos(u8 x,u8 y)
@brief:         設置顯示位置
@param:         u8 x:X軸    u8 y:Y軸  
@return: None
************************************************************************************************/
void LCD12864_Pos(u8 x,u8 y)
{
        u8  pos;
        if (x==1)                   {x=0x80;}          
        else if (x==2)         {x=0x90;}       
        else if (x==3)         {x=0x88;}         
        else if (x==4)   {x=0x98;}         
        else x=0x80;
        pos = x+y ;        
        LCD12684_Wcmd(pos);  //顯示地址  
}
/************************************************************************************************
@f_name: void LCD12864_PhotoDis(u8 *bmp)
@brief:         顯示圖形
@param:         u8 *bmp 圖形數組
@return: None
************************************************************************************************/
void LCD12864_PhotoDis(u8 *bmp)
{
        u8 i,j;
        LCD12684_Wcmd(0x34); //關閉圖形顯示
       
        for(i=0;i<32;i++)
        {
                LCD12684_Wcmd(0x80+i);  //先寫入水平坐標值
                LCD12684_Wcmd(0x80);      //寫入垂直坐標值
                for(j=0;j<16;j++)                     //再寫入兩個8位元的數據   
                LCD12684_Wdat(*bmp++);     
                delay_ms(1);
        }
       
        for(i=0;i<32;i++)
        {
                LCD12684_Wcmd(0x80+i);
                LCD12684_Wcmd(0x88);
                for(j=0;j<16;j++)         
                LCD12684_Wdat(*bmp++);   
                delay_ms(1);
        }
        LCD12684_Wcmd(0x36);       //寫完數據,開圖形顯示        
}
/************************************************************************************************
@f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p)
@brief:         顯示字符串
@param:         u8 *bmp 圖形數組
@return: None
************************************************************************************************/
void LCD_ShowString(u8 x,u8 y,const u8 *p)
{
        u8 temp;
        if(x>4) {x=1;}
        if(y>4) {y=0;}
        LCD12864_Pos(x,y);
        temp=*p;
        while(temp!='\0')
        {
                LCD12684_Wdat(temp);
                temp=*(++p);
        }
}


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久av一区二区 | 四虎影院在线观看免费视频 | 黄色免费看| 国产高清区| 中文字幕亚洲欧美日韩在线不卡 | 综合久久99| 夜夜操天天干 | 日本一道本视频 | 欧美性猛片aaaaaaa做受 | 中文字幕亚洲欧美日韩在线不卡 | 美女啪啪国产 | 日韩高清国产一区在线 | 日韩欧美中文在线 | 欧美理伦片在线播放 | 九九热这里 | 日韩在线小视频 | 91免费在线视频 | 国产成人高清视频 | 黄色一级大片在线免费看产 | 香蕉视频一区二区 | 亚洲免费网 | 观看毛片 | 色久影院 | 国产99久久精品一区二区永久免费 | 国产精品久久在线观看 | 久久精品国产久精国产 | 美国a级毛片免费视频 | 日韩在线视频免费观看 | 国产高清一区二区三区 | 日韩视频在线播放 | 精品视频在线播放 | 久久久久久一区 | 中文字幕国产一区 | 黄色香蕉视频在线观看 | 91在线看片 | 久久久久久久久久久国产 | 一级视频黄色 | 亚洲欧美在线观看 | 99精品99| 国产精品久久久久久中文字 | 日韩在线免费 |