程序员

注册

 

发新话题 回复该主题

后端程序员的STM32之旅寄存器编程八段 [复制链接]

1#
北京哪家医院看白癜风 https://jbk.39.net/yiyuanfengcai/video_bjzkbdfyy/

本文对前一节程序稍加改动,用数码管显示0-9的数字。

本文得到网友

ScholarMartin的指点,感谢热心网友。

本文尚未实现通过结构体操作寄存器,后面再学习。

一、使用宏定义GPIO要显示的位

//定义一个宏可以设置显示或关闭显示//高16位设置8bit全打开//低16位通过求反关闭不显示的位#defineonArray(set)(GPIOC_BSRR=0xFF

(~set0xFFFF))

二、定义数码管显示数字

intmatrix[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

以上分别定义了0-9的八段码显示数值,与二进制位对应。

三、主体程序

#include"stm32f10x.h"#include"stm32f10x_lib.h"#includestdio.h//定义一个宏可以设置显示或关闭显示#defineonArray(set)(GPIOC_BSRR=0xFF

(~set0xFFFF))voidSystemInit(){}//简单的延迟操作voiddelay(u32i){  while(i--);}voiddelayMs(){  delay(0xfffff);}voidinit(intposition){//设置通用推挽输出  GPIOC_CRL=~(0x0f(4*position));  GPIOC_CRL

=(34*position);}/**关闭一个引脚*/voidoff(){  onArray(0x00);}voidlight(intnumber){  intmatrix[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  onArray(matrix[number]);}intmain(void){  intj;  //打开GPIOC时钟  RCC_APB2ENR

=14;//初始化8个引脚  for(j=0;j8;j++){    init(j);  }  //灭灯  off();  while(1){    //轮换显示0到9    for(j=0;j10;j++){      light(j);      delayMs();      off();      delayMs();    }  }}

分享 转发
TOP
发新话题 回复该主题