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

📄 main.c

📁 采用Atmega16的变频式超声波发生器的源代码
💻 C
字号:
#include"main.h"

const unsigned char xtal=16; //unit is MHZ
volatile ulong key_sum;
volatile uchar key_flag=0,key_bit=0,next_sf=0;
//volatile ulong test_data=0;
volatile uint adc_sum;
const char screen0[] PROGMEM="welcome master!!";
const char screen1[] PROGMEM="thanks for using";
const char screen2[] PROGMEM="key a:pagedown";
const char screen3[] PROGMEM="key b:pagedown";
const char screen4[] PROGMEM="key c:shift";
const char screen5[] PROGMEM="key d:dec point";
const char screen6[] PROGMEM="key e:backspace";
const char screen7[] PROGMEM="key f:enter num";

volatile char *screen[screen_max] PROGMEM={(char*)screen0,(char*)screen1,
(char*)screen2,(char*)screen3,(char*)screen4,(char*)screen5,(char*)screen6
,(char*)screen7};
volatile uchar line=1;
//const char flash[] PROGMEM="this is flash";
//char *sram="this is sram";

jmp_buf env;

int main(void)
{  

 //   unsigned char i,j,k,h;
    if(setjmp(env))
    goto hell;
  
   
	
	lcd_init();
 //   uart_init();
    keyboard_init();

   
	sei(); 
	clear_screen();

   // pwm_phase(62000,3500);
//	start_an_adc();
//              	write_adc();

    write_string_flash((char*)pgm_read_word(&screen[0]));	
	write_position(2,1);
    write_string_flash((char*)pgm_read_word(&screen[1]));

    adc_init(0,0);//channel PF0~3;0:AVCC,1:internal 2.56
	spi_init();
    ad9835_init();
    
    next();
	
	ulong f,max_f,start_f,end_f;
	uint max=0;
	clear_screen();
	write_string("start_f:");
	start_f=key_input();
    ad9835(start_f);
//	delay_ms(20);
	write_position(2,1);
	write_string("end_f:");
	end_f=key_input();
	
	clear_screen();
	
	for(f=start_f;f<end_f;f+=8)
	{
    ad9835(f);

	start_an_adc();
	write_position(1,1);
	write_adc();

	if((max<adc_sum))
	{
    max=adc_sum;
	max_f=f;
	}
	//delay_ms(1);

	}
	
    ad9835(max_f);
	adc_sum=max;
	write_position(1,1);
	write_adc();
	write_position(2,1);
    write_dec(max_f);
	next();
	clear_screen();
	write_string("1:inf 0:finite");
	write_position(2,1);
	write_string("input:");
	if(key_input())
	{
	clear_screen();
	}
	else
	{
	clear_screen();
	write_string("time(ms):");
    timer(key_input());
	}
	clear_screen();
	write_string("start?");
	write_position(2,1);
    write_string("yes: C+F");
	next();
    clear_screen();
    uint adc_sum_last=max;
	f=max_f+1;
//	ad9835(f);
	start_an_adc();
	
	while(1)
	{
	if(adc_sum>adc_sum_last)
	f+=1;
//	max=adc_sum;

	if(adc_sum<adc_sum_last)
	f-=1;
    
	adc_sum_last=adc_sum;
    ad9835(f);
	start_an_adc();

	write_position(1,1);
//    write_adc();
	write_dec(f);

	}
    
/*
    sbi(porta,0);
    while(1)
	{

    if(gbi(PINA,0))
	{
	f-=2;
    ad9835(f);
	start_an_adc();
	for(;max<adc_sum;)
	{
	f-=2;
    ad9835(f);
	start_an_adc();
	}

	}

    else
	{
    f+=2;
    ad9835(f);
	start_an_adc();
	for(;max<adc_sum;)
	{
	f+=2;
    ad9835(f);
	start_an_adc();
	}
    }
	write_position(2,1);
    write_adc();
	write_dec(f);
	}

	



	while(1)
	{
	while(key_input());
	clear_screen();
	write_string("fre:");
    ad9835(key_input());
	write_position(2,1);
    write_string("finished");
     }
	

	

    
	

    cbi(portb,0);
	ad9835_init();
	ad9835_spi(0x3367);
	ad9835_spi(0x3267);
	ad9835_spi(0x3167);
	ad9835_spi(0x3067);
	sbi(portb,0);

	write_string("finished");
	
//	write_freq(456); 
	//square_wave(50);  //hz  timer2  PB7->output,OC2

    write_freq(100000);
//	write_string("input mv and f:");
 //   write_position(2,1);
    pwm_phase(30000,1000); //(voltage_mv,frequency_hz)
	clear_screen();
//	start_an_adc();
    while(1)
	{
    clear_screen();
	start_an_adc();
	write_adc();
	}
	next();
	write_position(2,1);
	start_an_adc();
    
	write_adc();
    
	write_string("voltage:");
    // mV   timer1 PB6->output,OC1B
	while(1)
	{
    //write_position(1,9);
    start_an_adc();
    
	write_adc();
	delay_ms(10);
	
	}
	write_position(2,1);
	write_string("fre:");
	icp();



    next();
 //   delay_ms(500);
	clear_screen();
	write_string_flash((char*)pgm_read_word(&screen[0]));
	
	write_position(2,1);
    write_string_flash((char*)pgm_read_word(&screen[1]));

	delay_ms(500);
	

*/

 

hell:ad9835(0);
clear_screen();
write_string("the end");

while(1)
{



   







}

}




⌨️ 快捷键说明

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