怎么实现数码管动态动态扫描显示(同时显示不同的数字)?以下程序只能一次显示一个数字。
发布网友
发布时间:2022-04-29 17:15
我来回答
共2个回答
热心网友
时间:2023-10-22 15:36
很容易,首先假如我们有6位数码管,每位数码管需要8个段选1个公共选通端, 那么6位数码管自然是8位端选信号 6位选通信号(分别选通1-6其中的一个数码管)
#define SMG_WEI P0 //P1.0 -P1.5 分别驱动数码管选通
#define SMG_DUAN P1 //P1.0 -P1.7接数码管8个段选
unsigned char smgcode[]={x,x,x,x,x,x,x,x,x,x} //对应数码管0-9的值,实际根据段信号确定
void Delay(unsigned long w)
{
while(w--);
}
void DisPlay(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的数码管需要显示的数字
{
SMG_WEI =0x01 //第1个数码管选通 000001
SMG_DUAN =smgcode[s1]; //如s1传入1表示要显示1,那么直接调用数组偏移量为1的值,显示1
Delay(100); //延时一段时间消影
SMG_WEI =0x02 //第2个数码管选通 000010
SMG_DUAN =smgcode[s2]; //如s2传入2表示要显示2,那么直接调用数组偏移量为2的值,显示2
Delay(100); //延时一段时间消影
S3 /////
S4 /////
S5 //////
SMG_WEI =0x20 //第6个数码管选通 100000
SMG_DUAN =smgcode[s6]; //如s6传入6表示要显示6,那么直接调用数组偏移量为6的值,显示6
Delay(100); //延时一段时间消影
SMG_WEI =0;
SMG_DUAN =0; //清除显示,保证每位数码管亮度一致
}
void main()
{
while(1)
{
DisPlay(1,2,3,4,5,6);//数码管显示 1 2 3 4 5 6
}
}
热心网友
时间:2023-10-22 15:36
是扫描频率太低了,人眼能够分辨出来,所以只看到一位数字在显示。你试试把主程序delay(50000);的时间改短一点,慢慢调试,总能成功的。
热心网友
时间:2023-10-22 15:36
很容易,首先假如我们有6位数码管,每位数码管需要8个段选1个公共选通端, 那么6位数码管自然是8位端选信号 6位选通信号(分别选通1-6其中的一个数码管)
#define SMG_WEI P0 //P1.0 -P1.5 分别驱动数码管选通
#define SMG_DUAN P1 //P1.0 -P1.7接数码管8个段选
unsigned char smgcode[]={x,x,x,x,x,x,x,x,x,x} //对应数码管0-9的值,实际根据段信号确定
void Delay(unsigned long w)
{
while(w--);
}
void DisPlay(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的数码管需要显示的数字
{
SMG_WEI =0x01 //第1个数码管选通 000001
SMG_DUAN =smgcode[s1]; //如s1传入1表示要显示1,那么直接调用数组偏移量为1的值,显示1
Delay(100); //延时一段时间消影
SMG_WEI =0x02 //第2个数码管选通 000010
SMG_DUAN =smgcode[s2]; //如s2传入2表示要显示2,那么直接调用数组偏移量为2的值,显示2
Delay(100); //延时一段时间消影
S3 /////
S4 /////
S5 //////
SMG_WEI =0x20 //第6个数码管选通 100000
SMG_DUAN =smgcode[s6]; //如s6传入6表示要显示6,那么直接调用数组偏移量为6的值,显示6
Delay(100); //延时一段时间消影
SMG_WEI =0;
SMG_DUAN =0; //清除显示,保证每位数码管亮度一致
}
void main()
{
while(1)
{
DisPlay(1,2,3,4,5,6);//数码管显示 1 2 3 4 5 6
}
}
热心网友
时间:2023-10-22 15:36
是扫描频率太低了,人眼能够分辨出来,所以只看到一位数字在显示。你试试把主程序delay(50000);的时间改短一点,慢慢调试,总能成功的。
热心网友
时间:2023-10-22 15:36
很容易,首先假如我们有6位数码管,每位数码管需要8个段选1个公共选通端, 那么6位数码管自然是8位端选信号 6位选通信号(分别选通1-6其中的一个数码管)
#define SMG_WEI P0 //P1.0 -P1.5 分别驱动数码管选通
#define SMG_DUAN P1 //P1.0 -P1.7接数码管8个段选
unsigned char smgcode[]={x,x,x,x,x,x,x,x,x,x} //对应数码管0-9的值,实际根据段信号确定
void Delay(unsigned long w)
{
while(w--);
}
void DisPlay(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的数码管需要显示的数字
{
SMG_WEI =0x01 //第1个数码管选通 000001
SMG_DUAN =smgcode[s1]; //如s1传入1表示要显示1,那么直接调用数组偏移量为1的值,显示1
Delay(100); //延时一段时间消影
SMG_WEI =0x02 //第2个数码管选通 000010
SMG_DUAN =smgcode[s2]; //如s2传入2表示要显示2,那么直接调用数组偏移量为2的值,显示2
Delay(100); //延时一段时间消影
S3 /////
S4 /////
S5 //////
SMG_WEI =0x20 //第6个数码管选通 100000
SMG_DUAN =smgcode[s6]; //如s6传入6表示要显示6,那么直接调用数组偏移量为6的值,显示6
Delay(100); //延时一段时间消影
SMG_WEI =0;
SMG_DUAN =0; //清除显示,保证每位数码管亮度一致
}
void main()
{
while(1)
{
DisPlay(1,2,3,4,5,6);//数码管显示 1 2 3 4 5 6
}
}
热心网友
时间:2023-10-22 15:36
是扫描频率太低了,人眼能够分辨出来,所以只看到一位数字在显示。你试试把主程序delay(50000);的时间改短一点,慢慢调试,总能成功的。
热心网友
时间:2023-10-22 15:36
很容易,首先假如我们有6位数码管,每位数码管需要8个段选1个公共选通端, 那么6位数码管自然是8位端选信号 6位选通信号(分别选通1-6其中的一个数码管)
#define SMG_WEI P0 //P1.0 -P1.5 分别驱动数码管选通
#define SMG_DUAN P1 //P1.0 -P1.7接数码管8个段选
unsigned char smgcode[]={x,x,x,x,x,x,x,x,x,x} //对应数码管0-9的值,实际根据段信号确定
void Delay(unsigned long w)
{
while(w--);
}
void DisPlay(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的数码管需要显示的数字
{
SMG_WEI =0x01 //第1个数码管选通 000001
SMG_DUAN =smgcode[s1]; //如s1传入1表示要显示1,那么直接调用数组偏移量为1的值,显示1
Delay(100); //延时一段时间消影
SMG_WEI =0x02 //第2个数码管选通 000010
SMG_DUAN =smgcode[s2]; //如s2传入2表示要显示2,那么直接调用数组偏移量为2的值,显示2
Delay(100); //延时一段时间消影
S3 /////
S4 /////
S5 //////
SMG_WEI =0x20 //第6个数码管选通 100000
SMG_DUAN =smgcode[s6]; //如s6传入6表示要显示6,那么直接调用数组偏移量为6的值,显示6
Delay(100); //延时一段时间消影
SMG_WEI =0;
SMG_DUAN =0; //清除显示,保证每位数码管亮度一致
}
void main()
{
while(1)
{
DisPlay(1,2,3,4,5,6);//数码管显示 1 2 3 4 5 6
}
}
热心网友
时间:2023-10-22 15:36
是扫描频率太低了,人眼能够分辨出来,所以只看到一位数字在显示。你试试把主程序delay(50000);的时间改短一点,慢慢调试,总能成功的。
热心网友
时间:2023-10-22 15:36
很容易,首先假如我们有6位数码管,每位数码管需要8个段选1个公共选通端, 那么6位数码管自然是8位端选信号 6位选通信号(分别选通1-6其中的一个数码管)
#define SMG_WEI P0 //P1.0 -P1.5 分别驱动数码管选通
#define SMG_DUAN P1 //P1.0 -P1.7接数码管8个段选
unsigned char smgcode[]={x,x,x,x,x,x,x,x,x,x} //对应数码管0-9的值,实际根据段信号确定
void Delay(unsigned long w)
{
while(w--);
}
void DisPlay(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的数码管需要显示的数字
{
SMG_WEI =0x01 //第1个数码管选通 000001
SMG_DUAN =smgcode[s1]; //如s1传入1表示要显示1,那么直接调用数组偏移量为1的值,显示1
Delay(100); //延时一段时间消影
SMG_WEI =0x02 //第2个数码管选通 000010
SMG_DUAN =smgcode[s2]; //如s2传入2表示要显示2,那么直接调用数组偏移量为2的值,显示2
Delay(100); //延时一段时间消影
S3 /////
S4 /////
S5 //////
SMG_WEI =0x20 //第6个数码管选通 100000
SMG_DUAN =smgcode[s6]; //如s6传入6表示要显示6,那么直接调用数组偏移量为6的值,显示6
Delay(100); //延时一段时间消影
SMG_WEI =0;
SMG_DUAN =0; //清除显示,保证每位数码管亮度一致
}
void main()
{
while(1)
{
DisPlay(1,2,3,4,5,6);//数码管显示 1 2 3 4 5 6
}
}
热心网友
时间:2023-10-22 15:36
是扫描频率太低了,人眼能够分辨出来,所以只看到一位数字在显示。你试试把主程序delay(50000);的时间改短一点,慢慢调试,总能成功的。