[STM8] HT1621B驱动液晶LCD连接及程序

[复制链接]
7203|11
 楼主| 幸福小强 发表于 2018-8-8 20:00 | 显示全部楼层 |阅读模式

硬件连接:单片机使用stm8s103k的32脚芯片,来驱动HT1621B显示LCD。

   (1)单片机与HT1621之间只需连接3根线:CS,WR,DATA。

   (2)HT1621的VC和vlcd都直接连接的5V电源。

   (3)ht1621与LCD之间需要把com0~com3,seg0-seg15都对应连接起来。


评论

一八八七五零九一八式九  发表于 2019-6-20 20:08
厉害。  发表于 2019-6-20 20:07
 楼主| 幸福小强 发表于 2018-8-8 20:00 | 显示全部楼层
  1.     #include "stm8s.h"
  2.     #include "STM8S103k.h"


  3.     #define BIAS   0x52            //0b1000 0101 0010  1/3duty 4com
  4.     #define SYSDIS 0X00           //0b1000 0000 0000  关振系统荡器和LCD偏压发生器
  5.     #define SYSEN  0X02           //0b1000 0000 0010 打开系统 振荡器
  6.     #define LCDOFF 0X04           //0b1000 0000 0100  关LCD偏压
  7.     #define LCDON  0X06           //0b1000 0000 0110  打开LCD偏 压
  8.     #define XTAL   0x28           //0b1000 0010 1000 外部接时钟
  9.     #define RC256  0X30           //0b1000 0011 0000  内部时钟RC256K
  10.     #define TONEON  0X12           //0b1000 0001 0010  打开声音 输出
  11.     #define TONEOFF 0X10           //0b1000 0001 0000 关闭声音输出
  12.     #define WDTDIS  0X0A        //0b1000 0000 1010  禁止看门狗
  13.     #define TONE_4K 0x80        //4k声音输出频率
  14.     #define TONE_2K 0xC0   

  15.     //HT1621控制位(液晶模块接口定义,根据自已的需要更改)
  16.     _Bool PB_ODR_ODR7 @PB_ODR:7;//CS
  17.     _Bool PB_ODR_ODR5 @PB_ODR:5;//WR
  18.     _Bool PB_ODR_ODR6 @PB_ODR:6;//DATA
  19.     #define CLS_HT_WR     PB_ODR_ODR5 = 0   //拉低
  20.     #define SET_HT_WR     PB_ODR_ODR5 = 1   //拉高
  21.     #define CLS_HT_CS     PB_ODR_ODR7 = 0   //拉低
  22.     #define SET_HT_CS     PB_ODR_ODR7 = 1   //拉高
  23.     #define SET_HT_DAT    PB_ODR_ODR6 = 1      //数据位
  24.     #define CLS_HT_DAT    PB_ODR_ODR6 = 0      //数据位

  25.     //-----------------------------------------------------------------------------------------
  26.     //函数名称:Delay()
  27.     //功 能:延时子程序
  28.     //-----------------------------------------------------------------------------------------
  29.     void Delay(uchar us) //5,7,9
  30.     {
  31.      while(--us);
  32.     }
  33.     //-----------------------------------------------------------------------------------------
  34.     //函数名称:DelayMS()
  35.     //功 能:延时子程序
  36.     //-----------------------------------------------------------------------------------------
  37.     void DelayMS(uint iMs)
  38.     {
  39.      uint i,j;
  40.      for(i=0;i
  41.      for(j=0;j<65;j++)
  42.      {
  43.       Delay(1);
  44.      }
  45.     }


  46.     void port_init(void)
  47.     {

  48.      PB_DDR = 0xFF;//0x80;
  49.      PB_CR1 = 0xFF;//0x80;
  50.      PB_CR2 = 0x00;
  51.      
  52.      //PD_DDR = 0x1c;
  53.      //PD_CR1 = 0x1c;
  54.      //PD_CR2 = 0x0;
  55.      PE_DDR= 0x20;//PE5---output
  56.      PE_CR1= 0x20;
  57.      PE_CR2=0x00;
  58.     }

  59.     //-----------------------------------------------------------------------------------------
  60.     //函数名称:Ht1621Wr_Data()
  61.     //功 能:写数据函数,cnt为传送数据位数,数据传送为低位在前
  62.     //-----------------------------------------------------------------------------------------
  63.     void Ht1621Wr_Data(uchar Data,uchar cnt)
  64.     {
  65.      uchar i;
  66.      for (i=0;i
  67.      {
  68.        CLS_HT_WR;

  69.        DelayMS(3);

  70.       if((Data & 0x80)==0x80)
  71.       {
  72.          SET_HT_DAT;

  73.       }
  74.       else
  75.       {
  76.          CLS_HT_DAT;

  77.       }
  78.       SET_HT_WR;   
  79.       DelayMS(3);
  80.       Data<<=1;
  81.      }
  82.     }
  83.     //-----------------------------------------------------------------------------------------
  84.     //函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
  85.     //功能描述: HT1621在指定地址写入数据函数
  86.     //参数说明:Addr为写入初始地址,Data为写入数据
  87.     //说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
  88.     //-----------------------------------------------------------------------------------------
  89.     void Ht1621WrOneData(uchar Addr,uchar Data)
  90.     {
  91.      CLS_HT_CS;  
  92.      DelayMS(1);
  93.      Ht1621Wr_Data(0xa0,3); //写入数据标志101
  94.      Ht1621Wr_Data(Addr<<2,6); //写入地址数据
  95.      Ht1621Wr_Data(Data<<4,4); //写入数据
  96.      SET_HT_CS;//

  97.     }
  98.     //-----------------------------------------------------------------------------------------
  99.     //函数名称:void Ht1621WrOneNum(uchar Addr,uchar Num)
  100.     //功能描述: HT1621在指定地址写入一个数字(0-9)函数
  101.     //参数说明:Addr为写入初始地址,Num为写入数据
  102.     //说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
  103.     //-----------------------------------------------------------------------------------------

  104.     void Ht1621WrOneNum(uchar Addr,uchar num)
  105.     {
  106.      CLS_HT_CS;//HT1621_CS=0;
  107.      Ht1621Wr_Data(0xa0,3); //写入数据标志101
  108.      Ht1621Wr_Data(Addr<<2,6); //写入地址数据
  109.      Ht1621Wr_Data(num,8);//写一个完整的数。就是连续写两个数。
  110.      SET_HT_CS;//

  111.     }
  112.     //-----------------------------------------------------------------------------------------
  113.     //函数名称:void Ht1621WrAllData()
  114.     //功能描述: HT1621连续写入方式函数
  115.     //说 明:HT1621的数据位4位,此处每次数据为8位,写入数据总数按8位计算
  116.     //-----------------------------------------------------------------------------------------
  117.     void Ht1621WrAllData(void)
  118.     {
  119.      uchar i;
  120.      CLS_HT_CS;//

  121.      Ht1621Wr_Data(0xa0,3); //写入数据标志101
  122.      Ht1621Wr_Data(0x00<<2,6); //写入地址数据
  123.      for (i=0;i<16;i++)
  124.      {
  125.       Ht1621Wr_Data(0x00,8);//0x00,8); //写入数据
  126.      }
  127.      SET_HT_CS;//

  128.     }
  129.     //-----------------------------------------------------------------------------------------
  130.     //函数名称:void Ht1621WrCmd(uchar Cmd)
  131.     //功能描述: HT1621命令写入函数
  132.     //参数说明:Cmd为写入命令数据
  133.     //说 明:写入命令标识位100
  134.     //-----------------------------------------------------------------------------------------
  135.     void Ht1621WrCmd(uchar Cmd)
  136.     {
  137.      CLS_HT_CS;//HT1621_CS=0;
  138.      DelayMS(1);
  139.      Ht1621Wr_Data(0x80,4); //写入命令标志100
  140.      Ht1621Wr_Data(Cmd,8); //写入命令数据
  141.      SET_HT_CS;//HT1621_CS=1;
  142.     }
  143.     //-----------------------------------------------------------------------------------------
  144.     //函数名称:void Ht1621_Init(void)
  145.     //功能描述: HT1621初始化
  146.     //说 明:初始化后,液晶屏所有字段均显示
  147.     //-----------------------------------------------------------------------------------------
  148.     void Ht1621_Init(void)
  149.     {
  150.      SET_HT_CS;//HT1621_CS=1;
  151.      SET_HT_WR;//HT1621_WR=1;
  152.      SET_HT_DAT;//HT1621_DAT=1;
  153.      DelayMS(20); //延时使LCD工作电压稳定
  154.      Ht1621WrCmd(BIAS);
  155.      Ht1621WrCmd(RC256); //使用内部振荡器
  156.      Ht1621WrCmd(SYSDIS);
  157.      Ht1621WrCmd(WDTDIS);
  158.      Ht1621WrCmd(SYSEN);
  159.      Ht1621WrCmd(LCDON);
  160.      DelayMS(20); //延时一段时间
  161.      Ht1621WrAllData();
  162.     }
  163.     void main()
  164.     {
  165.       uchar i=0x1d;
  166.       CLK_ICKR |= 0x01;       //打开内部高速RC
  167.       //CLK_CKDIVR = 0x1B;  //fcpu=2M fmaster=2/8=0.25M
  168.       //CLK_CKDIVR = 0x1a;  //fcpu=2M fmaster=2/4=0.5M//可以工作
  169.       CLK_CKDIVR = 0x18;  //fcpu=2M fmaster=2/1=2M //可以工作
  170.       port_init();
  171.       Ht1621_Init(); //上电初始化LCD     
  172.       while(1)
  173.      {
  174.      
  175.       if(i%2)
  176.       {
  177.        Ht1621WrOneNum(1,0x06);//1
  178.       Ht1621WrOneNum(3,0xe3);//2
  179.       Ht1621WrOneNum(5,0xa7);//3
  180.       Ht1621WrOneNum(7,0x36);//4
  181.       Ht1621WrOneNum(9,0xb5);//5
  182.       
  183.       }
  184.       else
  185.       {
  186.         Ht1621WrOneNum(1,0xf5);//6
  187.        Ht1621WrOneNum(3,0x07);//7
  188.        Ht1621WrOneNum(5,0xf7);//8
  189.        Ht1621WrOneNum(7,0xb7);//9
  190.        Ht1621WrOneNum(9,0xd7);//0
  191.       
  192.       
  193.       }
  194.       i=i-1;
  195.       if(i==0x01)
  196.       {
  197.        i = 0x21;
  198.       }
  199.       //PE_ODR=PE_ODR^0x20;
  200.       
  201.       DelayMS(200);
  202.       
  203.      }
  204.     }  
 楼主| 幸福小强 发表于 2018-8-8 20:00 | 显示全部楼层
相信会有人用到的
小灵通2018 发表于 2018-8-8 21:00 | 显示全部楼层
嗯,不错,调试过了吗,可以吧
xiongfeng320 发表于 2018-8-9 09:03 | 显示全部楼层
感谢分享!
renzheshengui 发表于 2018-8-9 09:41 | 显示全部楼层
很清晰 感谢楼主分享
aa421701136 发表于 2018-9-3 16:16 | 显示全部楼层
楼主,你好。你VDD和VLCD都是直接连的5V。那么想请问下,单片机与1621连接的那3根线CS,WR,DATA,这个电压是否需要做转换呢?
fsdSADASDSA 发表于 2018-10-30 14:35 | 显示全部楼层
多谢分享
fsdSADASDSA 发表于 2018-11-2 10:30 | 显示全部楼层
楼主,我用你的代码试了不行呀。
能不能传授点经验
陈立业 发表于 2019-7-19 23:38 | 显示全部楼层
    void Ht1621Wr_Data(uchar Data,uchar cnt)函数 for处不全
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

1720

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部