⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_12864.c

📁 基于STM32的双极性逆变器软件
💻 C
字号:
#include "stm32f10x_lib.h"
#include <string.h>
#include<stdio.h>
#include "adc.h"

#define uchar unsigned char
#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1

/*
PB112->1->lcd背光
PB1->0->serial res	 PB12
PB14->1->cs	         PB14
PB15->/->date		 PB15
PB11->/->sck		 PB8

serial_1 ->PSB PB12
DIO -> DATA   PB15
CLK ->	  PB8		  //改到这个管脚
serial_res -> serial res	NRST
LCD_CS ->RS(CS)	PB14
//-------------------------------------
serial_1 ->PSB PB12
DIO -> DATA   PB15
CLK ->	  PB13
serial_res -> serial res	pb1
LCD_CS ->RS(CS)	PB14
*/



#define DIO_1 GPIO_WriteBit(GPIOB, GPIO_Pin_15, (BitAction)0x01)
#define DIO_0 GPIO_WriteBit(GPIOB, GPIO_Pin_15, (BitAction)0x00)

#define CLK_1 GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)0x01)
#define CLK_0 GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)0x00)
//--------------------------------------------------------------------------------
#define serial_res_1 GPIO_WriteBit(GPIOB, GPIO_Pin_1, (BitAction)0x01)
#define serial_res_0 GPIO_WriteBit(GPIOB, GPIO_Pin_1, (BitAction)0x00)

#define serial_1 GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)0x01)
#define serial_0 GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)0x00)

#define LCD_CS_1 GPIO_WriteBit(GPIOB, GPIO_Pin_14, (BitAction)0x01)
#define LCD_CS_0 GPIO_WriteBit(GPIOB, GPIO_Pin_14, (BitAction)0x01)


uchar st=0;

extern  char tim_flag;
 void wr_lcd (uchar dat_comm,uchar content);
 void clrram (void);

void delays(unsigned char us)
{
  unsigned char i,j;
  for(i=0;i<us;i++)
	{
	  for(j=0;j<100;j++);
	}  
}
void lat_disp(unsigned char data1,unsigned char data2) //显示点阵 
{
  	unsigned char i,j,k,x;
	x=x1;
	for(k=0;k<2;k++) {
	for(j=0;j<16;j++)
	{
      	for(i=0;i<8;i++)
	      	{
	        	wr_lcd(0,0x34);		//comm=0,指令输入,扩展指令集
	        	wr_lcd(0,0x80+j*2);	//Y
	        	wr_lcd(0,x+i);    //X
	        	wr_lcd(0,0x30);		//基本指令集
	        	wr_lcd(1,data1);
	        	wr_lcd(1,data1);
	      	}
      	for(i=0;i<8;i++)
	      	{
	        	wr_lcd(0,0x34);
	        	wr_lcd(0,0x80+j*2+1);
	        	wr_lcd(0,x+i);
	        	wr_lcd(0,0x30);
	        	wr_lcd(1,data2);
	        	wr_lcd(1,data2);
	      	}

	   }
	   x=x2;
	}
  	wr_lcd(0,0x36);
}
/*------------------初始化-----------------*/
void init_lcd (void)
{ 
  //--------------------
  serial_res_0;
  serial_0;
  delays(50);
  //---------------------
  serial_res_1;
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  delays(20);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
   clrram ();
   delays(20);
  lat_disp(0x00,0x00);
 
}

void lcd_show_char(unsigned char xx,unsigned char yy,unsigned char *puts)// x:0 1 2 3 4 5 6 7  // y:0 1
{
	 wr_lcd(0,0x30);           //8BitMCU,基本指令集合
	 wr_lcd(0,0x80+8*yy+xx);//将要显示字的地址
     while((*puts)!=0 )            //判断字符串是否显示完毕
	     {
           if(xx>=8)            //判断换行
	          {                   
                xx=0;
                yy++; 
				wr_lcd(0,0x80+8*yy+xx);//将要显示字的地址
	           }
           if(yy>=4)
			   {
			   		yy=0;            //一屏显示完,回到屏左上角
	           		wr_lcd(0,0x80+8*yy+xx);//将要显示字的地址
				}
           wr_lcd(1,*puts);    //一个汉字要写两次
           puts++;
           wr_lcd(1,*puts);
           puts++;
           xx++;
	     }
}

void lcd_show_num(unsigned char xx,unsigned char yy,unsigned char num1,unsigned char num2)// x:0 1 2 3 4 5 6 7  // y:0 1
{
	 wr_lcd(0,0x30);           //8BitMCU,基本指令集合
	 wr_lcd(0,0x80+8*yy+xx);  //将要显示字的地址

          wr_lcd(1,num1);    //一个汉字要写两次
		  wr_lcd(1,num2); 

}

/*--------------清DDRAM------------------*/
void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
}
/*---------------------------------------*/

void wr_lcd (uchar dat_comm,uchar content)
{
  uchar a,i,j;
   delays(20);
  a=content;
  LCD_CS_1;
  CLK_0;
  DIO_1;

  for(i=0;i<5;i++)
  { 
    CLK_1;
	CLK_0;	
  }
   DIO_0;
   CLK_1;
   CLK_0;
	
  if(dat_comm)
    {
	DIO_1;
	}  //data
  else
   { DIO_0;
	}  //command   
	CLK_1;
	CLK_0;
	DIO_0;
	CLK_1;
	CLK_0;

  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {    
      if((a<<(i+4*j))&0x80) {DIO_1; }
	  else {DIO_0;}
	  CLK_1;
	  CLK_0; 
    }
	DIO_0;
   
    for(i=0;i<4;i++)
    {
      CLK_1;
	  CLK_0;
	  
    }
  }
  LCD_CS_0;
   
}
void str_to_str(void)
{
   switch(st)
   {
     case 0:
	        //strcpy(tab3,"工作电眼选择:1 "); 
	        //strcpy(tab4,"工作极性选择:左"); 
	        break;
	 case 1:
	        //strcpy(tab3,"工作电眼选择:2 "); 
	        //strcpy(tab4,"工作极性选择:右");
	        break;
	 case 2:break;
	 case 3:break;
	 case 4:break;
	 case 5:break;
   }
}

void lcd_show_first (void)
{ 	  
 	unsigned char i=0;
	while(i<2)	{
	if(tim_flag){ 
	  lcd_show_char(0,0,"  武汉理工大学:");	 
	  lcd_show_char(0,1,"零电流纹波逆变器");
	  i++;	
	  tim_flag=0; 
	   }
	  
	  }	
		 
}


void lcd_show (void)
{ 	  
 
	 	wr_lcd (0,0x01);  /*清屏,地址指针指向00H*/
			clrram ();
		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -