| adc用到两路,一路电压采集,一路电流采集,现象为单独用任何一路没问题,用到两路就不准,找了几天了,实在没辙,大家帮忙看下哪里出问题了万分感谢复制代码#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/pgmspace.h>
#include<util/delay.h>
#include<avr/wdt.h>
#define uint unsigned int
#define uchar unsigned char
#define rd1 PORTC|=0x01
#define rd0 PORTC&=0xfe
#define clk1 PORTD|=0x20
#define clk0 PORTD&=0xdf
#define sid1 PORTD|=0x40
#define sid0 PORTD&=0xbf
#define reset1 PORTD|=0x80
#define reset0 PORTD&=0x7f
#define cs1 PORTB|=0x01
#define cs0 PORTB&=0xfe
#define DS1 PORTC|=0x02
#define DS0 PORTC&=0xfd
#define j1 PORTC|=0x10
#define j0 PORTC&=0xef
uchar h,m,sz,cc;
uint r,u,i,n;
const prog_uchar hz[]={
0x10,0x0C,0x44,0x24,0x34,0x9C,0x45,0x36,0x44,0x8C,0x14,0x74,0x24,0x0C,0x04,0x00,
0x04,0x04,0x02,0x02,0xFD,0x44,0x44,0x44,0x44,0x44,0xFD,0x01,0x02,0x06,0x02,0x00,/*"容",0*/
0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,
0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00,/*"量",1*/
0x08,0x88,0x68,0xFF,0x28,0x48,0x10,0x48,0x44,0x43,0x44,0x48,0x50,0x10,0x10,0x00,
0x02,0x01,0x00,0x7F,0x00,0x20,0x22,0x2C,0x21,0x2E,0x30,0x28,0x27,0x22,0x20,0x00,/*"检",2*/
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,/*"测",3*/
0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,
0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,/*"中",4*/
0x80,0x40,0x20,0xF8,0x07,0x02,0x04,0x74,0x54,0x55,0x56,0x54,0x74,0x04,0x04,0x00,
0x00,0x00,0x00,0xFF,0x00,0x03,0x01,0x05,0x45,0x85,0x7D,0x05,0x05,0x05,0x03,0x00,/*"停",5*/
0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"止",6*/
0x10,0x94,0xF4,0x94,0xBF,0xD4,0x94,0x94,0x94,0x10,0xFF,0x10,0x94,0x18,0x10,0x00,
0x02,0x01,0xFF,0x4A,0x4A,0x7F,0x4A,0x4A,0x40,0x20,0x11,0x1E,0x33,0x41,0xE0,0x00,/*"截",7*/
0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,/*"电",8*/
0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,
0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00,/*"压",9*/
0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00,
0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00,/*"流",10*/
0x08,0x08,0xF8,0x49,0x4E,0xC8,0x88,0x40,0x38,0xCF,0x0A,0x08,0x88,0x78,0x08,0x00,
0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x40,0x20,0x10,0x0B,0x0E,0x31,0x60,0x20,0x00,/*"放",11*/
0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,/*"温",12*/
0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,/*"度",13*/
0x40,0x20,0xF8,0x17,0x82,0x80,0xBE,0xA2,0xA2,0xE2,0xA2,0xA2,0xBE,0x80,0x80,0x00,
0x00,0x00,0x7F,0x00,0x20,0x10,0x08,0x06,0x01,0x7F,0x03,0x0C,0x18,0x30,0x10,0x00,/*"保",14*/
0x00,0x10,0x10,0xFF,0x90,0x50,0x10,0x00,0xF8,0x89,0x8A,0x8E,0x88,0x88,0xF8,0x00,
0x02,0x42,0x81,0x7F,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"护",15*/
0x00,0x00,0x00,0xF8,0x48,0x48,0x48,0x49,0x4E,0x4A,0x48,0x48,0x48,0x78,0x00,0x00,
0x40,0x20,0x18,0x07,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,/*"启",16*/
0x20,0x24,0x24,0xE4,0x24,0x24,0x24,0x20,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,
0x08,0x1C,0x0B,0x08,0x0C,0x05,0x4E,0x24,0x10,0x0C,0x03,0x20,0x40,0x3F,0x00,0x00,/*"动",17*/
0x10,0x90,0x90,0xFF,0x90,0x90,0x10,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x10,0x00,
0x00,0x3F,0x10,0x10,0x10,0x5F,0x41,0x20,0x20,0x13,0x0C,0x13,0x20,0x60,0x20,0x00,/*"故",18*/
0x00,0xFE,0x22,0x5A,0x86,0x10,0xD2,0x56,0x5A,0x53,0x52,0x5A,0xD6,0x12,0x10,0x00,
0x00,0xFF,0x02,0x04,0x13,0x10,0x17,0x15,0x15,0xFD,0x15,0x15,0x17,0x10,0x10,0x00,/*"障",29*/
0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00,/*"℃",20*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",21*/
0x40,0x41,0xC6,0x00,0x00,0xFE,0x4A,0x4A,0xCA,0x4A,0x4A,0x7E,0x80,0x00,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x5F,0x48,0x44,0x40,0x41,0x42,0x4D,0x58,0x40,0x40,0x00,/*"退",22*/
0x00,0x00,0xFC,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,
0x00,0x00,0x7E,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7E,0x00,0x00,/*"出",23*/
0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00,/*"设",24*/
0x00,0x20,0x2F,0xA9,0xA9,0xAF,0xE9,0xB9,0xA9,0xAF,0xA9,0xA9,0x2F,0x20,0x00,0x00,
0x80,0x80,0x80,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0x80,0x80,0x80,0x00};/*"置",25*/
const prog_uchar zf[]={
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",1*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",3*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",4*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",6*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"U",10*/
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"I",11*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",12*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,/*"v",13*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,/*"a",14*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,/*"m",15*/
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"h",16*/
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,/*"P",17*/
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,/*"w",18*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",19*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*" ",20*/
ISR(INT0_vect)
{
        if((PIND&0x10)==0)
        sz++;
        else
        sz--;
}
void eepromxie(uint a,uchar b)
{
         EEAR=a;
        EEDR=b;
        SREG&=0x7f;
        EECR|=0x04;
        EECR|=0x02;
        while(EECR&0x02);
        SREG|=0x80;
}
uchar eepromdu(uint a)
{
         EEAR=a;
        EECR|=0x01;
        return EEDR; 
}
void LCD_WData(uchar a)
{
        uchar i,tmp;
        tmp=a;
        for(i=0;i<8;i++)
        {
                clk0;
                if(tmp&0x80)
                sid1;
                else sid0;        
                tmp=(tmp<<1);
                clk1;
        }
}
void TransData(uchar a,uchar b)
{
        cs0;
        clk1;
        if(b==0)
        rd0;
        else
        rd1;
        LCD_WData(a);
        cs1;
}        
void PageSet(uchar page,uchar column)
{
        uchar lsb,msb;
        lsb=column&0x0f;
        msb=column&0xf0;
        msb=msb>>4;
        msb=msb|0x10;    //列地址高四位,见指令表 4                  
        page=page|0xb0;  //oxb0=1011 0000 指令表 3 置页地址为 第page页                               
        TransData(page,0);
        TransData(msb,0);
        TransData(lsb,0);             
}
void Lcdclear(void)
{
         uchar i,j;
        cs0;
         for (i=0;i<8;i++) 
        {               
                          PageSet(i,0);
                for (j=0;j<132;j++)
                {                                                   
                        TransData(0,1);
                } 
          } 
    cs1;
}
void Lcdhz(uchar y,uchar x,uchar temp,uchar f)
{
    uchar i,z;
    PageSet(y,(x*16+3));
           for(i=0;i<16;i++) 
        {
        z=pgm_read_byte(hz+temp*32+i);
        if(f)
        z=~z;
                TransData(z,1); 
        }
        PageSet(y+1,(x*16+3));
           for(i=16;i<32;i++) 
        {
        z=pgm_read_byte(hz+temp*32+i);
        if(f)
        z=~z;
                TransData(z,1); 
        }
}
 void Lcdzf(uchar y,uchar x,uchar temp,uchar f)
{
    uchar i,z;
    PageSet(y,(x*8+3));
           for(i=0;i<8;i++) 
        {
        z=pgm_read_byte(zf+temp*16+i);
        if(f)
        z=~z;
                TransData(z,1); 
        }
        PageSet(y+1,(x*8+3));
           for(i=8;i<16;i++) 
        {
        z=pgm_read_byte(zf+temp*16+i);
        if(f)
        z=~z;
                TransData(z,1); 
        }
}
uint adc(uchar lu)
{
         uchar l;
        n=0;
         ADMUX&=lu;
        ADCSRA|=0x80;
        for(l=50;l>0;l--)
        {
        ADCSRA|=0x40;
        while(!(ADCSRA&0x10));
        n+=ADCL;
        n+=ADCH*256;
        }
        ADMUX=0x0f;
        n/=50;
        return n;
}
 void Lcd_Init(void)
{
                DDRB|=0x07;
                DDRC|=0x15;
                DDRD|=0xf8;
                PORTD|=0x07;
                TIMSK|=0x01;
                SREG|=0x80;
                GICR|=0x40;
                MCUCR|=0x02;
                ADMUX|=0x00;
                ADCSRA|=0x06;
                TCCR1B=0X19;
                TCCR1A=0X73;
                OCR1A=8000;
                OCR1B=0;
                cs1;
                reset0;                                     //复位液晶;
                _delay_ms(20);
                reset1;
                TransData(0xe2,0);  //Soft rest
                _delay_ms(20);
                TransData(0xa1,0);
                TransData(0xa2,0);  //Set LCD bias(A2-1/9bias; A3-1/7bias)
                TransData(0xa6,0);  //正常显示 0xa7为反白显示
                TransData(0x2f,0);  //设置内部电路的电源 默认为0x2F
                TransData(0x60,0); //设置行地址从0x00开始
                TransData(0x81,0);
                TransData(0xef,0);  //设置对比度
            TransData(0xaf,0);  //打开显示        
                Lcdclear();                          //清除显示   
        Lcdhz(0,7,20,0);   
                Lcdhz(4,0,0,0);
                Lcdhz(4,1,1,0);
                Lcdhz(6,0,16,0);
                Lcdhz(6,1,17,0);
                Lcdhz(6,6,24,0);
                Lcdhz(6,7,25,0);
                Lcdhz(6,3,5,0);
                Lcdhz(6,4,6,0);
                   Lcdzf(0,0,10,0);
                   Lcdzf(0,1,12,0);
                   Lcdzf(0,4,19,0);
                   Lcdzf(0,7,13,0);
                   Lcdzf(2,0,11,0);
                   Lcdzf(2,1,12,0);
                   Lcdzf(2,4,19,0);
                   Lcdzf(2,7,14,0);
                   Lcdzf(2,13,12,0);
                   Lcdzf(4,4,12,0);
                   Lcdzf(4,13,15,0);
                   Lcdzf(4,14,14,0);
                   Lcdzf(4,15,16,0);
                   
}
void xianshi(void)
{
        uchar a,b,c,d,e;
        u=adc(5);
        u*=1.96;
        d=u/1000;
        c=u%1000/100;
        b=u%100/10;
        a=u%10;
        if(u>=1000)
        Lcdzf(0,2,d,0);
        else
        Lcdzf(0,2,20,0);
        Lcdzf(0,3,c,0);
        Lcdzf(0,5,b,0);
        Lcdzf(0,6,a,0);
        i=adc(3);
        d=i/1000;
        c=i%1000/100;
        b=i%100/10;
        a=i%10;
        if(i>=1000)
        Lcdzf(2,2,d,0);
        else
        Lcdzf(2,2,20,0);
        Lcdzf(2,3,c,0);
        Lcdzf(2,5,b,0);
        Lcdzf(2,6,a,0);
/*        c=cc/100;
        b=cc%100/10;
        a=cc%10;        
        if(cc>=100)
        Lcdzf(0,11,c,0);
        else
        Lcdzf(0,11,20,0);
        if(cc>=10)
        Lcdzf(0,12,b,0);
        else
        Lcdzf(0,12,20,0);
        Lcdzf(0,13,a,0);*/
/*        b=h/10;
        a=h%10;
        if(h>=10)
        Lcdzf(2,11,b,0);
        else
        Lcdzf(2,11,20,0);
        Lcdzf(2,12,a,0);        
        b=m/10;
        a=m%10;
        Lcdzf(2,14,b,0);
        Lcdzf(2,15,a,0);
        e=r/10000;
        d=r%10000/1000;
        c=r%1000/100;
        b=r%100%10;
        a=r%10;
        if(r>=10000)
        Lcdzf(4,8,e,0);
        else
        Lcdzf(4,8,20,0);
        if(r>=1000)
        Lcdzf(4,9,d,0);
        else
        Lcdzf(4,9,20,0);
        if(r>=100)
        Lcdzf(4,10,c,0);
        else
        Lcdzf(4,10,20,0);        
        if(r>=10)
        Lcdzf(4,11,b,0);
        else
        Lcdzf(4,11,20,0);
        Lcdzf(4,12,a,0);        */
}
int main(void)
{
  Lcd_Init();
   while(1)
   {
        xianshi();
   }
}
 |