本帖最后由 夜乄歌 于 2016-4-14 14:27 编辑
[size=15.5555562973022px]这是我的12864的.c和.h文件
#ifndef __12864C_H_
#define __12864C_H_
#include"sys.h"
#define SID PEout(2)
#define SCLK PEout(3)
void lcd_init(void);
void LCD12864_SendByte(u8 zdata);
void LCD12864_WriteCom(u8 com);
void LCD12864_WriteDate(u8 date);
void LCD12864_Init(void);
//void LCD12864_CleanScans(void);
void LCD12864_SetPos(u8 x,u8 y);
void LCD12864_DisplayString(u8 *s);
void display(u8 x_add,u8 y_add,u8 *ptr);
#endif
#include"12864c.h"
#include"delay.h"
void lcd_init()
{
RCC->APB2ENR|=1<<6;
GPIOE->CRL&=0XFFF000FF;
GPIOE->CRL|=0X00033300;
SID=1;
SCLK=1;
}
void LCD12864_SendByte(u8 zdata)
{
u8 i;
for(i = 0;i < 8;i ++)
{
if((zdata<<i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
delay_us(50);
SCLK = 1;
}
}
void LCD12864_WriteCom(u8 com)
{
LCD12864_SendByte(0xf8); //第一字节
LCD12864_SendByte(com & 0xf0); //第二字节
LCD12864_SendByte((com << 4) & 0xf0);//第三字节
}
void LCD12864_WriteDate(u8 date)
{
LCD12864_SendByte(0xfa);//第一字节
LCD12864_SendByte(date & 0xf0); //第二字节
LCD12864_SendByte((date << 4) & 0xf0);//第三字节
}
void LCD12864_Init()
{
// LCD12864_PSB = 0;
// REST = 0;
// delay_us(50);
// REST = 1;
// delay_us(50);
//LCD12864_WriteCom(0x34);//扩充指令集动作 ,绘图不显示
LCD12864_WriteCom(0x30);//基本指令集动作, 绘图不显示
LCD12864_WriteCom(0x0c);//开显示,不显示游标和游标位置
LCD12864_WriteCom(0x06);
LCD12864_WriteCom(0x01);//清屏
delay_us(50);
}
//void LCD12864_CleanScans()
//{
// LCD12864_WriteCom(0x01);//清屏
//}
void LCD12864_SetPos(u8 x,u8 y)
{
u8 pos;
if(x == 0)
x = 0x80;
else if(x == 1)
x = 0x90;
else if(x == 2)
x = 0x88;
else if(x == 3)
x = 0x98;
pos = x + y;
LCD12864_WriteCom(pos);//显示地址
}
void LCD12864_DisplayString(u8 *s)
{
u8 i = 0;
while(s != ' ')
{
LCD12864_WriteDate(s);
i++;
delay_us(50);
}
}
void display(unsigned char x_add,u8 y_add,unsigned char *ptr)
{
LCD12864_SetPos(x_add,y_add);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
while(*ptr != ' ')
{
LCD12864_WriteDate(*ptr);
++ptr;
}
}
#include"12864c.h"
#include"delay.h"
u8 dis1[]="组别:";
u8 dis2[]="组别:";
u8 dis3[]="组别:";
u8 dis4[]="组别:";
u8 dis5[]="组别:";
u8 dis8[]="已绕圈:";
u8 dis12[]="速度";
int main()
{
Stm32_Clock_Init(9);
delay_init(72);
lcd_init();
LCD12864_Init();
while(1)
{
display(0,0,dis1);
LCD12864_SetPos(1,0);
LCD12864_DisplayString(dis3);
//
// LCD12864_SetPos(2,0);
// LCD12864_DisplayString(dis8);
//
// LCD12864_SetPos(3,0);
// LCD12864_DisplayString(dis4);
// LCD12864_SetPos(3,3);
// LCD12864_DisplayString(dis12);
}
}
刚买板子不久开始学,不知道那里有错误调试了好几天了,看了别人的程序感觉好多都看得不是太懂,所以就移植自己的C51程序,但是什么都不显示啊,用的绘晶科技的12864液晶
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你+我QQ吧454730034,我把我写的发给你参考下,不过写的很简略,但是能用
你的代码能给我看一下吗,我小白,弄了好久了,还有,我的管脚只有5个,(老师叫我用串行给我连了5个管脚,除了vcc和grd 还有3个)
一周热门 更多>