IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32实现8*8点阵动态显示 -> 正文阅读

[嵌入式]STM32实现8*8点阵动态显示

说明

本人初学者小白一枚,并不能实现很好的功能,只是边学习边玩,有不足的地方希望给位提出改正。

实现效果

基于STM32实现点阵屏动态显示,两种方式实现0——9的显示。

1、从左到右依次显示0--9.

2、逐帧显示0--9

视频展示

https://www.bilibili.com/video/BV1d64y1x7qF

硬件

我使用的是STM32F103ZE,由于没准备最小系统,是直接连接在开发板上的,使用的是GPIOA的IO-0~IO-7、GPIOB的IO-0~IO-7。

LED点阵使用的是共阴极1088AS,8*8点阵的知识可自行查找。

GPIOA的IO-0~IO-7连接的阴极,GPIOB的IO-0~IO-7连接的阳极。

代码

1.leddz.c

1.1使能GPIO口

#include "stm32f10x.h"
#include "leddz.h"

void Inleddz()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//打开GPIO时钟,先打开复用才能修改复用功能
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//要先打开时钟,在重映射;这句表示关闭jtag,使能swd
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=SMGAX;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_ResetBits(GPIOA,SMGAX);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=SMGBX;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	GPIO_SetBits(GPIOB,SMGBX);
}

?2.leddz.h

2.1定义管脚

#ifndef  __LEDDZ_H_
#define  __LEDDZ_H_
#define SMGAX GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7			//用来定义PA的管脚
#define SMGBX GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7			//用来定义PB的管脚

void Inleddz(void);

#endif

3.main.c

/******************************************************************************************************************/
//该程序使用了STM32F103ZE系列,使用了PA的IO_0-IO_7,PB口的IO_0-IO_7,PB3.PB4涉及到端口复用要关闭jtag,使能swd。使用的是共阴极8*8点阵

#include "stm32f10x.h"
#include "leddz.h"
#define speed 10000																		//用于调节速度
int main()
{
	int i=0;
	int j=0;
	int n=0;
	int sum=0;	
	int a[88]={	
							0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0
							0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,//1
							0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,//2
							0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00,//3
							0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,//4
							0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00,//5
							0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00,//6
							0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,//7
							0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,//8
							0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00,//9
							0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//如果需要移动显示的话,就需加上这行,数组a[80]改成a[88]											
	};
	int b[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
	Inleddz();
	while (1)
  {

//	开场逐个扫描,用于判断所有LED都是好的
		GPIO_SetBits	(GPIOA,1<<i);
		GPIO_ResetBits(GPIOB,3<<j);
		
		GPIO_ResetBits	(GPIOA,1<<i);	
		GPIO_SetBits		(GPIOB,3<<j);
//	**********************************************************
		if(n==0)																								//判断开场扫描是否完成
		{
		
		sum++;																							//扫描次数
		if(sum>6*speed)																			//调节跳转速度
			{																										
			sum=0;																						
				j++;																						
				if(j>8)
				{
				j=0;
					i++;
					if(i>8)
					{
					i=0;
					n=1;																					//判断用何种方式显示数字
					}
				}
			}
		
		}
	
		
		
		
		if(n==1) 
	{
	for(i=0;i<8;i++)
			{
			GPIO_SetBits	(GPIOA,a[i+j]);				//PA输出高电平
			GPIO_ResetBits(GPIOB,b[i]);					//PB输出低电平
		 
			GPIO_ResetBits	(GPIOA,a[i+j]);			//PA输出低电平
			GPIO_SetBits		(GPIOB,b[i]);				//PA输出低电平

			}
			
			sum++;
			if(sum>8*speed)											//调节跳转速度	
			{
			sum=0;
				j+=8;															//跳到下一个数字
				if(j>80)													//盘点是否显示完最后一个数字
				{
				j=0;
				}
			}
		}
//*******************************************************************************			
//移动显示数字的方式	
		if(n==2)  
		{
	for(i=0;i<8;i++)
			{
			GPIO_SetBits	(GPIOA,a[i+j]);				//PA输出高电平
			GPIO_ResetBits(GPIOB,b[i]);					//PB输出低电平
		 
			GPIO_ResetBits	(GPIOA,a[i+j]);			//PA输出低电平
			GPIO_SetBits		(GPIOB,b[i]);				//PA输出低电平

			}
			
			sum++;
			if(sum>1.5*speed)											
			{
			sum=0;
				j++;
				if(j>80)
				j=0;
			}
		}	
		
/****************************************************************************************************/
/*                        不断定义IO口扫描的方式来实现,静态扫描                                      */
/****************************************************************************************************/
//		GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_7);	//A0和A7管脚输出高电平
//		GPIO_ResetBits(GPIOB,GPIO_Pin_0);						//B0管脚输出低电平 是的回路导通
//		GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_7);//A0和A7管脚输出高电平
//		GPIO_SetBits(GPIOB,GPIO_Pin_0);							//B0管脚输出低电平 是的回路导通
//		
//		GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_6);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_1);
//		GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_6);
//		GPIO_SetBits(GPIOB,GPIO_Pin_1);
//		
//		GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_5);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_2);
//		GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_5);
//		GPIO_SetBits(GPIOB,GPIO_Pin_2);
//		
//		GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_3);
//		GPIO_ResetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4);
//		GPIO_SetBits(GPIOB,GPIO_Pin_3);
//		
//		GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_3);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_4);
//		GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_3);
//		GPIO_SetBits(GPIOB,GPIO_Pin_4);
//		
//		GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_2);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
//		GPIO_ResetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_2);
//		GPIO_SetBits(GPIOB,GPIO_Pin_5);
//		
//		GPIO_SetBits(GPIOA,GPIO_Pin_6|GPIO_Pin_1);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_6);
//		GPIO_ResetBits(GPIOA,GPIO_Pin_6|GPIO_Pin_1);
//		GPIO_SetBits(GPIOB,GPIO_Pin_6);
//		
//		GPIO_SetBits(GPIOA,GPIO_Pin_7|GPIO_Pin_0);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_7);
//		GPIO_ResetBits(GPIOA,GPIO_Pin_7|GPIO_Pin_0);
//		GPIO_SetBits(GPIOB,GPIO_Pin_7);
		
		
  }
}

4.文件展示

?希望能给同样初学的你带来帮助。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章           查看所有文章
加:2021-08-01 14:40:08  更:2021-08-01 14:42:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 23:48:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码