<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 32 x 8段液晶驅動HT1622 程序

          32 x 8段液晶驅動HT1622 程序

          作者: 時間:2016-11-23 來源:網(wǎng)絡 收藏
          軟件平臺IAR for STM8 V1.30

          #include

          本文引用地址:http://www.ex-cimer.com/article/201611/320299.htm

          #define uchar unsigned char
          #define uint unsigned int

          #define LCD_ON 0x03 //啟動偏壓發(fā)生器
          #define LCD_OFF 0x02 //關閉偏壓發(fā)生器
          #define SYS_DIS 0x00 //關閉振蕩器和LCD驅動
          #define SYS_EN 0x01 //啟動系統(tǒng)振蕩器
          #define RC32K 0x18 //啟動內部32KRC
          #define TONE_OFF 0x08 //關閉蜂鳴器
          #define TONE_4K 0x40 //啟動4 khz蜂鳴信號
          #define TONE_2K 0x60 //啟動2 khz蜂鳴信號

          #define DATA PC_ODR_ODR4
          #define WR PC_ODR_ODR5
          #define CS PC_ODR_ODR7

          #define COM0 0
          #define COM1 1
          #define COM2 2
          #define COM3 3
          #define COM4 4
          #define COM5 5
          #define COM6 6
          #define COM7 7

          uchar dispram[32]; //預設顯示緩存,8x32


          void gpio(void)
          {
          PC_DDR = 0xb0;
          PC_CR1 = 0xb0;
          PC_ODR = 0xbf;
          }

          void delay_ms(uchar ms)
          {
          volatile uint i, j;
          for (i=ms; i>0; i--)
          for (j=400; j>0; j--)
          {
          ;
          }
          }

          void SendBit_HL(uchar dat,uchar cnt) //dat 的高cnt 位寫入HT1621,先發(fā)送高位
          {
          uchar i;
          for(i=0; i
          {
          if(dat&0x80)
          {
          DATA = 1;
          }
          else
          {
          DATA = 0;
          }
          WR = 0;
          asm("nop");
          asm("nop");
          WR = 1;
          dat <<= 1;
          }
          }

          void SendBit_LH(uchar dat,uchar cnt) //data的低cnt位寫入1621
          {
          uchar i;
          for(i=0; i
          {
          if(dat&0x01)
          {
          DATA = 1;
          }
          else
          {
          DATA = 0;
          }
          WR = 0;
          asm("nop");
          asm("nop");
          WR = 1;
          dat >>= 1;
          }
          }

          //指令模式
          void Sendcmd(uchar command)
          {
          CS = 0;
          SendBit_HL(0x80,3); //寫入標志碼"100"
          SendBit_HL(command,9); //寫入 9 位數(shù)據(jù),其中前 8 位為 command 命令,最后 1 位任意
          CS = 1;
          }

          //寫半個字節(jié)
          void W1622_q(uchar addr,uchar dat)
          {
          CS = 0;
          SendBit_HL(0xa0,3); //寫入標志碼"101"
          SendBit_HL(addr<<2,6); //寫入 6 位 addr
          SendBit_LH(dat,4);
          CS = 1;
          }

          //寫SEG腳上所有的位,SEG( 0~31 )
          void W1622_byte(uchar SEG,uchar dat)
          {
          uchar i,addr;
          addr = SEG * 2;
          for(i=0;i<2;i++)
          {
          W1622_q(addr,dat);
          addr += 1;
          dat >>= 4;
          }
          }

          //連續(xù)寫單元 SEG(0~31)
          void W1622_success(uchar SEG,uchar cnt,uchar *p)
          {
          uchar i,addr;
          addr = SEG * 2;
          CS = 0;
          SendBit_HL(0xa0,3); //寫入標志碼"101"
          SendBit_HL(addr<<2,6); //寫入 6 位 addr
          for(i =0; i
          {
          SendBit_LH(*p,4);
          SendBit_LH(*p>>4,4);
          }
          CS = 1;
          }

          void disp_renew(void) //顯示更新,所有8x32段全部刷新
          {
          W1622_success(0,32,dispram);
          }

          //com(0-7) SEG(0-31)
          void dispON(uchar com,uchar SEG)
          {
          dispram[SEG] |= (1< //W1622_byte(SEG,dispram[SEG]); //去掉注釋后,寫完就馬上顯示
          }

          //com(0-7) SEG(0-31)
          void dispOFF(uchar com,uchar SEG)
          {
          dispram[SEG] &= ~(1< //W1622_byte(SEG,dispram[SEG]); //去掉注釋后,寫完就馬上顯示
          }

          void cleandisp(void)
          {
          uchar i;
          CS = 0; //清屏幕
          SendBit_HL(0xa0,3); //寫入標志碼"101"
          SendBit_HL(0,6); //寫入 6 位 addr
          for(i =0; i <32; i ++) //連續(xù)寫入數(shù)據(jù)
          {
          SendBit_LH(0,4);
          SendBit_LH(0,4);
          }
          CS = 1;
          for(i=0; i<32; i++)
          {
          dispram[i] = 0x00; //清空顯存
          }
          }

          void disp_All(void)
          {
          uchar i;
          CS = 0; //全顯示屏幕
          SendBit_HL(0xa0,3); //寫入標志碼"101"
          SendBit_HL(0,6); //寫入 6 位 addr
          for(i =0; i <32; i ++) //連續(xù)寫入數(shù)據(jù)
          {
          SendBit_LH(0xff,4);
          SendBit_LH(0xff,4);
          }
          CS = 1;
          for(i=0; i<32; i++)
          {
          dispram[i] = 0xff; //填充顯存
          }
          }

          void HT1622_Init(void)
          {
          uchar j = 0;
          for(j=0; j<32; j++)
          {
          dispram[j] = 0;
          }
          Sendcmd(RC32K); //RC32k
          Sendcmd(SYS_EN); //打開系統(tǒng)振蕩器
          Sendcmd(LCD_ON); //打開 LCD偏壓發(fā)生器
          }

          void main( void )
          {
          uchar i,j;
          gpio();
          HT1622_Init();
          /// disp_All(); //全部顯示
          // delay_ms(200);
          cleandisp(); //清屏

          // delay_ms(200);

          while(1)
          {
          for(i=0;i<32;i++)
          {
          for(j=0;j<8;j++)
          {
          dispON(j,i);
          disp_renew();
          delay_ms(80);
          }
          }
          delay_ms(200);
          cleandisp();
          for(i=0;i<8;i++)
          {
          for(j=0;j<32;j++)
          {
          dispON(i,j);
          disp_renew(); //刷新整個顯示
          delay_ms(80);
          }
          }
          delay_ms(200);
          cleandisp();

          }
          }



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();