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

📄 main.c

📁 利用AVR单片机的A/D功能来实现LED的亮灭
💻 C
字号:

#define F_CPU  8000000  //11059200

#include <avr/interrupt.h>
#include "iocompat.h"
#include <util/delay.h>
#include "main.h"

int main()
{
	csh();//初始化
	scz();//设初值
	
	while(1)
	{
		
		if(((ADCSRA>>ADIF)&1)==1)  //AD转换完成
		{
		_delay_us(30);
			advalue=ADCL;
			advalue+=(ADCH<<8);
			AD_Data=(advalue+100)/200;
		}
		if(KeyBuffer!=AD_Data)
	    {
		KeyBuffer=AD_Data;
		if(KeyBuffer!=NO_key)
			key=KeyBuffer;
	    }
		
		show1();
		_delay_ms(2);
		key=NO_key;
		
	}
}

void csh()
{
	SPCR=0X51;//SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
	DDRB=0X2C;//(1<<DDRB5)(1<<DDRB3)|(1<<DDRB2);
	PORTB=0xff;
	ADMUX|=0x03;//设置AD口的基准电压,输入通道等
	//ADCSRA|=(1<<ADSC);//启动AD,启动首次转换
	ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIF)|(0<<ADIE)|5;
	//DDRC=0X00;
	//PORTC=0x00;
	
}
void scz()
{
key=NO_key;
KeyBuffer=NO_key;
AD_Data=NO_key;
}

void show1()
{   
    int i,j,k;
	//k=(key%10);
	for(i=0;i<180;i++)
	{
		PORTB=PORTB&(~4);
		in(b[0]);
		for(j=0;j<3;j++)
		{
		in(a[key]);
		}
		PORTB=PORTB|4;
		_delay_ms(1);
	}
}
void in(char data )
{
    SPDR=data;
	while(!(SPSR & (1<<SPIF)))
	  ;
}














⌨️ 快捷键说明

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