Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
Вот маленькая функция управления 4 кнопками а если раскоментировать , то и 16кнопками #define F_ (key==12) #define SET_ (key==8) #define PLUS (key==0) #define MINUS (key==4) #define PORTLCD PORTD #define DDRLCD DDRD #define PINLCD PIND
#define str0 (PINLCD&BIT(2)) #define str4 (PINLCD&BIT(3)) #define str8 (PINLCD&BIT(4)) #define str12 (PINLCD&BIT(5)) //#define stolb1 (PINLCD&BIT(4)) //#define stolb2 (PINLCD&BIT(5)) //#define stolb3 (PINLCD&BIT(6)) //#define stolb4 (PINLCD&BIT(7))
void skankey (void){ unsigned char key_lokal=17; key=key_lokal; #ifdef katod PORTZN |= BITZN; #else PORTZN &= ~BITZN; #endif DDRLCD =0xC3; PORTLCD=0x3C; _delay_us(10); if (!str0) key_lokal=0; else if (!str4) key_lokal=4; else if (!str8) key_lokal=8; else if (!str12) key_lokal=12; else key_lokal=17;//goto vool;
if ( key_lokal!=17 ) { if (++anti_drebezg[0]==35)//35) { key=key_lokal; if ( ( ocr1[ocr1ahi_but] )||( ocr1[ocr1alow_but] ) ){ OCR1AH = ocr1[ocr1ahi_but];//0x04; OCR1AL = ocr1[ocr1alow_but];//0x00; shim_true();// time_flag|=_BV(fl_sig_butt); time[note_but]=7; } } if (anti_drebezg[0]==anti_drebezg[2]){ //anti_drebezg[0] сам антидребезг anti_drebezg[0]=0; //anti_drebezg[1] кол-во цифр перед убыстрением anti_drebezg[1]++; //anti_drebezg[2] задержка после опред цифры if (anti_drebezg[1]==3) anti_drebezg[2]=45;//55; } time_in_regim=25; } else { anti_drebezg[0]=0; anti_drebezg[1]=0; anti_drebezg[2]=200; } #ifdef katod PORTLCD=0x00; #else PORTLCD=0xFF; #endif DDRLCD =0xFF; } А дальше в мэйне вызываем эту функцию. Кнопки подключены через 3комные сопротивления на порты вывода семисегментника.
Вот маленькая функция управления 4 кнопками а если раскоментировать , то и 16кнопками #define F_ (key==12) #define SET_ (key==8) #define PLUS (key==0) #define MINUS (key==4) #define PORTLCD PORTD #define DDRLCD DDRD #define PINLCD PIND
#define str0 (PINLCD&BIT(2)) #define str4 (PINLCD&BIT(3)) #define str8 (PINLCD&BIT(4)) #define str12 (PINLCD&BIT(5)) //#define stolb1 (PINLCD&BIT(4)) //#define stolb2 (PINLCD&BIT(5)) //#define stolb3 (PINLCD&BIT(6)) //#define stolb4 (PINLCD&BIT(7))
void skankey (void){ unsigned char key_lokal=17; key=key_lokal; #ifdef katod PORTZN |= BITZN; #else PORTZN &= ~BITZN; #endif DDRLCD =0xC3; PORTLCD=0x3C; _delay_us(10); if (!str0) key_lokal=0; else if (!str4) key_lokal=4; else if (!str8) key_lokal=8; else if (!str12) key_lokal=12; else key_lokal=17;//goto vool;
if ( key_lokal!=17 ) { if (++anti_drebezg[0]==35)//35) { key=key_lokal; if ( ( ocr1[ocr1ahi_but] )||( ocr1[ocr1alow_but] ) ){ OCR1AH = ocr1[ocr1ahi_but];//0x04; OCR1AL = ocr1[ocr1alow_but];//0x00; shim_true();// time_flag|=_BV(fl_sig_butt); time[note_but]=7; } } if (anti_drebezg[0]==anti_drebezg[2]){ //anti_drebezg[0] сам антидребезг anti_drebezg[0]=0; //anti_drebezg[1] кол-во цифр перед убыстрением anti_drebezg[1]++; //anti_drebezg[2] задержка после опред цифры if (anti_drebezg[1]==3) anti_drebezg[2]=45;//55; } time_in_regim=25; } else { anti_drebezg[0]=0; anti_drebezg[1]=0; anti_drebezg[2]=200; } #ifdef katod PORTLCD=0x00; #else PORTLCD=0xFF; #endif DDRLCD =0xFF; } А дальше в мэйне вызываем эту функцию. Кнопки подключены через 3комные сопротивления на порты вывода семисегментника.
|
|
|
 |
Добавлено: 16 май 2012, 03:47 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
[quote="Streetstyle"][quote]ну да это незароботает[/quote] в CodeVisionAVR 100% незаработает, а вот в AVR studio 5 надо оптимезацию включить чтоб модуль delay.h работал как надо. Строку #define wait _delay_ms(150) лучше заменить на #define wait _delay_ms(250) Да и еще в МК фюз divide clock by 8 надо вырубить (1 unprogrammed)
По крайней мере в протусе работает :lol:[/quote]
работаю code vision нашол вот такой асходник правдо на одну кнопку одну прогу а надо на четыре #include <attiny2313.h>
#include <delay.h>
// основная программа:
void main(void)
{
PORTA=0x01; // Включаем внутренний подтягивающий резистор на порту А бит 0
DDRA=0x00; // весь порт как вход
PORTD=0x00; //настройки порта D
DDRD=0x28; // настройки порта D на выход битов 3 и 5
ACSR=0x80;
SFIOR=0x00;
while(1) // бесконечный цикл
{
while (PINA.0==0) // проверяем если кнопка нажата (замкнута), то выполняем цикл мигалки
{
PORTD.3=1; // зажигаем красный светодиод
delay_ms(100); //ждем 100 миллисекунд
} // как только отпустим кнопку программа дойдет до конца цикла
// и будет ждать пока не нажмем заново
}; // закрываем бесконечный цикл
} //конец программы
|
|
|
 |
Добавлено: 15 май 2012, 22:25 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
[quote="Гость"] я не студент. А прога нужна для упровления двумя шаговыми движками[/quote] Ну, ну. То есть алгоритм работы движками Вы уже написали, ;) а вот для кнопок не выходит. :shock: :-) Как же это можно понять?
|
|
|
 |
Добавлено: 15 май 2012, 21:55 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
Вложения: |

Снимок.PNG [ 52.15 КБ | Просмотров: 19876 ]
|
[quote]ну да это незароботает[/quote] в CodeVisionAVR 100% незаработает, а вот в AVR studio 5 надо оптимезацию включить чтоб модуль delay.h работал как надо. Строку #define wait _delay_ms(150) лучше заменить на #define wait _delay_ms(250) Да и еще в МК фюз divide clock by 8 надо вырубить (1 unprogrammed)
По крайней мере в протусе работает :lol:
|
|
|
 |
Добавлено: 15 май 2012, 21:40 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
[quote="SVN"]Похоже студент. Решил по быстренькому зачёт сдать. :D[/quote] я не студент. А прога нужна для упровления двумя шаговыми движками
|
|
|
 |
Добавлено: 15 май 2012, 19:59 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
[quote="Streetstyle"][color=#0000FF]#define F_CPU 4000000
#define BUTTON_PORT PIND #define BUTTON_1 PIND0 #define BUTTON_2 PIND1 #define BUTTON_3 PIND2 #define BUTTON_4 PIND3
#define wait _delay_ms(150)
#include <util/delay.h> #include <avr/io.h>
void port_init(void) { DDRB=0xff; PORTB=0x00;
DDRD=0xf0; PORTD=0x0f; }
void button1_pressed(void) {
wait; }
void button2_pressed(void) {
wait; }
void button3_pressed(void) {
wait; }
void button4_pressed(void) {
wait; }
int main(void) { port_init();
while (1) { if(!(BUTTON_PORT&_BV(BUTTON_1))) button1_pressed(); if(!(BUTTON_PORT&_BV(BUTTON_2))) button2_pressed(); if(!(BUTTON_PORT&_BV(BUTTON_3))) button3_pressed(); if(!(BUTTON_PORT&_BV(BUTTON_4))) button4_pressed(); }
} [/color]
Только у тебя он незаработает :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile:[/quote] ну да это незароботает
|
|
|
 |
Добавлено: 15 май 2012, 19:54 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
[color=#0000FF]#define F_CPU 4000000
#define BUTTON_PORT PIND #define BUTTON_1 PIND0 #define BUTTON_2 PIND1 #define BUTTON_3 PIND2 #define BUTTON_4 PIND3
#define wait _delay_ms(150)
#include <util/delay.h> #include <avr/io.h>
void port_init(void) { DDRB=0xff; PORTB=0x00;
DDRD=0xf0; PORTD=0x0f; }
void button1_pressed(void) {
wait; }
void button2_pressed(void) {
wait; }
void button3_pressed(void) {
wait; }
void button4_pressed(void) {
wait; }
int main(void) { port_init();
while (1) { if(!(BUTTON_PORT&_BV(BUTTON_1))) button1_pressed(); if(!(BUTTON_PORT&_BV(BUTTON_2))) button2_pressed(); if(!(BUTTON_PORT&_BV(BUTTON_3))) button3_pressed(); if(!(BUTTON_PORT&_BV(BUTTON_4))) button4_pressed(); }
} [/color]
Только у тебя он незаработает :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile:
|
|
|
 |
Добавлено: 12 май 2012, 22:46 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
Вот здесь куча исходников с кнопками http://startcd.narod.ru/
Вот здесь куча исходников с кнопками http://startcd.narod.ru/
|
|
|
 |
Добавлено: 12 май 2012, 22:20 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
Похоже студент. Решил по быстренькому зачёт сдать. 
Похоже студент. Решил по быстренькому зачёт сдать. :D
|
|
|
 |
Добавлено: 11 май 2012, 20:07 |
|
|
 |
|
|
Заголовок сообщения: |
Re: помогите написать код на с |
Цитата |
|
Блин прикольная просьба. 
Блин прикольная просьба. :D
|
|
|
 |
Добавлено: 11 май 2012, 18:17 |
|
|
 |