专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
点亮led大屏幕例程谁有,求助
2019-08-17 10:50
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
6958
11
1462
现在有一个led的64X32的屏幕,如何初始化如何配置,谁有例程相互学习下
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
wuhanhongshanqu
1楼-- · 2019-08-17 12:35
精彩回答 2 元偷偷看……
加载中...
yy21910115
2楼-- · 2019-08-17 12:38
这个是点阵屏 接口一般都一样 你邮箱多少 发你一个我写的 你参考参考吧
加载中...
sahdfasd
3楼-- · 2019-08-17 16:43
yy21910115 发表于 2016-7-15 18:35
这个是点阵屏 接口一般都一样 你邮箱多少 发你一个我写的 你参考参考吧
谢谢了,
313292429@qq.com
学习学习。
现在已经点亮,开始要显示汉字图形,整好继续学习
加载中...
sahdfasd
4楼-- · 2019-08-17 18:20
分享下点亮的程序先是.h程序
#ifndef _LED_SCREEN_
#define _LED_SCREEN_
//置1高电平,置0低电平
#define LA(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_4):GPIO_ResetBits(GPIOB,GPIO_PIN_4)
#define LB(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_5):GPIO_ResetBits(GPIOB,GPIO_PIN_5)
#define LC(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_6):GPIO_ResetBits(GPIOB,GPIO_PIN_6)
#define LD(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_7):GPIO_ResetBits(GPIOB,GPIO_PIN_7)
//r1g1控制上半屏的红绿,r2g2控制下半屏的红绿,1的时候高电平,不亮
#define R1(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_0):GPIO_ResetBits(GPIOB,GPIO_PIN_0)
#define R2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_1):GPIO_ResetBits(GPIOB,GPIO_PIN_1)
#define G1(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_4):GPIO_ResetBits(GPIOB,GPIO_PIN_4)
#define G2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_5):GPIO_ResetBits(GPIOB,GPIO_PIN_5)
//EN使能口
#define EN(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_0):GPIO_ResetBits(GPIOB,GPIO_PIN_0)
//STB锁存口
#define STB(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_1):GPIO_ResetBits(GPIOB,GPIO_PIN_1)
//CLK时钟口
#define CLK(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_3):GPIO_ResetBits(GPIOB,GPIO_PIN_3)
void Init_LED_Screen(void);
void LED_08_GPIO_Config(void);
void Led_Light(void);
void Clean_595(void);//清屏,清除锁存器里没用的信息,led点阵屏全灭
void SetRowLight(void);
void WriteDataToFirstHalScreen(void);
#endif /* __GPIO_H */
加载中...
sahdfasd
5楼-- · 2019-08-17 21:20
本帖最后由 sahdfasd 于 2016-7-21 08:49 编辑
/***************************************************************
*函数名:LED_08_GPIO_Config
*形参:void
*返回值:void
*函数功能:08管口初始化
****************************************************************/
void LED_08_GPIO_Config(void)
{
GPIO_InitPara GPIO_InitStructure;
/* PB4~PB7 接口A B C D 表示行信号的管脚*/
RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE);
/* Configure the pin */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* PA0~PA1 PA4~PA5 接口R1 R2 G1 G2 表示列信号的管脚*/
RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOA, ENABLE);
/* Configure the pin */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* PB0,PB1,PB3, EN使能,STB锁存,CLK时钟*/
RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE);
/* Configure the pin */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/***************************************************************
*函数名:Led_Light
*形参:void
*返回值:void
*函数功能:点亮主程序,先清屏,然后让红灯全亮
****************************************************************/
void Led_Light(void)
{
int i;
EN(1);//高电平,失能
Clean_595();//清除锁存器信息,红绿全灭
while(1)
{
for(i=0;i<16;i++)
{
HC595_Send_Date_Up();//写入全点亮上屏绿灯
HC_138();
HC595_Send_Date_Down();//写入全点亮下屏红灯
HC_138();
}
}
}
/***************************************************************
*函数名:Clean_595
*形参:void
*返回值:void
*函数功能:清屏,清除锁存器里没用的信息,led点阵屏全灭,置高电平
红绿
****************************************************************/
void Clean_595(void)
{
int columnarr[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//控制8个595
int send_data[64]={1}; //十六变二进制保存,发送给595
int i,j;
STB(0);//锁存低电平,不发送
for(i=0;i<8;i++)//把所有数据存入send_data中,控制64列
{
for(j=0;j<8;j++)
{
send_data[j+i*8]=columnarr
%2;
columnarr
=columnarr
/2;
}
}
for(i=0;i<64;i++)
{
R1(send_data
);//发送相应位的电平,一位一位发送
G1(send_data
);
R2(send_data
);//发送相应位的电平,一位一位发送
G2(send_data
);
Delay_us(1);
CLK(1);//时钟低电平,不接收
Delay_us(1);
CLK(0);//时钟高电平,接收
}
STB(1);
Delay_us(1);
STB(0);
}
/***************************************************************
*函数名:WriteDataToFirstHalScreen
*形参:void
*返回值:void
*函数功能:发送数据控制列的led亮灭/红灯
****************************************************************/
void HC595_Send_Date_Up(void)
{
int i,j;
int send_data[64]={0};//全为低电平,全亮
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
G1(send_data[j+i*8]);//发送相应位的电平,一位一位发送
Delay_us(1);
CLK(1);//接收数据存入锁存
Delay_us(1);
CLK(0);
}
}
Delay_us(1);
STB(1);
Delay_us(1);
STB(0);
}
void HC595_Send_Date_Down(void)
{
int i,j;
int columnarr[8]={0};
int send_data[64]={0};
STB(0);//锁存低电平,不发送
for(i=0;i<8;i++)//把所有数据存入a中,控制64列
{
for(j=0;j<8;j++)
{
send_data[j+i*8]=columnarr
%2;
columnarr
=columnarr
/2;
}
}
for(i=0;i<64;i++)
{
R2(send_data
);//发送相应位的电平,一位一位发送
Delay_us(1);
CLK(1);//接收数据存入锁存
Delay_us(1);
CLK(0);
}
Delay_us(1);
STB(1);
Delay_us(1);
STB(0);
}
/***************************************************************
*函数名:SetRowLight
*形参:void
*返回值:void
*函数功能:点亮主程序,先清屏,然后让红灯全亮
****************************************************************/
/*行信号选择函数,输入行后,进行abcd的二进制转换选择改变高低电平进而选择行*/
void HC_138(void)
{
int rowarr[4] = {0};
int i=0,j,rownum;
EN(0);
//换算二进制,发送相应行
for(j=0;j<4;j++)
{
rowarr
= rownum%2;
rownum = rownum/2;
i++;
}
LA(rowarr[0]);//发送相应的电平,确定哪一行
LB(rowarr[1]);
LC(rowarr[2]);
LD(rowarr[3]);
EN(1);
}
加载中...
yy21910115
6楼-- · 2019-08-18 01:58
精彩回答 2 元偷偷看……
加载中...
1
2
下一页
一周热门
更多
>
相关问题
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
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
谢谢了,313292429@qq.com学习学习。
现在已经点亮,开始要显示汉字图形,整好继续学习
#ifndef _LED_SCREEN_
#define _LED_SCREEN_
//置1高电平,置0低电平
#define LA(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_4):GPIO_ResetBits(GPIOB,GPIO_PIN_4)
#define LB(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_5):GPIO_ResetBits(GPIOB,GPIO_PIN_5)
#define LC(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_6):GPIO_ResetBits(GPIOB,GPIO_PIN_6)
#define LD(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_7):GPIO_ResetBits(GPIOB,GPIO_PIN_7)
//r1g1控制上半屏的红绿,r2g2控制下半屏的红绿,1的时候高电平,不亮
#define R1(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_0):GPIO_ResetBits(GPIOB,GPIO_PIN_0)
#define R2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_1):GPIO_ResetBits(GPIOB,GPIO_PIN_1)
#define G1(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_4):GPIO_ResetBits(GPIOB,GPIO_PIN_4)
#define G2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_5):GPIO_ResetBits(GPIOB,GPIO_PIN_5)
//EN使能口
#define EN(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_0):GPIO_ResetBits(GPIOB,GPIO_PIN_0)
//STB锁存口
#define STB(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_1):GPIO_ResetBits(GPIOB,GPIO_PIN_1)
//CLK时钟口
#define CLK(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_3):GPIO_ResetBits(GPIOB,GPIO_PIN_3)
void Init_LED_Screen(void);
void LED_08_GPIO_Config(void);
void Led_Light(void);
void Clean_595(void);//清屏,清除锁存器里没用的信息,led点阵屏全灭
void SetRowLight(void);
void WriteDataToFirstHalScreen(void);
#endif /* __GPIO_H */
/***************************************************************
*函数名:LED_08_GPIO_Config
*形参:void
*返回值:void
*函数功能:08管口初始化
****************************************************************/
void LED_08_GPIO_Config(void)
{
GPIO_InitPara GPIO_InitStructure;
/* PB4~PB7 接口A B C D 表示行信号的管脚*/
RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE);
/* Configure the pin */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* PA0~PA1 PA4~PA5 接口R1 R2 G1 G2 表示列信号的管脚*/
RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOA, ENABLE);
/* Configure the pin */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* PB0,PB1,PB3, EN使能,STB锁存,CLK时钟*/
RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE);
/* Configure the pin */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/***************************************************************
*函数名:Led_Light
*形参:void
*返回值:void
*函数功能:点亮主程序,先清屏,然后让红灯全亮
****************************************************************/
void Led_Light(void)
{
int i;
EN(1);//高电平,失能
Clean_595();//清除锁存器信息,红绿全灭
while(1)
{
for(i=0;i<16;i++)
{
HC595_Send_Date_Up();//写入全点亮上屏绿灯
HC_138();
HC595_Send_Date_Down();//写入全点亮下屏红灯
HC_138();
}
}
}
/***************************************************************
*函数名:Clean_595
*形参:void
*返回值:void
*函数功能:清屏,清除锁存器里没用的信息,led点阵屏全灭,置高电平
红绿
****************************************************************/
void Clean_595(void)
{
int columnarr[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//控制8个595
int send_data[64]={1}; //十六变二进制保存,发送给595
int i,j;
STB(0);//锁存低电平,不发送
for(i=0;i<8;i++)//把所有数据存入send_data中,控制64列
{
for(j=0;j<8;j++)
{
send_data[j+i*8]=columnarr%2;
columnarr=columnarr/2;
}
}
for(i=0;i<64;i++)
{
R1(send_data);//发送相应位的电平,一位一位发送
G1(send_data);
R2(send_data);//发送相应位的电平,一位一位发送
G2(send_data);
Delay_us(1);
CLK(1);//时钟低电平,不接收
Delay_us(1);
CLK(0);//时钟高电平,接收
}
STB(1);
Delay_us(1);
STB(0);
}
/***************************************************************
*函数名:WriteDataToFirstHalScreen
*形参:void
*返回值:void
*函数功能:发送数据控制列的led亮灭/红灯
****************************************************************/
void HC595_Send_Date_Up(void)
{
int i,j;
int send_data[64]={0};//全为低电平,全亮
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
G1(send_data[j+i*8]);//发送相应位的电平,一位一位发送
Delay_us(1);
CLK(1);//接收数据存入锁存
Delay_us(1);
CLK(0);
}
}
Delay_us(1);
STB(1);
Delay_us(1);
STB(0);
}
void HC595_Send_Date_Down(void)
{
int i,j;
int columnarr[8]={0};
int send_data[64]={0};
STB(0);//锁存低电平,不发送
for(i=0;i<8;i++)//把所有数据存入a中,控制64列
{
for(j=0;j<8;j++)
{
send_data[j+i*8]=columnarr%2;
columnarr=columnarr/2;
}
}
for(i=0;i<64;i++)
{
R2(send_data);//发送相应位的电平,一位一位发送
Delay_us(1);
CLK(1);//接收数据存入锁存
Delay_us(1);
CLK(0);
}
Delay_us(1);
STB(1);
Delay_us(1);
STB(0);
}
/***************************************************************
*函数名:SetRowLight
*形参:void
*返回值:void
*函数功能:点亮主程序,先清屏,然后让红灯全亮
****************************************************************/
/*行信号选择函数,输入行后,进行abcd的二进制转换选择改变高低电平进而选择行*/
void HC_138(void)
{
int rowarr[4] = {0};
int i=0,j,rownum;
EN(0);
//换算二进制,发送相应行
for(j=0;j<4;j++)
{
rowarr = rownum%2;
rownum = rownum/2;
i++;
}
LA(rowarr[0]);//发送相应的电平,确定哪一行
LB(rowarr[1]);
LC(rowarr[2]);
LD(rowarr[3]);
EN(1);
}
一周热门 更多>