微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 跪求大神帮忙改一下

跪求大神帮忙改一下

时间: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);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top