当前位置: 代码迷 >> 单片机 >> ~用138译码器显示1234四位数在四位的数码管下,咋就只在一个数码管下显示呢?
  详细解决方案

~用138译码器显示1234四位数在四位的数码管下,咋就只在一个数码管下显示呢?

热度:79   发布时间:2016-04-28 15:40:44.0
求助~~急急急~~~用138译码器显示1234四位数在四位的数码管上,咋就只在一个数码管上显示呢??
#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里面的问题。另外你没有贴硬件图,所以没法告诉你哪个位置出了问题。

用示波器分析下硬件。片选的问题。
------其他解决方案--------------------
这个得根据你的电路来看哦
------其他解决方案--------------------
引用:
这个得根据你的电路来看哦

怎么讲??

------其他解决方案--------------------
引用:
如果在进行C编译的时候,选择了程序优化选项参数-O,则delay1ms(500);可能被优化掉了;
检查一下编译选项参数,取消掉-O再试试。
 
实用的程序肯定不会采用延时的作法,而是采用定时器中断的做法,每500毫秒定时中断一次,切换显示的数码管。
我只想让它动态显示,可是总是不行,求原因~~~~