原来是想把这一篇写到寄存器的解析; 后来研究了一下线路发现这片开发板的设计不是 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. SpringSecurity-eclipse
  2. Java学习笔记(1)——概述
  3. 安卓蓝牙调试软件和微信小程序搜索不到设备
  4. 【新手宝典】一篇博文带萌新建站并了解建站体系流程和对萌新友好的便捷方式,这篇博文很有可能是你的启蒙文
  5. 从源码角度剖析VC6下的内存分配与切割的运作
  6. Fiddler中response乱码的解决方案
  7. 大数据分块_空间数据库基础理论 GIS空间数据处理分析涉及的基本概念
  8. 利用NTFS流文件隐藏
  9. java随机生成数字代码,详解系列文章
  10. 怀旧服服务器维护以后精英怪,《魔兽世界》:看不起怀旧服精英怪,一定吃不了兜着走...
  11. Linux系统清空回收站
  12. AndroidStudio初体验
  13. 解析BMP GIF JPEG TGA PNG图像格式
  14. 【学习笔记15】JavaScript的函数
  15. ES安装报错信息(持续更新)
  16. mbp网速很慢_macbook无线上网很慢怎么办 macbook无线上网很慢解决方法
  17. svn版本库浏览器_WebSVN—在线版本库浏览器
  18. go语言环境安装之插件
  19. ios点击大头针气泡不弹出_高德 ios 自定义气泡添加点击事件无效问题
  20. rds 主从实例_探索Amazon RDS数据库实例和漏洞

热门文章

  1. Metrics 入门教程
  2. JS 0.1+0.2的理解
  3. LSTM预测股票收盘价
  4. Windows11 校园网连ftp登录上传作业失败
  5. 个人介绍 php 怎么说,个人介绍怎么写
  6. 计算机u盘打不开怎么办,电脑*u盘打不开怎么办
  7. 微信小程序红包 php,微信小程序发放红包+领取红包(PHP)
  8. HTML超链接标签—链接QQ在线聊天
  9. 【前端学习-函数】js基础学习笔记
  10. 微信群发工具,纯Python编写~