立即注册 登录
返回首页

uid:58583的个人空间

日志

改写的液晶驱动

已有 644 次阅读2017-10-3 11:51 |个人分类:程序

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4

#include  "stm32f10x.h"

 

static __IO uint32_t TimingDelay;

void RCC_Configuration(void);

void Delay(__IO uint32_t nTime);

 

#define Line1   0x80//液晶第一行

#define Line2   0x90//液晶第二行

#define Line3   0x88//液晶第三行

#define Line4   0x98//液晶第四行

 

#define LCD_IO  GPIOE //我用的是 E.2 E.3 E.4 E.5 E.6

#define CS      GPIO_Pin_2

#define RW      GPIO_Pin_3

#define CLK     GPIO_Pin_4

#define PSB     GPIO_Pin_5

#define RST     GPIO_Pin_6

 

#define SET(n)    GPIO_SetBits(GPIOE,n)     //将对应管脚输出高电平

#define RESET(n)  GPIO_ResetBits(GPIOE,n)//输出低电平

#define CMD       (uint32_t)0xf8000000 //串行 写入的是命令要先写入0xf8

#define DATE      (uint32_t)0xfa000000 // 串行 写入数据要先写入0xfa

 

void LCD_IOinit_OUT() //推挽输出模式 ,管脚配置,不多解释,库函数有

{

  GPIO_InitTypeDef GPIO_InitStructure;    

  GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 

  GPIO_Init(LCD_IO, &GPIO_InitStructure);                

}

 

void LCD_Write(uint32_t cmd,uint8_t ddata)//LCD 写函数

{

       uint32_t temp=cmd;

       uint32_t i;

       RESET(CS); //片选拉低

    temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12);

       SET(CS); //片选拉高,开始传输数据

       for(i=0;i<24;i++)

       {

              if(temp&0x80000000)SET(RW);  //取出最高位,如果是1,那么RW就写1

              else RESET(RW);  //如果是0 RW就写0

              SET(CLK);//向液晶写数据  是在下降沿写入的

              Delay(2);//稍作延时

              RESET(CLK);//拉低产生下降沿,写入数据

              temp=temp<<1;//左移一位 ,写入下一位

       }

       RESET(CS);   //拉低片选,写入数据完毕

}

void Display(uint8_t addr,uint8_t *hz)

{

   LCD_Write(CMD,addr);

   Delay(3);

   while(*hz!='\0')

   {

        LCD_Write(DATE,*hz);

        hz++;

        Delay(3);

   }

}

void LCD_init()//液晶初始化

{

       RESET(CS); //拉低片选

       RESET(PSB);//PSB拉低,表示是串行,拉高则是并行

       RESET(RST);//拉低RST

       Delay(100);

       SET(RST);

       Delay(40);

       LCD_Write(CMD,0x30);//8位数据传输

    Delay(40);

    LCD_Write(CMD,0x0c);//显示开,游标开

    Delay(40);

       LCD_Write(CMD,0x01);//清屏  

    Delay(40);

       LCD_Write(CMD,0x06);//进入点设定 AC+1               

       Delay(40);            

}

 

int main()

{

       RCC_Configuration();

       SysTick_Config(72000);          //配置SYSTICK时钟节拍为1ms一次

       LCD_IOinit_OUT();

       LCD_init();

       while(1)

       {

          Display(Line1,"你妹");   

          Display(Line2,"你妹");

          Display(Line3,"你妹妹");

          Display(Line4,"完事了,哈哈哈哈哈");      

       }    

}

 

void RCC_Configuration(void)

{

  SystemInit();  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);

}

 

void Delay(__IO uint32_t nTime)

{

  TimingDelay = nTime;

  while(TimingDelay != 0);

}

 

void TimingDelay_Decrement(void)

{

  if (TimingDelay != 0x00)

  {

    TimingDelay--;

  }

}

st1\:*{behavior:url(#ieooui) } /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋体; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;}

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部