STM32--数码管显⽰使⽤
STM32–数码管显⽰
简介
1.硬件部分
STM32F103C8T6最⼩系统板⼀位共阴数码管
2.软件部分
Keil软件编程数码管码表
硬件部分
数码管
简介
数码管,也称作辉光管,是⼀种可以显⽰数字和其他信息的电⼦设备。玻璃管中包括⼀个⾦属丝⽹制成的阳极和多个阴极。⼤部分数码管阴极的形状为数字。管中充以低压⽓体,通常
⼤部分为氖加上⼀些汞和/或氩。给某⼀个阴极充电,数码管就会发出颜⾊光,视乎管内的⽓体⽽定,⼀般都是橙⾊或绿⾊。
分类
数码管也称LED数码管,不同⾏业⼈⼠对数码管的称呼不⼀样,其实都是同样的产品。
按发光⼆极管单元连接⽅式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光⼆极管的阳极接到⼀起形成公共阳极(COM)的数码管,共阳数码管在应⽤时应将公共极
COM接到+5V,当某⼀字段发光⼆极管的阴极为低电平时,相应字段就点亮,当某⼀字段的阴极为⾼电平时,相应字段就不亮。共阴数码管是指将所有发光⼆极管的阴极接到⼀起形
成公共阴极(COM)的数码管,共阴数码管在应⽤时应将公共极COM接到地线GND上,当某⼀字段发光⼆极管的阳极为⾼电平时,相应字段就点亮,当某⼀字段的阳极为低电平时,相
应字段就不亮。
1.共阳数码管
共阳数码管在应⽤时应将公共极COM接到+5V,当某⼀字段发光⼆极管的阴极为低电平时,相应字段就点亮,当某⼀字段的阴极为⾼电平时,相应字段就不亮。
2.共阴数码管
对于共阴极数码管来说,当某个发光⼆极管的阳极为⾼电平时,发光⼆极管点亮,相应的段被显⽰。同样,共阳极数码管的阳极连接在⼀起,公共阳极接+5V,当某个发光⼆极管的
阴极接低电平时,该发光⼆极管被点亮,相应的段被显⽰
数码管码表
unsignedcharcodesmgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管
unsignedcharcodesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};共阴数码管
静态数码管硬件电路设计
实物
软件部分
/**********************************************************************
*⽂件名:smg.c
*描述:smg应⽤函数库
*硬件连接:-----------------
*|PA0-A|
*|PA1-B|
*|PA2-C|
*|PA3-D|
*|PA4-E|
*|PA5-F|
*|PA6-G|
*|PA7-DP|
*-----------------
*********************************************************************/
#include"smg.h"
#include"delay.h"
//共阳数码管断码表
u8constsmg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/*
*函数名:SMG_GPIO_Config
*描述:配置数码管⽤到的I/O⼝
*输⼊:⽆
*输出:⽆
*/
voidSMG_GPIO_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO__Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO__Mode=GPIO_Mode_Out_PP;
GPIO__Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//turno
ffallled
}
/*
*函数名:SMG_Display
*描述:驱动数码管显⽰0-F
*输⼊:⽆
*输出:⽆
*/
voidSMG_Display(void)
{
u8i;
for(i=0;i<16;i++)
{
GPIO_Write(GPIOA,smg_data[i]);
delay_ms(1000);
}
}
voidDisplay_N(u8N)
{
GPIO_Write(GPIOA,smg_data[N]);
}
smg.h
#ifndef__SMG_H
#define__SMG_H
#include"stm32f10x.h"
voidSMG_GPIO_Config(void);
voidSMG_Display(void);
voidDisplay_N(u8N);
#endif/*__SMG_H*/
数码管案例(基于51单⽚机四位数码管模块(74HC595))
14脚:DS(SER),串⾏数据输⼊引脚
13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND
12脚:RCK,存储寄存器时钟输⼊引脚。上升沿时,数据从移位寄存器转存带存储寄存器。
11脚:SCK,移位寄存器时钟引脚,上升沿时,移位寄存器中的bit数据整体后移,并接受新的bit(从SER输⼊)。
10脚:MR,低电平时,清空移位寄存器中已有的bit数据,⼀般不⽤,接⾼电平即可。
9脚:串⾏数据出⼝引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这⾥出去的。⽤于595的级联。
Qx:并⾏输出引脚
注意:
当芯⽚资料上⾯的引脚说有横线时,属于低电平⼯作。否则⾼电平⼯作;
共阳数码管如果要点亮,对应的引脚需要给1
共阴数码管如果要点亮,对应的引脚需要给0
#include"reg51.h"
unsignedcharcodeLED_0F[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf};//共阳数码管码表
unsignedcharcodesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显⽰0~F的值
//-----------------------------------------------------------------------------
//函数原形定义
#defineucharunsignedchar
#defineuintunsignedint
//能够使⽤unsignedchar//unsignedint尽量使⽤最原始的变量类型名字
voidmain(void);//主函数
voidLED4_Display(void);//LED数码管显⽰
voidLED_OUT(ucharX);//LED数码管单字节串⾏移位函数
unsignedcharcodeLED_0F[];//LED字模表
/*端⼝引脚定义*/
sbitDIO=P1^0;//串⾏数据输⼊
sbitRCLK=P1^1;//时钟脉冲信号――上升沿有效
sbitSCLK=P1^2;//打⼊信号――――上升沿有效
//-----------------------------------------------------------------------------
//全局变量
unsignedcharLED[8];//⽤于LED的8位显⽰缓存
//*****************************************************************************
//主程序
//
voidmain(void)
{
LED[0]=9;
LED[1]=0;
LED[2]=8;
LED[3]=5;
while(1)
{
LED4_Display();
}
}
//LED数码管显⽰函数
voidLED4_Display(void)
{
unsignedcharcode*led_table;//查表指针
unsignedchari;
//显⽰第1位
led_table=LED_0F+LED[0];
i=*led_table;
LED_OUT(i);
LED_OUT(0x01);//0x01显⽰在第⼀位
RCLK=0;
RCLK=1;
//显⽰第2位
led_table=LED_0F+LED[1];
i=*led_table;
LED_OUT(i);
LED_OUT(0x02);//0x02显⽰在第2位
RCLK=0;
RCLK=1;
//显⽰第3位
led_table=LED_0F+LED[2];
i=*led_table;
LED_OUT(i);
LED_OUT(0x04);//0x04显⽰在第3位
RCLK=0;
RCLK=1;
//显⽰第4位
led_table=LED_0F+LED[3];
i=*led_table;
LED_OUT(i);
LED_OUT(0x08);//0x08显⽰在第4位
RCLK=0;
RCLK=1;
}
//LED数码管单字节串⾏移位函数
voidLED_OUT(unsignedcharnumber)
{
unsignedchari;
for(i=8;i>=1;i--)
{
if(number&0x80)
{
DIO=1;
}
el
{
DIO=0;
}
number<<=1;
SCLK=0;
SCLK=1;
}
}
参考资料
本文发布于:2023-03-08 07:35:46,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678232147181517.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:共阳数码管.doc
本文 PDF 下载地址:共阳数码管.pdf
留言与评论(共有 0 条评论) |