📄 lcd_12864.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 + -