|
這是程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dispbitcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar dispbuf[4];
uint i,j,getdata,temp;
uchar k=1;
sbit ST=P2^3;
sbit OE=P2^0;
sbit EOC=P2^2;
sbit adda=P2^4;
sbit addb=P2^5;
sbit addc=P2^6;
sbit seg0=P1^7;
sbit seg1=P3^2;
sbit seg2=P3^3;
sbit seg3=P3^4;
sbit seg4=P3^5;
sbit key1=P3^1;
void Delay(uint i);
void Display();
void key(void);
void key()
{
if(key1==0)
{
Delay(30);//按鍵消抖
while(key1==0);//判斷是否真的消抖
k++;
if(k>=9)
k=1;
}
}
void adc0809()
{
ST=0; // 初始化時
OE=0; //使ST和OE信號全為低電平
ST=1; //ST 為轉換啟動信號。當ST 上跳沿時,所有內部寄存器清零;
ST=0; // ST下跳沿時,開始進行A/D 轉
/*選擇通道*/
{
if(k==1)
{
adda=0;
addb=0;
addc=0;
}
if(k==2)
{
adda=1;
addb=0;
addc=0;
}
if(k==3)
{
adda=0;
addb=1;
addc=0;
}
if(k==4)
{
adda=1;
addb=1;
addc=0;
}
if(k==5)
{
adda=0;
addb=0;
addc=1;
}
if(k==6)
{
adda=1;
addb=0;
addc=1;
}
if(k==7)
{
adda=0;
addb=1;
addc=1;
}
if(k==8)
{
adda=1;
addb=1;
addc=1;
}
}
while(EOC==0); //當EOC 為高電平時,表明轉換結束
OE=1; //OE=1,輸出轉換得到的數據
getdata=P0;
OE=0; //輸出數據線呈高阻狀態
}
void main()
{
while(1)
{
key();
{
adc0809();
temp=getdata*1.0/255*500;
dispbuf[0]=temp%10; //個位數據
dispbuf[1]=temp/10%10; //十位
dispbuf[2]=temp/100; //百位
dispbuf[3]=k;//0809輸入端口顯示位
Display(); //顯示函數
}
}
}
void Delay(uint i)
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++);
}
}
void Display()
{
P1=dispbitcode[dispbuf[3]];//端口顯示位+第一管口亮
seg0=0;
seg1=0;
seg2=0;
seg3=0;
seg4=1;
Delay(10);
P1=0xff;
P1=dispbitcode[dispbuf[0]];//個位+第四管口亮
seg1=1;
seg2=0;
seg3=0;
seg4=0;
Delay(10);
P1=0xff;
P1=dispbitcode[dispbuf[1]];//十位+第三管口亮
seg1=0;
seg2=1;
seg3=0;
seg4=0;
Delay(10);
P1=0xff;
P1=dispbitcode[dispbuf[2]];//百位+第二管口亮
seg1=0;
seg2=0;
seg3=1;
seg4=0;
Delay(10);
P1=0xff;
}
|
|