您的位置:首页 > 其它

基于MDK编译器 STM32与12864液晶显示程序 和电路连接

2012-12-23 22:46 471 查看
这里附上的是主程序部分和电路连接









这里用的12864液晶是5v的,电路链接部分 RS PE2 RW PE4 EN PE6 15口PSB串并 PE3
#include "stm32f10x.h"

GPIO_InitTypeDef GPIO_InitStructure;
#define RS_SET  GPIO_SetBits(GPIOE, GPIO_Pin_2)
#define RS_CLR  GPIO_ResetBits(GPIOE, GPIO_Pin_2)

#define RW_SET  GPIO_SetBits(GPIOE, GPIO_Pin_4)
#define RW_CLR  GPIO_ResetBits(GPIOE, GPIO_Pin_4)

#define EN_SET  GPIO_SetBits(GPIOE, GPIO_Pin_6)
#define EN_CLR  GPIO_ResetBits(GPIOE, GPIO_Pin_6)

#define PSB_SET  GPIO_SetBits(GPIOE, GPIO_Pin_3)
#define PSB_CLR  GPIO_ResetBits(GPIOE, GPIO_Pin_3)

#define DATA_IO GPIOC->ODR

void RCC_Configuration(void);
void LCD12864_Config(void);
void Delay_nus(__IO uint32_t nCount);
void Delay_mus(__IO uint32_t nCount);
uint8_t table[]="做我女朋友吧!";

void write_12864com(uint8_t com)
{
RW_CLR;
RS_CLR;
Delay_nus(500);
DATA_IO=com;
EN_SET;
Delay_nus(1000);
EN_CLR;
Delay_nus(1000);
}

void write_12864dat(uint8_t dat)
{
RW_CLR;
RS_SET;
Delay_nus(500);
DATA_IO=dat;
EN_SET;
Delay_nus(1000);
EN_CLR;
Delay_nus(1000);
}

void init12864lcd(void)
{
Delay_mus(500);
write_12864com(0x30);
Delay_nus(500);
write_12864com(0x30);
Delay_nus(500);
write_12864com(0x0f);
Delay_nus(500);
write_12864com(0x01);
Delay_nus(25);
write_12864com(0x06);
Delay_nus(2500);
write_12864com(0x0c);
Delay_nus(500);
}

void display(void)
{
uint8_t i;
write_12864com(0x80);
for(i=0;i<14;i++)
{
write_12864dat(table[i]);
Delay_mus(50);
}
}

void LCD12864_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &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;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}

int main(void)
{
RCC_Configuration();   //系统时钟配置
LCD12864_Config();
PSB_SET;
init12864lcd();
while (1)
{
display();
}
}

void RCC_Configuration(void)
{
SystemInit();
}

void Delay_nus(uint32_t nCount)
{
uint32_t j;
while(nCount--)
{
j=8;
while(j--);
}
}

void Delay_mus(uint32_t nCount)
{
while(nCount--)
Delay_nus(1100);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息