单片机为HC32L13X,Cortex-M puls内核

Ht1621m.h

#ifndef _HT1621M_HPP_
#define _HT1621M_HPP_#define HT1621M_RAM_SIZE 16struct _ht1621m_
{uint8_t _port_cs;uint8_t _port_wr;uint8_t _port_dat;uint8_t _pin_cs;uint8_t _pin_wr;uint8_t _pin_dat;uint8_t _ram_last[HT1621M_RAM_SIZE];uint8_t _ram[HT1621M_RAM_SIZE];
};extern struct _ht1621m_ sg_ht1621m;#define GET_HT1621M() (&sg_ht1621m)
#define GET_HT1621M_RAM(ht1621m) ((ht1621m)->_ram)boolean_t ht1621m_init(struct _ht1621m_* ht1621m, uint8_t port_cs, uint8_t pin_cs, uint8_t port_wr, uint8_t pin_wr, uint8_t port_dat, uint8_t pin_dat);
boolean_t ht1621m_update(struct _ht1621m_* ht1621m);#endif

Ht1621m.c

#include "BaseDef.h"
#include "Ht1621m.h"
#include "gpio.h"
#include <string.h>struct _ht1621m_ sg_ht1621m;#define BIAS 0x29 // 0x50// 1/3 bias   4 com
#define SYSEN 0x01 // 0X02//Turn on system oscillator振荡
#define LCDON 0x03 // 0x06//Turn on LCD bias generator偏压发生器
#define LCDOFF 0x02 // 0x04//Turn off LCD bias generator
#define RC256 0X18#define HT1621M_CTRL_CS(ht1621m, stat) Gpio_WriteOutputIO((en_gpio_port_t)(ht1621m)->_port_cs, (en_gpio_pin_t)(ht1621m)->_pin_cs, stat) // 控制cs:true:拉高,false:拉低
#define HT1621M_CTRL_WR(ht1621m, stat) Gpio_WriteOutputIO((en_gpio_port_t)(ht1621m)->_port_wr, (en_gpio_pin_t)(ht1621m)->_pin_wr, stat) // 控制wr:true:拉高,false:拉低
#define HT1621M_CTRL_DAT(ht1621m, stat) Gpio_WriteOutputIO((en_gpio_port_t)(ht1621m)->_port_dat, (en_gpio_pin_t)(ht1621m)->_pin_dat, stat) // 控制dat:true:拉高,false:拉低 // 传地址,高六位
void _ht1621m_sendbit_high(struct _ht1621m_* ht1621m, uint8_t data, uint8_t cnt)
{uint8_t i;for (i = 0; i < cnt; i++){HT1621M_CTRL_DAT(ht1621m, data & 0x80);      HT1621M_CTRL_WR(ht1621m, FALSE);delay10us(1);HT1621M_CTRL_WR(ht1621m, TRUE);data <<= 1;delay10us(1);}
}// 传送数据,低四位
void _ht1621m_sendbit_low(struct _ht1621m_* ht1621m, uint8_t data, uint8_t cnt)
{uint8_t i;for (i = 0; i < cnt; i++){HT1621M_CTRL_DAT(ht1621m, data & 0x01);HT1621M_CTRL_WR(ht1621m, FALSE);delay10us(1);HT1621M_CTRL_WR(ht1621m, TRUE);data >>= 1;delay10us(1);}
}// 写命令
void _ht1621m_send_cmd(struct _ht1621m_* ht1621m, uint8_t command)
{HT1621M_CTRL_CS(ht1621m, FALSE);_ht1621m_sendbit_high(ht1621m, 0x80, 3);_ht1621m_sendbit_high(ht1621m, command, 8);_ht1621m_sendbit_high(ht1621m, 0x0, 1);HT1621M_CTRL_CS(ht1621m, TRUE);
}// 写地址和数据
void _ht1621m_write_byte(struct _ht1621m_* ht1621m, uint8_t addr, uint8_t data)
{HT1621M_CTRL_CS(ht1621m, FALSE);_ht1621m_sendbit_high(ht1621m, 0xa0, 3);_ht1621m_sendbit_high(ht1621m, addr << 3, 6);_ht1621m_sendbit_low(ht1621m, data, 8);HT1621M_CTRL_CS(ht1621m, TRUE);
}// 初始化
boolean_t ht1621m_init(struct _ht1621m_* ht1621m, uint8_t port_cs, uint8_t pin_cs, uint8_t port_wr, uint8_t pin_wr, uint8_t port_dat, uint8_t pin_dat)
{uint8_t i;ht1621m->_port_cs = port_cs;ht1621m->_pin_cs = pin_cs;ht1621m->_port_wr = port_wr;ht1621m->_pin_wr = pin_wr;ht1621m->_port_dat = port_dat;ht1621m->_pin_dat = pin_dat;_ht1621m_send_cmd(ht1621m, RC256);_ht1621m_send_cmd(ht1621m, BIAS);_ht1621m_send_cmd(ht1621m, SYSEN);_ht1621m_send_cmd(ht1621m, LCDON);memset(ht1621m->_ram, 0X00, HT1621M_RAM_SIZE);for (i = 0; i < HT1621M_RAM_SIZE; ++i){_ht1621m_write_byte(ht1621m, i, ht1621m->_ram[i]);}return TRUE;
}// 更新RAM
boolean_t ht1621m_update(struct _ht1621m_* ht1621m)
{uint8_t i;if (0==memcmp(ht1621m->_ram_last, ht1621m->_ram, HT1621M_RAM_SIZE)){return lc_false;}memcpy(ht1621m->_ram_last, ht1621m->_ram, HT1621M_RAM_SIZE);for (i=0; i<HT1621M_RAM_SIZE; ++i){_ht1621m_write_byte(ht1621m, i, ht1621m->_ram[i]);}return TRUE;
}

