gpt4 book ai didi

c - 七段显示滚动

转载 作者:行者123 更新时间:2023-11-30 16:43:24 25 4
gpt4 key购买 nike

我正在使用 2 个级联移位寄存器对 SSD 显示器进行编码。我正在使用 mikroC 进行 PIC 编译器。我可以使用我的代码 Static Display of 4 Numbers 显示最多 4 位数字的静态数字序列

    #define SHIFT_CLOCK PORTB.F1    //Clock Connection of 74HC595 SSD Driver
#define SHIFT_LATCH PORTB.F3 //Latch Connection of 74HC595 SSD Driver
#define SHIFT_DATA PORTB.F2 //Data Connection of 74HC595 SSD Driver

char array4[4] = {6, 91, 79, 102}; //Display 1234 on SSD
char digit[4] = {0xFE, 0xFD, 0xFB, 0xF7}; //Switch on the SSD digits one by one

char i,j,temp,flag1,flag2;

void InitTimer0()
{
OPTION_REG = 0x86;
TMR0 = 6;
INTCON = 0xA0;
}

void latch595()
{
SHIFT_LATCH = 1;
Delay_us(1);
SHIFT_LATCH = 0;
}

void shiftdata595(unsigned char _shiftdata)
{
int i;
unsigned char temp;
temp = _shiftdata;
i=8;
while (i>0)
{
if (temp.F7==0)
{
SHIFT_DATA = 0;
}
else
{
SHIFT_DATA = 1;
}
temp = temp<<1;
SHIFT_CLOCK = 1;
SHIFT_CLOCK = 0;
i--;
}
}

void Interrupt()
{
if (TMR0IF_bit)
{
TMR0IF_bit = 0;
TMR0 = 6;
flag1 = 1;
flag2 = 1;
}
}

void main()
{
TRISB = 0;
TRISC.F1 = 1;
InitTimer0();
while (1)
{
if (PORTC.F1==0)
{
if (flag2==1)
{
shiftdata595(digit[i]);
i++;
if(i==4)
{
i=0;
}
if (flag1==1)
{
shiftdata595(array4[j]);
latch595();
j++;
if (j==4)
{
j=0;
}
}
}
}
else if(PORTC.F1==1)
{
shiftdata595(0);
shiftdata595(0);
latch595();
}
}
}

如果我向 array4[] 添加更多数字,例如最多 9 个,我将需要按顺序向左滚动数字。我尝试将数组移动

temp = array4[0];
for (n=1; n<8; n++)
{
array4[j-1] = array[j];
}
array[9] = temp;

我希望这段代码能够向左移动数组并且显示会滚动,但我得到的只是一个困惑的显示。如果我添加延迟,我可以看到数字正在显示,但没有滚动。

是基础算法有问题还是修改代码就可以使用?

最佳答案

我确实找出了我的代码的问题。循环是错误的。我在级联模式下使用两个 74HC595。一个控制数字(共阴极),另一个控制段。由于只有一根数据线将信息传递给数字和段,因此需要协调数字前进和段的时序。整个问题是我不必要地专注于协调的计时部分,但相反,我应该专注于循环条件,该循环条件推进段,然后左移数组。

friend 指出我需要在一张纸上写下每个循环的数据值,这解决了问题。我没有像 array4[8] 或 array4[10] 那样手动向循环提供数组的长度,而是使用 sizeof() 函数,然后在循环的前四次迭代之后,将数组左移一个位置。现在滚动效果完美。

这是更新后的工作代码,

shiftdata595(array4[tmp7]);
latch595();
Delay_ms(32);
tmp7++;
if (tmp7>=4)
{
tmp7=0;
tmp1 = sizeof(array4)/sizeof(array4[0]);
tmp2 = array4[0];
for (n=1;n<tmp1;n++)
{
array4[n-1] = array4[n];
}
array4[tmp1-1] = tmp2;
}

关于c - 七段显示滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45296235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com