降龙棍外接数码管记录贴
本帖最后由 zhange 于 2024-5-17 17:27 编辑1楼展示成果,待编辑成功了
主要是焊接没焊接好,焊接还是得练习
初步已经成功 下一步添加上网络对时。因为这个降龙棍没有3.3v,买的配件没到,这里先用电脑接出来的3.3v测试吧。。
添加上网络授时:已经实现网络授时
本帖最后由 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.测试完管脚如图:
第二步:焊上接线柱 开搞。。
第三步:接线测试焊接成果。。
我去我焊洛铁都关了,3脚没焊到一块。。。。。。。。
开开再来。。。。。。。。
焊完肉眼检查一下吧。。。
第四步:写程序。。。
先测试,先不上时间。。
#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;
}
}
测试通过。
第五步:写时间
用定时器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;
}
}
}
}
}
下载测试。出问题,带不动??????????显示的数码管多了第一位不显示。。。。。。
不是带不动,是焊接有链接到一块的地方。11脚和12脚连到一块了。。。。。。。。
本帖最后由 zhange 于 2024-5-17 10:23 编辑
第六部:扫面显示数码管
奶奶的焊接的不行 ,重新焊接个 不接板子了直接上线? 你这焊功还得练啊,这种直插件是很好焊的啊 第六步:又重新焊接了 成功了
//#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