打印

W801流水灯圣诞

[复制链接]
689|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
34af9uc|  楼主 | 2021-12-26 00:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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--);
}
/******************************************************************************/
/******************************************************************************/


w801_liushui_2.zip

33.59 KB

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

305

主题

466

帖子

63

粉丝