• STM32驱动ST7920的12864液晶(串行方式)


     

    /******************************************************************************************
    * 文件名称 :12864.c
    * 版权     :
    * 模块名称 :st7920驱动的12864液晶的串行工作方式驱动程序
    * cpu      :  stm32f103rct6                       主频:72M
    * 作者     :
    * 创建日期 :2009-10-15
    * 功能概要 :
    *----------------------------------------修改历史------------------------------------------
    * 当前版本 :       修改人:                  修改日期:
    * 修改说明 :
    ******************************************************************************************/

    #include "STM32Lib\\stm32f10x.h"
    #include "hal.h"

    #define SID_H   GPIOC->BSRR=GPIO_Pin_11
    #define SID_L   GPIOC->BRR=GPIO_Pin_11 

    #define CS_H  GPIOC->BSRR=GPIO_Pin_12
    #define CS_L  GPIOC->BRR=GPIO_Pin_12 

    #define SCLK_H  GPIOC->BSRR=GPIO_Pin_10
    #define SCLK_L  GPIOC->BRR=GPIO_Pin_10

    #define x1    0x80
    #define x2    0x88
    #define y     0x80
    #define comm  0
    #define dat   1

    u8 const  num_lcd[]={"0123456789 :.-"};

    /******************************************************************************************
    * 函数名称    :Lcd_init
    * 功能描述    :初始化LCD
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2008-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Lcds_Config(void)
    {
    // SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

     /*PC4-A0*/
    // GPIO_SetBits(GPIOC, GPIO_Pin_12);//预置为高
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
     
    }
    /******************************************************************************************
    * 函数名称    :Delaynms
    * 功能描述    :延时
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Delaynms(u16 di)
    {
     u16 da,db;
      for(da=0;da<di;da++)
        for(db=0;db<10;db++);
    }
    /******************************************************************************************
    * 函数名称    :Lcd_init
    * 功能描述    :初始化LCD
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2008-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Lcd_Init(void) 
    {
     Delaynms(50); //启动等待,等LCM讲入工作状态
       CS_H;
       Write_Char(0,0x30);  //8 位介面,基本指令集
       Write_Char(0,0x0c);  //显示打开,光标关,反白关
       Write_Char(0,0x01);  //清屏,将DDRAM的地址计数器归零 
    }

    /******************************************************************************************
    * 函数名称    :Write_char
    * 功能描述    :写指令或数据
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Write_Char(u8 start, u8 ddata)
    {
     u8 start_data,Hdata,Ldata;
       if(start==0)
      start_data=0xf8;  //写指令
        else   
         start_data=0xfa;  //写数据
     
       Hdata=ddata&0xf0;    //取高四位
       Ldata=(ddata<<4)&0xf0;  //取低四位
       Send_Byte(start_data);   //发送起始信号
       Delaynms(10); //延时是必须的
       Send_Byte(Hdata);       //发送高四位
       Delaynms(5);  //延时是必须的
       Send_Byte(Ldata);    //发送低四位
       Delaynms(5);  //延时是必须的
    }

    /******************************************************************************************
    * 函数名称    :Send_byte
    * 功能描述    :发送一个字节
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2009-10-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Send_Byte(u8 bbyte)
    {
     u8 i,t;
      for(i=0;i<8;i++)
        {
      if((bbyte)&0x80)
             SID_H; //取出最高位
         else
       SID_L;
       SCLK_H;
      t = 0x10;
      while(t--);   //延时 lcd读取数据
         SCLK_L;
         bbyte <<= 1; //左移
        } 
    }


    /******************************************************************************************
    * 函数名称    :Clr_Scr
    * 功能描述    :清屏函数
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2009-10-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Clr_Scr(void)//清屏函数
    {
     Write_Char(0,0x01);
    }

    /******************************************************************************************
    * 函数名称    : LCD_set_xy
    * 功能描述    :设置LCD显示的起始位置,X为行,Y为列
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void LCD_Set_XY( u8 X, u8 Y )

        u8 address;
     switch(X)
     {
      case 0:
       address = 0x80 + Y;
       break;   
         case 1:
          address = 0x80 + Y;
          break;
      case 2:
       address = 0x90 + Y;
       break;
          case 3:
           address = 0x88 + Y;
           break;
      case 4:
       address = 0x98 + Y;
       break;
      default:
       address = 0x80 + Y;
       break;
     }
        Write_Char(0, address);
    }

    /******************************************************************************************
    * 函数名称    :LCD_Write_string
    * 功能描述    :中英文字符串显示函数
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void LCD_Write_String(u8 X,u8 Y,uc8  *s)

     LCD_Set_XY( X, Y );
       
        while (*s)
        {
      Write_Char( 1, *s );
         s ++;
      Delaynms(1);
     }
    }

    /******************************************************************************************
    * 函数名称    :LCD_Write_number
    * 功能描述    :数字显示函数
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void LCD_Write_Number(u8 s)// 数字显示函数

     Write_Char(1,num_lcd[s]);
     Delaynms(1);
    }

    /******************************************************************************************
    * 函数名称    :img_disp
    * 功能描述    :显示图形
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Display_Img(u8 const *img)
    {
       u8 i,j;
       for(j=0;j<32;j++)
       {
         for(i=0;i<8;i++)
         {
           Write_Char(comm,0x34);
      Delaynms(10);
           Write_Char(comm,y+j);
      Delaynms(10);
           Write_Char(comm,x1+i);
      Delaynms(10);
           Write_Char(comm,0x30);
      Delaynms(10);
           Write_Char(dat,img[j*16+i*2]);
      Delaynms(10);
           Write_Char(dat,img[j*16+i*2+1]);
      Delaynms(10);
         }
       }
       for(j=32;j<64;j++)
       {
         for(i=0;i<8;i++)
         {
           Write_Char(comm,0x34);
      Delaynms(10);
           Write_Char(comm,y+j-32);
      Delaynms(10);
           Write_Char(comm,x2+i);
      Delaynms(10);
           Write_Char(comm,0x30);
      Delaynms(10);
           Write_Char(dat,img[j*16+i*2]);
      Delaynms(10);
           Write_Char(dat,img[j*16+i*2+1]);
      Delaynms(10);
         }
       }
     Delaynms(10);
       Write_Char(comm,0x36);
    }

    /******************************************************************************************
    * 函数名称    :Delay_Lcd
    * 功能描述    :
    * 参数        :  参数名称: 输入/输出? 类型  描述
    *
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    :     修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Delay_Lcd(u16 us)   //delay time
    {
       while(us--);
    }

  • 相关阅读:
    汉语-词语:办法
    汉语-词语:做法
    汉语-词语:说法
    汉语-词语:看法
    汉语-词语:想法
    汉语-词语:音色
    汉语-词语:声纹
    职业:斜杆青年
    汉语-流行词汇:傻白甜
    汉语-词语:慧根(生理学概念)
  • 原文地址:https://www.cnblogs.com/pulan/p/2921664.html
Copyright © 2020-2023  润新知