专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
stm32f051驱动ht1621不能显示
2019-07-21 08:17
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
9694
8
1502
本帖最后由 qiuzhicheng 于 2018-11-2 15:21 编辑
驱动过ht1621的朋友能不能帮忙看下哪里有问题。非常感谢
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
lqyfxljb
2019-07-21 11:55
#include<tester.h>
#define WR wr
#define DATA a0
#define CS cs
#define SEG_SIZE (11)
#define COM_SIZE (4)
#define COLUMN_SIZE ((SEG_SIZE >> 1) | (SEG_SIZE & 0x01))
typedef enum
{
SYS_DIS,
SYS_EN,
LCD_OFF,
LCD_ON,
TIMER_DIS,
WDT_DIS,
TIMER_EN,
WDT_EN,
TONE_OFF,
TONE_ON,
CLR_TIMER = 0x0C,
CLR_WDT = 0x0E,
XTAL_32K = 0x14,
RC_256K = 0x18,
EXT_256K = 0x1C,
BIAS1_2DUTY2 = 0x20,
BIAS1_2DUTY3 = 0X24,
BIAS1_2DUTY4 = 0X28,
BIAS1_3DUTY2 = 0X21,
BIAS1_3DUTY3 = 0X25,
BIAS1_3DUTY4 = 0X29,
TONE_4K = 0X40,
TONE_2K = 0X60,
IRQ_DIS = 0X80,
IRQ_EN = 0X88,
F1 = 0XA0,
F2,
F4,
F8,
F16,
F32,
F64,
F128,
NORMAL = 0XE3,
}HT16xx_Command;
typedef enum
{
Command = 0x04,
Data,
Read,
}HT16xx_CommandMode;
void Write_Mode(HT16xx_CommandMode mode)
{
u8 i;
for (i = 0; i < 3; i++)
{
WR = 0;
DATA = (mode >> (2 - i)) & 0x01;
WR = 1;
}
}
void Write_Cmd(HT16xx_Command cmd)
{
u8 i;
for(i=0;i<8;i++)
{
WR = 0;
DATA = (cmd >> (7-i)) & 0x01;
WR = 1;
}
WR = 0;
DATA = 0;
WR = 1;
}
void Write_Addr(u8 Abyte)
{
u8 i;
for(i=0;i<6;i++)
{
WR = 0;NOP;NOP;NOP;
DATA = (Abyte>>(5-i)) & 0x01;
WR = 1;NOP;NOP;NOP;
}
}
void Write_Dat(u8 Dbyte)
{
u8 i;
for(i=0;i<8;i++)
{
WR = 0;NOP;NOP;NOP;
DATA = (Dbyte>>(7-i)) & 0x01;
WR = 1;NOP;NOP;NOP;
}
}
void LcdInit(void)
{
CS = 0;
Write_Mode(Command); //command mode
Write_Cmd(SYS_EN); //Enable System
Write_Cmd(LCD_ON); //Enable Bias
Write_Cmd(TIMER_DIS); //Disable Timer
Write_Cmd(WDT_DIS); //Disable WDT
Write_Cmd(TONE_OFF); //Tone OFF
Write_Cmd(RC_256K); //on-chip RCÕeμ′
Write_Cmd(BIAS1_3DUTY4); //1/4Duty 1/3Bias
Write_Cmd(IRQ_DIS); //Disable IRQ
Write_Cmd(TONE_4K); //Tone Frequency 4kHZ
Write_Cmd(NORMAL); //Normal Mode
CS = 1;
}
void Display_COM(u8 com)
{
u8 i;
CS = 0;
Write_Mode(Data);
Write_Addr(0x00);
for(i = 0; i < COLUMN_SIZE; i++)
{
Write_Dat((0x80 >> com) | (0x08 >> com));
}
CS = 1;
}
void Display_SEG(u8 seg)
{
CS = 0;
Write_Mode(Data);
Write_Addr(seg);
Write_Dat(0xF0);
CS = 1;
}
void Display_Dot(u8 seg, u8 com)
{
CS = 0;
Write_Mode(Data);
Write_Addr(seg);
Write_Dat(0x80 >> com);
CS = 0;
}
void FullRAM(u8 value)
{
u8 i;
CS = 0;
Write_Mode(Data);
Write_Addr(0);
for(i=0;i<16;i++)
Write_Dat(value);
CS = 1;
}
void HT16xx_Test(void)
{
u8 i,j;
for(i = 0; i < COM_SIZE; i++)
{
FullRAM(0x00);
Display_COM(i);
}
for(j = 0; j < SEG_SIZE; j++)
{
FullRAM(0x00);
Display_SEG(j);
}
for(i = 0; i < COM_SIZE; i++)
{
for(j = 0; j < SEG_SIZE; j++)
{
FullRAM(0x00);
Display_Dot(j,i);
}
}
}
void main(void)
{
flash(100);
datal = 0xFF;
dir=1 ;
coe=0 ;
doe=1 ;
koe=1 ;
LcdInit();
FullRAM(0x00);
while(1)
{
HT16xx_Test();
}
}
加载中...
查看其它8个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#define WR wr
#define DATA a0
#define CS cs
#define SEG_SIZE (11)
#define COM_SIZE (4)
#define COLUMN_SIZE ((SEG_SIZE >> 1) | (SEG_SIZE & 0x01))
typedef enum
{
SYS_DIS,
SYS_EN,
LCD_OFF,
LCD_ON,
TIMER_DIS,
WDT_DIS,
TIMER_EN,
WDT_EN,
TONE_OFF,
TONE_ON,
CLR_TIMER = 0x0C,
CLR_WDT = 0x0E,
XTAL_32K = 0x14,
RC_256K = 0x18,
EXT_256K = 0x1C,
BIAS1_2DUTY2 = 0x20,
BIAS1_2DUTY3 = 0X24,
BIAS1_2DUTY4 = 0X28,
BIAS1_3DUTY2 = 0X21,
BIAS1_3DUTY3 = 0X25,
BIAS1_3DUTY4 = 0X29,
TONE_4K = 0X40,
TONE_2K = 0X60,
IRQ_DIS = 0X80,
IRQ_EN = 0X88,
F1 = 0XA0,
F2,
F4,
F8,
F16,
F32,
F64,
F128,
NORMAL = 0XE3,
}HT16xx_Command;
typedef enum
{
Command = 0x04,
Data,
Read,
}HT16xx_CommandMode;
void Write_Mode(HT16xx_CommandMode mode)
{
u8 i;
for (i = 0; i < 3; i++)
{
WR = 0;
DATA = (mode >> (2 - i)) & 0x01;
WR = 1;
}
}
void Write_Cmd(HT16xx_Command cmd)
{
u8 i;
for(i=0;i<8;i++)
{
WR = 0;
DATA = (cmd >> (7-i)) & 0x01;
WR = 1;
}
WR = 0;
DATA = 0;
WR = 1;
}
void Write_Addr(u8 Abyte)
{
u8 i;
for(i=0;i<6;i++)
{
WR = 0;NOP;NOP;NOP;
DATA = (Abyte>>(5-i)) & 0x01;
WR = 1;NOP;NOP;NOP;
}
}
void Write_Dat(u8 Dbyte)
{
u8 i;
for(i=0;i<8;i++)
{
WR = 0;NOP;NOP;NOP;
DATA = (Dbyte>>(7-i)) & 0x01;
WR = 1;NOP;NOP;NOP;
}
}
void LcdInit(void)
{
CS = 0;
Write_Mode(Command); //command mode
Write_Cmd(SYS_EN); //Enable System
Write_Cmd(LCD_ON); //Enable Bias
Write_Cmd(TIMER_DIS); //Disable Timer
Write_Cmd(WDT_DIS); //Disable WDT
Write_Cmd(TONE_OFF); //Tone OFF
Write_Cmd(RC_256K); //on-chip RCÕeμ′
Write_Cmd(BIAS1_3DUTY4); //1/4Duty 1/3Bias
Write_Cmd(IRQ_DIS); //Disable IRQ
Write_Cmd(TONE_4K); //Tone Frequency 4kHZ
Write_Cmd(NORMAL); //Normal Mode
CS = 1;
}
void Display_COM(u8 com)
{
u8 i;
CS = 0;
Write_Mode(Data);
Write_Addr(0x00);
for(i = 0; i < COLUMN_SIZE; i++)
{
Write_Dat((0x80 >> com) | (0x08 >> com));
}
CS = 1;
}
void Display_SEG(u8 seg)
{
CS = 0;
Write_Mode(Data);
Write_Addr(seg);
Write_Dat(0xF0);
CS = 1;
}
void Display_Dot(u8 seg, u8 com)
{
CS = 0;
Write_Mode(Data);
Write_Addr(seg);
Write_Dat(0x80 >> com);
CS = 0;
}
void FullRAM(u8 value)
{
u8 i;
CS = 0;
Write_Mode(Data);
Write_Addr(0);
for(i=0;i<16;i++)
Write_Dat(value);
CS = 1;
}
void HT16xx_Test(void)
{
u8 i,j;
for(i = 0; i < COM_SIZE; i++)
{
FullRAM(0x00);
Display_COM(i);
}
for(j = 0; j < SEG_SIZE; j++)
{
FullRAM(0x00);
Display_SEG(j);
}
for(i = 0; i < COM_SIZE; i++)
{
for(j = 0; j < SEG_SIZE; j++)
{
FullRAM(0x00);
Display_Dot(j,i);
}
}
}
void main(void)
{
flash(100);
datal = 0xFF;
dir=1 ;
coe=0 ;
doe=1 ;
koe=1 ;
LcdInit();
FullRAM(0x00);
while(1)
{
HT16xx_Test();
}
}
一周热门 更多>