
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rd=P3^7;
sbit wr=P3^6;
sbit cs0=P3^5;
sbit hc=P3^4;
void delay(uint );
void format0804();
void display(uchar aa );
unsigned char code table1[]= //共陽段碼控制
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned char code dispbit[8]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位選控制 查表的方法控制
uchar aa,adc0804;
void main()
{
//uint adc0804;
cs0=0;
P1=0xff;//為P1口讀取數據做準備,與P1口相連的某個引腳若為低,則P1相應位被拉低,
hc=1; //以此來讀取數據
while(1)
{
/*wr=1;
delay(1);
wr=0;
rd=1;
delay(1);
wr=1;
rd=0;
adc0804=P1;//根據時序DAC0804時序圖,只能在些讀取其輸出值
delay(1);
rd=1;
delay(1); */
format0804();
adc0804=P1; //在rd=0才能讀取P1口狀態,
display(adc0804);
}
}
void delay(uint z)
{
uint j;
for(z;z>0;z--)
for(j=110;j>0;j--);
}
void format0804()
{
wr=1;
//delay(1);
wr=0;
wr=1;//根據時序ADC0804時序圖,只有wr端存在上升沿就可讀取模擬值
rd=1;
//delay(1);
rd=0; //根據時序ADC0804時序圖,只有rd低電平時才能向外發送信號
//adc0804=P1;
//delay(1);
//rd=1;
}
void display(uchar aa)
{
uchar ledout[10],i;
ledout[0]=table1[aa%10000/1000]; //千位
ledout[1]=table1[aa%1000/100]; //百位帶小數點
ledout[2]=table1[aa%100/10]; //十位
ledout[3]=table1[aa%10]; //個位
for(i=0;i<4;i++)
{
P2=dispbit[i];//位選 先位選再段選
P0=ledout[i]; //段碼
delay(1);
}
}