目录
本篇文章将继续进一步了解GPIO外设输出模式
知道这一部分的朋友可以直接点击目录部分跳过这段跳过,这里介绍一下数码管的知识
不管在嵌入式STM32中还是在单片机51中,我们经常采用LED数码管来显示我们系统的状态、运算结果等各种信息,LED数码管是机器和人对话的一种重要的输出设备。

单个LED数码管的外形和内部结构如上图所示。LED数码管由8个发光二极管组成,通过不同的发光字段组合可以显示数字(0~9)、字符(A~F、H、L、P、R、U、Y、符号"——"及小数点"."等)。
按照内部8个发光二极管的连接方式的不同,LED数码管可以分为共阳极与共阴极俩种,上图有结构图。
这里以共阳极LED数码管为例来阐述具体在单片机上的工作原理。
要使数码管显示数字或者字符,直接将相应的数字或者字符送入数码管的段控制端是不行的,必须使段控制端输出相应的字符编码。
如上图所示,八个发光二极管的阳极连接在一起,作为公共端(我们喜欢说位选端)阴极作为”段“控制端(我们说段选端)。
1)当公共端(位选端)接低电平时,所以二极管截止,不发光。
2)当公共端(位选端)接高电平时,当某段控制端为高电平,该段的发光二级管导通并点亮。通过点亮不同的段,显示不同的字符。如显示数字1时,b、c俩段接低电平其他段接高电平。
共阴极LED数码管与共阳极类似,这个里就不在进行介绍了。
这里给出共阳与共阴极数码的显示字形编码:
| 共阳极 | 共阴极 | |
| 字形 | 对应编码 | 对应编码 |
| 0 | 0xc0 | 0x3f |
| 1 | 0xf9 | 0x06 |
| 2 | 0xa4 | 0x5b |
| 3 | 0xb0 | 0x4f |
| 4 | 0x99 | 0x66 |
| 5 | 0x92 | 0x6d |
| 6 | 0x82 | 0x7d |
| 7 | 0xf8 | 0x07 |
| 8 | 0x80 | 0x7f |
| 9(g) | 0x98(0x90) | 0x67(0x6f) |
| A | 0x88 | 0x77 |
| B | 0x83 | 0x7c |
| C(c) | 0xc6(0xa7) | 0x39 |
| d | 0xa1 | 0x5e |
| E | 0x86 | 0x79 |
| F | 0x8e | 0x71 |
| H(h) | 0x89(0x8b) | 0x76(0x74) |
| L | 0xc7 | 0x38 |
| P | 0x8c | 0x73 |
| U | 0xc1 | 0x3e |
| . | 0x7f | 0x80 |
| —— | 0xbf | 0x40 |
动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管的位选端有效,并送出相对应的字形显示编码。此时其他位数码管因位选端无效而处于熄灭状态。下一时端按顺序选通另一位数码管,并送出相对应的字形编码显示,按照此规律进行下去,即可使各位数码管分别间断的显示出相应的字符。虽然在同一时刻只有一位数码管点亮,但利用人眼的视觉暂留效应和发光二极管熄灭时的余晖效应,看到的确是多为数码管同时点亮显示,这个过程被称为动态扫描显示。
数码管的所有段选端共用一个8位的I/O端口,而每个数码管的位选端要占用一根I/O线,因此,n位动态显示数码管只占用一个8位的I/O端口和n根I/O线。显示n位数码时,连接段选的8位I/O端口依次送出n位数码的段码数据。同时,依次控制相应位公共端,当公共端电平位”0“(共阴极)或者”1“(共阳极)时,该位数码管点亮。
到这预备知识介绍完了现在开始写代码了
我们使用固件库编程,首先我们需要一个工程模板,详情可以看STM32固件库点亮LED灯_学c入门到入土的博客-CSDN博客
LED头文件
#ifndef _LED_H_ //判断标号_LED_H_是否被定义,如果没有则#ifndef到#endif代码有效
#define _LED_H_
#include <stm32f10x.h>
#define LED_GPIO_PORT GPIOC
//数码管的GPIO端口
#define LED_GPIO_CLK RCC_APB2Periph_GPIOC
//数码管相对应的时钟端口开启
#define LED_GPIO_PIN GPIO_Pin_All
//数码管的GPIO引脚号,All表示当前GPIOx的全部引脚
#define uchar unsigned char //给无符号字符型宏定义一个别名
#define uint unsigned int //给无符号整型宏定义一个别名
void LED_GPIO_Config(void); //数码管GPIO端口初始化函数
void delay_ms(uint ms);
//延时函数
#endif
LED.C文件
#include "led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*定义一个GPIO_InitTypeDef类型的结构体*/
RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);
/*开启数码管相关的GPIO外设时钟*/
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Pin=LED_GPIO_PIN;
/*选择要控制的引脚*/
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
/*设置引脚速率为50MHz*/
GPIO_Init(LED_GPIO_PORT,&GPIO_InitStructure);
/*调用库函数初始化GPIO*/
}
void delay_ms(uint ms) //延时函数
{
unsigned int i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
main.C文件
#include "led.h"
uchar LED_AC_table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳极数码编码
int main()
{
LED_GPIO_Config(); //调用数码管GPIO外设初始化
uint j=0x0100; //这里是个算法变量的函数,这里就不展开讨论
while(1)
{
for(int i=0;i<6;i++) //循环选段
{
delay_ms(50); //延时
GPIO_Write(LED_GPIO_PORT,LED_AC_table1[i]+j); //固件库函数选位输出相对应的字符
if(j==0x2000) //算法
{
j=0x0100;
}
else
{
j<<=1;
}
}
}
}
在仿真之前我们看一下我们又一个新的固件库函数
| 函数名 | GPIO_Write() |
| 函数原型 | void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal) |
| 功能描述 | 向指定的GPIO端口写入数据 |
| 输入参数1 | GPIOx:x可以是A,B,C,D,来选择GPIO外设 |
| 输入参数2 | PortVal:待写入端口数据寄存器的值 |
接下来让我们看看Proteus 仿真的结果吧

关注我下面我会继续更新GPIO外设输入输出的实际小程序,来帮助大家更好的理解GPIO外设的功能,后面还会更新STM32的所有特色外设。
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
如果我在模型中设置验证消息validates:name,:presence=>{:message=>'Thenamecantbeblank.'}我如何让该消息显示在闪光警报中,这是我迄今为止尝试过的方法defcreate@message=Message.new(params[:message])if@message.valid?ContactMailer.send_mail(@message).deliverredirect_to(root_path,:notice=>"Thanksforyourmessage,Iwillbeintouchsoon")elseflash[:error]
我刚刚按照thebootsygempage上的安装说明进行操作在我保存并查看帖子内容之前,一切看起来都不错。这是输出在View中的样子:HeaderSubhead:似乎没有呈现任何html格式,因为它被引号或类似的东西转义了-其他人有这个问题吗?我没有在github页面或SO上看到任何问题来指出我正确的方向。除了遵循gem安装说明之外,我还没有做任何事情,但也许我错过了什么或者只是犯了一个愚蠢的错误。如果你还有什么想知道的,请尽管问。干杯 最佳答案 你需要有这样的东西,转义html: 关