专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
stm32f103rbt6 驱动 ht1621问题,急急急!!!
2019-07-21 05:44
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
3054
14
1528
各位老师,我现在正在用stm32f103rbt6芯片 驱动ht1621断码屏,现在怎么也调不通,没有反应(蜂鸣器都不响),请各位老师给指导下,项目着急中!! CS--PA0 WR--PA1 DAT--PA2其他口未用,另外ht1621vdd接5v,因为lcd屏是5v的。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
gonzhao
1楼-- · 2019-07-21 07:55
有哪位老师用过这个ht1621啊??
加载中...
gonzhao
2楼-- · 2019-07-21 11:51
在线等。。。。
加载中...
gonzhao
3楼-- · 2019-07-21 12:51
/*硬件连接:单片机使用stm32f103rbt6的64脚芯片,来驱动HT1621B显示LCD。
(1)单片机与HT1621之间只需连接3根线:CS,WR,DATA。
(2)HT1621的VCC接5v(液晶片是5v的),vlcd通过10k电阻接5v电源。
(3)ht1621与LCD之间需要把com0~com3,seg0-seg17都对应连接起来。
软件部分:
*/
#include "main.h"
/*HT1621控制位(液晶模块接口定义)
#define CLS_HT_WR GPIO_ResetBits(GPIOA, GPIO_Pin_2) // 拉低PA2
#define SET_HT_WR GPIO_SetBits(GPIOA, GPIO_Pin_2) // 拉高PA2
#define CLS_HT_CS GPIO_ResetBits(GPIOA, GPIO_Pin_0) // 拉低PA0
#define SET_HT_CS GPIO_SetBits(GPIOA, GPIO_Pin_0) // 拉高 PA0
#define CLS_HT_DAT GPIO_ResetBits(GPIOA, GPIO_Pin_3) // 数据位PA3
#define SET_HT_DAT GPIO_SetBits(GPIOA, GPIO_Pin_3) // 数据位PA3
*/
// #define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
#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 // 2k声音输出频率,现用蜂鸣器为2khz频率
#define TIM_DIS 0x08 // 关闭定时
#define IRQ_DIS 0x00 // IRQ禁止
u8 Ht1621Tab[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
u8 Ht1621Tab1[16]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
/*******************************************************************************
* Function Name : Delay
* Description : Inserts a delay time.
* Input : nCount: specifies the delay time length.
* Output : None
* Return : None
*******************************************************************************/
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--) IWDG_ReloadCounter();
}
//-----------------------------------------------------------------------------------------
//函数名称:DelayMS()
//功 能:延时子程序
//-----------------------------------------------------------------------------------------
void DelayMS(u16 iMs)
{
u16 i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++)
{
Delay(1);
}
}
//-----------------------------------------------------------------------------------------
//函数名称:Ht1621Wr_data_high(u8 Addr,u8 cnt)
//功 能:Addr为地址变量,cnt为传送地址位数,此函数为数据高位先发出(发送地址时,高位在前)
//-----------------------------------------------------------------------------------------
void Ht1621Wr_Data_High(u8 Addr,u8 cnt)
{
u8 i;
for (i=0;i<cnt;i++)
{
if((Addr & 0x80)==0x80)
{
SET_HT_DAT;
}
else
{
CLS_HT_DAT;
}
DelayMS(20);
CLS_HT_WR;
DelayMS(20);
SET_HT_WR;
DelayMS(20);
Addr <<= 1;
}
}
//-----------------------------------------------------------------------------------------
//函数名称:Ht1621Wr_Data_low( )
//功 能:写数据函数,cnt为传送数据位数,数据传送为低位在前
//-----------------------------------------------------------------------------------------
void Ht1621Wr_Data_Low(u8 Data,u8 cnt)
{
u8 i;
for (i=0;i<cnt;i++)
{
if((Data & 0x01)==0x01)
{
SET_HT_DAT;
}
else
{
CLS_HT_DAT;
}
DelayMS(20);
CLS_HT_WR;
DelayMS(20);
SET_HT_WR;
DelayMS(20);
Data >>=1 ;
}
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
//功能描述: HT1621在指定地址写入数据函数
//参数说明:Addr为写入初始地址,Data为写入数据
//说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
//-----------------------------------------------------------------------------------------
void Ht1621WrOneData(u8 Addr,u8 Data)
{
CLS_HT_CS;
DelayMS(3);
Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
Ht1621Wr_Data_Low(Data,4); //写入数据
SET_HT_CS;//
DelayMS(3);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrOneNum(uchar Addr,uchar Num)
//功能描述: HT1621在指定地址写入一个数字(0-9)函数
//参数说明:Addr为写入初始地址,Num为写入数据
//说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
//-----------------------------------------------------------------------------------------
void Ht1621WrOneNum(u8 Addr,u8 num)
{
CLS_HT_CS;//HT1621_CS=0;
DelayMS(5);
Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
Ht1621Wr_Data_Low(num,8);//写一个完整的数。就是连续写两个数。
SET_HT_CS;//
DelayMS(5);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrAllData()
//功能描述: HT1621连续写入方式函数
//说 明:HT1621的数据位4位,此处每次数据为8位,写入数据总数按8位计算
//-----------------------------------------------------------------------------------------
void Ht1621WrAllData(u8 Addr,u8 *p,u8 cnt)
{
u8 i;
CLS_HT_CS;//
DelayMS(3);
Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
for (i=0;i<cnt;i++)
{
Ht1621Wr_Data_Low(*p,8);//0x00,8); //写入数据
p++;
}
SET_HT_CS;//
DelayMS(3);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrCmd(uchar Cmd)
//功能描述: HT1621命令写入函数
//参数说明:Cmd为写入命令数据
//说 明:写入命令标识位100
//-----------------------------------------------------------------------------------------
void Ht1621WrCmd(u8 Cmd)
{
CLS_HT_CS;//HT1621_CS=0;
DelayMS(3);
Ht1621Wr_Data_High(0x80,4); //写入命令标志100+0
Ht1621Wr_Data_High(Cmd,8); //写入命令数据
DelayMS(3);
SET_HT_CS;//HT1621_CS=1;
DelayMS(3);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621_Clr_All_Display( )
//功能描述: 清屏函数
//-----------------------------------------------------------------------------------------
void Ht1621_Clr_All_Display( )
{
u8 i;
u8 Addr = 0;
for (i=0; i<9; i++)
{
Ht1621WrOneNum(Addr, 0x00);
Addr += 2;
DelayMS(3);
}
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621_All_Display( )
//功能描述: 全显函数
//-----------------------------------------------------------------------------------------
void Ht1621_All_Display()
{
u8 i;
u8 Addr = 0;
for (i=0; i<9; i++)
{
Ht1621WrOneNum(Addr, 0xFF);
Addr += 2;
DelayMS(3);
}
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621_Init(void)
//功能描述: HT1621初始化
//说 明:初始化后,液晶屏所有字段均显示
//-----------------------------------------------------------------------------------------
void Ht1621_Init(void)
{
SET_HT_CS;//HT1621_CS=1;
DelayMS(3);
SET_HT_WR;//HT1621_WR=1;
DelayMS(3);
SET_HT_DAT;//HT1621_DAT=1;
DelayMS(2000);
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1621WrCmd(BIAS);
Ht1621WrCmd(TIM_DIS);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(TONEON);
Ht1621WrCmd(TONE_2K);
Ht1621WrCmd(IRQ_DIS);
Ht1621WrCmd(LCDON);
}
void HT1621_DIS(void)
{
Ht1621_Init( ); //上电初始化LCD
DelayMS(1000); // 延时一段时间
while(1)
{
Ht1621_All_Display( ); // 赋值1621寄存器数据,暨全部点亮
// DelayMS(50000);
Ht1621_Clr_All_Display( ); // 清除1621寄存器数据,暨清屏
Ht1621WrOneData(5,0xff);
Ht1621WrOneData(17,0x0D);
Ht1621WrOneData(0x04,0x78);
Ht1621WrOneData(0x08,0x78);
// DelayMS(50000);
}
}
加载中...
月无缺
4楼-- · 2019-07-21 18:09
看了一下程序,感觉没有太大的问题呀。
加载中...
gonzhao
5楼-- · 2019-07-21 23:30
精彩回答 2 元偷偷看……
加载中...
gonzhao
6楼-- · 2019-07-22 05:10
月无缺 发表于 2018-8-21 20:21
看了一下程序,感觉没有太大的问题呀。
买了一个ht1621驱动的小屏也是不能驱动,没有任何反应,不知道哪里出了问题
加载中...
1
2
3
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
/*硬件连接:单片机使用stm32f103rbt6的64脚芯片,来驱动HT1621B显示LCD。
(1)单片机与HT1621之间只需连接3根线:CS,WR,DATA。
(2)HT1621的VCC接5v(液晶片是5v的),vlcd通过10k电阻接5v电源。
(3)ht1621与LCD之间需要把com0~com3,seg0-seg17都对应连接起来。
软件部分:
*/
#include "main.h"
/*HT1621控制位(液晶模块接口定义)
#define CLS_HT_WR GPIO_ResetBits(GPIOA, GPIO_Pin_2) // 拉低PA2
#define SET_HT_WR GPIO_SetBits(GPIOA, GPIO_Pin_2) // 拉高PA2
#define CLS_HT_CS GPIO_ResetBits(GPIOA, GPIO_Pin_0) // 拉低PA0
#define SET_HT_CS GPIO_SetBits(GPIOA, GPIO_Pin_0) // 拉高 PA0
#define CLS_HT_DAT GPIO_ResetBits(GPIOA, GPIO_Pin_3) // 数据位PA3
#define SET_HT_DAT GPIO_SetBits(GPIOA, GPIO_Pin_3) // 数据位PA3
*/
// #define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
#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 // 2k声音输出频率,现用蜂鸣器为2khz频率
#define TIM_DIS 0x08 // 关闭定时
#define IRQ_DIS 0x00 // IRQ禁止
u8 Ht1621Tab[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
u8 Ht1621Tab1[16]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
/*******************************************************************************
* Function Name : Delay
* Description : Inserts a delay time.
* Input : nCount: specifies the delay time length.
* Output : None
* Return : None
*******************************************************************************/
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--) IWDG_ReloadCounter();
}
//-----------------------------------------------------------------------------------------
//函数名称:DelayMS()
//功 能:延时子程序
//-----------------------------------------------------------------------------------------
void DelayMS(u16 iMs)
{
u16 i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++)
{
Delay(1);
}
}
//-----------------------------------------------------------------------------------------
//函数名称:Ht1621Wr_data_high(u8 Addr,u8 cnt)
//功 能:Addr为地址变量,cnt为传送地址位数,此函数为数据高位先发出(发送地址时,高位在前)
//-----------------------------------------------------------------------------------------
void Ht1621Wr_Data_High(u8 Addr,u8 cnt)
{
u8 i;
for (i=0;i<cnt;i++)
{
if((Addr & 0x80)==0x80)
{
SET_HT_DAT;
}
else
{
CLS_HT_DAT;
}
DelayMS(20);
CLS_HT_WR;
DelayMS(20);
SET_HT_WR;
DelayMS(20);
Addr <<= 1;
}
}
//-----------------------------------------------------------------------------------------
//函数名称:Ht1621Wr_Data_low( )
//功 能:写数据函数,cnt为传送数据位数,数据传送为低位在前
//-----------------------------------------------------------------------------------------
void Ht1621Wr_Data_Low(u8 Data,u8 cnt)
{
u8 i;
for (i=0;i<cnt;i++)
{
if((Data & 0x01)==0x01)
{
SET_HT_DAT;
}
else
{
CLS_HT_DAT;
}
DelayMS(20);
CLS_HT_WR;
DelayMS(20);
SET_HT_WR;
DelayMS(20);
Data >>=1 ;
}
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
//功能描述: HT1621在指定地址写入数据函数
//参数说明:Addr为写入初始地址,Data为写入数据
//说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
//-----------------------------------------------------------------------------------------
void Ht1621WrOneData(u8 Addr,u8 Data)
{
CLS_HT_CS;
DelayMS(3);
Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
Ht1621Wr_Data_Low(Data,4); //写入数据
SET_HT_CS;//
DelayMS(3);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrOneNum(uchar Addr,uchar Num)
//功能描述: HT1621在指定地址写入一个数字(0-9)函数
//参数说明:Addr为写入初始地址,Num为写入数据
//说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
//-----------------------------------------------------------------------------------------
void Ht1621WrOneNum(u8 Addr,u8 num)
{
CLS_HT_CS;//HT1621_CS=0;
DelayMS(5);
Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
Ht1621Wr_Data_Low(num,8);//写一个完整的数。就是连续写两个数。
SET_HT_CS;//
DelayMS(5);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrAllData()
//功能描述: HT1621连续写入方式函数
//说 明:HT1621的数据位4位,此处每次数据为8位,写入数据总数按8位计算
//-----------------------------------------------------------------------------------------
void Ht1621WrAllData(u8 Addr,u8 *p,u8 cnt)
{
u8 i;
CLS_HT_CS;//
DelayMS(3);
Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
for (i=0;i<cnt;i++)
{
Ht1621Wr_Data_Low(*p,8);//0x00,8); //写入数据
p++;
}
SET_HT_CS;//
DelayMS(3);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621WrCmd(uchar Cmd)
//功能描述: HT1621命令写入函数
//参数说明:Cmd为写入命令数据
//说 明:写入命令标识位100
//-----------------------------------------------------------------------------------------
void Ht1621WrCmd(u8 Cmd)
{
CLS_HT_CS;//HT1621_CS=0;
DelayMS(3);
Ht1621Wr_Data_High(0x80,4); //写入命令标志100+0
Ht1621Wr_Data_High(Cmd,8); //写入命令数据
DelayMS(3);
SET_HT_CS;//HT1621_CS=1;
DelayMS(3);
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621_Clr_All_Display( )
//功能描述: 清屏函数
//-----------------------------------------------------------------------------------------
void Ht1621_Clr_All_Display( )
{
u8 i;
u8 Addr = 0;
for (i=0; i<9; i++)
{
Ht1621WrOneNum(Addr, 0x00);
Addr += 2;
DelayMS(3);
}
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621_All_Display( )
//功能描述: 全显函数
//-----------------------------------------------------------------------------------------
void Ht1621_All_Display()
{
u8 i;
u8 Addr = 0;
for (i=0; i<9; i++)
{
Ht1621WrOneNum(Addr, 0xFF);
Addr += 2;
DelayMS(3);
}
}
//-----------------------------------------------------------------------------------------
//函数名称:void Ht1621_Init(void)
//功能描述: HT1621初始化
//说 明:初始化后,液晶屏所有字段均显示
//-----------------------------------------------------------------------------------------
void Ht1621_Init(void)
{
SET_HT_CS;//HT1621_CS=1;
DelayMS(3);
SET_HT_WR;//HT1621_WR=1;
DelayMS(3);
SET_HT_DAT;//HT1621_DAT=1;
DelayMS(2000);
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1621WrCmd(BIAS);
Ht1621WrCmd(TIM_DIS);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(TONEON);
Ht1621WrCmd(TONE_2K);
Ht1621WrCmd(IRQ_DIS);
Ht1621WrCmd(LCDON);
}
void HT1621_DIS(void)
{
Ht1621_Init( ); //上电初始化LCD
DelayMS(1000); // 延时一段时间
while(1)
{
Ht1621_All_Display( ); // 赋值1621寄存器数据,暨全部点亮
// DelayMS(50000);
Ht1621_Clr_All_Display( ); // 清除1621寄存器数据,暨清屏
Ht1621WrOneData(5,0xff);
Ht1621WrOneData(17,0x0D);
Ht1621WrOneData(0x04,0x78);
Ht1621WrOneData(0x08,0x78);
// DelayMS(50000);
}
}
买了一个ht1621驱动的小屏也是不能驱动,没有任何反应,不知道哪里出了问题
一周热门 更多>