请教各位大佬,本人比较菜,用STM8写了一个程序,其中关于点亮数码管的部分,虽然能用,但是感觉特别繁琐。然后看网上其它人写的,说实话,可能个人脑瓜不是很灵光,有点看不懂。所以想请各位大佬多抬贵手,详细注释一下,万分感谢!!!
/****以下是代码内容,重复部分就不一一列举了****/
//定义ON/OFF
#define ON 1
#define OFF 0
//第1-4位(从左往右)数码管 使能/不使能定义。 数码管:U4,4位,红色共阴
#define shumaguan_U4_1_shineng(ON_OFF) if(ON_OFF==OFF)GPIO_WriteHigh(GPIOC, GPIO_PIN_6);\
else GPIO_WriteLow(GPIOC, GPIO_PIN_6)
#define shumaguan_U4_2_shineng(ON_OFF) if(ON_OFF==OFF)GPIO_WriteHigh(GPIOC, GPIO_PIN_5);\
else GPIO_WriteLow(GPIOC, GPIO_PIN_5)
//定义数码管的a,b亮/灭,每段一个I/O口控制,高电平点亮
#define shumaguan_U4_xianshi_a(ON_OFF) if(ON_OFF==ON)GPIO_WriteHigh(GPIOD, GPIO_PIN_0);\
else GPIO_WriteLow(GPIOD, GPIO_PIN_0)
#define shumaguan_U4_xianshi_b(ON_OFF) if(ON_OFF==ON)GPIO_WriteHigh(GPIOD, GPIO_PIN_1);\
else GPIO_WriteLow(GPIOD, GPIO_PIN_1)
//定义数码管分别显示0-1、.(小数点)亮/灭,多个I/O口同时组合使能,高电平点亮
#define shumaguan_U4_xianshi_0(ON_OFF) if(ON_OFF==ON)GPIO_WriteHigh(GPIOD, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2| GPIO_PIN_3|GPIO_PIN_4| GPIO_PIN_5);\
else GPIO_WriteLow(GPIOD, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2| GPIO_PIN_3|GPIO_PIN_4| GPIO_PIN_5)
#define shumaguan_U4_xianshi_1(ON_OFF) if(ON_OFF==ON)GPIO_WriteHigh(GPIOD, GPIO_PIN_1|GPIO_PIN_2);\
else GPIO_WriteLow(GPIOD, GPIO_PIN_1|GPIO_PIN_2)
//数码管显示“[]”亮/灭,多个I/O口同时组合使能,高电平点亮
#define shumaguan_U4_xianshi_fangkuang_zuoce(ON_OFF) if(ON_OFF==ON)GPIO_WriteHigh(GPIOD, GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);\
else GPIO_WriteLow(GPIOD, GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5)
#define shumaguan_U4_xianshi_fangkuang_shangxia(ON_OFF) if(ON_OFF==ON)GPIO_WriteHigh(GPIOD, GPIO_PIN_0|GPIO_PIN_3);\
else GPIO_WriteLow(GPIOD, GPIO_PIN_0|GPIO_PIN_3)
//各I/O口的引脚初始化
void GPIO_Config()
{
//数码管U4位选引脚 PC4-7(低电平亮) , 数码管显示引脚PD0-7 (高电平亮)初始化
GPIO_Init(GPIOC, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST); //初始化使数码管1-4默认为全选择状态
GPIO_Init(GPIOD, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2| GPIO_PIN_3|GPIO_PIN_4| GPIO_PIN_5|GPIO_PIN_6| GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST);
}
/****使用时,向下面这样ON/OFF就能让数码管亮/灭了
shumaguan_U4_1_shineng(ON);
shumaguan_U4_xianshi_0(ON);
shumaguan_U4_xianshi_0(OFF);
******/
虽然按照这种罗列的方式也能使数码管显示想要的图案,但是,太繁琐了,所以,我想学习一下各大佬优秀的方法。在此先感谢!
|