[驱动] HT1621M相关推荐

  1. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

  2. 0、Spring 注解驱动开发

    0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...

  3. 安装 Python MySQL 驱动(mysql-connector-python、MySQL-python)

    1. 安装 由于 MySQL 服务器以独立的进程运行,并通过网络对外服务,所以,需要支持 Python 的MySQL 驱动来连接到 MySQL 服务器. 目前,有两个MySQL驱动: mysql-co ...

  4. Linux驱动框架之framebuffer驱动框架

    1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...

  5. [Ubuntu] 安装/卸载 声卡驱动

    卸载 sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils 安装 sudo apt-get install linux-s ...

  6. pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装

    一.前言描述 接到客户报修说,电脑无法开机,即到哥上门维修立即安排人员到现场查看原因,到现场后,查看的确是电脑系统问题,重新安装系统,安装完成系统后,发现打印机无法使用.这个打印机型号是TSC TTP ...

  7. linux mipi驱动分析_寒武纪社招内推数字IC设计、DSI驱动、软件架构、产品经理、芯片架构、工具链开发、深度学习、FAE工程师...

    点击上方蓝字关注我吧! 为什么内推更靠谱?内推是基于人脉关系链的推荐,其背后有一定的信用背书,靠谱的人推荐的人相对也会比较靠谱,所以企业一般职位都是从内部开始分享的,相较于自己海投简历,内推的效率和成 ...

  8. i7 7700hq安装Linux,黑苹果安装火影金刚4K VULCAN JinGang GTX i7-7700HQ 独显驱动 Hackintosh...

    严格来说,这不是一台笔记本,更像是一台移动一体机.火影金刚4K,独显GTX 1060,核显HD 630,在BIOS里是可以屏蔽核显的.所以这一次安装黑苹果时,直接当是一台IMAC来安装,连机型都是选择 ...

  9. java获取达梦数据库_Java连接达梦数据库驱动dm_jdbc

    [实例简介] Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm ...

最新文章

  1. ecplise SpringCould搭建过程---创建SpringCould父工程
  2. K-BERT | 基于知识图谱的语言表示模型
  3. Javascript简明教程四 作用域
  4. 使用Martix来实现缩放图片的功能
  5. 剑破冰山—Oracle开发艺术 前言
  6. 记一次vue2路由参数传递this指针问题
  7. yii 字段验证的使用
  8. xenserver 虚拟机扩容lvm磁盘分区的方法_Linux磁盘扩容
  9. Qt中的角度和正方向描述清单
  10. Django的视图层
  11. 将TIMESTAMP类型的差值转化为秒的方法
  12. leetcode [35]搜索插入位置/Search Insert Position 优雅的暴力可能比二分查找效率更高
  13. 聊聊spring security oauth2的password方式的认证
  14. 苹果基带芯片“分家” 一箭多雕
  15. H5制作模板推荐:微信小游戏消消乐玩法亮点
  16. 计算机网络覆盖的地理范围分类,计算机网络按地理范围可分为什么
  17. ExtJS的History使用
  18. python 三种实现按照固定比例分配任务的方法
  19. 暑期ACM模拟赛--2017ACM/ICPC亚洲区沈阳站-重现赛 【待补】
  20. Android rom开发:自定义序列号ro.serialno

热门文章

  1. java 狼捉羊游戏背景_Js 写了一个 “狼吃羊” 小游戏。
  2. Flink的各种Transformations 代码例子-- Java和Scala实现
  3. Ubuntu 18.04 安装nvidia驱动后无法正常开机
  4. Acwing第774题(最长单词)
  5. java多线程下载源码_Java多线程文件分片下载实现的示例代码
  6. OneNote UWP 出错E000006Bblg5z
  7. 什么是序列化? 如何实现(反)序列化 序列化的应用
  8. Python学习: hasattr()、getattr()、setattr()函数简介
  9. 网赚自媒体圈钱攻略 年入百万不在话下
  10. python与c语言的区别-Python和c语言的主要区别在哪