zhange 发表于 2024-5-17 08:06:45

降龙棍外接数码管记录贴

本帖最后由 zhange 于 2024-5-17 17:27 编辑

1楼展示成果,待编辑成功了

主要是焊接没焊接好,焊接还是得练习

初步已经成功   下一步添加上网络对时。因为这个降龙棍没有3.3v,买的配件没到,这里先用电脑接出来的3.3v测试吧。。






添加上网络授时:已经实现网络授时





zhange 发表于 2024-5-17 08:12:23

本帖最后由 zhange 于 2024-5-17 08:23 编辑

第一步:数码管买了好久了,还没搞清楚管脚


客服给发的测试了一下不对,还得自己测试,已知:这确实是共阳的数码管

测试步骤:

1.找到5v或3.3v电源用杜邦线接出来 正极串上500欧姆电阻

2.正极接12管脚负极接1管脚以此接2.3.4.5.6.7.8.9.10.11看看亮不亮如果亮说明12是位码亮的哪里就是哪个位的

3.测试完管脚如图:



zhange 发表于 2024-5-17 08:23:23

第二步:焊上接线柱 开搞。。




zhange 发表于 2024-5-17 08:28:24

第三步:接线测试焊接成果。。


我去我焊洛铁都关了,3脚没焊到一块。。。。。。。。

开开再来。。。。。。。。

焊完肉眼检查一下吧。。。



zhange 发表于 2024-5-17 08:52:59

第四步:写程序。。。


先测试,先不上时间。。

#include "stc32g.h"

#include "intrins.h"


#definewei1 P34
#definewei2 P35
#definewei3 P36
#definewei4 P37

#defineduan P2


void main()
{
       
          WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

          P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
       
        while(1)
        {
                duan = 0;
        }
}


测试通过。



zhange 发表于 2024-5-17 09:19:19

第五步:写时间


用定时器0中断产生时间

//#include "shumaguan.h"

#include "stc32g.h"

#include "intrins.h"


#definewei1 P34
#definewei2 P35
#definewei3 P36
#definewei4 P37

#defineduan P2

unsigned char i,s,f,m,d;

unsigned char duanma = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};

void Timer0_Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x00;                                //设置定时初始值
        TH0 = 0x4C;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}


void Delay1000ms(void)        //@11.0592MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 2764798UL;
        while (i) i--;
}



void main()
{
       
          WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

          P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
                P3M0 = 0xf0; P3M1 = 0x00;   //p34 p35 36 37 设为推完

       
                EA = 1;                                        //CPU开放中断,打开总中断。
       
        while(1)
        {
                for(d=0;d<10;d++)
                {
                       
                        duan = duanma;
                        Delay1000ms();
                }
               
        }
}


void Timer0_Isr(void) interrupt 1
{
        i++;
        if(i==20)
        {
                m++;
                i=0;
                if(m==60)
                {
                        f++;
                        m=0;
                        if(f==60)
                        {
                                s++;
                                f=0;
                                if(s==24)
                                {
                                        s=0;
                                }
                        }
                }
        }
       
}


下载测试。出问题,带不动??????????显示的数码管多了第一位不显示。。。。。。

zhange 发表于 2024-5-17 09:38:35

不是带不动,是焊接有链接到一块的地方。11脚和12脚连到一块了。。。。。。。。

zhange 发表于 2024-5-17 10:19:20

本帖最后由 zhange 于 2024-5-17 10:23 编辑

第六部:扫面显示数码管

奶奶的焊接的不行    ,重新焊接个   不接板子了直接上线?

xxxevery 发表于 2024-5-17 12:36:25

你这焊功还得练啊,这种直插件是很好焊的啊

zhange 发表于 2024-5-17 13:56:50

第六步:又重新焊接了   成功了





//#include "shumaguan.h"

#include "stc32g.h"

#include "intrins.h"


#definewei1 P34
#definewei2 P35
#definewei3 P36
#definewei4 P37

#defineduan P2

int i;

unsigned char s,f,m,d;
unsigned char sg,ss,fg,fs;

unsigned char duanma = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//不带小数点
unsigned char duanma1 = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};//带小数点

void Timer0_Init(void)                //1000微秒@11.0592MHz
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0xCD;                                //设置定时初始值
        TH0 = 0xD4;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}


void Delay1000ms(void)        //@11.0592MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 2764798UL;
        while (i) i--;
}

void Delay1ms(void)        //@11.0592MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 2763UL;
        while (i) i--;
}

void Delay3ms(void)        //@11.0592MHz
{
        unsigned long edata i;

        _nop_();
        i = 8293UL;
        while (i) i--;
}


void Delay2us(void)        //@11.0592MHz
{
        unsigned long edata i;

        _nop_();
        i = 4UL;
        while (i) i--;
}


// 延时函数
void delay(unsigned char z)
{
    unsigned char x,y;
    for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}

void main()
{
       
       WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
   EAXFR = 1; //扩展寄存器(XFR)访问使能
   CKCON = 0; //提高访问XRAM速度

        P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
        P3M0 = 0xf0; P3M1 = 0x00;   //p34 p35 36 37 设为推完
        wei1 = 0;
        wei2 = 0;
        wei3 = 0;
        wei4 = 0;
        Timer0_Init();
        EA = 1;                                        //CPU开放中断,打开总中断。
        s = 13;
        f = 51;
        while(1)
        {
                wei1 = 1;
    P2 = duanma;// 显示对应的数字或字符,这里假设每个数码管显示的是其索引值
                Delay3ms();
                wei1 = 0;
               
               
                if(i<=500)
                {
                        wei2 = 1;
                        P2 = duanma;// 显示对应的数字或字符,这里假设每个数码管显示的是其索引值
                        Delay3ms();
                        wei2 = 0;                               
                }else if(i>500 &&i<1000)
                {
                        wei2 = 1;
                        P2 = duanma1;// 显示对应的数字或字符,这里假设每个数码管显示的是其索引值
                        Delay3ms();
                        wei2 = 0;       
                }
               
       
               

                wei3 = 1;
    P2 = duanma;// 显示对应的数字或字符,这里假设每个数码管显示的是其索引值
                Delay3ms();
                wei3 = 0;


                wei4 = 1;
    P2 = duanma;// 显示对应的数字或字符,这里假设每个数码管显示的是其索引值
                Delay3ms();
                wei4 = 0;               
//                wei1 = 1;
//                wei2 = 0;
//                wei3 = 0;
//                wei4 = 0;
//                P2 = duanma;       
//                Delay2us();
//                wei1 = 0;
//                wei2 = 1;
//                wei3 = 0;
//                wei4 = 0;

//                P2 = duanma;       

//               
//                Delay2us();
//                wei1 = 0;
//                wei2 = 0;
//                wei3 = 1;
//                wei4 = 0;
//                if(i<=10)
//                {
//                        P2 = duanma;
//                }else
//                {
//                        P2 = duanma1;
//                }
//               
//                Delay2us();
//                wei1 = 0;
//                wei2 = 0;
//                wei3 = 0;
//                wei4 = 1;
//                P2 = duanma;
//                Delay2us();
//               
//                P2 = 0xff;
//                Delay2us();
        }
}


void Timer0_Isr(void) interrupt 1
{
        i++;
        if(i==1000)
        {
                m++;
                i=0;
                if(m==60)
                {
                        f++;
                        m=0;
                        if(f==60)
                        {
                                s++;
                                f=0;
                                if(s==24)
                                {
                                        s=0;
                                }
                        }
                }
        }
       
}


代码简单
页: [1] 2
查看完整版本: 降龙棍外接数码管记录贴