问题遇到的现象和发生背景
编写程序,用4位共阳数码管动态显示“1234”这4个字符
遇到的现象和发生背景,请写出第一个错误信息
我自己敲得程序用不了,急着交,来不及修改,想要程序能用在这个电路里
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
所用的代码能够用到这个仿真电路里用的
“该回答引用ChatGPT”
可参考下面的方法,如果可行还请 点击 “采纳”,感谢支持!
#include <reg52.h>
sbit DIG1 = P2^0;
sbit DIG2 = P2^1;
sbit DIG3 = P2^2;
sbit DIG4 = P2^3;
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71};
unsigned char num[4] = {1, 2, 3, 4};
void delay(unsigned int t)
{
while (t--);
}
void main()
{
unsigned char i, j;
while (1)
{
for (i = 0; i < 4; i++)
{
switch (i)
{
case 0: DIG1 = 0; DIG2 = 1; DIG3 = 1; DIG4 = 1; break;
case 1: DIG1 = 1; DIG2 = 0; DIG3 = 1; DIG4 = 1; break;
case 2: DIG1 = 1; DIG2 = 1; DIG3 = 0; DIG4 = 1; break;
case 3: DIG1 = 1; DIG2 = 1; DIG3 = 1; DIG4 = 0; break;
}
P0 = table[num[i]];
delay(1000);
}
}
}
代码中,我们首先定义了 4 位数码管的控制引脚,并声明了一个存储数字字母编码的数组 table 和一个存储要显示的数字的数组 num。
然后,在 main 函数中,我们使用一个循环来遍历 num 数组中的数字,在循环内部,我们使用一个 switch 语句来控制单独激活当前数字对应的数码管。最后,我们将该数字的编码写入 P0 口,
如果使用树莓派或Arduino等单片机来编写程序,则可以实现。
在编写代码前,需要了解数码管的驱动原理,并安装对应的库文件。
以Arduino为例,实现方法如下:
定义数码管驱动芯片、数码管端口以及控制管脚。
定义4个数码管,并分别接入控制管脚。
定义字符“1234”对应的数字。
使用for循环,每次循环控制一个数码管显示一位字符,并延时一段时间。
重复循环,实现动态显示“1234”的效果。
以下是Arduino代码的示例:
#include <LedControl.h>
int dataPin=12;
int clkPin=11;
int csPin=10;
LedControl lc=LedControl(dataPin,clkPin,csPin,1);
void setup() {
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
}
void loop() {
for(int i=0;i<=3;i++)
{
lc.setDigit(0,i,i+1,false);
delay(500);
}
}
这是一个简单的代码示例,实际应用中可以根据需要进行修改。
可以嘗試運行以下代碼
以下是一个简单的例子,您可以使用它作为参考。请注意,这只是一个模拟
该回答引用ChatGPT,如果有帮助到您请点个采纳
#include <reg51.h>
#include <intrins.h>
sbit dig1 = P1^0;
sbit dig2 = P1^1;
sbit dig3 = P1^2;
sbit dig4 = P1^3;
unsigned char code table[] = {
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71
};
void delay_ms(unsigned int t)
{
while (t--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void display(unsigned char num, unsigned char pos)
{
switch (pos)
{
case 1:
dig1 = 0;
P0 = table[num];
dig1 = 1;
break;
case 2:
dig2 = 0;
P0 = table[num];
dig2 = 1;
break;
case 3:
dig3 = 0;
P0 = table[num];
dig3 = 1;
break;
case 4:
dig4 = 0;
P0 = table[num];
dig4 = 1;
break;
default:
break;
}
}
void main()
{
unsigned char i;
while (1)
{
for (i = 0; i < 4; i++)
{
display(i, i + 1);
delay_ms(5);
}
}
}