# include"reg52.h"
# include"intrins.h"
# define uint unsigned int
# define uchar unsigned char
sbit DOUT=P3^7;
sbit CLK=P3^6;
sbit DIN=P3^4;
sbit CS=P3^5;
sbit PLSA=P2^2;
sbit PLSB=P2^3;
sbit PLSC=P2^4;
uchar disp[4];//定義數組 此數組用來存放緩沖數據
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x06,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void SPI_write(char dat)
{
uchar i;
CS=0;
CLK=0;
for(i=0;i<8;i++)
{
DIN=dat>>7;//放入最高位
dat<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
}
uint SPI_read(void)
{
uint i,dat=0;
CLK=0;
for(i=0;i<12;i++)
{
dat<<=1;
CLK=1;
CLK=0;
dat|=DOUT;
}
return dat;
}
uint AD_read(uchar cmd)
{
uchar i;
uint AD_Value;
CLK=0;
CS=0;
SPI_write(cmd);
for(i=6;i>0;i--);
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
AD_Value=SPI_read();
CS=1;
return AD_Value;
}
void delayxms(uint xms)
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void datapros()
{
uint temp;
static uchar i;
if(i==50)
{
i=0;
temp=AD_read(0x94);
}
i++;
disp[3]=table[temp/1000];
disp[2]=table[temp%1000/100];
disp[1]=table[temp%1000%100/10];
disp[0]=table[temp%1000%100%10];
}
void display()
{
uint i;
for(i=0;i<4;i++)
{
switch(i)
{
case(0):PLSA=0;PLSB=0;PLSC=0;
break;
case(1):PLSA=0;PLSB=0;PLSC=1;
break;
case(2):PLSA=0;PLSB=1;PLSC=0;
break;
case(3):PLSA=0;PLSB=1;PLSC=1;
break;
}
}
i=0;
P0=disp[i];
P0=0XFF;
delayxms(1);
}
void main()
{
while(1)
{
datapros();//數據處理函數
display(); //顯示函數
}
}
|