- #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();
- }
- }
复制代码 adc用到两路,一路电压采集,一路电流采集,现象为单独用任何一路没问题,用到两路就不准,找了几天了,实在没辙,大家帮忙看下哪里出问题了万分感谢
|