STM32/STM8技术论坛
直播中

力由

10年用户 15经验值
擅长:嵌入式技术
私信 关注
[问答]

求大神!STM32f103控制1602的端口怎么设置?推挽还是开漏输出?需要检测忙状态吗?

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();  //         
}


  • 1602
  • stm32f103rct6
已退回5积分

回帖(1)

黄工

2017-2-27 16:47:56
在程序 上慢慢调整
举报

更多回帖

发帖
×
20
完善资料,
赚取积分