原来是想把这一篇写到寄存器的解析; 后来研究了一下线路发现这片开发板的设计不是 MCU 直接接续的!中间还加了两颗逻辑元件: 74HC138 和 74HC595. 对于没有学过电子电路/逻辑电路的人,看的时候会有负担。所以,先写 函式的应用,下一篇再写到寄存器。

打开第 12 个实验 ”实验12 数码管显示实验“

按前两篇的方式把程式从 MDK 项目执行,并且编译一下:

执行的结果如下图,是 16 进制的16 个符号加上一个豆点在轮流跑。

解析主程式 Main.c

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "smg.h"
#include "timer.h"
/************************************************
************************************************///
//0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, .,
u8 smg_num[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x01,0x00};int main(void){Stm32_Clock_Init(9); // delay_init(72);         // uart_init(72,115200);//   LED_SMG_Init();  // LED_Init();      // TIM3_Init(19,7199);//      while(1){      }    }u8 smg_wei=0;//
u8 smg_duan=0;//
u16 t=0;void TIM3_IRQHandler(void)//
{if(TIM3->SR&0X0001)// {LED_Write_Data(smg_num[smg_duan],smg_wei);// LED_Refresh();// smg_wei++;if(smg_wei==8)  smg_wei=0;  t++;if(t==500)// {t=0;LED0=!LED0;smg_duan++;if(smg_duan==18) smg_duan=0;}                                                            }                  TIM3->SR&=~(1<<0);//
}

整个程式包含了几个部分:

  1. 含入 header 档:这些内容留到下一篇讨论。
  2. 变数定义: 里面比较重要的是”字型定义“ 的 smg_num[]。
  3. main() 主程式:我们可以看到 main()在几个寄存器初始化完毕后就没动作了。
  4. 时钟中断 TIM3_IRQHandler():这个是整个程式的运作中心,这一篇主要就是要讨论这个部分,并且修改成我们想要的运用。

解析中断程式 TIM3_IRQHandler()

这个中断程式包含 二块,第一块是:

   LED_Write_Data(smg_num[smg_duan],smg_wei);// LED_Refresh();// smg_wei++;if(smg_wei==8)  smg_wei=0;   t++;TIM3->SR&=~(1<<0);//

第二块是:
这一段是做显示的收尾工作,每 500 单位一次。

if(t==500)// {t=0;LED0=!LED0; // GPIOC 的红色 LED,第”0“ bit 亮 或 暗smg_duan++; //输出下一个字if(smg_duan==18) smg_duan=0;// smg_num[] 有 18组字型,轮流播放一次}

开始修改内容及测试

我做了下列动作

  1. 加了一个新的字串阵列 smg_dash[] 置换掉原来的 smg_num[].
  2. smg_wei 暂时不动
u8 smg_dash[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01,0x00};u8 smg_wei=0;//
u8 smg_duan=0;//
u16 t=0;void TIM3_IRQHandler(void)//TIM3 interrupt
{if(TIM3->SR&0X0001)//{LED_Write_Data(smg_dash[smg_duan],smg_wei);//LED_Refresh();//smg_wei++;if(smg_wei==8)  smg_wei=0;    t++;if(t==300)// {t=0;LED0=!LED0;smg_duan++;if(smg_duan==10) smg_duan=0;}                                                            }                  TIM3->SR&=~(1<<0);//清除中断旗标
}

八个字一起改变!如下面照片。

  1. smg_wei 移动到 t==500 之后
void TIM3_IRQHandler(void)//TIM3 interrupt
{if(TIM3->SR&0X0001)// {LED_Write_Data(smg_dash[smg_duan],smg_wei);//LED_Refresh();//t++;if(t==300)//{t=0;LED0=!LED0;smg_wei++;if(smg_wei==20)  smg_wei=0;    smg_duan++;if(smg_duan==20) smg_duan=0;}                                                           }                  TIM3->SR&=~(1<<0);//
}

会跑的棒子

这一次再改动大一点!

  1. 增加 smg_dash_runner[] 取代 smg_dash,以及 smg_wei_runner[]。
  2. 修改
LED_Write_Data(smg_dash[smg_duan],smg_wei);
成为
LED_Write_Data(smg_dash_runner[smg_duan],smg_wei_runner[smg_wei]);`
  1. 把 ”smg_wei==“ 的值改成 20,”smg_duan==“ 的值改成 20;因为新增的字型阵列是 20 组。
    结果像下面的资料
u8 smg_dash_runner[]={0x04,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80};
u8 smg_wei_runner[]={0,0,0,1,2,3,4,5,6,7,7,7,7,6,5,4,3,2,1,0};void TIM3_IRQHandler(void)//TIM3 interrupt
{if(TIM3->SR&0X0001)//{LED_Write_Data(smg_dash_runner[smg_duan],smg_wei_runner[smg_wei]);//LED_Refresh();//t++;if(t==100)//{t=0;LED0=!LED0;smg_wei++;if(smg_wei==20)  smg_wei=0;  smg_duan++;if(smg_duan==20) smg_duan=0;}                                                           }                  TIM3->SR&=~(1<<0);//清除中断旗标
}

完成后,你可以看到一根红棒子,以逆时针的方式跑动。

这两个实验跑完了的时候,我可以看到
a. 每一根字节对应的 bit 位置:bit 0 是右下角的点、bit 1 是中间的横杠,,。
b. 整个显示器的位置是“0“ 在左边,”7“ 在右边。
c.我们把”runner“ 字串阵列改成 8 组,然后填入要显示的资料在相对位置,就可以显示固定的资料出来了

—下一篇待续

STM32F103RB 实作笔记(三)- LED 7 节显示(正点原子 STM32F103 nano开发板)程式解析(上)相关推荐

  1. STM32F103RB 实作笔记(一)- GPIOC LED 跑马灯(正点原子 STM32F103 nano开发板)程式解析

    这几天被隔离管着无聊,就上淘宝买了一块<正点原子> STM32F103 nano开发板,来练习 stm32f103 的程式.买这块开发板的原因是因为,板子已经有大部分MPU可以应用的线路包 ...

  2. STM32F103RB 实作笔记(六)- HC-05 蓝牙模组与手机 APP(正点原子 STM32F103 nano开发板)程式解析

    这一篇文章是为后面的实验做的一个准备工作 我们在做开发板扩展时,最不喜欢遇到的就是"不知道发生了什么事"!所以, 会用一些输出显示装备来告诉我们,现在已经在哪里了. 譬如,前一个实 ...

  3. STM32F103RB 实作笔记(九)- PWM + SPI +MAX6675 整合试验 (正点原子 STM32F103 nano开发板)程式解析

    个人工作上的关系,需要做一款温度控制风扇速度的控制器,还需要能够看到温度和PWM的值.于是我用这个不熟悉的 STM32F103 试试,顺便把 PWM 和 SPI 也了解一番. 一开始当然也是跌跌撞撞, ...

  4. 共阳数码管段码表_正点原子开拓者FPGA开发板资料连载第十一章 静态数码管显示实验...

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

  5. FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)

    2019级电子科学与技术专业FPGA课程设计 报   告 2022  年 5 月 20 日 多功能数字电子钟的设计 摘要 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术,使用ED ...

  6. STM32工作笔记001---认识开发板资源-以正点原子战舰版开发板为例

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里只把不太明白的写上. 1.DS18B20是湿度传感器 DS18B20是常用的数字温度传感器,其 ...

  7. (第16-17讲)STM32F4单片机,FreeRTOS中断管理简介【视频笔记、代码讲解】【正点原子】【原创】

    文章目录 视频笔记 实验现象 代码讲解(个人注释) 一个弹幕的问题? PendSV和Systick中断优先级最低? demo函数 定时器函数 视频笔记 老生常谈 老生常谈 老生常谈,FreeRTOS只 ...

  8. OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移、缩放和旋转操作

    OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移.缩放和旋转操作 C3DWidget.h #pragma once#include <QtWidgets/QApplic ...

  9. RV1126笔记三十:freetype显示矢量字体

    若该文为原创文章,转载请注明原文出处. 在前面介绍了使用取模软件,可以自定义OSD,这种做法相对不灵活,也无法变更,适用大部分场景. 如果使用opencv需要移植opencv,芯片资源相对要相比好,而 ...

  10. 正点原子STM32F103综合课程操作学习笔记(包含代码)

    整理资料来源 [正点原子] 手把手教你学STM32单片机教学视频 嵌入式 之 F103-基于新战舰V NANO_STM32F103开发指南-HAL库版本_V1.0.pdf 其它网络操作等 词汇解释 p ...

最新文章

  1. 【Android】UI架构
  2. .NET Core中使用结果过滤器ResultFilter统一结果返回封装
  3. Java的几何布朗运动
  4. 多个css样式合并到一个“目录”css文件中
  5. 搭建本地 HTTPS 环境
  6. PCL 学习(2)——基本数据类型与点云数据拼接
  7. tcpdump抓包最常用的命令
  8. 云计算入门科普系列:文件管理
  9. fatal error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_48.lib'
  10. 前牙正常覆盖是多少_深覆合和深覆盖两者怎么区分?花两分钟进来了解一下
  11. 使用iToolab UnlockGo for Mac如何绕过屏幕时间密码
  12. 【BZOJ】【1010】【HNOI2008】玩具装箱Toy
  13. python识别验证码并自动登录_Python完全识别验证码自动登录实例详解
  14. python pdf处理工具_用Python处理pdf文档
  15. FreeRTOS学习一(简介)
  16. Unity中制作动画
  17. 用python绘制散点图
  18. 免费分享:5本安卓开发经典书籍,Android 7编程入门经典(第4版),Android底层驱动分析和移植,底层驱动分析和移植
  19. C# Windows 7任务栏开发之进度条(Progress Bar)
  20. RFID读写器的组成

热门文章

  1. 找出直系亲属-cpp
  2. (word、ppt、excel)​office怎么删除历史文档记录
  3. 27-如何让文件夹中的图片显示缩略图
  4. 程序员编程入门必知!程序员需要学什么
  5. 二项式定理学习笔记(详解)
  6. Unity笔记-29-ARPG游戏项目-12-完善弓箭
  7. toolbar遇到问题和解决方式
  8. 《星际争霸2》人工智能研究环境 SC2LE 初体验
  9. 华为改变策略,出击超低端手机市场
  10. 玩转华为ENSP模拟器系列 | 配置设备使用SNMPv2c与网管通信示例