本帖最后由 34af9uc 于 2021-12-26 00:40 编辑
https://www.bilibili.com/video/BV1ob4y1v794?share_source=copy_web
<iframe src="//player.bilibili.com/player.html?aid=635086293&bvid=BV1ob4y1v794&cid=468431639&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
/*************************联盛德W801显示188拼灯数码管**************************/
/*************************QQ:774145445*****************************************/
/*************************快手:共同学习STM8************************************/
/*************************CSKY Development Kit_2.10.1**************************/
/******************************************************************************/ //188显示屏
// 显示屏LED2353/188
// _2A_ ____
// 1A 2F 2B | |
// | | | | |
// -2G- ----
// | 2E 2C | | 0/ 4A
// | |_2D_| |____| /0 4B
// @1 @2 @3 @4 @5
// ____________________________
// |_1_|_高_|_3A_|_3C_|_3E_|____|
// |_2_|_3B_|_高_|_2A_|_1B_|_4B_|
// |_3_|_3D_|_2B_|_高_|_1A_|_4A_|
// |_4_|_3F_|_2D_|_2C_|_高_|____|
// |_5_|_3G_|_2E_|_2F_|_2G_|_高_|
//共阳:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90//0x88,0x83,0xc6,0xa1,0x86,0x8e
//共阴:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f//0x77,0x7c,0x39,0x5e,0x79,0x71
/******************************************************************************/ //掩码定义
#define wei0 0b00000000000000000000000000000001
#define wei1 0b00000000000000000000000000000010
#define wei2 0b00000000000000000000000000000100
#define wei3 0b00000000000000000000000000001000
#define wei4 0b00000000000000000000000000010000
#define wei5 0b00000000000000000000000000100000
#define wei6 0b00000000000000000000000001000000
#define wei7 0b00000000000000000000000010000000
#define wei8 0b00000000000000000000000100000000
#define wei9 0b00000000000000000000001000000000
#define wei10 0b00000000000000000000010000000000
#define wei11 0b00000000000000000000100000000000
#define wei12 0b00000000000000000001000000000000
#define wei13 0b00000000000000000010000000000000
#define wei14 0b00000000000000000100000000000000
#define wei15 0b00000000000000001000000000000000
#define wei16 0b00000000000000010000000000000000
#define wei17 0b00000000000000100000000000000000
#define wei18 0b00000000000001000000000000000000
#define wei19 0b00000000000010000000000000000000
#define wei20 0b00000000000100000000000000000000
#define wei21 0b00000000001000000000000000000000
#define wei22 0b00000000010000000000000000000000
#define wei23 0b00000000100000000000000000000000
#define wei24 0b00000001000000000000000000000000
#define wei25 0b00000010000000000000000000000000
#define wei26 0b00000100000000000000000000000000
#define wei27 0b00001000000000000000000000000000
#define wei28 0b00010000000000000000000000000000
#define wei29 0b00100000000000000000000000000000
#define wei30 0b01000000000000000000000000000000
#define wei31 0b10000000000000000000000000000000
#define bit1 0b00000001
#define bit2 0b00000010
#define bit3 0b00000100
#define bit4 0b00001000
#define bit5 0b00010000
#define bit6 0b00100000
#define bit7 0b01000000
#define bit8 0b10000000
/******************************************************************************/ //指针定义
#define GPIOA_DATA (*(volatile unsigned int*)(0x40011200+0x0000))
#define GPIOA_DATA_EN (*(volatile unsigned int*)(0x40011200+0X0004))
#define GPIOA_DIR (*(volatile unsigned int*)(0x40011200+0X0008))
#define GPIO_AF_SEL (*(volatile unsigned int*)(0x40011200+0X0010))
#define GPIOB_DATA (*(volatile unsigned int*)(0x40011400+0x0000))
#define GPIOB_DATA_EN (*(volatile unsigned int*)(0x40011400+0X0004))
#define GPIOB_DIR (*(volatile unsigned int*)(0x40011400+0X0008))
/******************************************************************************/ //引脚定义
//led高//led低//led高阻
#define led1_gao GPIOA_DIR |=wei5; GPIOA_DATA |=wei5
#define led1_di GPIOA_DIR |=wei5; GPIOA_DATA &=~wei5
#define led1_gaozu GPIOA_DIR &=~wei5
#define led2_gao GPIOA_DIR |=wei4; GPIOA_DATA |=wei4
#define led2_di GPIOA_DIR |=wei4; GPIOA_DATA &=~wei4
#define led2_gaozu GPIOA_DIR &=~wei4
#define led3_gao GPIOA_DIR |=wei3; GPIOA_DATA |=wei3
#define led3_di GPIOA_DIR |=wei3; GPIOA_DATA &=~wei3
#define led3_gaozu GPIOA_DIR &=~wei3
#define led4_gao GPIOA_DIR |=wei2; GPIOA_DATA |=wei2
#define led4_di GPIOA_DIR |=wei2; GPIOA_DATA &=~wei2
#define led4_gaozu GPIOA_DIR &=~wei2
#define led5_gao GPIOA_DIR |=wei1; GPIOA_DATA |=wei1
#define led5_di GPIOA_DIR |=wei1; GPIOA_DATA &=~wei1
#define led5_gaozu GPIOA_DIR &=~wei1
/******************************************************************************/
void xianshi(); //显示
void xianshi_jisuan(); //显示计算
void xianshi_qumo(); //显示取模
void yanshi(); //延时
/******************************************************************************/
volatile unsigned char xianshi_a1; //显示总数据
volatile unsigned char xianshi_b1,xianshi_b2,xianshi_b3; //显示百位,十位,个位
volatile unsigned char xianshi_c1,xianshi_c2,xianshi_c3,xianshi_c4; //字模百位,字模十位,字模个位,%
volatile unsigned char led_zimo[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x00,0x40,0x79,0x50}; //0-9,10不显,11-,12E,13r
/******************************************************************************/
int main(void)
{
unsigned char a1;
//GPIOA_DATA_EN |=wei5+wei4+wei3+wei2+wei1; //IO使能
GPIO_AF_SEL &=~(wei5+wei4+wei3+wei2+wei1); //关闭复用功能
/******************************************************************************/
xianshi_a1 =111;
//xianshi_jisuan();
//xianshi_qumo();
//xianshi();
while(1)
{
xianshi_c1 =1;
xianshi_c2 =0;
xianshi_c3 =0;
xianshi_c4 =0;
for(a1=80;a1>0;a1--) xianshi(); //1
xianshi_c1 =1;
xianshi_c2 =0x30;
xianshi_c3 =0;
xianshi_c4 =0;
for(a1=10;a1>0;a1--) xianshi(); //1.5
xianshi_c1 =0;
xianshi_c2 =0x30;
xianshi_c3 =0;
xianshi_c4 =0;
for(a1=15;a1>0;a1--) xianshi(); //2
xianshi_c1 =0;
xianshi_c2 =0x49|0x30;
xianshi_c3 =0;
xianshi_c4 =0;
for(a1=10;a1>0;a1--) xianshi(); //2.5
xianshi_c1 =0;
xianshi_c2 =0x49;
xianshi_c3 =0;
xianshi_c4 =0;
for(a1=20;a1>0;a1--) xianshi(); //3
xianshi_c1 =0;
xianshi_c2 =0x06|0x49;
xianshi_c3 =0;
xianshi_c4 =0;
for(a1=15;a1>0;a1--) xianshi(); //3.5
xianshi_c1 =0;
xianshi_c2 =0x06;
xianshi_c3 =0;
xianshi_c4 =0;
for(a1=25;a1>0;a1--) xianshi(); //4
xianshi_c1 =0;
xianshi_c2 =0x06;
xianshi_c3 =0x30;
xianshi_c4 =0;
for(a1=25;a1>0;a1--) xianshi(); //4.5
xianshi_c1 =0;
xianshi_c2 =0;
xianshi_c3 =0x30;
xianshi_c4 =0;
for(a1=30;a1>0;a1--) xianshi();
xianshi_c1 =0;
xianshi_c2 =0;
xianshi_c3 =0x49;
xianshi_c4 =0;
for(a1=30;a1>0;a1--) xianshi();
xianshi_c1 =0;
xianshi_c2 =0;
xianshi_c3 =0x06;
xianshi_c4 =0;
for(a1=30;a1>0;a1--) xianshi();
xianshi_c1 =0;
xianshi_c2 =0;
xianshi_c3 =0;
xianshi_c4 =1;
for(a1=50;a1>0;a1--) xianshi();
}
return 0;
}
/******************************************************************************/
//百位xianshi_c1,十位xianshi_c2,个位xianshi_c3
void xianshi() //显示
{
//--------------------------------------------------//第一种
led1_gao; //第一种3A,3C,3E
//led1_gaozu; //不亮
led2_gaozu; //不亮
led3_gaozu; //不亮
led4_gaozu; //不亮
led5_gaozu; //不亮
if(0) {led1_di;} //第一种
if(xianshi_c3 &bit1){led2_di;} //3A
if(xianshi_c3 &bit3){led3_di;} //3C
if(xianshi_c3 &bit5){led4_di;} //3E
if(0) {led5_di;} //无
yanshi();
//--------------------------------------------------//第二种
led2_gao; //第二种3B,2A,1B,4B
led1_gaozu; //不亮
//led2_gaozu; //不亮
led3_gaozu; //不亮
led4_gaozu; //不亮
led5_gaozu; //不亮
if(xianshi_c3 &bit2){led1_di;} //3B
if(0) {led2_di;} //第二种
if(xianshi_c2 &bit1){led3_di;} //2A
if(xianshi_c1 &bit1){led4_di;} //1B
if(xianshi_c4 &bit1){led5_di;} //4B%
yanshi();
//--------------------------------------------------//第三种
led3_gao; //第三种3D,2B,1A,4A
led1_gaozu; //不亮
led2_gaozu; //不亮
//led3_gaozu; //不亮
led4_gaozu; //不亮
led5_gaozu; //不亮
if(xianshi_c3 &bit4){led1_di;} //3D
if(xianshi_c2 &bit2){led2_di;} //2B
if(0) {led3_di;} //第三种
if(xianshi_c1 &bit1){led4_di;} //1A
if(xianshi_c4 &bit1){led5_di;} //4A%
yanshi();
//--------------------------------------------------//第四种
led4_gao; //第四种3F,2D,2C
led1_gaozu; //不亮
led2_gaozu; //不亮
led3_gaozu; //不亮
//led4_gaozu; //不亮
led5_gaozu; //不亮
if(xianshi_c3 &bit6){led1_di;} //3F
if(xianshi_c2 &bit4){led2_di;} //2D
if(xianshi_c2 &bit3){led3_di;} //2C
if(0) {led4_di;} //第四种
if(0) {led5_di;} //无
yanshi();
//--------------------------------------------------//第五种
led5_gao; //第五种3G,2E,2F,2G
led1_gaozu; //不亮
led2_gaozu; //不亮
led3_gaozu; //不亮
led4_gaozu; //不亮
//led5_gaozu; //不亮
if(xianshi_c3 &bit7){led1_di;} //3G
if(xianshi_c2 &bit5){led2_di;} //2E
if(xianshi_c2 &bit6){led3_di;} //2F
if(xianshi_c2 &bit7){led4_di;} //2G
if(0) {led5_di;} //第五种
yanshi();
//--------------------------------------------------//
}
/******************************************************************************/
//计算出百位xianshi_b1,十位xianshi_b2,个位xianshi_b3
void xianshi_jisuan() //显示计算
{
char xianshi_b0; //临时传递参数
xianshi_b0 =xianshi_a1;
/*
if(xianshi_b0<0) //负数显示
{
if(xianshi_b0 <-9) //小于9无法显示
{
xianshi_b1 =0; //不显示
xianshi_b2 =10; //显示-(-E)
xianshi_b3 =10; //显示E(-E)
return;
}
else //最大只能显示-9
{
xianshi_b0 =~xianshi_b0; //取反变正数
xianshi_b0 +=1; //加1
xianshi_b1 =0; //-1不显示
xianshi_b2 =10; //显示-
xianshi_b3 =xianshi_b0; //显示(-1到-9)
return;
}
}
*/
if(xianshi_b0 >199) //大于199显示Er
{
xianshi_b1 =0; //不显示
xianshi_b2 =11; //大于9显示E(Er)
xianshi_b3 =11; //大于9显示r(Er)
return;
}
xianshi_b1 =xianshi_b0/100; //计算百位
xianshi_b2 =(xianshi_b0%100)/10; //计算十位
xianshi_b3 =xianshi_b0%10; //计算个位
//return;
}
/******************************************************************************/
//取模百位xianshi_c1,十位xianshi_c2,个位xianshi_c3
//led_zimo[]0-9,10不显,11-,12E,13r
void xianshi_qumo() //显示取模
{
if(xianshi_b1==1) //百位
{
xianshi_c1 =1; //显示百位1
}
else
{
xianshi_c1 =0; //不显示
}
if(xianshi_b2 >9) //十位
{
if(xianshi_b2 ==10) //10显示-
{
xianshi_c2 =led_zimo[11];
}
if(xianshi_b2 ==11) //11显示E
{
xianshi_c2 =led_zimo[12];
}
}
else
{
xianshi_c2 =led_zimo[xianshi_b2]; //十位字模
}
if(xianshi_b3 >9) //个位
{
if(xianshi_b3 ==10) //显示E
{
xianshi_c3 =led_zimo[12];
}
if(xianshi_b3 ==11) //显示r
{
xianshi_c3 =led_zimo[13];
}
}
else
{
xianshi_c3 =led_zimo[xianshi_b3]; //个位字模
}
}
/******************************************************************************/
void yanshi() //延时
{
volatile unsigned int x,y;
for(x=100,x>0;x--;)
for(y=200;y>0;y--);
}
/******************************************************************************/
/******************************************************************************/
|