#include "reg51.h"
#include "absacc.h"
#define T0_H ((65536-5000)/256)//定时显示刷率
#define T0_L ((65536-5000)%256)
#define T1_H ((65536-1000)/256)//采样周期
#define T1_L ((65536-1000)%256)
unsigned char value[4];
unsigned char data ch=0;
unsigned char dch=0;
static int d,i,n,k=0;
unsigned int Adress;
unsigned char code seg_code[]={0xc0,0xF9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xF8,0x80,0x90,//5-9
0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E
0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,-
};
unsigned char bit_code[]={0x01,0x02,0x04,0x08};
void main()
{
IT1=1;EX1=1;
IT0=1;EX0=1;
TMOD=0x11;
TH0=T0_H; TL0=T0_L;
TH1=T1_H; TL1=T1_L;
ET0=1;ET1=1;TR0=1;TR1=1;
EA=1;
while(1);
}
void EX1_INT() interrupt 2
{
Adress=P2<<8;
Adress=Adress&0x7fff;
value[ch]=XBYTE[Adress];
ch++;
if(ch>3) ch=0;
}
//根据按键切换显示通道
void EX0_INT() interrupt 0
{dch++;
if (dch>3) dch=0;
}
//显示通道dch的AD转换值
void T0_INT() interrupt 1
{
TH0=T0_H; TL0=T0_L;
d=n%10;n=n/10;
P2=0;
P1=seg_code[d];
P2=bit_code[k];
k++;
if(n==0) {
n=value[dch];k=0;
}
}
//每隔20ms检测一个通道
void T1_INT() interrupt 3
{
Adress=P2<<8;
Adress=Adress&0x7fff;
XBYTE[Adress]=ch;
TH1=T1_H; TL1=T1_L;
}
- 1
- 2
前往页