新闻  |   论坛  |   博客  |   在线研讨会
基于STM32的12864的串行程序
0750long | 2010-02-03 21:58:49    阅读:7857   发布文章

基于STM32的12864的串行程序

 

 

/******************************************************************************
* Project          :LCD12864 Driver For STM32F10X
* Author           :cch
* Version          :V1.0
* Date             :2009.11.4
* Description      :STM32F103的12864液晶演示程序
********************************************************************************/
#include"stm32f10x_gpio.h"
#include"stm32f10x_rcc.h"
#include"12864header.h"
GPIO_InitTypeDef GPIO_InitStructure;
#define DELAY_2N     0
void Init_lcd(void)
{
  //***************液晶接口初始化***********//
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
//******************液晶初始化**************//

  delay(0xFFFFF);
         Sendcommand(0x30);//基本指令集
         delay(0xAFFFF);
       // Sendcommand(0x04);//点设定:显示字符/光标从左到右移位,DDRAM地址加1
 //delay(3700);
    Sendcommand(0x0c);//显示打开,光标关闭,反白关
 delay(0xAFFFF);
        Sendcommand(0x01);//清除显示内容
     //   Sendcommand(0x02); //DDRAM地址归位
     
}
/*--------------------------------------------------
函数说明:写命令到液晶


---------------------------------------------------*/
void Sendcommand(unsigned char cmd)
{

  unsigned char i;
  delay(2000);
  for(i=0;i<5;i++)
   {
     set_sid();
     clr_clk();
     set_clk();
   }
  for(i=0;i<3;i++)
  {
    clr_sid(); 
    clr_clk();
    set_clk();     
  }
  SendEData(cmd);
}
/*--------------------------------------------------
函数说明:写数据到液晶


---------------------------------------------------*/
void SendEData(unsigned char Data)
{
 unsigned char q,w,i;
 w=Data;
 q=2;
         set_cs()  ;
 while(q--)
 {
  for(i=0;i<4;i++)
  {
      w="Data"&0x80;
   if(w==0x80) 
     set_sid();
   else        
                         
    clr_sid();
    clr_clk();
    set_clk();
    Data<<=1;
  }
  for(i=0;i<4;i++)  
  {
  clr_sid();
  clr_clk();
                set_clk();
                   
  }
 }
        clr_cs();
}
/*--------------------------------------------------
函数说明:发送地址符


---------------------------------------------------*/
void Sendaddress(unsigned char D)
{
 
 unsigned char i;
 for(i=0;i<5;i++)
 {
  set_sid();
  clr_clk();
  set_clk();
 }
 for(i=0;i<3;i++)    
 {
  clr_sid();
  clr_clk();
  set_clk();
 }
 SendEData(D);
}//send Address
/*--------------------------------------------------
函数说明:写汉字


---------------------------------------------------*/


void Sendword(unsigned char *hanzi,unsigned char dizhi)
{
    unsigned char *h;
 unsigned char i;
 Sendaddress(dizhi);
 for(h=hanzi;*h!=0;h++)
    { 
   for(i=0;i<5;i++) 
   {
  set_sid();
  clr_clk();
  set_clk();
   }
    clr_sid();
    clr_clk();
    set_clk();
    set_sid();
    clr_clk();
    set_clk();
    clr_sid();
    clr_clk();
           set_clk();
    SendEData(*h);
 }
}//send hanzi
/*--------------------------------------------------
函数说明:写字符


---------------------------------------------------*/


void Sendsignal(unsigned char x,unsigned char dizhi2)

 unsigned char i;
 Sendaddress(dizhi2);
 for(i=0;i<5;i++) 
   {
   set_sid();
   clr_clk();
   set_clk();
   }
     clr_sid();
     clr_clk();
     set_clk();
     set_sid();
     clr_clk();
     set_clk();
     clr_sid();
     clr_clk();
    set_clk();
        SendEData(x);
 
}
//========================================================
void delay(vu32 cnt)//延时函数
{
  cnt <<= DELAY_2N;

  while (cnt--);
}
//========================================================

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客