/**************H头文件********************/
#ifndef __12864_H
#define __12864_H
#include "sys.h"
/*#define CS PAout(0)
#define SID PAout(1)
#define SCLK PAout(2)
#define RST PAout(3)
#define PSB PAout(4)*/
#define RS_ON GPIO_SetBits(GPIOA,GPIO_Pin_0);
#define RS_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0);
#define SID_ON GPIO_SetBits(GPIOA,GPIO_Pin_1);
#define SID_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_1);
#define E_ON GPIO_SetBits(GPIOA,GPIO_Pin_2);
#define E_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_2);
#define RST_ON GPIO_SetBits(GPIOA,GPIO_Pin_3);
#define RST_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_3);
//sbit CS=P2^6; //片选信号 RS
//sbit SID=P2^5; //数据信号 R/W
//sbit SCLK=P2^7; //时钟信号 E
//sbit RST=P3^4; //复位信号
//sbit PSB = P3^2; //并行、串行选择信号
void Gpio_Init(void);//GPIO初始化函数
void sendbyte(u8 zdata); //发送数据
void write_com(u8 cmdcode);
void write_data(u8 Dispdata);
void LCD12864_Init(void);//初始化函数
void hzkdis(u8 *s);
void Test(void);//显示内容
#endif
/************************.C文件************************/
#include "12864.h"
#include "delay.h"
void Gpio_Init(void)
{
GPIO_InitTypeDef GPIO_InitT;
RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能GPIOA时钟
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
// SystemInit();
GPIO_InitT.GPIO_Mode=GPIO_Mode_Out_PP;//通用推挽输出
GPIO_InitT.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitT.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitT);
//GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
void sendbyte(u8 zdata) //发送数据
{
u8 i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID_ON;
}
else
{
SID_OFF;
}
E_OFF;
E_ON;
}
}
void write_com(u8 cmdcode)
{
RS_ON;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay_ms(10);
}
void write_data(u8 Dispdata) //写串口命令
{
RS_ON;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay_ms(10);
}
void LCD12864_Init(void)
{
RST_OFF;
delay_ms(100);
RST_ON;
delay_ms(100);
write_com(0x30);
delay_ms(50);
write_com(0x0c);
delay_ms(50);
}
void hzkdis(u8 *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay_ms(50);
}
}
void Test(void)
{
write_com(0x03);
delay_ms(50);
write_com(0x81);
hzkdis("语音录放系统");
write_com(0x92);
hzkdis("abcf");
write_com(0x88);
hzkdis("▲◆◆▲");
write_com(0x98);
hzkdis("作者: ");
}
/**************主函数******************/
#include "delay.h"
#include "12864.h"
#include "sys.h"
int main(void)
{
LCD12864_Init();
Gpio_Init();
delay_init();
// PSB= 0; //只有在上面定义了以后才能用这句话,不然会报错没有接地时会出现乱码
// LCD12864_Init();
delay_ms(10);
while(1)
{
Test();
delay_ms(5);
}
}
|