#include <reg51.h>
#include <intrins.h>
sbit LS138A=P2^0;
sbit LS138B=P2^1;
sbit LS138C=P2^2;
char code disp_tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int ledout[4];
delay1ms(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void main()
{
int i;
int s=1234;
while(1)
{
ledout[0]=disp_tab[s%10];
ledout[1]=disp_tab[s/10%10];
ledout[2]=disp_tab[s/100%10];
ledout[3]=disp_tab[s/1000%10];
for(i=0;i<4;i++)
{
switch(i)
{
case 0:LS138A=0; LS138B=0; LS138C=0;P0=ledout[0]; break;
case 1:LS138A=1; LS138B=0; LS138C=0;P0=ledout[1]; break;
case 2:LS138A=0; LS138B=1; LS138C=0;P0=ledout[2]; break;
case 3:LS138A=1; LS138B=1; LS138C=0;P0=ledout[3];break;
}
delay1ms(500);
}
}
}
------最佳解决方案--------------------
如果在进行C编译的时候,选择了程序优化选项参数-O,则delay1ms(500);可能被优化掉了;
检查一下编译选项参数,取消掉-O再试试。
实用的程序肯定不会采用延时的作法,而是采用定时器中断的做法,每500毫秒定时中断一次,切换显示的数码管。
------其他解决方案--------------------
设想在4个数码管,实际上一个,那肯定是片选出了问题。就是case里面的问题。另外你没有贴硬件图,所以没法告诉你哪个位置出了问题。
用示波器分析下硬件。片选的问题。
------其他解决方案--------------------
这个得根据你的电路来看哦
------其他解决方案--------------------
怎么讲??
------其他解决方案--------------------
我只想让它动态显示,可是总是不行,求原因~~~~