跪求大神帮忙改一下
时间:10-02
整理:3721RD
点击:
跪求大神们,考试要用,跪求啊!帮我改一下程序,改成四位数码管显示, 千位是显示测试第几个电压,后面3位显示电压是多少 按键按下才开始显示,按键按几下表示显示第几个,谢谢各位大神了!单片机用的是AT89C51+ADC0809
#include<reg51.h>
#define DIS_PORT P1
#define DATA_PORT P0
#define CH_AD P2
//sbit ADDA=P2^0;
//sbit ADDB=P2^1;
//sbit ADDC=P2^2;
sbit OE=P3^4;
sbit ALE=P3^5;
sbit ST=P3^6; /
unsigned char ad_ave=0,ad_val[10],ad_ch=0,ad_ch1=0,ad_cnt=0
bit tx_flag=0,ch_flag=0;
code unsigned char table[10]=
{0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
unsigned char val_rxd;
void com_init(void);
void com_int(void);
void get_ad_val(void);
void change_ch(void);
unsigned char lvbo(void);
main()
{
IT0=1;
IT1=1;
com_init();
IE|=0x85;
OE=0;
ST=0;
ST=1;
ALE=0;
CH_AD=(CH_AD&0xf8)|ad_ch;
ALE=1;
ST=0;
while(1)
{
DIS_PORT=table[ad_ch];
}
}
void change_ch(void) interrupt 0
{
ad_ch++;
if(ad_ch==8)
{
ad_ch=0;
}
ad_cnt=0;
ch_flag=1;
SBUF=ad_ch;
tx_flag=1;
}
void get_ad_val(void) interrupt 2
{
if(ch_flag!=1)
{
OE=1;
ad_val[ad_cnt]=DATA_PORT;
if(ad_cnt++>=9)
{
ad_cnt=0;
ad_ch1=ad_ch;
ad_ave=lvbo();
if(tx_flag&&ad_ch1==ad_ch)
{
SBUF=ad_ave;
tx_flag=0;
}
}
OE=0;
}
else
{
ch_flag=0;
}
ST=0;
ST=1;
ALE=0;
CH_AD=(CH_AD&0)|ad_ch;
ALE=1;
ST=0;
}
void com_init(void)
{
TMOD = 0x20;
TH1 = 0xF3;
TL1 = 0xF3;
SCON = 0x50;
PCON|= 0x80;
ES=1;
TR1=1;
}
void com_int(void) interrupt 4
{
if(RI)
{
RI=0;
ad_ch=SBUF;
ad_cnt=0;
ch_flag=1;
SBUF=ad_ch;
tx_flag=1;
}
else
{
TI=0;
}
}
unsigned char lvbo(void)
{
unsigned char i,adz,ad_min=255,ad_max=0;
unsigned int sum=0;
for(i=0;i<10;i++)
{
sum=sum+ad_val[i];
if(ad_min>ad_val[i])
{
ad_min=ad_val[i];
}
if(ad_max<ad_val[i])
{
ad_max=ad_val[i];
}
}
adz=(sum-ad_min-ad_max)/8;
return(adz);
}
#include<reg51.h>
#define DIS_PORT P1
#define DATA_PORT P0
#define CH_AD P2
//sbit ADDA=P2^0;
//sbit ADDB=P2^1;
//sbit ADDC=P2^2;
sbit OE=P3^4;
sbit ALE=P3^5;
sbit ST=P3^6; /
unsigned char ad_ave=0,ad_val[10],ad_ch=0,ad_ch1=0,ad_cnt=0
bit tx_flag=0,ch_flag=0;
code unsigned char table[10]=
{0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
unsigned char val_rxd;
void com_init(void);
void com_int(void);
void get_ad_val(void);
void change_ch(void);
unsigned char lvbo(void);
main()
{
IT0=1;
IT1=1;
com_init();
IE|=0x85;
OE=0;
ST=0;
ST=1;
ALE=0;
CH_AD=(CH_AD&0xf8)|ad_ch;
ALE=1;
ST=0;
while(1)
{
DIS_PORT=table[ad_ch];
}
}
void change_ch(void) interrupt 0
{
ad_ch++;
if(ad_ch==8)
{
ad_ch=0;
}
ad_cnt=0;
ch_flag=1;
SBUF=ad_ch;
tx_flag=1;
}
void get_ad_val(void) interrupt 2
{
if(ch_flag!=1)
{
OE=1;
ad_val[ad_cnt]=DATA_PORT;
if(ad_cnt++>=9)
{
ad_cnt=0;
ad_ch1=ad_ch;
ad_ave=lvbo();
if(tx_flag&&ad_ch1==ad_ch)
{
SBUF=ad_ave;
tx_flag=0;
}
}
OE=0;
}
else
{
ch_flag=0;
}
ST=0;
ST=1;
ALE=0;
CH_AD=(CH_AD&0)|ad_ch;
ALE=1;
ST=0;
}
void com_init(void)
{
TMOD = 0x20;
TH1 = 0xF3;
TL1 = 0xF3;
SCON = 0x50;
PCON|= 0x80;
ES=1;
TR1=1;
}
void com_int(void) interrupt 4
{
if(RI)
{
RI=0;
ad_ch=SBUF;
ad_cnt=0;
ch_flag=1;
SBUF=ad_ch;
tx_flag=1;
}
else
{
TI=0;
}
}
unsigned char lvbo(void)
{
unsigned char i,adz,ad_min=255,ad_max=0;
unsigned int sum=0;
for(i=0;i<10;i++)
{
sum=sum+ad_val[i];
if(ad_min>ad_val[i])
{
ad_min=ad_val[i];
}
if(ad_max<ad_val[i])
{
ad_max=ad_val[i];
}
}
adz=(sum-ad_min-ad_max)/8;
return(adz);
}