[mw_shl_code=c,true]#include "stm32f10x.h"
#include "delay.h"
static __IO uint32_t TimingDelay;
void RCC_Configuration(void);
//void Delay(__IO uint32_t nTime);
#define Line1 0x80//?????
#define Line2 0x90//?????
#define Line3 0x88//?????
#define Line4 0x98//?????
#define LCD_IO GPIOB
#define CS GPIO_Pin_0
#define RW GPIO_Pin_3
#define CLK GPIO_Pin_1
#define PSB GPIO_Pin_4
#define RST GPIO_Pin_5
#define SET(n) GPIO_SetBits(GPIOB,n) //??????????
#define RESET(n) GPIO_ResetBits(GPIOB,n)//?????
#define CMD (uint32_t)0xf8000000 //?? ??????????0xf8
#define DATE (uint32_t)0xfa000000 // ?? ????????0xfa
#define Delay delay_ms
void LCD_IOinit_OUT() //?????? ,????,????,????
{
GPIO_InitTypeDef GPIO_InitStructure;
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_IO, &GPIO_InitStructure);
}
void LCD_Write(uint32_t cmd,uint8_t ddata)//LCD ???
{
uint32_t temp=cmd;
uint32_t i;
RESET(CS); //????
temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12);
SET(CS); //????,??????
for(i=0;i<24;i++)
{
if(temp&0x80000000)SET(RW); //?????,???1,??RW??1
else RESET(RW); //???0 RW??0
SET(CLK);//?????? ????????
Delay(2);//????
RESET(CLK);//???????,????
temp=temp<<1;//???? ,?????
}
RESET(CS); //????,??????
}
void Display(uint8_t addr,uint8_t *hz)
{
LCD_Write(CMD,addr);
Delay(3);
while(*hz!='\0')
{
LCD_Write(DATE,*hz);
hz++;
Delay(3);
}
}
void LCD_init()//?????
{
RESET(CS); //????
RESET(PSB);//PSB??,?????,??????
RESET(RST);//??RST
Delay(100);
SET(RST);
Delay(40);
LCD_Write(CMD,0x30);//8?????
Delay(40);
LCD_Write(CMD,0x0c);//???,???
Delay(40);
LCD_Write(CMD,0x01);//??
Delay(40);
LCD_Write(CMD,0x06);//????? AC+1
Delay(40);
}
int main()
{
delay_init();
//RCC_Configuration();
//delay_ms(1);
SysTick_Config(72000); //??SYSTICK?????1ms??
LCD_IOinit_OUT();
LCD_init();
while(1)
{
Display(Line1,"????±?????");
Display(Line2,"????????????????");
Display(Line3,"???????±?ò??????");
Display(Line4,"?????????°????");
}
}
// void RCC_Configuration(void)
// {
// SystemInit();
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
// }
/*void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
[/mw_shl_code]
以上是我单片机的原理图还有程序。我想问的是 为什么我12864液晶屏 如果在上面程序上的IO改到PB的 8 9 10 11 12 的话液晶屏就正常显示,如果IO为 0 1 3 4 5 的话就不行 改成PA的 11 12 13 14 15也不行 我想问的是用这些引脚不行的原因是什么
可我在战舰开发板上使用同样的IO 只是吧PB改成PD 或者PE 也是用的 0 1 3 4 5可以正常运行在PB就不行 求解答 原子哥求指导。。。 |