⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 AVR单片机做的数字电压表
💻 C
字号:
 #include  "iom16v.h"
 #include  "macros.h"
 #include  "lcd.h"
 //#include <stdio.h> 
// #include <stdlib.h>  //sprintf函数用
 //#include <string.h>  //字符连接函数用
 #define  uchar unsigned char
 #define  uint  unsigned int
 uchar str[]="电压为      毫伏";
 uchar  str2[4]  ;
 float adc_data;  //不能为uint型,否则只显示个位
 uint vcc;
 
 
 void delay_ms(uchar i)
 {
   uchar a,b;
   for(a=1;a<i;a++)
     for(b=1;b<141;b++)
	 {;}
 }
 

/*****************字符连接函数********************/ 
/*void strcatenate(char t[], char s[] ) 
{ 
strcat(t,s); 
} */
 
/****************电压i伏特转换为对应字符*************************/ 
void change(uint i,uchar *p)		 //显示处理
{  p[3]=i%10+48;//个
   p[2]=i/10%10+48;//十
   p[1]=i/100%10+48;//百
   p[0]=i/1000%10+48;//千
}
 
 #pragma interrupt_handler adc_end: 15
 void adc_end(void)
 {
 adc_data=(float)(ADCH*4+ADCL/64);

  
 if (adc_data>3*1024/5) //大于3V PB0亮
   PORTB=~0B001;
 else if (adc_data<0.5*1024/5)  //小于0.5V PB1亮
   PORTB=~0B010;
 else
   PORTB=~0B100;  //0.5~3V PB2亮
 ADCSRA |= 0X40;
}
 


 void main(void) 
 {
 uchar i=0;
 DDRA=0X00;
 PORTA=0XFF;
 DDRB=0XFF;
 PORTB=0XFF;
 DDRC=0X00;
 PORTC=0X00;
 /**************配置LCD12864*********************/
 DDRC |=BIT(6);  //设置输出
 PORTC &= ~BIT(6);  //L:serial mode 串行
 DDRC &= ~BIT(7);  //设置输入
 PORTC &= ~BIT(7); //LCD的NC脚悬空
 DDRD &= ~BIT(7);  //设置输入
 PORTD &= ~BIT(7);  //RST复位低电平有效
 /*****************************************/ 
 DDRD=0X00;
 PORTD=0XFF;
 LCD_Init();
 ADMUX=0X61;  //PA1为AD电压采样通道
 ADCSRA=0XCB;
 SEI();
 while(1)
    {   
        //strcatenate(str20,str2);	
		//sprintf(str2,"%f",vcc); // 转换float 到 char 
		vcc=(uint)(adc_data*5000/1024);
		change( vcc ,str2)	;	 //显示处理
		delay_ms(20);
      //  LCD_ClearTXT( );
		LCD_PutStr(0,0,str); 
        LCD_PutStr(0,3,str2);  
		delay_ms(2);
				//  for(;;)
               // {
               //  continue;
              //  }   
	}
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -