本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2;
uint temp;
uchar flag1;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//不带小数的0、1、2、3、4、5、6、7、8、9
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};
//带小数的0、1、2、3、4、5、6、7、8、9
void delay(uint count)
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
void dsreset(void)
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bit readbit(void)
{
uint i;
bit dat;
DS=0;i++;
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchar read(void)
{
uchar i,j,dat;
dat=0;
for(i=0;i<8;i++)
{
j=readbit();
dat=(j<<7)|(dat>>1);//这句是什么意思?j为何要左移7位dat右移一位之后 相与。有什么作用呢?
}
return(dat);
}
void writebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=0;j<8;j++)
{
testb=dat&0x01; //这句是什么意思
dat=dat>>1; //dat是存放在哪的?为何要右移
if(testb)
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
void change(void)
{
dsreset();
delay(1);
writebyte(0xcc);
writebyte(0x44);
}
uint tmp()
{
float tt;
uchar a,b;
dsreset();
delay(1);
writebyte(0xcc);
writebyte(0xbe);
a=read();
b=read();
temp=b;
temp<<=8;
temp=temp|a; //为何要和a相与它的结果是什么样的
tt=temp*0.0625;
temp=tt*10+0.5;
return temp;
}
void display(uint temp)
{
dula=0;
P0=table[temp/100];
dula=1;
dula=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
delay(1);
dula=0;
P0=table1[temp/10%10];
dula=1;
dula=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
delay(1);
P0=table[temp%100%10];
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
delay(1);
}
void main(void)
{
uchar a;
while(1)
{
change();
for(a=10;a>0;a--)
display(tmp());
}
} |