1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      用C51寫的液晶驅動程序

      更新時間: 2007-02-02 10:25:12來源: 粵嵌教育瀏覽量:1702

      //author:wen-guang

      //一屏顯示"12345678"

      #include
      #include
      #include
      #include
      #define uchb unsigned char bdata
      #define uchd unsigned char data
      #define uchi unsigned char idata
      #define uchp unsigned char pdata
      #define uchx unsigned char xdata
      #define uchc unsigned char code
      #define DISPON 0x3f
      #define DISPOFF 0x3e
      #define LEFT 1
      #define RIGHT 0
      #define HIGH 1
      #define LOW 0
      #define BUFLEN 8
      #define HEAD 0xad
      #define SLCTCARD 0x57
      #define DISPMSG 0x55
      #define CHKCARD 0x53
      #define PWRON 0x51
      sbit CS1=P2^7;
      sbit CS2=P2^3;
      sbit LC1=P3^2;
      sbit LCDE=P3^3;
      sbit LC2=P3^6;
      sbit RS=P3^7;
      /*E=LCDE;
      RS=D/I;
      */

      uchc pwait[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};

      uchc apixs[]={
      0xF0,0xF8,0x0C,0xC4,0x0C,0xF8,0xF0,0x00,0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00,
      0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,
      0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,
      0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
      0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,
      0x7C,0x7C,0x44,0x44,0x44,0xC4,0x84,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
      0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
      0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,
      0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
      0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,
      0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,
      0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00,
      0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0x00,0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00,
      0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00,0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00,
      0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00,
      0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00
      };
      void init51(); //8051 internal initial
      void lcminit(); //LCM display initial
      void delayxms(uchd dsec, uchd csec, uchd msec);
      void lcmclr(uchd start_page, uchd start_col, uchd page_num, uchd col_num );
      void lcmwdatum(bit lr,uchd datum);
      void lcmwcmm(bit lr,uchd command);

      void dispch(uchc * straddr, uchd start_page, uchd start_col, uchd ch_flag, uchd byte_num, uchd dist);
      void disp(uchc * pixaddr, uchd start_page, uchd start_col, uchd page_num, uchd col_num);



      void main(void)
      {
      delayxms(1,10,100);
      init51();
      delayxms(1,100,100);
      lcminit();
      lcmclr(0,0,8,128);
      while(1){

      dispch(pwait,3,0,0,8,20);
      }
      }

      void delayxms(uchd dsec, uchd csec, uchd msec)
      {
      uchd time0;
      uchd time1;
      uchd time2;
      for(time0=0;time0 for(time1=0;time1 for(time2=0;time2 ;
      }
      void init51()
      {
      delayxms(1,10,100);
      /*LC1=0;
      LC2=0;*/
      CS1=CS2=HIGH;
      _nop_();
      RS=LCDE=LOW;
      }
      void lcmwdatum(bit lr,uchd datum)
      {
      LCDE=LOW; RS=HIGH;
      if(lr==LEFT) {CS2=HIGH; CS1=LOW;}//select left half of LCM
      else {CS1=HIGH; CS2=LOW;} //select right half of LCM
      P0=datum; //write display data to LCM
      LCDE=HIGH; LCDE=LOW; //__/--\__
      CS1=CS2=HIGH;
      }
      void lcmwcmm(bit lr,uchd command)
      {
      LCDE=LOW; RS=LOW;
      if(lr==LEFT) {CS2=HIGH; CS1=LOW;}//select left half of LCM
      else {CS1=HIGH; CS2=LOW;} //select right half of LCM
      P0=command; //write command to LCM
      LCDE=HIGH; LCDE=LOW; //__/--\__
      CS1=CS2=HIGH;
      }

      void lcminit()
      {
      lcmwcmm(LEFT,DISPOFF); //left half of LCM off
      lcmwcmm(RIGHT,DISPOFF); //right half of LCM off
      lcmwcmm(LEFT,0xc0); //set start display line 0
      lcmwcmm(RIGHT,0xc0); //set start display line 0
      lcmwcmm(LEFT,DISPON); //left half of LCM off
      lcmwcmm(RIGHT,DISPON); //right half of LCM off
      }
      void lcmclr(uchd start_page, uchd start_col, uchd page_num, uchd col_num )
      {
      uchd cur_col,cur_page;
      //lcmwcmm(LEFT,DISPOFF);
      //lcmwcmm(RIGHT,DISPOFF);
      for(cur_page=start_page;cur_page<(start_page+page_num);cur_page++)
      for(cur_col=start_col;cur_col<(start_col+col_num);cur_col++)
      {
      if(cur_col<0x40)
      {
      lcmwcmm(LEFT,(cur_page&7)|0xb8); //set page
      lcmwcmm(LEFT,(cur_col&0x3f)|0x40); //set column
      lcmwdatum(LEFT,0); //clear to 0
      }
      else
      {
      lcmwcmm(RIGHT,(cur_page&7)|0xb8); //set page
      lcmwcmm(RIGHT,(cur_col&0x3f)|0x40);//set column
      lcmwdatum(RIGHT,0); //clear to 0
      }
      }
      //lcmwcmm(LEFT,DISPON);
      //lcmwcmm(RIGHT,DISPON);
      }
      void dispch(uchc * straddr, uchd start_page, uchd start_col, uchd ch_flag, uchd byte_num, uchd dist)
      {
      uchd byte_c;
      uchd cur_page=start_page;
      uchd cur_col=start_col;
      for(byte_c=0;byte_c {
      disp(apixs+(*straddr)*16,cur_page,cur_col,2,8);
      cur_col=cur_col+dist-4;

      straddr++;
      }

      }
      void disp(uchc * pixaddr, uchd start_page, uchd start_col, uchd page_num, uchd col_num)
      {
      uchd cur_col,cur_page;
      uchc * chp;
      chp=pixaddr;
      for(cur_page=start_page;cur_page<(start_page+page_num);cur_page++)
      for(cur_col=start_col;cur_col<(start_col+col_num);cur_col++)
      {
      if(cur_col<0x40)
      {
      lcmwcmm(LEFT,(cur_page&7)|0xb8); //set page
      lcmwcmm(LEFT,(cur_col&0x3f)|0x40); //set column
      lcmwdatum(LEFT,*chp); //write display data to LCM
      chp++;
      }
      else
      {
      lcmwcmm(RIGHT,(cur_page&7)|0xb8); //set page
      lcmwcmm(RIGHT,(cur_col&0x3f)|0x40);//set column
      lcmwdatum(RIGHT,*chp); //write display data to LCM
      chp++;
      }
      }
      }

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 中文字幕制服丝袜第57页 | 日韩国产欧美另类综合 | 中文字幕日本有码视频在线 | 亚洲AV岛国动作片在线观看 | 新精品国偷自产在线 | 五月天在线亚洲牛 |