Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2023-01-16 | 16 |
5.00
из
|
Заказать работу |
|
|
// Подгружаем необходимые библиотеки
#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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!