void Busy_Wait(void) //检测液晶忙状态
{
Reset_RS(); //rs=0
Set_RW(); //rw=1 建立高低电平需要延时吗?多久
Set_E(); //en=1
delay_ms(1); //延时1ms 72Mhz
while(PCout(11) == 1) //检测数据口D7,判断忙状态 需要检测数据吗?还是直接延时就可以,原理图里的是5V是3.3V工作?
{ Reset_E(); //en=0
delay_ms(1);
Set_E(); //en=1 重复使能失能使得D7口为0,不忙(感觉这个不一定需要,试了也不行)
delay_ms(1);
}
delay_ms(5);
Reset_E(); //en=0
}
void Write_Cmd(uint8_t Cmd) //写指令
{
Busy_Wait(); //判断液晶忙状态
Reset_RS();
Reset_RW();
Reset_E(); //
//下面是数据口的配置,这个数据口配置该怎么写?我写的是类似ODR(BRR)形式
// GPIO_WriteBit(GPIOC,GPIO_Pin_11,(BitAction)((Cmd&0x80)>>7));//D7
// GPIO_WriteBit(GPIOC,GPIO_Pin_12,(BitAction)((Cmd&0x40)>>6)); //D6
// GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)((Cmd&0x20)>>5)); //D5
//GPIO_WriteBit(GPIOB,GPIO_Pin_3,(BitAction)((Cmd&0x10)>>4)); //D4
//GPIO_WriteBit(GPIOB,GPIO_Pin_4,(BitAction)((Cmd&0x08)>>3)); //D3
//GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)((Cmd&0x04)>>2)); //D2
//GPIO_WriteBit(GPIOB,GPIO_Pin_6,(BitAction)((Cmd&0x02)>>1)); //D1
//GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)((Cmd&0x01))); //D0
Set_E();
delay_ms(1); // 高脉冲 该延时多久,1ms够不?还是多了?
Reset_E(); //
}
|