各位大侠 问你个问题 下边的这段程序是郭天祥老师在讲A/D时课本的例子(我只是变了变变量) 有几个地方很迷糊。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit adwr=P3^6;
sbit adrd=P3^7;
uchar i,j,bai,shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar,uchar,uchar);
void delay(uint);
void main()
{
wela=1;
P0=0x7f;
wela=0;
while(1)
{
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
for(i=10;i>0;i--)
{
display(bai,shi,ge); 今天我把for这布去了,把display(bai,shi,ge); 放在了大循环的最底下,效果只是数有的地方闪烁,这个for究竟嘛意思啊
}
P1=0xff; 这一步是什么意思呢 去了效果一样啊。为什么A/D数据在P1口输出,小灯不亮呢
adrd=1;
_nop_();
adrd=0;
_nop_();
j=P1; 这个j读出来是二进制数,为什么能进行下边的求模,求余,运算呢
adrd=1;
bai=j/100;
shi=j%100/10;
ge=j%10;
}
}
void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delay(5);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
} |