这是一个LCD12864的驱动程序!!使用串行方式的
#include "
STM32f10x.h"
#define uchar unsigned char
#define RS_0() GPIO_WriteBit(GPIOD,GPIO_Pin_10 ,Bit_RESET );
#define RS_1() GPIO_WriteBit(GPIOD,GPIO_Pin_10 ,Bit_SET );
#define RW_0() GPIO_WriteBit(GPIOD,GPIO_Pin_11 ,Bit_RESET );
#define RW_1() GPIO_WriteBit(GPIOD,GPIO_Pin_11 ,Bit_SET );
#define E_0() GPIO_WriteBit(GPIOD,GPIO_Pin_12 ,Bit_RESET );
#define E_1() GPIO_WriteBit(GPIOD,GPIO_Pin_12 ,Bit_SET );
uchar i,j;
u16 AC_TABLE[]={0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
};
void PA_input(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6|GPIO_Pin_7; //LED0-->PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA_output(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6|GPIO_Pin_7; //LED0-->PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOA
tiNG;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/**** 清屏 *****/
void claer_all(void)
{
RS_0();
RW_0();
write_comd(0x0001);
delay_ms(5);
}
/*******初始化*******/
void LCDInit(void)
{
write_comd(0x0030); //功能设定,基本指令
write_comd(0x000e); // 显示开,游标关,反白关
write_comd(0x0001); // 清除显示
}
/*********读忙********/
void read_busy(void)
{
char busy;
write_data(0x00ff);
RS_0();
RW_1();
do{
E_1();
busy=read_data();
E_0();
}while(busy>0x7f);
}
/*********写命令********/
int write_comd(u16 cmd)
{
RS_0();
RW_0();
GPIO_Write(GPIOA,cmd);
E_1();
E_0();
}
/*********写数据********/
int write_data(u16 dat)
{
RS_1();
RW_0();
GPIO_Write(GPIOA,dat);
E_1();
E_0();
}
/*********写数据********/
int read_data()
{
u8 a;
PA_input();
delay_ms(20);
a=(u8)GPIO_ReadInputData(GPIOA);
PA_output();
return(a);
}
/*******汉字和字符显示,参数入口:Show(地址,显示宽度,汉字数组)************/
/*void Show(u16 address,u8 L,u16 STR1[])
{
char i;
RS_0();
RW_0();
write_comd(address);
for(i=0;i<L;i++)
{
read_busy();
write_data(STR1
);
}
}
*/
void main()
{
u8 L=32;
u16 add=0x0080;
SystemInit(); //系统时钟初始化为72M SYSCLK_FREQ_72MHz
delay_init(72); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init();
LCDInit();
delay_ms(5);
claer_all() ;
delay_ms(5);
//Show(add,L,AC_TABLE[]);
for(i=0;i<32;i++)
{
write_comd(add);
add++;
read_busy();
write_data(0x00ff);
}
}
一周热门 更多>