导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]我的液晶无法显示,源程序如下,请帮忙分析,谢谢各位高[mpszm]

 *第34068篇: [求助]我的液晶无法显示,源程序如下,请帮忙分析,谢谢各位高手。

  
楼 主:mpszm 2005年9月3日10:04
 [求助]我的液晶无法显示,源程序如下,请帮忙分析,谢谢各位高手。
C8051F 单片机:ST7920液晶请教!!!急,串行方式。

我的液晶无法显示,源程序如下,请帮忙分析,谢谢各位高手。

#include   <C8051F000.H>  

sbit LCM_CS   =  P0^3 ;             //LCM 驱动端口
sbit LCM_SID  =  P0^4 ;  
sbit LCM_SCLK =  P0^5 ;
sbit LCM_RST  =  P0^6 ;
sbit LCM_BK   =  P0^7 ;            

void send_byte(unsigned char dat);
void write_cmd(unsigned char cmd);
void write_data(unsigned char buffer);
void lcd_init(void)    ;

void delay_us(int ms)
{
  unsigned int data i;
  unsigned char data j;
  for(i=0;i  <ms;i++)
  {
   for(j=0;j  <0x2f;j++);
  }
}

//串行发送一字节数据
void send_byte(unsigned char lcd_byte)
{
 unsigned char data i;

 for(i=0;i  <8;i++)
  {  
    LCM_SCLK = 0 ;
    delay_us(10);
       if((lcd_byte) & 0x80) LCM_SID = 1;
    else             LCM_SID = 0; 
    LCM_SCLK = 1 ;
    lcd_byte=lcd_byte  <  <1;
    delay_us(10);
   }
}


void write_cmd(unsigned char cmd)
{
 //LCM_CS=1;
 delay_us(20);
 send_byte(0xf8);           //11111,00,0 RW=0,RS=0 同步标志
 send_byte(cmd & 0xf0);            //高四位
 send_byte((cmd  <  <4) & 0xf0);    //低四位
 delay_us(20);
// LCM_CS=0; 
}


void write_data(unsigned char buffer)
{
// LCM_CS=1;
 delay_us(20);
 send_byte(0xfa);                //11111,01,0 RW=0,RS=1
 send_byte(buffer & 0xf0);        //高四位
 send_byte((buffer  <  <4) & 0xf0);    //低四位
 delay_us(20);
 //LCM_CS=0;
}

void lcd_init(void)

  LCM_RST= 0;

  delay_us(1000) ;
  LCM_RST=1;

 delay_us(1000);
 LCM_CS = 1;
 
  write_cmd(0x30) ; //功能设置,一次送8位数据,基本指令集
  delay_us(100)     ;
 
  write_cmd(0x30) ; //功能设置,一次送8位数据,基本指令集
  delay_us(100)     ;

 write_cmd(0x0c) ;  //0000,1100  整体显示,游标off,游标位置off
 delay_us(100);


 write_cmd(0x01) ; //0000,0001 清DDRAM
 delay_us(100);

 write_cmd(0x02) ; //0000,0010 DDRAM地址归位
 delay_us(100)     ;


 write_cmd(0x80)  ;//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
 delay_us(100)     ;

 
}

void display(unsigned char x_add,unsigned char dat1,unsigned char dat2)
{
     write_cmd(x_add);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
     write_data(dat1);
     write_data(dat2);
}

void display_test(void)
{
  write_cmd(0x81);//1000,0001 设定DDRAM 7位地址000,0001到地址计数器AC
  write_data(0x33);
  write_data(0x42);
  write_data(0x43);
  write_data(0x44);
  write_cmd(0x00);

 display(0x80,0xb0,0xb2);
 display(0x81,0xbb,0xD5);
           display(0x82,0xb5,0xe7);
           display(0x83,0xc1,0xA6);
           display(0x84,0xc5,0xe0);
           display(0x85,0xD1,0xb5);
           display(0x86,0xd6,0xD0);
           display(0x87,0xd0,0xc4);

}
void main(void)
{
 
   WDTCN = 0xde;                       // disable watchdog timer
   WDTCN = 0xad; 
   OSCICN = 0x97;    // Internal Oscillator Control Register,16M,
 //  adc_init();
   port_init();
  // read_setting();
  // write_setting();
   
   lcd_init();
   display_test();
  // os_start_system (INIT);                     /* start the first task     */
}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:免费赠送编程器活动开始了!!!

[下一篇主题]:诚接项目