1. 程式人生 > >HT1621B驅動液晶LCD連線及程式

HT1621B驅動液晶LCD連線及程式

   硬體連線:微控制器使用stm8s103k的32腳晶片,來驅動HT1621B顯示LCD。

   (1)微控制器與HT1621之間只需連線3根線:CS,WR,DATA。

   (2)HT1621的VC和vlcd都直接連線的5V電源。

   (3)ht1621與LCD之間需要把com0~com3,seg0-seg15都對應連線起來。

   軟體部分:


    #include "stm8s.h"
    #include "STM8S103k.h"


    #define BIAS   0x52            //0b1000 0101 0010  1/3duty 4com
    #define SYSDIS 0X00           //0b1000 0000 0000  關振系統蕩器和LCD偏壓發生器
    #define SYSEN  0X02           //0b1000 0000 0010 開啟系統 振盪器
    #define LCDOFF 0X04           //0b1000 0000 0100  關LCD偏壓
    #define LCDON  0X06           //0b1000 0000 0110  開啟LCD偏 壓
    #define XTAL   0x28           //0b1000 0010 1000 外部接時鐘
    #define RC256  0X30           //0b1000 0011 0000  內部時鐘RC256K
    #define TONEON  0X12           //0b1000 0001 0010  開啟聲音 輸出
    #define TONEOFF 0X10           //0b1000 0001 0000 關閉聲音輸出
    #define WDTDIS  0X0A        //0b1000 0000 1010  禁止看門狗
    #define TONE_4K 0x80        //4k聲音輸出頻率
    #define TONE_2K 0xC0    

    //HT1621控制位(液晶模組介面定義,根據自已的需要更改)
    _Bool PB_ODR_ODR7 @PB_ODR:7;//CS
    _Bool PB_ODR_ODR5 @PB_ODR:5;//WR
    _Bool PB_ODR_ODR6 @PB_ODR:6;//DATA
    #define CLS_HT_WR     PB_ODR_ODR5 = 0   //拉低
    #define SET_HT_WR     PB_ODR_ODR5 = 1   //拉高
    #define CLS_HT_CS     PB_ODR_ODR7 = 0   //拉低
    #define SET_HT_CS     PB_ODR_ODR7 = 1   //拉高
    #define SET_HT_DAT    PB_ODR_ODR6 = 1      //資料位
    #define CLS_HT_DAT    PB_ODR_ODR6 = 0      //資料位

    //-----------------------------------------------------------------------------------------
    //函式名稱:Delay()
    //功 能:延時子程式
    //-----------------------------------------------------------------------------------------
    void Delay(uchar us) //5,7,9
    {
     while(--us);
    }
    //-----------------------------------------------------------------------------------------
    //函式名稱:DelayMS()
    //功 能:延時子程式
    //-----------------------------------------------------------------------------------------
    void DelayMS(uint iMs)
    {
     uint i,j;
     for(i=0;i
     for(j=0;j<65;j++)
     {
      Delay(1);
     }
    }


    void port_init(void)
    {

     PB_DDR = 0xFF;//0x80;
     PB_CR1 = 0xFF;//0x80;
     PB_CR2 = 0x00;
    
     //PD_DDR = 0x1c;
     //PD_CR1 = 0x1c;
     //PD_CR2 = 0x0;
     PE_DDR= 0x20;//PE5---output
     PE_CR1= 0x20;
     PE_CR2=0x00;
    }

    //-----------------------------------------------------------------------------------------
    //函式名稱:Ht1621Wr_Data()
    //功 能:寫資料函式,cnt為傳送資料位數,資料傳送為低位在前
    //-----------------------------------------------------------------------------------------
    void Ht1621Wr_Data(uchar Data,uchar cnt)
    {
     uchar i;
     for (i=0;i
     {
       CLS_HT_WR;

       DelayMS(3);

      if((Data & 0x80)==0x80)
      {
         SET_HT_DAT;

      }
      else
      {
         CLS_HT_DAT;

      }
      SET_HT_WR;  
      DelayMS(3);
      Data<<=1;
     }
    }
    //-----------------------------------------------------------------------------------------
    //函式名稱:void Ht1621WrOneData(uchar Addr,uchar Data)
    //功能描述: HT1621在指定地址寫入資料函式
    //引數說明:Addr為寫入初始地址,Data為寫入資料
    //說 明:因為HT1621的資料位4位,所以實際寫入資料為引數的後4位
    //-----------------------------------------------------------------------------------------
    void Ht1621WrOneData(uchar Addr,uchar Data)
    {
     CLS_HT_CS; 
     DelayMS(1);
     Ht1621Wr_Data(0xa0,3); //寫入資料標誌101
     Ht1621Wr_Data(Addr<<2,6); //寫入地址資料
     Ht1621Wr_Data(Data<<4,4); //寫入資料
     SET_HT_CS;//

    }
    //-----------------------------------------------------------------------------------------
    //函式名稱:void Ht1621WrOneNum(uchar Addr,uchar Num)
    //功能描述: HT1621在指定地址寫入一個數字(0-9)函式
    //引數說明:Addr為寫入初始地址,Num為寫入資料
    //說 明:因為HT1621的資料位4位,所以實際寫入資料為引數的後4位
    //-----------------------------------------------------------------------------------------

    void Ht1621WrOneNum(uchar Addr,uchar num)
    {
     CLS_HT_CS;//HT1621_CS=0;
     Ht1621Wr_Data(0xa0,3); //寫入資料標誌101
     Ht1621Wr_Data(Addr<<2,6); //寫入地址資料
     Ht1621Wr_Data(num,8);//寫一個完整的數。就是連續寫兩個數。
     SET_HT_CS;//

    }
    //-----------------------------------------------------------------------------------------
    //函式名稱:void Ht1621WrAllData()
    //功能描述: HT1621連續寫入方式函式
    //說 明:HT1621的資料位4位,此處每次資料為8位,寫入資料總數按8位計算
    //-----------------------------------------------------------------------------------------
    void Ht1621WrAllData(void)
    {
     uchar i;
     CLS_HT_CS;//

     Ht1621Wr_Data(0xa0,3); //寫入資料標誌101
     Ht1621Wr_Data(0x00<<2,6); //寫入地址資料
     for (i=0;i<16;i++)
     {
      Ht1621Wr_Data(0x00,8);//0x00,8); //寫入資料
     }
     SET_HT_CS;//

    }
    //-----------------------------------------------------------------------------------------
    //函式名稱:void Ht1621WrCmd(uchar Cmd)
    //功能描述: HT1621命令寫入函式
    //引數說明:Cmd為寫入命令資料
    //說 明:寫入命令標識位100
    //-----------------------------------------------------------------------------------------
    void Ht1621WrCmd(uchar Cmd)
    {
     CLS_HT_CS;//HT1621_CS=0;
     DelayMS(1);
     Ht1621Wr_Data(0x80,4); //寫入命令標誌100
     Ht1621Wr_Data(Cmd,8); //寫入命令資料
     SET_HT_CS;//HT1621_CS=1;
    }
    //-----------------------------------------------------------------------------------------
    //函式名稱:void Ht1621_Init(void)
    //功能描述: HT1621初始化
    //說 明:初始化後,液晶屏所有欄位均顯示
    //-----------------------------------------------------------------------------------------
    void Ht1621_Init(void)
    {
     SET_HT_CS;//HT1621_CS=1;
     SET_HT_WR;//HT1621_WR=1;
     SET_HT_DAT;//HT1621_DAT=1;
     DelayMS(20); //延時使LCD工作電壓穩定
     Ht1621WrCmd(BIAS);
     Ht1621WrCmd(RC256); //使用內部振盪器
     Ht1621WrCmd(SYSDIS);
     Ht1621WrCmd(WDTDIS);
     Ht1621WrCmd(SYSEN);
     Ht1621WrCmd(LCDON);
     DelayMS(20); //延時一段時間
     Ht1621WrAllData();
    }
    void main()
    {
      uchar i=0x1d;
      CLK_ICKR |= 0x01;       //開啟內部高速RC
      //CLK_CKDIVR = 0x1B;  //fcpu=2M fmaster=2/8=0.25M
      //CLK_CKDIVR = 0x1a;  //fcpu=2M fmaster=2/4=0.5M//可以工作
      CLK_CKDIVR = 0x18;  //fcpu=2M fmaster=2/1=2M //可以工作
      port_init();
      Ht1621_Init(); //上電初始化LCD    
      while(1)
     {
    
      if(i%2)
      {
       Ht1621WrOneNum(1,0x06);//1
      Ht1621WrOneNum(3,0xe3);//2
      Ht1621WrOneNum(5,0xa7);//3
      Ht1621WrOneNum(7,0x36);//4
      Ht1621WrOneNum(9,0xb5);//5
     
      }
      else
      {
        Ht1621WrOneNum(1,0xf5);//6
       Ht1621WrOneNum(3,0x07);//7
       Ht1621WrOneNum(5,0xf7);//8
       Ht1621WrOneNum(7,0xb7);//9
       Ht1621WrOneNum(9,0xd7);//0
     
     
      }
      i=i-1;
      if(i==0x01)
      {
       i = 0x21;
      }
      //PE_ODR=PE_ODR^0x20;
     
      DelayMS(200);
     
     }
    } 
       

 注:程式部分參考了網上很多人的程式碼,在此表示感謝!

http://www.51hei.com/mcu/3253.html

相關推薦

HT1621B驅動液晶LCD連線程式

   硬體連線:微控制器使用stm8s103k的32腳晶片,來驅動HT1621B顯示LCD。    (1)微控制器與HT1621之間只需連線3根線:CS,WR,DATA。    (2)HT1621的VC和vlcd都直接連線的5V電源。    (3)ht1621與LCD之間

VK1621最佳替代HT1621 LCD液晶驅動IC應用電路所有封裝的圖片介紹解析

VK1621B是128模式(32x4),記憶體對映和多功能液晶驅動程式。S / W的VK1621配置特性使得它適合於多種LCD應用包括液晶顯示模組和顯示子系統。只用三或四線的主機控制器連線VK1621之間的介面要求。VK1621包含一個電源關閉命令來降低功耗。 VK1621產品特徵:

Arduino驅動I2C介面12864LCD大屏液晶模組方法庫檔案

關鍵詞:Arduino顯示,12864液晶模組,中文顯示,IIC介面,I2C介面,12864驅動程式 液晶顯示模組目前在中國發展已經有30多個年頭了,市場上應用最廣泛的要屬於128*64點陣的顯示屏,從型別上分COB,COG及OLED, 穩定性和經濟性最好要屬於COB工藝的

《Linux驅動開發詳解》——LCD裝置驅動重要資料結構驅動框架

核心檔案:/drivers/video/fbmem.c 18.2.3.Linux幀緩衝相關資料結構與函式          1. fb_info結構體(最關鍵) /* struct fb_info 結構體 */ struct fb_info {     int node;

Python核心知識點:深入瞭解字串的拆分,連線拼接教程

生活中總有幾樣註定的事:死亡、稅單以及需要處理字串的程式設計師。 字串可以有多種形式。 它們可以是非結構化的文字,使用者名稱,產品描述,資料庫列表名,或者其它任何我們使用語言描述的內容。 既然字串資料幾乎無處不在,那麼掌握所使用的工具如何進行字串處理是非常重要的。 幸運的是,與其它語言甚至舊版本的Python

mysql 表連線//any in exists

內連結: select * from tableA inner join tableB on tableA.列=tableB.列 外連線:(笛卡兒積) select * from tableA full join tableB on tableA.列=tableB.列 左連線:

Arduino 入門學習筆記7 I2C LCD1602液晶顯示實驗 超聲波感測器距離檢測

I2C 簡介 I2C匯流排是由Philips公司開發的一種簡單、雙向二線制同步序列匯流排。它只需要兩根線即可在連線於總線上的器件之間傳送資訊。 主器件用於啟動匯流排傳送資料,併產生時鐘以開放傳送的器件,此時任何被定址的器件均被認為是從器件.在總線上主和從、發和收的關係不是恆定的,而取

Note07_Key按鍵驅動_共享中斷中斷上下半部機制

共享中斷機制: 1)共享中斷 即對於同一個中斷源的1次觸發,會同時按某個順序有兩個或兩個以上的中斷處理響應,也就是多個處理函式共享同一個中斷號。 2)若需設定共享中斷,則: 中斷申請函式: ret = request_irq( irqnum, d

低通濾波器原理程式

C原理及程式碼: 0低通數字濾波 解析: 低通濾波也稱一階滯後濾波,方法是第N次取樣後濾波結果輸出值是(1-a)乘第N次取樣值加a乘上次濾波結果輸出值。可見a<<1。 該方法適用於變化過程比較慢的引數的濾波的C程式函式如下: float low_filt

13-編寫WIFI模組連線MQTT程式,和除錯助手測試通訊

  直接上程式吧 local SubscribeTopic = "wifi/user".."/"..clientid PublishTopic = "wifi/device".."/"..clientid local UsartReceiveData=""; lo

mysql遠端連線使用者相關命令

一、建立使用者並授權 登入root: [email protected]:~# mysql -u root -p 建立 username (使用者) 使用password (密碼) 從任何主機連線到mysql伺服器: mysql>GRANT ALL PRIVILEGE

10種ADC軟體濾波方法程式

  轉自:億芯工程師部落格 10種AD取樣的軟體濾波方法 10種AD取樣的軟體濾波方法 1、限幅濾波法(又稱程式判斷濾波法) A、方法: 根據經驗判斷,確定兩次取樣允許的最大偏差值(設為A) 每次檢測到新值時判斷:  如果本次值與上次值之差<=A,則本次值有效 

連線心跳保活原理簡介

轉載地址:https://caofengbin.github.io/2018/03/16/dhcp-and-nat/ 長連線及心跳保活原理簡介   本文簡要的分析了長連線產生的背景以及所解決的問題,並對比了keep-alive與心跳機制對長連線保活的影響,最後詳細的介紹了心跳

首頁 > 系統相關 > 正文 小米手機遠端和電腦互相連線控制的方法

【文章摘要】Windows系統自帶了一個遠端桌面服務,我們可以很方便利用這個服務來進行遠端桌面控制,很多人會用電腦進行遠端終端登陸,用手機進行遠端桌面訪問的人就不多了。下面詳細給大家說明。   原文連結:http://bbs.xiaomi.cn/thread-6748034-1-1.html

十二、Linux驅動LCD驅動

1. 基本概念     LCD是Liquid Crystal Display的簡稱,也就是經常所說的液晶顯示器。LCD能夠支援彩色影象的顯示和視訊的播放,是一種非常重要的輸出裝置。如果我們的系統要用GUI(圖形介面介面),比如minigui,MicroWindows

MongoDB遠端連線注意事項

MongoDB的安全模式預設是關閉的,也就是不需要賬號密碼就能訪問資料庫。在 預設情況下啟動MongoDB是沒有開啟認證功能的,如果需要使用賬號密碼驗證連線功能,就需要開啟使用者認證的開關。 這裡使用robomongo工具舉例: 1、建立一個連線 2、在開啟認證模式之前先建立一

android開發環境-- 1 夜神模擬器連線資料庫匯出

啟動夜神模擬器的開發者選項 進入螢幕上的[設定],如圖 2,進入[關於平板電腦],如圖   3,點選5次[版本號] 4,退回到[設定]目錄,會看到[開發者選項],如圖 5,進入[開發者選項],選中[USB除錯],或選擇其他需要選項,如圖

Http長連線連線

一、HTTP協議與TCP/IP協議的關係 HTTP的長連線和短連線本質上是TCP長連線和短連線。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。 IP協議主要解決網路路由和定址問題,TCP協議主要解決如何在IP層之上可靠地傳遞資料包,

Linux的遠端連線Linux系統下Tomcat部署

Linux的遠端需要用的軟體有Xshell,Xftp 本人使用VMware12Pro虛擬機器,Linux系統為CentOS7,使用區域網進行遠端連線 Xshell和Xftp沒有安裝的話可以取官網下載,但Xshell需要驗證資訊,所以也可以去360電腦軟體下載 在VMwa

通過Maven新增Oracle驅動依賴的步驟問題

一、在maven3的pom.xml中新增依賴 <!-- Spring Boot JDBC --> <dependency> <groupId>org.springframework.