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

📄 1.c

📁 基于AVR平台的C语言开发
💻 C
字号:
//1.c : source file for the 1 project
//

#include "1.h"
#include "1UART.h"
#include <delay.h>
#include <math.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint  unsigned int

/////////////////////////////////////////////////////////////////////////////
//1
uchar led1[40]=
	{0x0c,0xfc,0x19,0x98,0xe8,0x8a,0x0a,0xbc,0x08,0x88,0x28,0x4a,0x0f,0x58,0x0b,0x2b,
	 0x04,0xf4,0x11,0x90,0xe0,0x82,0x02,0xb4,0x00,0x80,0x20,0x42,0x07,0x50,0x03,0x23,
	 	0xff,0xfb};
uchar led2[40]=
	{0x60,0x7e,0x31,0x32,0x2e,0xa2,0xa0,0x7a,0x20,0x22,0x28,0xa4,0xe1,0x34,0xa1,0xa9,
	 0x40,0x5e,0x11,0x12,0x0e,0x82,0x80,0x5a,0x00,0x02,0x08,0x84,0xc1,0x14,0x81,0x89,
	 	0xff,0x64,0xdf,0xa1,0x68,0x34,0xbf};
uint ads1[10];
int ad1;
uchar input=0;
uchar output=0;
static void io_init(void)
{
	//{{WIZARD_MAP(General)
	//}}WIZARD_MAP(General)

	//{{WIZARD_MAP(I/O Ports)
	// PortA
	PORTA = 0x0;
	DDRA = 0xf8;    //11111000
	// PortB
	PORTB = 0x0;
	DDRB = 0x1f;    //00011111
	// PortC
	PORTC = 0x3f;   //00111111
	DDRC = 0xc0;    //11000000
	// PortD
	PORTD = 0x0;
	DDRD = 0x0;
	//}}WIZARD_MAP(I/O Ports)

	//{{WIZARD_MAP(Watchdog)
	// Watchdog Disabled
	wdt_disable();
	//}}WIZARD_MAP(Watchdog)

	//{{WIZARD_MAP(Analog Comparator)
	// Analog Comparator Disabled
	ACSR = 0x80;
	//}}WIZARD_MAP(Analog Comparator)
}

int main(void)
{
	//{{WIZARD_MAP(Initialization)
	io_init();
	uart_init();
	adc_init();
	//}}WIZARD_MAP(Initialization)
	// TODO: Add extra initialization here
	
	//{{WIZARD_MAP(Global interrupt)
	sei();
	//}}WIZARD_MAP(Global interrupt)
	while(1)
	{
		// TODO: Add your code here
		led_list();
		lcd_u();
	    put_send(0x30+33);put_send(0x30+((ad1/10)%10));put_send(0x30+((ad1/100)%10));
	    put_send(0x30+((ad1/1000)%10));put_send('%');send_char('$');	
	}
}

uint get_u0(void)
{
	static uchar dd1;
	uchar i;
	double in;
	ads1[dd1%10]=read_adc(0);
	dd1++;
	in=0;
	for(i=0;i<10;i++)
	{
		in+=ads1[i];
	}
	in*=0.3;
	return (uint)in;
}

void lcd_u(void)
{
	 ad1=get_u0();
	 led[3]=(ad1/1000)%10;
	 led[2]=(ad1/100)%10;
	 led[1]=(ad1/10)%10;
	 led[0]=33;
}

void led_outbyt(char a)
{
	char i,d;
	for(i=0;i<8;i++)
	{
		cbi(PORTA,6);    //LCD_SCK清0,
		d=a&0x80;         
		if(d)             
			sbi(PORTA,7);  //LCD_DAT
		else
			cbi(PORTA,7);
		a<<=1;
		sbi(PORTA,6);
	}
}
void led_list(void)
{
	uchar i,j;
	j=1;
	for(i=0;i<8;i++)
	{
		led_outbyt(led2[led[i]]);
		led_outbyt(j);	
		led_outbyt(led2[led[i+8]]);
		led_outbyt(j);			
		led_outbyt(j);
		led_outbyt(led1[led[i+16]]);
		cbi(PORTA,5);	//数据锁存  LCD_E
		sbi(PORTA,5);	//数据锁存
		delay(8,1000);		
		j<<=1;
		led_outbyt(0);led_outbyt(0);led_outbyt(0);led_outbyt(0);led_outbyt(0);led_outbyt(0);
		cbi(PORTA,5);	//数据锁存
		sbi(PORTA,5);	//数据锁存
		delay(1,1000);
	}
}
void adc_init(void)
{
	//{{WIZARD_MAP(ADC)
	// ADC Clock: 125.000kHz
	// ADC Voltage Reference: AVCC
	// ADC Noise Canceler Disabled
	SFIOR |= 0x0;       //特殊功能IO 寄存器
	ADMUX = 0xc0;       //ADC 多工选择寄存器,2.56V的片内基准电压源,AREF引脚外加滤波电容
	ADCSRA = 0x86;      //10000110,ADC 控制和状态寄存器A,b7为ADC使能,b2b1b0是64位预分频
	//}}WIZARD_MAP(ADC)
}

unsigned int read_adc(unsigned char adc_input)
{
	// Set ADC input
	ADMUX &= 0xf8;
	ADMUX |= adc_input;
	// Start ADC conversion
	sbi(ADCSRA, ADSC);
	// Waiting for ADC conversion completed
	loop_until_bit_is_set(ADCSRA, ADIF);
	sbi(ADCSRA, ADIF);
	
	return ADCW;
}

⌨️ 快捷键说明

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