Полный текст программы для микроконтроллера — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Полный текст программы для микроконтроллера

2023-01-16 16
Полный текст программы для микроконтроллера 0.00 из 5.00 0 оценок
Заказать работу

// Подгружаем необходимые библиотеки

#include <avr/io.h>

#include<util/delay.h>

 

volatileunsignedlongintF_default=1000000; // начальнаястартоваячастота

volatileunsignedlongintdF_default=1000; // начальныйстартовыйшагперестройкичастоты

 

//импульсдля LCD

void Impulse_LCD(void)

{

PORTC|=0b000010;

PORTC&=0b111101;

}

 

//отправляем команды или данные на дисплей

void sendcommand_LCD(unsigned char a, unsigned char tip )

{

//проверяем, команда (RS=0) или данные (RS=1)

if (tip==0) PORTC&=0b111110;

else PORTC|=0b000001;

 

//очищаем 6-3 выводы и отправляем первые полбайта(7-4 биты)

PORTC&=0b000011;

PORTC|=((a&0b11110000)>>2);

Impulse_LCD();

_delay_us(50);

 

//очищаем 6-3 выводы и отправляем вторые полбайта(3-0 биты)

PORTC&=0b000011;

PORTC|=((a&0b00001111)<<2);

Impulse_LCD();

_delay_us(50);

}

 

//инициализация LCD

void Initialize_LCD(void)

{

_delay_us(20);

PORTC=0b001100;

Impulse_LCD();

_delay_us(5);

PORTC=0b001100;

Impulse_LCD();

_delay_us(110);

PORTC=0b001100;

Impulse_LCD();

_delay_us(50);

 

PORTC=0b001000;

Impulse_LCD();

_delay_us(50);

 

sendcommand_LCD(0b00101000,0);

sendcommand_LCD(0b00001100,0);

sendcommand_LCD(0b00000001,0);

sendcommand_LCD(0b00000110,0);

}

 

//установкакурсоравнужноеположение

void InstallCursor(unsigned char x, unsigned char y)

{

sendcommand_LCD((0x40*y+x)|0b10000000,0);

}

 

//Эта функция разбивает число на цифры

void SortNumber(unsigned long int aa,unsigned char stroka)

{

double Unsigned(double b);

long int b=0;

char n=0;

InstallCursor(3,stroka);

 

while(n!=8)

{

   aa=aa-b*pow(10,8-n);

   b=aa/pow(10,7-n);

if(b==0)//если получился ноль - выводим пробел

{

       sendcommand_LCD(0b00100000,1);

       n++;

   }

   else

   {

       sendcommand_LCD(b+0b110000,1);

       n++;

break;

   }

}

 

 

//Основной цикл. Выводит числа на экран.

while(n!=8)

{

   aa=aa-b*pow(10,8-n);

   b=aa/pow(10,7-n);

   sendcommand_LCD(b+0b110000,1);

n++;

}

}

 

//импульс (по возрастанию) на вход SCLK после каждого слова

void SCLK(void)

{

PORTD|=0b00000001;

_delay_us(50);

PORTD&=0b11111110;

}

 

//импульс (по возрастанию) на вход FSYNC после передачи всех 5-и слов

void FSYNC(void)

{

PORTD|=0b00000010;

_delay_us(50);

PORTD&=0b11111101;

}

 

//вычисляем Freg

unsigned long int RaschetFreg(unsigned long int F_default1)

{

return (F_default1*4294967296)/125000000;

}

 

//отправка команды из 5-и слов к AD9833

void AD_Comanda(unsigned long int Freg1)

{

PORTB=0x00;

SCLK();

PORTB=((Freg1&0xff000000)>>24);

SCLK();

PORTB=((Freg1&0x00ff0000)>>16);

SCLK();

PORTB=((Freg1&0x0000ff00)>>8);

SCLK();

PORTB=(Freg1&0x000000ff);

SCLK();

FSYNC();

}

 

//прибавляемdF_defaultкF_default,считаемFregиотправляемкомандунаAD9833

unsigned long int Plys(unsigned long int dF_default2, unsigned long int F_default2)

{

F_default2=F_default2+dF_default2;

if(F_default2>12000000)F_default2=12000000;//проверяем, чтоб частота не ушла больше максимма 12 МГц

 

AD_Comanda(RaschetFreg(F_default2));//считаем Freg и отправляем его на AD9833

return F_default2;

}

 

//вычитаем dF_default из F_default, считаем Freg и отправляем команду на AD9833

unsigned long int Minys(unsigned long int dF_default3, unsigned long int F_default3)

{

F_default3=F_default3-dF_default3;

if(F_default3<1)F_default3=1;//проверяем, чтоб частота не ушла ниже минимума 1 МГц

 

AD_Comanda(RaschetFreg(F_default3));//считаем Freg и отправляем его на AD9833

return F_default3;

}

 

//умножаем dF_default на10

unsigned long int Ymnozhenie(unsigned long int dF_default4)

{

dF_default4=dF_default4*10;

if(dF_default4>10000000)dF_default4=10000000;//проверка, чтобынебольшемаксимума 10000000

 

return dF_default4;

}

 

 

//делим dF_default на10

unsigned long int Delenie(unsigned long int dF_default5)

{

dF_default5=dF_default5/10;

if(dF_default5<1)dF_default5=1;//проверка, чтобнеменьшеминимума 1

 

return dF_default5;

}

 

 

//ФУНКЦИЯ main

 

int main(void)

{

DDRB=0xff;

PORTB=0x00;

DDRD=0b11000011;

PORTD=0x00;

DDRC=0b111111;

PORTC=0x00;

 

AD_Comanda(RaschetFreg(F_default));//инициализация AD9833

Initialize_LCD();

InstallCursor(1,2);

sendcommand_LCD('F',1);

InstallCursor(14,2);

sendcommand_LCD('H',1);

sendcommand_LCD('z',1);

InstallCursor(0,3);

sendcommand_LCD('d',1);

sendcommand_LCD('F',1);

InstallCursor(14,3);

sendcommand_LCD('H',1);

sendcommand_LCD('z',1);

SortNumber(F_default,0);

SortNumber(dF_default,1);

 

while(1)

{

        if((PIND&0b00111100)==0b00111000)//нажмали «Увеличить частоту»

{

       F_default=Plys(dF_default, F_default);

SortNumber(F_default,0);//отправляем изменённое текущее значение частоты на экран

   }

   else if((PIND&0b00111100)==0b00110100)//нажмали «Уменьшить частоту

{

       F_default=Minys(dF_default, F_default);

       SortNumber(F_default,0);

   }

   else if((PIND&0b00111100)==0b00101100)//нажмали «Увеличитьшаг»

   {

       dF_default=Ymnozhenie(dF_default);

       SortNumber(dF_default,1);//отправляемизменённоетекущеезначение dF_default наэкран

   }

   else if((PIND&0b00111100)==0b00011100)

   {

       dF_default=Delenie(dF_default);//нажмали «Уменьшитьшаг»

SortNumber(dF_default,1);

   }

}

return 0;

}


Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.022 с.