又来请教打扰诸位老师了。。。我用STM8S207S6驱动由HT1632C构成的9*16LED 点阵模块。。。可是输入的数据与“点亮”的LED怎么也对应不起来。。。。搞了两天了一点进展都没。。。上百度也没找到类似的说明。。。真是急死人了。。。输入的数据与“点亮”的LED应该怎么才能对应。。。。。于是只好又来请教打扰诸位老师了。。。恳请多多指点。。。。。。
下面是我的相关的驱动代码。。。请诸位指点。。。。。
#define Datd_9x16 GPIO_PIN_0 //定义9x16C时钟线对象,需要指定9x16时钟线管脚对应的GPIO管脚
#define WR_9x16 GPIO_PIN_1 //定义9x16数据线对象,需要指定9x16数据线管脚对应的GPIO管脚
#define CS_9x16 GPIO_PIN_2 //定义9x16数据线对象,需要指定9x16数据线管脚对应的GPIO管脚
#define RD_9x16 GPIO_PIN_3 //定义9x16数据线对象,需要指定9x16数据线管脚对应的GPIO管脚
define Datd_9x16_IN GPIO_Init(GPIO_9x16, Datd_9x16, GPIO_MODE_IN_PU_NO_IT) //上拉输入无中断功能
#define Datd_9x16_H GPIO_WriteHigh(GPIO_9x16,Datd_9x16)
#define Datd_9x16_L GPIO_WriteLow(GPIO_9x16,Datd_9x16)
#define GPIO_9x16 GPIOB //定义要使用的端口B
#define WR_9x16_H GPIO_WriteHigh(GPIO_9x16,WR_9x16) //置指定端口位为高电平,该端口必须配置为输出
#define WR_9x16_L GPIO_WriteLow(GPIO_9x16,WR_9x16) //置指定端口位为低电平,该端口必须配置为输出
#define CS_9x16_H GPIO_WriteHigh(GPIO_9x16,CS_9x16) //置指定端口位为高电平,该端口必须配置为输出
#define CS_9x16_L GPIO_WriteLow(GPIO_9x16,CS_9x16) //置指定端口位为低电平,该端口必须配置为输出
#define RD_9x16_H GPIO_WriteHigh(GPIO_9x16,RD_9x16) //置指定端口位为高电平,该端口必须配置为输出
#define RD_9x16_L GPIO_WriteLow(GPIO_9x16,RD_9x16) //置指定端口位为低电平,该端口必须配置为输出
void HT1632_Init(void)
{
GPIOB->DDR |=0x0f; // GPIO.0~.3为输出端口
GPIOB->CR1 |=0x0f; // GPIO.0~.3为推挽输出
GPIOB->CR2 |=0x0f; // GPIO.0~.3输出速度最大为10MHZ
}
/*******************************
*函数名:HT_9x16_clr
*描 述:清屏函数
*参 数:
*返 回:
********************************/
void HT_9x16_clr(void)
{
u8 i;
CS_9x16_L; //di..
HT_9x16_Writer(0xa0,3);
HT_9x16_Writer(0x00<<1,7);
for(i=0;i<36;i++)
{
HT_9x16_Writer(0,8);
}
CS_9x16_H;
}
/*******************************
*函数名:HT_9x16_Init
*描 述:HT_9x16初始化函数
*参 数:
*返 回:
********************************/
void HT_9x16_Init(void)
{
HT_9x16_Writer_CMD(SYS_DIS); //关闭HT_9x16内部RC时钟
HT_9x16_Writer_CMD(COM_OPTION); //选择HT_9x16工作模式,COM,NMOS模式
HT_9x16_Writer_CMD(RC_MASTER_MODE); //选择内部RC时钟
HT_9x16_Writer_CMD(SYS_EN); //打开HT_9x16内部RC时钟
HT_9x16_Writer_CMD(PWM_DUTY); //PWM亮度设置
HT_9x16_Writer_CMD(BLINK_OFF); //关闭闪烁
//HT_9x16_Writer_CMD(SLAVE_MODE); // 从模式
//HT_9x16_Writer_CMD(BLINK_ON);
HT_9x16_Writer_CMD(LED_ON); //打开LED显示
}
/************************************************************
*函数名:HT_9x16_Writer_AllDATA
*描 述:指定地址写入连续数据,cnt为写入数据个数,按8位算
*参 数:Addr,*p,cnt
*返 回:
*************************************************************/
void HT_9x16_Writer_AllDATA(u8 Addr,u8 *p,u8 cnt)//指定起始地址连续写入数据,cnt为写入数据个数,每个数据按位算
{
u8 i;
CS_9x16_L;
HT_9x16_Writer(0xa0,3);
HT_9x16_Writer(Addr<<1,7);
for(i=0;i<cnt;i++)
{
HT_9x16_Writer(*p,8);
p++;
}
CS_9x16_H;
}
/*******************************
*函数名:HT_9x16_Writer_DATA
*描 述:指定地址写入数据
*参 数:Addr,Data
*返 回:
********************************/
void HT_9x16_Writer_DATA(u8 Addr,u8 Data)
{
CS_9x16_L;
HT_9x16_Writer(0xa0,3); //命令码101
HT_9x16_Writer(Addr<<1,7); //写入7位地址
HT_9x16_Writer(Data,4); //写入4位数据
CS_9x16_H;
}
//*******************************
//*函数名:HT_9x16_Writer_CMD
//*描 述:发送命令函数
//*参 数:cmd
//*返 回:
//********************************/ `
void HT_9x16_Writer_CMD(u8 cmd)
{
CS_9x16_L;
HT_9x16_Writer(0x80,3); //命令码100
HT_9x16_Writer(cmd,9); //命令数据,第9位为0
CS_9x16_H;
}
/********************************************
*
函数名:HT_9x16_Writer
*描 述:HT_9x16发送数据函数,高位在前 按位算
*参 数
ata,cnt
*返 回:
********************************************/
void HT_9x16_Writer(u8 wdat, u8 cnt)
{
u8 i=0;
Datd_9x16_OUT;//输出
for(i=0;i<cnt;i++)
{
WR_9x16_L; //拉低
if(wdat&0x80) Datd_9x16_H;
else Datd_9x16_L;
WR_9x16_H;//延时2微妙
wdat<<=1; //准备下一位数据的发送
//WR_9x16_H;
//delay_us(2);//延时2微妙
}
}
void Show_char(void)
{
*p=GPdd[0];
//*p=zidong[0];
HT_9x16_Writer_AllDATA(0,p,6);
}
我用过8*32的模式,也用过16*24的模式。。。都没能有效地控制第9行的点阵显示。。。。请诸位老师多多指点——对于9*23的阵列 HT1632C的 LED 点阵模块的第9行是怎么寻地址、怎么驱动的????不胜感激!!!!!!
一周热门 更多>