原创 基于STM32的12864的串行程序

2010-1-13 16:36 6439 5 5 分类: MCU/ 嵌入式

/******************************************************************************
* 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--);
}
//========================================================


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条