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

📄 rate.c

📁 TEA5767收音机模块资料 包括(TEA5767驱动程序
💻 C
字号:
#include <stdint.h>
#include <stdlib.h>
#include <avr/eeprom.h>
//#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/io.h>
#include <avr/sfr_defs.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <math.h>
#include "TEA5767.h"
#include "LCD_3310.h"
#include "SOUND.h"
#define BIT(x)	(1<<(x))
#define uchar uint8_t
#define uint  uint16_t

#define UP     1
#define DOWN   0

#define LED_red_ON()        PORTC|=0x04
#define LED_red_OFF()       PORTC&=~0x04
#define LED_greed_ON()      PORTC|=0x08
#define LED_greed_OFF()     PORTC&=~0x08
#define LCD3310_LIGHT_ON()  PORTB|=0x04
#define LCD3310_LIGHT_OFF() PORTB&=~0x04

#define ADC_LIGHT           0x03
#define ADC_VOL             0x04

const unsigned char radio[14]  ={"[RADIO]       "};
const unsigned char radio_F[14]={"      MHz     "};
unsigned char POWER_VOL[14]={0x3C,0x7E,0x81,0xBD,0xBD,0x81,0xBD,0xBD,0x81,0xBD,0xBD,0x81,0x7E,0x00};
volatile unsigned char TIME=0;

/*****************************ADC电压采样**********************************/
#define ADC_VREF_TYPE 0xC0
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADCSRA=0x85;
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
/////////////////////////////////////////////////////////////////////////////

//定时器T0初始化
void timer0_init(void)
{
	TCCR0  = 0x00;//停止定时器
	TCNT0  = 0x3D;//初始值
	OCR0   = 0x3C;//匹配值
	TIMSK |= 0x01;//中断允许
	TCCR0  = 0x05;//启动定时器
}

void display_radio_staut(void)
{
uchar i,buffer;
uint VOL_T,LIGH_T;

VOL_T=read_adc(ADC_VOL);
LIGH_T=read_adc(ADC_LIGHT);
buffer=(unsigned char)((220*LIGH_T)/((11*VOL_T)-LIGH_T));

if(buffer>12)LCD3310_LIGHT_ON(); else LCD3310_LIGHT_OFF();

read5767();
display_one_char(0,2,radio_frequency[0]);
display_one_char(1,2,radio_frequency[1]);
display_one_char(2,2,radio_frequency[2]);
display_one_char(3,2,radio_frequency[3]);
display_one_char(4,2,radio_frequency[4]);
display_one_char(5,2,radio_frequency[5]);
display_one_char(11,0,'z'+2);
LcdGotoXY(72,0);
        if(SIGNAL_ADC<4){LcdSend(0xC0,1);LcdSend(0xC0,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);}
		else if((8>SIGNAL_ADC)&&(SIGNAL_ADC>=4)){LcdSend(0xC0,1);LcdSend(0xC0,1);LcdSend(0x00,1);LcdSend(0xF0,1);LcdSend(0xF0,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);}
		else if((12>SIGNAL_ADC)&&(SIGNAL_ADC>=8)){LcdSend(0xC0,1);LcdSend(0xC0,1);LcdSend(0x00,1);LcdSend(0xF0,1);LcdSend(0xF0,1);LcdSend(0x00,1);LcdSend(0xFC,1);LcdSend(0xFC,1);LcdSend(0x00,1);LcdSend(0x00,1);LcdSend(0x00,1);}
		else if((16>SIGNAL_ADC)&&(SIGNAL_ADC>=12)){LcdSend(0xC0,1);LcdSend(0xC0,1);LcdSend(0x00,1);LcdSend(0xF0,1);LcdSend(0xF0,1);LcdSend(0x00,1);LcdSend(0xFC,1);LcdSend(0xFC,1);LcdSend(0x00,1);LcdSend(0xFF,1);LcdSend(0xFF,1);}
        else;
		if(VOL_T<120){POWER_VOL[3]=0x81;POWER_VOL[4]=0x81;POWER_VOL[6]=0x81;POWER_VOL[7]=0x81;POWER_VOL[9]=0x81;POWER_VOL[10]=0x81;}
		else if((VOL_T>=120)&&(VOL_T<138)){POWER_VOL[3]=0x81;POWER_VOL[4]=0x81;POWER_VOL[6]=0x81;POWER_VOL[7]=0x81;POWER_VOL[9]=0xBD;POWER_VOL[10]=0xBD;}
		else if((VOL_T>=138)&&(VOL_T<160)){POWER_VOL[3]=0x81;POWER_VOL[4]=0x81;POWER_VOL[6]=0xBD;POWER_VOL[7]=0xBD;POWER_VOL[9]=0xBD;POWER_VOL[10]=0xBD;}
		else if(VOL_T>=160){POWER_VOL[3]=0xBD;POWER_VOL[4]=0xBD;POWER_VOL[6]=0xBD;POWER_VOL[7]=0xBD;POWER_VOL[9]=0xBD;POWER_VOL[10]=0xBD;}
LcdGotoXY(52,0);
for(i=0;i<14;i++)LcdSend(POWER_VOL[i],1);


}

//T0溢出中断服务程序
//#pragma interrupt_handler timer0_ovf_isr:10
//void timer0_ovf_isr(void)
SIGNAL(SIG_OVERFLOW0)
{
	TCNT0 = 0x3D;
    if(++TIME==40){TIME=0; TIME_NUM[2]++;
	               if(TIME_NUM[2]%2)TIME_ASC[3]=' ';
				   else TIME_ASC[3]=':';
				   if(TIME_NUM[2]==60){TIME_NUM[1]++;
				   TIME_NUM[2]=0;
				   TIME_ASC[4]=TIME_NUM[1]/10+0x30;
                   TIME_ASC[5]=TIME_NUM[1]%10+0x30;
				   if(TIME_NUM[1]==60){
				   TIME_NUM[1]=0;
				   TIME_ASC[4]=TIME_NUM[1]/10+0x30;
                   TIME_ASC[5]=TIME_NUM[1]%10+0x30;
				   TIME_NUM[0]++;
				   if(TIME_NUM[0]==24)TIME_NUM[0]=0;
				   TIME_ASC[1]=TIME_NUM[0]/10+0x30;
                   TIME_ASC[2]=TIME_NUM[0]%10+0x30;}
				   }
				   display_TIME();
				   }
}



int main(void)
{
unsigned int LIGH=0,VOL=0;


	PORTA = 0x00;
	DDRA  = 0x07;
	PORTB = 0x00;
	DDRB  = 0xFF;
	PORTC = 0x00;
	DDRC  = 0x0F;
	PORTD = 0x40;
	DDRD  = 0x80;
	timer0_init();
    LcdInit();
	SOUNDINIT_timer2_init();
	sei();
    display_list_char(0,1,radio);
    display_list_char(0,2,radio_F);
    if(TEA5767_INTI()){LED_greed_ON();SOUND_RING1();}else {LED_red_ON();SOUND_WARNING_SIMPLE();}
	read5767();
	set_frequency(88320);
	display_radio_staut();
	while(1)
	{
	 //SOUND_ENTER();
     display_radio_staut();
     //SOUND_ENTER();
     LIGH=read_adc(ADC_LIGHT);
	 VOL=read_adc(ADC_VOL);
display_one_char(0,4,'L');
display_one_char(1,4,LIGH/1000+0x30);
display_one_char(2,4,LIGH%1000/100+0x30);
display_one_char(3,4,LIGH%1000%100/10+0x30);
display_one_char(4,4,LIGH%1000%100%10+0x30);

display_one_char(0,5,'V');
display_one_char(1,5,VOL/1000+0x30);
display_one_char(2,5,VOL%1000/100+0x30);
display_one_char(3,5,VOL%1000%100/10+0x30);
display_one_char(4,5,VOL%1000%100%10+0x30);



	}
}












⌨️ 快捷键说明

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