Уважаемые форумчане, давайте делать благие дела, а именно делиться своими исходниками. Не важно на чем написан код, будь то Си или ассемблер - возможно они кому-то пригодятся. Очень многие радиолюбители будут благодарны. Как говориться, с миру по нитке!
Доброго времени суток!есть маленький кодик на Си, написанный в среде IAR System 5.11full. Может кому пригодиться...
Код может применяться, когда в устройстве на микроконтроллере нужно сообщить о какой-либо завершенной работе (например жидкость нагрета до нужной температуры!)...
#include <ioavr.h> /* библиотека описания микроконтроллеров AVR */
#include <intrinsics.h> /* Из этой библиотеки используется */
/* функция __delay_cycles(float number) */
void signal(void)
{/* Функция формирования прерывистого сигнала зумера */
unsigned int i=0;
while(1)
{
PORTB=1; /* Зажигаем светодиод */
PORTD=1;
__delay_cycles(400); /* Задержка 0.4мс или 400мкс */
PORTD=0;
__delay_cycles(400);
i++; /* Пока переменная i не равна 1500 зумер звучит */
if(i==1500) /* Если переменная i равна 1500, то выполняется тело */
/* Оператора условия if{ } (Значение 1500 можно менять на */
/* свое усмотрение) */
{
PORTB=0; /* Гасим светодиод */
i=0; /* Обнуляем переменную */
__delay_cycles(800000); /* в течении 800мс зумер молчит (Значение 800000 можно менять на */
/* свое усмотрение) */
}
}
}
void main(void)
{/* Основная функция */
DDRD=1; /* Разряд PD0 на вывод (подключен зумер) */
DDRB=1; /* Разряд PВ0 на вывод */
signal(); /* Переходим на функцию сигнал */
}
Ваше мнение засчитывается... ;)
Есть еще один исходничик, так сказать для разминочки написал! Для ЖКИ индикатора WH1602D-YYB-CTK. Организация меню посредством конструкции switch. Среда CodeVision AVR 1.25.3.
#include <Mega8.h>
#asm
.equ __lcd_port=0x18 /* Порт В */
#endasm
#include <lcd.h>
#include <delay.h>
#define sig 500
char tmp=0;
void menu(void)
{
while(1)
{
if(PINC.0==0){if(tmp>=3){}else{tmp++;}} /* Если tmp >= 3, не увеличивать ее значение.*/
if(PINC.1==0){if(tmp==0){}else{tmp--;}} /* Если tmp = 0, не уменьшать ее значение*/
switch (tmp)
{
case 0:
#pragma rl+ /* Указываем, что надо выводить русские буквы */
lcd_clear();
lcd_gotoxy(6,0);
lcd_putsf("Меню 1");break;
case 1:
lcd_clear();
lcd_gotoxy(6,0);
lcd_putsf("Меню 2");break;
case 2:
lcd_clear();
lcd_gotoxy(6,0);
lcd_putsf("Меню 3");break;
case 3:
lcd_clear();
lcd_gotoxy(6,0);
lcd_putsf("Меню 4");
tmp=3;break;
#pragma rl-
}
}
}
void main(void)
{
lcd_clear();
DDRC=0x00; /* Порт С на ввод */
PORTC=0x03; /* Подключаем подтягивающие резисторы */
menu();
}