本文对前一节程序稍加改动,用数码管显示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(); } }}