📄 rate.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 + -