大神给分析分析这个m的值是怎么变化的啊
时间:10-02
整理:3721RD
点击:
要求从左到右显示3位数字,可是这个代码我怎么分析都不对,但是运行的时候又没有错,
我分析啊
m赋初值0xfe,就是二进制码 11111110 (数码管是共阴的),进入for循环后首先进行了一次左移,所以我怎么看都是先显示第二位数码管,这个时候
i=0,显示的应该是百位的段码,即DSY_Buffer[0], 我这么分析对不,可是运行的时候完全没有错啊,求大神给分析分析
源代码如下
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar DSY_Buffer[3]={0,0,0};
void DelayMS(uint ms)
{
uchar t;
while(ms--)for(t=0;t<120;t++);
}
void main()
{
uchar i,m,Num;
P0=0xff;
P2=0xff;
while(1)
{
m=0xfe;
Num=P1;
DSY_Buffer[0]=Num/100;
DSY_Buffer[1]=Num/10%10;
DSY_Buffer[2]=Num%10;
for(i=0; i<3; i++)
{
m=_crol_(m,1);
P2=m;
P0=DSY_CODE[DSY_Buffer];
DelayMS(10);
}
}
}
附原理图
我分析啊
m赋初值0xfe,就是二进制码 11111110 (数码管是共阴的),进入for循环后首先进行了一次左移,所以我怎么看都是先显示第二位数码管,这个时候
i=0,显示的应该是百位的段码,即DSY_Buffer[0], 我这么分析对不,可是运行的时候完全没有错啊,求大神给分析分析
源代码如下
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar DSY_Buffer[3]={0,0,0};
void DelayMS(uint ms)
{
uchar t;
while(ms--)for(t=0;t<120;t++);
}
void main()
{
uchar i,m,Num;
P0=0xff;
P2=0xff;
while(1)
{
m=0xfe;
Num=P1;
DSY_Buffer[0]=Num/100;
DSY_Buffer[1]=Num/10%10;
DSY_Buffer[2]=Num%10;
for(i=0; i<3; i++)
{
m=_crol_(m,1);
P2=m;
P0=DSY_CODE[DSY_Buffer];
DelayMS(10);
}
}
}
附原理图
,加油加油!
顶贴一下
自己定啊^^^^^^^^^^^^^^^^^^^^^^^^^^