色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > LCD12864(ST7920)的C8051驅(qū)動(并行)

          LCD12864(ST7920)的C8051驅(qū)動(并行)

          作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
          //--------------------st_12864.h------------------------

          #ifndef _LCD12864_ST7920
          #define _LCD12864_ST7920
          #ifndef uint8
          #define uint8 unsigned char
          #endif
          #ifndef uint16
          #define uint16 unsigned int
          #endif
          extern void st_writeCmd(uint8 CMD);
          extern void st_writeDat(uint8 DAT);
          //extern void Delay(uint16 ms);
          extern uint8 st_checkBusy(void);
          extern void st_drawFull(uint8 x, uint8 y, const uint8 *Draw);
          //extern void Picture_Set_XY(uint8 x, uint8 y);
          extern void st_sendstr(uint8 x, uint8 y, uint8 *p);
          extern void st_init(void);
          extern void st_setDraw(void);
          extern void st_flash(uint16 delay_t,uint8 times);
          extern void st_moveChar(uint8 step,uint8 dirction,uint16 time);
          extern void st_drawFree(uint8 x1,uint8 y1,uint8 x2,uint8 y2,const uint8 *dat);
          extern void st_readRam(uint8 x,uint8 y);
          extern void st_drawPixel(uint8 x,uint8 y,uint8 color);
          extern void st_clr(void);
          extern void st_drawRectangle(uint8, uint8, uint8, uint8, uint8, uint8);
          extern void st_drawVerticalLine(uint8 x1, uint8 y1, uint8 y2, uint8 color);
          extern void st_drawLevelLine(uint8 x1, uint8 y1, uint8 x2, uint8 color);
          extern void st_setChar(void);
          #endif

          //---------------------------------------------
          //--------------------st_12864.c-------------------------
          /
          //12864接口
          #define ST_DATA P1
          #define DATA_PORT P1
          //st7920指令
          #define ST_CLEAR 0x01
          #define ST_HOME 0x02
          #define ST_ENTRY_MODE 0x06
          #define ST_DISPLAY_OFF 0x08
          #define ST_DISPLAY_ON 0x0c
          #define ST_FUN_8 0x30
          #define ST_FUN_8_BAS 0x30
          #define ST_FUN_8_EXT 0x34

          #define ST_FUN_8_G 0x36
          #define ST_BUSY P1&0x80
          sbit st_rs=P0^1;
          sbit st_rw=P0^2;
          sbit st_e=P0^3;
          void st_writeCmd(uint8 CMD);
          void st_writeDat(uint8 DAT);
          void Delay(uint16 ms);
          uint8 st_checkBusy(void);
          void st_drawFull(uint8 x,uint8 y,const uint8*Draw);
          //void Picture_Set_XY(uint8 x,uint8 y);
          void st_sendstr(uint8 x,uint8 y,uint8*p);
          void st_init(void);
          void st_setDraw(void);
          void st_flash(uint16 delay_t,uint8 times);
          void st_moveChar(uint8 step,uint8 dirction,uint16 time);
          void st_drawFree(uint8 x1,uint8 y1,uint8 x2,uint8 y2, const uint8 *dat);
          void st_readRam(uint8 x,uint8 y);
          void st_drawPixel(uint8 x,uint8 y,uint8 color);
          void st_clr(void);
          void st_drawRectangle(uint8,uint8,uint8,uint8,uint8,uint8);
          void st_drawVerticalLine(uint8 x1,uint8 y1,uint8 y2,uint8 color);
          void st_drawLevelLine(uint8 x1,uint8 y1,uint8 x2,uint8 color);
          void st_setChar(void);
          uint8 readdispdata[2];

          void st_init(void)
          {
          EA=0;
          delay_ms(50);
          //功能設(shè)置 8位數(shù)據(jù),基本指令
          st_writeCmd(ST_FUN_8);
          //delay_us(120);
          st_writeCmd(ST_FUN_8_BAS);
          //st_writeCmd(ST_FUN_8_G);
          //delay_us(50);
          //顯示狀態(tài)ON,游標OFF,反白OFF
          st_writeCmd(ST_DISPLAY_ON);
          //delay_us(120);
          //清屏
          st_writeCmd(ST_CLEAR);
          //delay_ms(12);
          //地址歸位
          //st_writeCmd(ST_HOME);
          //delay_us(120);
          //設(shè)置進入地址
          st_writeCmd(ST_ENTRY_MODE);
          delay_us(1);
          EA=1;
          }
          void st_flash(uint16 delay_t,uint8 times)
          {
          uint8 j ;
          for(j=0;j{
          //st_writeCmd(0x08);//關(guān)閉顯示
          st_writeCmd(ST_FUN_8_EXT); //關(guān)圖形模式
          delay_ms(delay_t); //軟件延時
          //st_writeCmd(0x0c);//開顯示
          st_writeCmd(ST_FUN_8_G); //開圖形模式
          delay_ms(delay_t);//軟件延時
          }
          }

          void st_moveChar(uint8 step,uint8 dirction,uint16 time)
          {
          uint8 i ;
          //移動的步數(shù)
          for(i=0;i{
          st_writeCmd(dirction);
          //文字移動方向
          delay_ms(time);
          //控制移動時間
          }
          }

          //寫控制命令函數(shù)
          void st_writeCmd(uint8 CMD)
          {
          while(st_checkBusy());
          //檢測液晶內(nèi)部是否忙
          st_rs=0;
          st_rw=0;
          DATA_PORT=CMD ;
          st_e=1;
          delay_us(2);
          st_e=0;
          delay_us(2);
          }

          //寫數(shù)據(jù)函數(shù)
          void st_writeDat(uint8 DAT)
          {
          while(st_checkBusy());
          //檢測液晶內(nèi)部是否忙
          st_rs=1;
          delay_us(2);
          st_rw=0;
          DATA_PORT=DAT ;
          st_e=1;
          delay_us(2);
          st_e=0;
          delay_us(2);
          }

          uint8 st_checkBusy(void)
          {
          uint8 temp ;
          //st_e=0;
          //delay_us(1);
          DATA_PORT=0xff;
          st_rs=0;
          delay_us(1);//nop();
          st_rw=1;
          delay_us(2);//nop();
          st_e=1;
          delay_us(2);//nop();
          temp=DATA_PORT;
          delay_us(1);//nop();
          st_e=0;
          delay_us(1);//nop();
          temp&=0x80 ;
          //st_e=1;
          //delay_us(1);
          return(temp);
          }

          void st_sendstr(uint8 x,uint8 y,uint8*p)
          {
          EA=0;
          if(y==0)
          {
          st_writeCmd((0x80+x));
          }
          if(y==1)
          {
          st_writeCmd((0x90+x));
          }
          if(y==2)
          {
          st_writeCmd((0x88+x));
          }
          if(y==3)
          {
          st_writeCmd((0x98+x));
          }
          while(*p!=0)
          {
          st_writeDat(*p++);
          }
          EA=1;
          }

          void st_setDraw(void)
          {
          EA=0;
          st_writeCmd(ST_CLEAR);
          //清屏
          delay_ms(2);//Delay(20);
          //延時
          st_writeCmd(ST_FUN_8_G);
          //8BIT控制界面,擴充指令集,,繪圖顯示ON
          delay_us(1);//Delay(20);
          //延時
          //st_drawRectangle(0,0,127,63,32,0);
          //add by july
          EA=1;
          }
          void st_setChar(void)
          {
          EA=0;
          st_writeCmd(ST_FUN_8_BAS);
          //8BIT控制界面,擴充指令集,,繪圖顯示ON
          st_writeCmd(ST_CLEAR);
          //清屏
          delay_ms(2);//Delay(20);
          //延時
          EA=1;
          }

          void st_drawFull(uint8 x,uint8 y,const uint8*Draw)
          {
          uint8 i,j,temp_x,temp_y ;
          EA=0;
          temp_x=x ;
          temp_y=y ;
          temp_x|=0x80 ;
          temp_y|=0x80 ;
          for(i=0;i<32;i++)
          {
          st_writeCmd(temp_y++);
          //設(shè)置繪圖區(qū)的Y地址坐標
          //if(temp_y>0x87)temp_y=0x90;
          st_writeCmd(temp_x);
          //設(shè)置繪圖區(qū)的X地址坐標
          for(j=0;j<16;j++)
          {
          st_writeDat(*Draw);
          Draw++;
          }
          }
          temp_x=x ;
          temp_y=y ;
          temp_x|=0x88 ;
          temp_y|=0x80 ;
          j=0 ;
          for(i=32;i<64;i++)
          {
          st_writeCmd(temp_y++);
          //設(shè)置繪圖區(qū)的Y地址坐標
          st_writeCmd(temp_x);
          //設(shè)置繪圖區(qū)的X地址坐標
          for(j=0;j<16;j++)
          {
          st_writeDat(*Draw);
          Draw++;
          }
          }
          EA=1;
          }

          //----------------------------------------------------add by july
          void st_drawFree(uint8 x1,uint8 y1,uint8 x2,uint8 y2,const uint8 *dat)
          {
          uint8 i,j,xx1,yy1,y1y2,x1x2 ;
          EA=0;
          y1y2=y2-y1 ;
          x1x2=x2-x1 ;
          xx1=x1|0x80 ;
          yy1=y1|0x80 ;
          //xx20x80;
          //yy20x80;
          for(i=0;i{
          //sendchar(i);
          if(y1++<32)
          {
          st_writeCmd(yy1++);
          st_writeCmd(xx1);
          for(j=0;j{
          st_writeDat(*dat);
          dat++;
          }
          }
          else
          {
          st_writeCmd(yy1++-32);
          st_writeCmd(xx1+8);
          for(j=0;j{
          st_writeDat(*dat);
          dat++;
          }
          }
          }
          EA=1;
          }
          //--------------讀顯示數(shù)據(jù)-----------add by july
          void st_readRam(uint8 x,uint8 y)
          {
          //uint8 temp;
          EA=0;
          if(y>31)
          {
          y-=32 ;
          x+=8 ;
          }

          st_writeCmd(y|0x80);
          st_writeCmd(x|0x80);

          while(st_checkBusy());
          //檢測液晶內(nèi)部是否忙
          DATA_PORT=0XFF ;
          st_rs=1;
          delay_us(2);//nop();
          st_rw=1;
          delay_us(2);//nop();
          //Set_input();
          //nop();
          st_e=1;
          delay_us(20);//Delay_us(20);
          //sendchar(PINA);
          st_e=0;
          delay_us(1);//nop();
          st_e=1;
          delay_us(20);//Delay_us(20);
          //sendchar(PINA);
          readdispdata[0]=ST_DATA ;
          st_e=0;
          delay_us(1);//nop();
          st_e=1;
          delay_us(20);//Delay_us(20);
          //sendchar(PINA);
          readdispdata[1]=ST_DATA ;
          st_e=0;
          delay_us(1);//nop();
          //Set_output();
          EA=1;
          }
          //----------------寫一個像素------------------------add by july
          void st_drawPixel(uint8 x,uint8 y,uint8 color)
          {
          uint8 realx,modx1=8,modx2=8 ;
          EA=0;
          realx=x/16 ;
          //sendchar(realx);
          modx1=x%16 ;
          if(modx1>7)
          {
          modx2=modx1%8 ;
          modx1=8 ;
          }
          st_readRam(realx,y);
          if(color)
          {

          readdispdata[0]|=0x80>>modx1 ;
          readdispdata[1]|=0x80>>modx2 ;

          }
          else
          {
          readdispdata[0]&=~(0x80>>modx1);
          readdispdata[1]&=~(0x80>>modx2);

          }
          if(y>31)
          {
          y-=32 ;
          realx+=8 ;
          }

          st_writeCmd(y|0x80);
          st_writeCmd(realx|0x80);
          //sendchar(realx);
          st_writeDat(readdispdata[0]);
          st_writeDat(readdispdata[1]);
          EA=1;
          }
          //--------------lcd clear----------------add by july
          void st_clr(void)
          {
          st_writeCmd(0x01);
          //清屏
          //Delay(20);//延時
          //st_writeCmd(0x36); //8BIT控制界面,擴充指令集,,繪圖顯示ON
          }
          //---------draw line--------------------add by july
          void st_drawLevelLine(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char color)
          {
          unsigned char i ;
          for(i=x1;i<=x2;i++)
          {
          st_drawPixel(i,y1,color);

          }
          }
          void st_drawVerticalLine(unsigned char x1,unsigned char y1,unsigned char y2,unsigned char color)
          {
          unsigned char i ;
          for(i=y1;i<=y2;i++)
          {
          st_drawPixel(x1,i,color);

          }
          }
          //-----------------draw rectangle------------------add by july
          void st_drawRectangle(unsigned char lf,unsigned char tp,unsigned char rt,unsigned char bt,unsigned char w,unsigned char cl)
          {
          unsigned char i ;
          for(i=0;i{
          st_drawLevelLine(lf,tp,rt,cl);
          st_drawVerticalLine(rt,tp,bt,cl);
          st_drawLevelLine(lf,bt,rt,cl);
          st_drawVerticalLine(lf,tp,bt,cl);

          }
          }
          //---------------------------------------------

          本文引用地址:http://cafeforensic.com/article/201611/320377.htm

          //--------------------pic.h-------------------------
          code const uint8 PIC1[][16]=// 數(shù)據(jù)表
          {
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X98,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X04,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0XF4,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0XB2,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X18,0X04,0XE2,0X00,
          0X00,0X00,0X00,0X00,0X00,0X01,0XE0,0X00,0X1F,0XFF,0X80,0X00,0X06,0X04,0XA2,0X00,
          0X00,0X00,0X00,0X00,0X00,0X0E,0X00,0X03,0XFF,0XFF,0XF8,0X00,0X07,0X82,0X94,0X00,
          0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X0F,0XFF,0XFF,0XFE,0X00,0X03,0XC2,0X04,0X00,
          0X00,0X00,0X00,0X00,0X07,0XC0,0X00,0X7F,0XFF,0XFF,0XFF,0X00,0X03,0XE1,0X98,0X00,
          0X00,0X00,0X00,0X00,0X3F,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0X00,0X07,0XF0,0X60,0X00,
          0X00,0X00,0X00,0X00,0XFC,0X00,0X03,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0XF8,0X00,0X00,
          0X00,0X00,0X00,0X03,0XF0,0X00,0X0F,0XFF,0XFF,0XFF,0XF8,0X00,0X3F,0XF8,0X00,0X00,
          0X00,0X00,0X00,0X0F,0XE0,0X00,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0XF8,0X00,0X00,
          0X00,0X00,0X00,0X3F,0XC0,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
          0X00,0X00,0X00,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
          0X00,0X00,0X01,0XFF,0X00,0X00,0X3F,0XF8,0X00,0X00,0X03,0XFF,0XFF,0XF0,0X00,0X00,
          0X00,0X00,0X03,0XFF,0X00,0X00,0X1E,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X00,
          0X00,0X00,0X0F,0XFF,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X07,0XFF,0XE0,0X00,0X00,
          0X00,0X00,0X1F,0XFF,0X00,0X00,0X03,0XF0,0XE0,0X00,0X00,0X03,0XFF,0XE0,0X00,0X00,
          0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,
          0X00,0X00,0X7F,0XFF,0XC0,0X00,0X00,0X00,0X01,0XC0,0X00,0X01,0XFF,0X00,0X00,0X00,
          0X00,0X00,0X7F,0XFF,0XF0,0X00,0X00,0X00,0X00,0XF0,0X00,0X00,0XFE,0X00,0X00,0X00,
          0X00,0X00,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X0F,0XF8,0X00,0X01,0XFC,0X00,0X00,0X00,
          0X00,0X00,0XFF,0XFF,0XFF,0XFB,0X00,0X0F,0XFF,0XF8,0X00,0X01,0XF0,0X00,0X00,0X00,
          0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XC0,0X00,0X00,0X00,
          0X00,0X00,0XFF,0XFF,0X03,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X07,0X80,0X00,0X00,0X00,
          0X00,0X00,0XFF,0XFC,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X1C,0X00,0X00,0X00,0X00,
          0X00,0X00,0X7F,0XF8,0X00,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X30,0X00,0X00,0X00,0X00,
          0X00,0X00,0X7F,0XE0,0X00,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0XC0,0X00,0X00,0X00,0X00,
          0X00,0X00,0X3F,0XC0,0X00,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X1F,0XC0,0X00,0X7F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X0F,0XC0,0X00,0X1F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X07,0XC0,0X00,0X00,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X1E,0X06,0X04,0X02,0X03,0XC1,0XC0,0X48,0X00,0X20,0X0C,0X07,0X83,0XC0,0X00,
          0X00,0X1A,0X06,0X04,0X02,0X06,0XC3,0X40,0X48,0X00,0X20,0X0C,0X04,0X86,0XC0,0X00,
          0X00,0X18,0X02,0X04,0X02,0X06,0X03,0X40,0X68,0X00,0X20,0X0C,0X04,0X86,0X00,0X00,
          0X00,0X18,0X02,0X04,0X02,0X02,0X01,0X40,0X68,0X00,0X20,0X0C,0X04,0X82,0X00,0X00,
          0X00,0X08,0X02,0X04,0X02,0X06,0X03,0X40,0X68,0X00,0X20,0X0C,0X04,0X83,0X00,0X00,
          0X00,0X04,0X02,0X04,0X02,0X02,0X03,0X40,0X78,0X00,0X20,0X14,0X07,0X01,0X80,0X00,
          0X00,0X02,0X02,0X04,0X02,0X02,0X01,0X40,0X58,0X00,0X20,0X14,0X04,0X80,0X80,0X00,
          0X00,0X02,0X02,0X04,0X02,0X06,0X01,0X40,0X58,0X00,0X20,0X16,0X04,0X80,0XC0,0X00,
          0X00,0X02,0X02,0X04,0X02,0X02,0X03,0X40,0X58,0X00,0X20,0X1E,0X04,0X80,0XC0,0X00,
          0X00,0X1A,0X02,0X04,0X02,0X06,0XC3,0X40,0X58,0X00,0X20,0X12,0X04,0X86,0XC0,0X00,
          0X00,0X1A,0X02,0X06,0X02,0X02,0XC1,0X40,0X58,0X00,0X30,0X12,0X05,0X82,0XC0,0X00,
          0X00,0X0E,0X02,0X07,0X02,0X03,0X81,0XC0,0X48,0X00,0X38,0X32,0X07,0X83,0X80,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
          };
          //---------------------------------------------



          關(guān)鍵詞: LCD12864ST7920C805

          評論


          技術(shù)專區(qū)

          關(guān)閉