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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于STM32F103的数码管显示编程 -> 正文阅读

[嵌入式]基于STM32F103的数码管显示编程

一、控制数码管的构成

在我手上的这块开发板(正点原子的nano板)控制数码管需要控制 38译码器 和 595锁存器。下面主要说明一下两块芯片的原理 以及 如何用STM32 keil的开发环境实现。

二、595锁存器 以及 38译码器

595锁存器功能简介:SCLK每来一个上升沿,DATA中的数据进入到595中,如此读八次之后,再有一个LCLK,就全部把八位数据并行输出,输出的端脚为QA~QH。
595锁存器
38译码器:将来自A0—A2中的三位数据转到CH1—CH8中的某一个高电平。
38译码器

三、实现代码

(1)宏定义部分

//段选define
#define DATA PBout(3) 
#define LCLK PBout(4) 
#define SCLK PBout(5) 
//段选define	

//位选define
#define SISEL0 PCout(10)
#define SISEL1 PCout(11)
#define SISEL2 PCout(12)
//位选define

#define JTAG_SWD_DISABLE   0X02
#define SWD_ENABLE         0X01
#define JTAG_SWD_ENABLE    0X00	

(2)定义一个给数码管显示的列表

u8 temp[] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x01,0x00};

(3)关闭jtag,因为PB4正常是作为jtag使用,所以先关闭他的jtag功能。

void JTAG_Set(u8 mode)
{
	u32 temp;
	temp=mode;
	temp<<=25;
	RCC->APB2ENR|=1<<0;     //开启辅助时钟	   
	AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
	AFIO->MAPR|=temp;       //设置jtag模式
}

(4)使能时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB,ENABLE);

(5)对GPIO进行初始化

	GPIO_InitTypeDef GPIO_InitStructre;

	GPIO_InitStructre.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructre.GPIO_Pin=	GPIO_Pin_10|GPIO_Pin_12|GPIO_Pin_11
    GPIO_InitStructre.GPIO_Speed= GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStructre);

	GPIO_InitStructre.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructre.GPIO_Pin=	GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; 
    GPIO_InitStructre.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructre);

(6)产生上升沿、下降沿使得数据能输出到数码管上

	while(1){
			SISEL0 = 1;
	SISEL1 = 1;
	SISEL2 =  1;

	SCLK = 0;
	LCLK = 0;
    tmp=temp[2];
	for( j = 0 ; j < 8 ; j ++ )
	{
	    DATA = tmp & 0X01;
		SCLK =1;
		SCLK =0;
		tmp = tmp >> 1;
	}	
	LCLK = 1;
		}

(7)总体代码

#include "sys.h"
//数码管显示用  
//段选define
#define DATA PBout(3) 
#define LCLK PBout(4) 
#define SCLK PBout(5) 
//段选define	

//位选define
#define SISEL0 PCout(10)
#define SISEL1 PCout(11)
#define SISEL2 PCout(12)
//位选define

#define JTAG_SWD_DISABLE   0X02
#define SWD_ENABLE         0X01
#define JTAG_SWD_ENABLE    0X00	

u8 tmp,j;
u8 temp[] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x01,0x00};
void JTAG_Set(u8 mode)
{
	u32 temp;
	temp=mode;
	temp<<=25;
	RCC->APB2ENR|=1<<0;     //开启辅助时钟	   
	AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
	AFIO->MAPR|=temp;       //设置jtag模式
}
int main(void){
	//设置数码管PB4/5  PC10/11/12
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB,ENABLE);

	
	GPIO_InitTypeDef GPIO_InitStructre;

	
	GPIO_InitStructre.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructre.GPIO_Pin=	GPIO_Pin_10|GPIO_Pin_12|GPIO_Pin_11;
    GPIO_InitStructre.GPIO_Speed= GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStructre);
	
	GPIO_InitStructre.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructre.GPIO_Pin=	GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; 
    GPIO_InitStructre.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructre);

	//设置数码管PB4/5  PC10/11/12
	JTAG_Set(SWD_ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试 PB4做普通IO口使用,否则不能当IO使用

		
	while(1){
			SISEL0 = 1;//需要修改的参数,选择哪个数码管亮。
	        SISEL1 = 1;//需要修改的参数,选择哪个数码管亮。
	        SISEL2 =  1;//需要修改的参数,选择哪个数码管亮。

	SCLK = 0;
	LCLK = 0;
    tmp=temp[2];     //里面的2是需要修改的参数,选择数码管显示哪个数字。
	for( j = 0 ; j < 8 ; j ++ )
	{
	    DATA = tmp & 0X01;
		SCLK =1;
		SCLK =0;
		tmp = tmp >> 1;
	}	
	LCLK = 1;
		}
}	

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:21:57  更:2021-07-15 16:23:56 
 
开发: 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年11日历 -2024/11/25 19:47:39-

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