系列文章目录
第一章 第一节 STM32F1系列 一位数码管的使用
前言
`本人从事机械行业工作,随着时代发展,想转换到嵌入式行业中。这是我开始学习的第一篇试验记录,主要是记录自己的过程与经历,希望大佬看到多多指正,本人不胜感激!
例如:这篇文章的起源是我在字母2站看到的一个软广,它是一个EDU仿真试验平台邀请的评测,由此开始我的试验记录。
一、控制器与数码管
作为STM32的入门第一课,当然是点灯了。当然,由于初学了一段时间,电灯的操作我已经熟悉,因此直接上来就对数码管进行操作。
数码管本质就是LED,而称之为数码管是因为使用了8个LED组成的阵列,可以通过控制其不同组合亮灭,达到显示数字的功能,因此称为数码管。
数码管有两种类型,分别为:共阴极、共阳极两种类型。其最大的不同就是其触发模式是高电平点亮还是低电平点亮。
由于暂时还不了解版权问题,所以这里并不做带有版权的插图。
一位数码管,需要8个引脚,7个片选引脚,1个电源引脚
使用的是STM32F1系列的单片机,其引脚数量有限
二、使用步骤
1.主函数
这是main函数的代码(示例):
#include "stm32f10x_conf.h"
#include "stm32f10x_it.h"
#include "sys.h"
#include "digtal_led.h"
// 延时函数,abc应该设置为100的,因为我使用单步执行比较久,所以就改成1了
__attribute__((optimize("-O0")))
void delay(uint32_t a)
{
uint32_t b, c;
a=2;
while (a--)
{
b=1;
while (b--)
{
c=1;
while (c--);
}
}
}
int main(void)
{
// 数字1
unsigned int number = 0;
// 初始化数码管控制引脚
digtal_LED_Init();
while (1)
{
show_digtal_one_segment((number++)%10);
//如果在这里插入延时函数,应该就可以控制间隔时间了
//我自己写的show_digtal_one_segment((number++));
delay(100);
}
}
2.代码心得
//一位数码管,只能实现0-9的显示
//因此,在这里能玩的花样不多,一个是现实的内容,一个是间隔时间
//show_digtal_one_segment((number++)%10);
//数字从0到n,对10取余的话,1%10=0,1;2%10=0,1;10%10=1,0;11%10=1,1;
//循环往复
//digtal_led.c函数,控制数码管组合的代码在哪里(本质就是点灯,电灯的代码在哪里呢)
// GPIO_Write(GPIOA, table[num]);
//我懂了,一位数码管,刚好用完PA组,然后一个十进制———转换———十六位二进制
//已经将数码管点亮的位参数写好在这里uint16_t table[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//在show_digtal_one_segment(uint32_t num)函数中
//用数组的形式,循环调用已经写好的数码管位参数
//然后由GPIOwrite进行引脚电平控制
总结
软件使用总结:这款EDU工具看起来还是比较好用的,对于初学者来说,一个的新的学科需要的是建立其正向反馈,以便更好的进入到下一个环节。然而现实世界中的单片机由于有太多实际问题,很难让新手一上来就熟悉。 比如在该系列中,新手不需要去新建工程,不需要用老版的keil去把文件配置进去,也不需要接入VCC与GND,更不需要了解不同的贴片商对其封装的类型,以及其他的冗杂的说明文档,更没有那些又臭又长的教程视频。
数码管使用总结:对于数码管来说,使用思路主要是调包侠的工作。01-空白框架代码 02-LED点灯子函数 03-主函数(使用内部计算运算时间实现延时)(使用对10取余实现0-10循环现实 ) (调用封装好的电灯子函数)
(电灯子函数用数组形式调用)
完结,撒花!希望大家天天开心!