注:代码已开源,有会员的走个积分,无会员的麻烦给个star,谢谢啦!
GitHub开源地址: https://github.com/goolete/stm32-ht1632.git
-
工具/原料
ht1632c点阵模块
STM32F103RC(mini)
杜邦线
工程代码:https://download.csdn.net/download/goolete/10922678
驱动代码:https://download.csdn.net/download/goolete/10922879
取模软件:https://download.csdn.net/download/goolete/10922876
(取模软件用之前必须破解,否则生成为乱码,破解文件在压缩包里)
HT1632C点阵模块使用手册V1.0:https://download.csdn.net/download/goolete/10922908
HT1632C中文资料:
HT1632CV130 datasheet:https://download.csdn.net/download/goolete/10924443
-
方法/步骤
注:代码注释部分因时间问题可能有误,本文只给出部分代码。
次点阵模块由HT1632C芯片驱动,MCU与HT1632C通信只需要4根线便可。 /CS用来使能串行接口信号的传输以及终止其与外部MCU的通信。如果/CS被置1,则数据和命令的传输被禁止。DATA引线用来串行传输数据, /RD引线用来输入读时钟, RAM数据在/RD的下降沿被读出,该数据将会在DATA引线上被传输。 /WR引线用来输入写时钟,数据,地址和命令将会在DATA引线上被输入在/WR的下降沿。
查询STM32F103RC的IO引脚图,可知PA7\PA6\PA5\PA4可作为本次实验的IO。
-
1.连线。
使用杜邦线将DATA\#WR\#RD\#CS分别连接到MCU的PA7-4上,此外,将VCC\GND分别连接到MCU的VOUT1或VOUT2上。
-
2.检查线路无误后,开始编写驱动接口。
#include "ht1632c.h"
void HT1632C_Interface_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA,PD端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
接口设置
#define DAT_SET GPIO_SetBits(GPIOA,GPIO_Pin_7); // PA7
#define LCD_CS_SET GPIO_SetBits(GPIOA,GPIO_Pin_5); //片选端口
#define LCD_WR_SET GPIO_SetBits(GPIOA,GPIO_Pin_6); //写数据
#define LCD_RD_SET GPIO_SetBits(GPIOA,GPIO_Pin_4); //读数据
-
3.小人点阵图片代码
//行走的小人图像1
//一个页面需要48个字节数据
unsigned char page1[48]={
0X00,0X00,0X01,0XC0,0X06,0X30,0X04,0X10,0X08,0X08,0X08,0X08,0X08,0X08,0X04,0X10,
0X06,0X30,0X03,0XE0,0X00,0X80,0X00,0X80,0X03,0XC0,0X0C,0XB0,0X10,0X88,0X00,0X84,
0X01,0XC0,0X01,0XC0,0X03,0X60,0X06,0X30,0X0C,0X18,0X0C,0X0E,0X00,0X00,0X00,0X00};
//行走的小人图像2
//一个页面需要48个字节数据
unsigned char page2[48]={
0X00,0X00,0X01,0XC0,0X06,0X30,0X04,0X10,0X08,0X08,0X08,0X08,0X08,0X08,0X04,0X10,
0X06,0X30,0X03,0XE0,0X00,0X80,0X00,0X80,0X03,0XC0,0X0C,0XB0,0X10,0X88,0X00,0X84,
0X01,0XC0,0X01,0XC0,0X01,0X40,0X01,0X40,0X01,0X40,0X01,0X60,0X00,0X00,0X00,0X00};
//行走的小人路面1数据,只是一行数据,2个字节
unsigned char road1[2]={0xF3,0xCF};
//行走的小人路面2数据,只是一行数据,2个字节
unsigned char road2[2]={0xCF,0x3C};
//行走的小人路面3数据,只是一行数据,2个字节
unsigned char road3[2]={0x3C,0xF3};
-
4.编写主程序
int main(void)
{
unsigned char *p1,*p2; //定义指向page数组的指针
delay_init();
p1=&page1[0]; //使指针指向数组地址
p2=&page2[0]; //使指针指向数组地址
HT1632C_Interface_Init(); //初始化1632接口
HT1632C_Init(); //初始化HT1632
HT1632C_clr(); //清屏
while(1)
{
HT1632C_Update_OnePage(p1); //显示人物1
HT1632C_Update_Onerow(24,road1); //显示路面1
delay_ms(60); //移动延时
HT1632C_Update_Onerow(24,road2); //显示路面2
delay_ms(50); //移动延时
HT1632C_Update_OnePage(p2); //显示人物2
delay_ms(50); //移动延时
HT1632C_Update_Onerow(24,road3); //显示路面3
delay_ms(60); //移动延时
}
}
-
5.烧录程序到MCU。