16位PIC单片机

2019-03-25 18:54发布

#define SCL_1  PORTAbits.RA11  //74ls164
#define SDA_1  PORTAbits.RA10
#define E      PORTBbits.RB13    //lcd
#define RS     PORTBbits.RB12
#define LCD    PORTBbits.RB11
void delay_us(unsigned int j)
{
   unsigned int i;
   for(i=0;i++;i<j)
   {
    Nop();   
   }
}
void __delay_ms(unsigned int i)              
{
  unsigned int j;
  for(;i>0;i--)
  for(j=0;j<130;j++);                     
}
void write_command(unsigned char data)//lcd写指令
{
  unsigned char i ,temp;
  for(i=0;i<8;i++)
{
   temp=data;
   temp&=0x80;
   if(temp==0x80)
   SDA_1=1;
     else
      SDA_1=0;
      data=data<<1;
      SCL_1=0;
    // __delay_us(1);
      delay_us(1);
      SCL_1=1;
}
  RS=0;
  E=1;
//  __delay_us(1);
    delay_us(1);

   E=0;
}
void write_data(unsigned char data) //lcd写数据
{
    unsigned char i ,temp;
    for(i=0;i<8;i++)
    {
      temp=data;
      temp&=0x80;
      if(temp==0x80)
        SDA_1=1;
        else
         SDA_1=0;
         data=data<<1;
         SCL_1=0;
        //__delay_us(1);
         delay_us(1);
         SCL_1=1;
     }
      RS=1;
      E=1;
//  __delay_us(1);
     delay_us(1);
      E=0;
}
void lcd_write_char(unsigned char x, unsigned char y,unsigned char dat)
{

     write_data(dat);

}
void lcd_init(void)
{
    write_command(0x01);  /*清除显示*/
    __delay_ms(10);
    write_command(0x38);  /*设置 8 位格式,2 行,5*7*/
    __delay_ms(10);
    write_command(0x0c);  /*整体显示,关光标,不闪烁*/
    __delay_ms(10);
    write_command(0x06);  /*设定输入方式,增量不移位*/
    __delay_ms(10);
}
void display2(void)
{
write_command(0xc0);  /*初始位置*/
lcd_write_char(0,2‘2’);
          lcd_write_char(1,2,‘3’);
          lcd_write_char(2,2,'.');
}
void init(void)
{
        PORTA=0x0000;
        TRISA=0x0000;
        PORTB=0x0000;
        TRISB=0xc000;  ///RB14 RB15  为输入
        PORTC=0x0000;
        TRISC=0x0001;  ////RC0为输入
        lcd_init();             ////液晶屏显示初始化
void main(void)
{
  init();
  while(1)
{
      write_command(0x38);  /*设置 8 位格式, 2行, 5*7*/
      write_command(0x0c);  /*整体显示,关光标,不闪烁*/
      write_command(0x06);  /*设定输入方式,增量不移位*/
       LCD=1;
       display2();
}
之前改程序用在PIC18F2420上能正常驱动1602正常显示(SDL_1    SCL_1 用的是74LS164)  但是现在把该程序用在PIC24FV32KA304上时显示屏不能正常显示 屏幕出现闪动     不知道是为什么?    与配置位和端口复用有关吗

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
ienglgge
2019-03-26 13:14
shimingyan1992 发表于 2017-1-10 11:40
我感觉是时序的事   我测了一下 8M晶振 我的一条空指令大约是4us    不是1us吗

cpu的主频和晶振频率不见得一样。要看对应的配置寄存器。分频,倍频什么的。既然能看波形,就把正常和不正常的波形都看看,就比较出区别来了。

一周热门 更多>