首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-03-26 
求助~~急急急~~~用138译码器显示1234四位数在四位的数码管上,咋就只在一个数码管上显示呢??#include reg5

求助~~急急急~~~用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里面的问题。另外你没有贴硬件图,所以没法告诉你哪个位置出了问题。

用示波器分析下硬件。片选的问题。

热点排行