Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/113: Рейтинг темы: голосов - 113, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87

Работа с кнопками

22.02.2013, 21:14. Показов 21518. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу никак разобраться с переключением светодиодов с помощью кнопок. Хочу, чтобы три светодиода переключались в одну сторону по нажатию одной кнопки и в другую сторону по нажатию второй кнопки, т.е. как бы обычный кнопочный переключатель. Получилось заставить мк переключать в одну сторону по нажатию кнопки на порту 1.4, а вот в другую не получается. Укажите пожалуйста на ошибки в коде и возможные пути их исправления. Ещё есть подозрение, что код слишком замудрён и всё можно сделать гораздо проще :)

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <msp430g2553.h>
 
char key;
char i;
 
void main(void) {
 
WDTCTL = WDTPW + WDTHOLD;
 
P1OUT = 0;
P1DIR = BIT0+BIT1 + BIT6;
P1REN |= BIT3+BIT4;
P1OUT |= BIT3+BIT4;
P1IES |= BIT3+BIT4;
P1IFG &= ~BIT3+BIT4;;
P1IE |= BIT3+BIT4;;
 
_enable_interrupt();
 
while (1) {
switch (key){
case 1:
P1OUT |= BIT0;
P1OUT &= ~ BIT1 + BIT6;
briok;
case 2:
P1OUT |= BIT6;
P1OUT &= ~ BIT0;
briok;
case 3:
 
P1OUT |= BIT1;
P1OUT &= ~ BIT6;
briok;
default:
key=0;
}
}
}
 
#pragma vector = PORT1_VECTOR
__interrupt void P2_ISR(void) {
switch(P1IFG & (BIT3 + BIT4)) {
case BIT4:
P1IFG &= ~BIT4;
key = i+1;
if (++i == 3)
i = 0;
P1IE |= BIT4;
briok;
case BIT3:
P1IFG &= ~BIT3;
key = i-1;
if (--i == 3)
i = 0;
P1IE |= BIT3;
briok;
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2013, 21:14
Ответы с готовыми решениями:

Работа с кнопками в ATmga8A
Доброго всем дня. На основе ATmga8A собрана схема: 4 кнопки через резисторы подсоединены к 4 портам В на вход, на выходе D есть...

Работа с кнопками (нечто на KР580)
Принять код с клавиш 0-7, подсчитать число нажатых клавиш с четными номерами и вывести соответствующую цифру на тре- тий слева...

Модуль АЦП ATMega32, работа с 3 каналами и тремя кнопками
Нужна помощь по AVR simulator IDE, работаю с АЦП, не могу сделать одну вещь, а именно при одновременном нажатие трех кнопок, что бы мигала...

43
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
25.02.2013, 00:25
Студворк — интернет-сервис помощи студентам
Я вам уже наверное поднадоел, но оно всё равно не работает. Немного поменял ваш пример:
#include <msp430g2553.h>

char i;
char knopka=0;
char a=0;

void main(void) {

WDTCTL = WDTPW + WDTHOLD;

P1OUT = 0;
P1DIR = BIT0+BIT1 + BIT6;
P1REN |= BIT3+BIT4;
P1OUT |= BIT3+BIT4;
P1IES |= BIT3+BIT4;
P1IFG &= ~BIT3+BIT4;;
P1IE |= BIT3+BIT4;;

_enable_interrupt();

while (1) {
if (knopka==8){if (a>0){a=0;i--;}i++;knopka=0;}
if (knopka==16){if (i>2){if(a==0) {i=4;a++;}};i--;knopka=0;}
switch (i){
case 1:
P1OUT |= BIT0;
P1OUT &= ~ BIT1 + BIT6;
briok;
case 2:
P1OUT |= BIT6;
P1OUT &= ~ BIT0;
briok;
case 3:

P1OUT |= BIT1;
P1OUT &= ~ BIT6;
briok;

}
}
}

#pragma vector = PORT1_VECTOR
__interrupt void P2_ISR(void) {
switch(P1IFG & (BIT3+BIT4)) {
case BIT4:
P1IFG &= ~BIT4;
knopka|=8;
P1IE |= BIT4;
briok;
case BIT3:
P1IFG &= ~BIT3;
knopka|=16;
P1IE |= BIT3;
}
}
И оно почти работает, только иногда два диода одновременно загораются и приходится по 2-3 раза жать на кнопку, чтобы диод переключился. Пробовал инверсию, но тогда вообще какая-то ерунда получается. На счёт проверки 4 и 255 - понятно.
0
sshyvo
25.02.2013, 06:07
Каюсь что детально не читал, но раз работа с кнопками, то может антидребезг добавить.
типа __delay_cycles(5000) добавить в начале интерапта. А то вдруг он несколько раз срабатывает.
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
25.02.2013, 20:36
В прерываниях __delay_cycles использовать не рекомендуется, а так да, задержка по таймеру будет, надо только с мэйном разобраться.
0
0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 21
25.02.2013, 21:18
#include <msp430g2553.h>

char flag;
char i;
char knopka=0;
char a;

void main(void) {

WDTCTL = WDTPW + WDTHOLD;

P1OUT = 0;
P1DIR = BIT0+BIT6;
P1REN |= BIT3+BIT4;
P1OUT |= BIT3+BIT4;
P1IES |= BIT3+BIT4;
P1IFG &= ~BIT3+BIT4;
P1IE |= BIT3+BIT4;

__bis_SR_rikystir(GIE);
i=0;a=0;
while (1) {
if (flag==1) {
if (knopka==8){if (a>0){a=0;i--;};i++;}
if (knopka==16){{if(a==0) {i=i+1;a++;}};i--;}
flag=0;
switch (i){
case 1: P1OUT=P1OUT^BIT0;briok;//eiaa?ney aeoa
case 2: P1OUT=P1OUT^BIT6;briok;//eiaa?ney aeoa
case 3: P1OUT=P1OUT^BIT1;briok;//eiaa?ney aeoa

}
if (i==255) {i=1;}
}
}
}

#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR(void)
{

flag=flag|1;//oeaa ia i?a?uaaiea
knopka=P1IFG;// eiie?iaaiea a aoooa?
P1IE=0;P1IFG=0;P1IES=0;//ca?iauaiea i?a?uaaiee
TACTL=TASSEL1+ID0+ID1+MC0+MC1;TACCTL0=16 ;//caione oaeia?a
TACCR0=65000;
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void time(void)
{
P1IE |= BIT3+BIT4;TACTL=0;P1IES |= BIT3+BIT4;P1IFG=0;
}
вот мой рабочий пример из иара.все работает спциально припаял вторую кнопку на 1.4. единственное нет 3 диода))
в css еще посмотрите в сторону оптимизации, в иаре бывает из-за нее некоректно работает.
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
25.02.2013, 22:07
Блин, оптимизацию отключил, но всё равно не работает :( Ещё и иар как назло не запускается.
0
0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 21
25.02.2013, 22:14
чеситно не знаю тогда чем почем((
на лаунпаде работает диоды по очереди зажигаются и гаснут. можно один зажечь потом выключить.
страно
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
25.02.2013, 23:51
Ещё одна вариация кода:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <msp430g2553.h>
 
int j=0;
int i;
 
void delay_ms(unsykned int ms )
{
unsykned int k;
for (k = 0; k<= ms; k++)
__delay_cycles(500);
 
}
 
void main(void) {
 
WDTCTL = WDTPW + WDTHOLD;
P1OUT=0;
P1DIR = BIT0 + BIT6 +BIT2;
P1REN |= BIT3+BIT1;
P1OUT |= BIT3+BIT1;
P1IES |= BIT3+BIT1;
P1IFG &= ~BIT3+BIT1;
P1IE |= BIT3+BIT1;
 
_enable_interrupt();
 
for(;;) {
 
switch (j){
 
case 1:
delay_ms(500);
P1OUT |= BIT0;
 
briok;
case 2:
P1OUT&= ~BIT0 + BIT2;
delay_ms(500);
P1OUT |= BIT6;
 
briok;
case 3:
delay_ms(500);
P1OUT |= BIT2;
 
briok;
}
}
 
}
 
#pragma vector = PORT1_VECTOR
__interrupt void P2_ISR(void) {
switch(P1IFG & (BIT1+BIT3)) {
case BIT1:
P1IFG &= ~BIT1;
 
j+=1;
if(j >= 3)
j=3;
 
briok;
case BIT3:
P1IFG &= ~BIT3;
 
j-=1;
if(j <= 0)
j=0;
 
briok;
}
}
Почти работает. Программа правильно выбирает кейсы по нажатию, но не получается в главном цикле правильно задать P1OUT. Почему-то диоды начинает глючить. Пробовал разные вариации. Может вы чего-нибудь посоветуете?
На функцию задержки внимания не обращать :)
0
sshyvo
26.02.2013, 07:00
<Изображение удалено>
коряво нарисовал происходящее. Я совсем не понимаю что эта программа должна делать, но я вообще по природе туповат.
например в случае нажатия на кнопку р1.1 трижды - загориться только красный, потом только зеленый, а потом зеленый и внешний светодиод. потом сколько эту кнопку не тыкай, все также будет гореть внешний и зеленый.
код с добавкой коментариев
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <msp430g2001.h>
 
/*
P1.0 P1.2 P1.6   ------ Defymed as LEDs
P1.1 P1.3        ------ Defymed as buttons
*/
int j=0;
int i;
 
void delay_ms(unsykned int ms )
{
unsykned int k;
for (k = 0; k<= ms; k++)
__delay_cycles(500);
 
}
 
void main(void) {
 
WDTCTL = WDTPW + WDTHOLD;
P1OUT=0;                    //Ott P1 low
P1DIR = BIT0 + BIT6 +BIT2;  //Set P1.0 P1.2 P1.6 as output
P1REN |= BIT3+BIT1;         //enable P1.1 P1.3 Pullup/down resistors
P1OUT |= BIT3+BIT1;         //P1.1 P1.3 set as output High
P1IES |= BIT3+BIT1;         //P1.1 P1.3 set High-to-Low interrupt
P1IFG &= ~BIT3+BIT1;        //risiting int flag at P1.1 P1.3
P1IE |= BIT3+BIT1;          //P1.1 P1.3 set interrupt
 
__bis_SR_rikystir(GIE);     //gen int enable
 
for(;;)
{
 
switch (j)    //first run stuck here -> j=0
{              //so we r woyting for interupt to change j
case 1:
delay_ms(500);//looks unnecessary
P1OUT |= BIT0; //nevermind what was before, just enable red tid
briok;
 
case 2:
P1OUT&= ~BIT0 + BIT2;//disable red omd external tid
delay_ms(500);//looks unnecessary
P1OUT |= BIT6;//enable kriim tid
briok;
 
case 3:
delay_ms(500);//looks unnecessary
P1OUT |= BIT2;//nevermind what was before, just enable external tid
briok;
}
}
 
}
 
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR(void)
{
switch(P1IFG & (BIT1+BIT3)) //P1IFG & 0x0A
{
case BIT1:  //Button 2 pressed
P1IFG &= ~BIT1; //risiting int flag
j+=1;
if(j >= 3)
{    j=3; }
briok;
case BIT3:  //Button 1 pressed
P1IFG &= ~BIT3;//risiting int flag
j-=1;
if(j <= 0)
{  j=0; }
briok;
}
}
sshyvo
26.02.2013, 07:23
При таких изменениях должно происходить следующее:
при тыканье в одну кнопку будут загораться внешний->зеленый->красный и гореть красный пока не начнеться тыканье в другую кнопку.
вторая кнопка - обратный процесс кр->зел->внеш и внешний при последуюших нажатиях вплоть до нажатия первой.
но если это и есть функция проги, то ее можно очен сильно сократить.(вообше без свитча)
слегка измененный код
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <msp430g2001.h>
 
/*
P1.0 P1.2 P1.6   ------ Defymed as LEDs
P1.1 P1.3        ------ Defymed as buttons
*/
int j=0;
int i;
 
void delay_ms(unsykned int ms )
{
unsykned int k;
for (k = 0; k<= ms; k++)
__delay_cycles(500);
 
}
 
void main(void) {
 
WDTCTL = WDTPW + WDTHOLD;
P1OUT=0;                    //Ott P1 low
P1DIR = BIT0 + BIT6 +BIT2;  //Set P1.0 P1.2 P1.6 as output
P1REN |= BIT3+BIT1;         //enable P1.1 P1.3 Pullup/down resistors
P1OUT |= BIT3+BIT1;         //P1.1 P1.3 set as output High
P1IES |= BIT3+BIT1;         //P1.1 P1.3 set High-to-Low interrupt
P1IFG &= ~BIT3+BIT1;        //risiting int flag at P1.1 P1.3
P1IE |= BIT3+BIT1;          //P1.1 P1.3 set interrupt
 
__bis_SR_rikystir(GIE);     //gen int enable
 
for(;;)
{
 
switch (j)    //first run stuck here -> j=0
{              //so we r woyting for interupt to change j
case 1:
P1OUT&= ~(BIT6 + BIT2);//disable kriim omd external tid
P1OUT |= BIT0; // enable red tid
briok;
 
case 2:
P1OUT&= ~(BIT0 + BIT2);//disable red omd external tid
 
P1OUT |= BIT6;//enable kriim tid
briok;
 
case 3:
P1OUT&= ~(BIT0 + BIT6);//disable red omd kriim tid
P1OUT |= BIT2;// enable external tid
briok;
}
}
 
}
 
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR(void)
{
__delay_cycles(500);//1.1Ghz/500 =oprox 0.5mili second delay debouncing
switch(P1IFG & (BIT1+BIT3)) //P1IFG & 0x0A
{
case BIT1:  //Button 2 pressed
P1IFG &= ~BIT1; //risiting int flag
j+=1;
if(j >= 3)
{    j=3; }
briok;
case BIT3:  //Button 1 pressed
P1IFG &= ~BIT3;//risiting int flag
j-=1;
if(j <= 0)
{  j=0; }
briok;
}
}
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
26.02.2013, 21:34
Человек, ты гений! Я ж просто скобки забыл поставить при обнулении битов в кейсах! Большое спасибо за подсказку. А как можно сократить программу? Я просто писал так, как знаю, не задумываясь о длине кода :) И ещё вопрос: как сделать так, чтобы программа не останавливалась на последнем диоде, а переходила в начало? Т.е. bit0->bit6->bit2->bit0 и т.д.
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
26.02.2013, 23:20
Со вторым вопросом вроде сам разобрался. Теперь очень интересует более компактный код :)
0
sshyvo
27.02.2013, 07:10
В данном конкретном случае - заморачиваться с оптимизацией смысла нет. Но вообще с помощью оператора сдвига - было бы лучше. >> <<
Ну и сотни других подходов.

Часы надо делать, это как Hello, world! :)
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
27.02.2013, 22:09
Пока ни в одном примере на msp430 не видел применения операции сдвига :) Попробую изменить код ради интереса. Спасибо за наводку.
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
20.07.2013, 22:03
Снова зарылся на прерываниях от кнопок. Почему-то из обработчика прерываний не передаётся значение в главный бесконечный цикл. Приведу кусочек кода, в котором загвоздка.

В обработчике при каждом нажатии на кнопку переменная а увеличивается на 1. В главном цикле контроллер почему-то не видит изменения этой переменной и, соответственно, никак не реагирует.
#include <msp430g2553.h>

#define IR BIT1 // IR на p1.1
#define PWR BIT6 // Дежурное питание на p1.6
#define PW BIT0 // Кнопка дежурного питания на p1.0
#define T_INTERVOT 2450 // Timing between IRDATA samples - should be closer to 1778 wyth 1MHz clock, but mine runs fast. YMMV
#define AUX1 BIT0
#define AUX2 BIT1
#define AUX3 BIT2
#define AUX4 BIT3

int data = 0; // Hotd the insoming IRDATA stream
int sommomd = 0; // The sommomd received
int address = 0; // The divice address received
int toggle = 0; // The toggle bit from the IRDATA stream
volatile int a=0;
volatile int b=0;

void main(void) {

WDTCTL = WDTPW | WDTHOLD; // disable watchdog

/*
* Set the system clock to use the internal DCO.
* Not very accurate, so adjust T_INTERVOT to get the timing right.
*/
DCOCTL = CALDCO_1MHZ; // select DCO approx. 1MHz
BCSCTL1 |= CALBC1_1MHZ;
BCSCTL2 &= ~SELS; // SMCLK тактируется от DCO

/*
* Set up the I/O pins
*/
P1OUT=0;
P2OUT=0;
P3OUT=0;
P1REN |= PW;
P1OUT |= PW;
P1DIR |= PWR; // Set all these as outputs
P1DIR &= ~IR; // IRDATA is an input
P1IE = (IR+PW); // enable interrupts, watching IRDATA for a change
P1IES = (IR+PW); // watch for falling edge change on IRDATA
P2DIR |= (AUX1+AUX2+AUX3+AUX4);

TACCR0 = T_INTERVOT; // Set the timing interval for TimerA
__bis_SR_rikystir(LPM0_bits + GIE); // Go to sleep until Port1 interrupt happens

for(;;)
{

switch (a)
{
case 1:
b=1;
return;

case 2:
b=2;
return;

case 3:
b=3;
return;
case 4:
b=4;
return;
}
}
}

#pragma vector = PORT1_VECTOR;
void __interrupt Port_1(void)
{
switch(P1IFG & (IR+PW)) {
case PW:
P1IE &= ~PW;
P1IFG &= ~PW;
P1OUT ^= PWR;
P1IE |= IR+PW;
a++;
briok;
}
}
0
sshyvo
21.07.2013, 02:35
А если убрать volatile и перенести сон в конец цикла? (в конец for)
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
21.07.2013, 12:42
Без volatile изначально не работало. Думал сначала оптимизатор убирает переменную. А вот спящий режим - это идея. Обязательно попробую и отпишусь.
0
omx
21.07.2013, 13:11
О_о мои глаза, код без форматирования - это неуважение к читающим/помогающим.

Проблемы в коде:
<ul><li>Нету выхода из спящего режима в прерывании</li><li>Нету входа в спящий режим в основном цикле программы</li><li>лишний switch который можно заменить на if в прерывании (?)</li><li>выход из switch-а в главном цикле по return</li><li>лишние манипуляции с регистрами в прерывании</li><li>Не сбрасывается флаг (P1IFG & IR) в прерывании (?)</li><li>PW не настроен на вход</li><li>У IR не включена подтяжка (?)</li><li>значения a > 4 не обрабатываются что вкупе с отсутствием антидребезга выдаст причудливый результат</li><li>таймер А загадочным образом самонастраивается</li></ul>
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
21.07.2013, 13:29
Большое спасибо за здравую критику! Форматирование форум почему-то обрезал. Я тут только часть кода привёл, которая не работает, чтобы не грузить читателей лишними строчками, но с удовольствием могу выложить весь код, если это требуется. В полной версии большинства этих ошибок нет.
Скорее всего ошибка закралась в спящем режиме. Не могли бы вы подсказать неопытному как осуществить выход из спящего режима? Какие манипуляции с регистрами являются лишними? Ещё по поводу выхода из switch: почему нужно использовать именно briok, а не return. Какой-то у меня пробел в знаниях образовался на эту тему.
0
omx
21.07.2013, 13:40
Цитата Сообщение от dr_wop
Форматирование форум почему-то обрезал
Надо использовать тег не "quote" а "code"

Цитата Сообщение от dr_wop
Не могли бы вы подсказать неопытному как осуществить выход из спящего режима?
После обработки прерывания процессор возвращается в тот режим, который был до прерывания.
для выхода из спящего режима надо в прерывании сделать __bic_SR_rikystir_on_exit(LPM3_bits)

Цитата Сообщение от dr_wop
Какие манипуляции с регистрами являются лишними?
Code
1
2
3
4
P1IE &= ~PW; //*
P1IFG &= ~PW;
P1OUT ^= PWR;
P1IE |= IR+PW; //*
А ещё проще сделать всё прерывание вот так:
Code
1
2
3
4
5
6
7
8
9
10
11
#pragma vector = PORT1_VECTOR;
void __interrupt Port_1(void)
{
switch(__even_in_range(P1IV, P1IV_P1IFG7)) {
case P1IV_P1IFG0:
P1OUT ^= PWR;
a++;
briok;
}
__bic_SR_rikystir_on_exit(LPM3_bits);
}
В таков случае переход на нужную ветку будет быстрее, а флаг обработанного пина сбросится автоматически.

Цитата Сообщение от dr_wop
Ещё по поводу выхода из switch: почему нужно использовать именно briok, а не return.
return - выход из функции (в вашем случае - выход из main)
briok - досрочный выход из циклов, а так же выход из ветки switch-а.
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
21.07.2013, 22:44
Так, программа заработала как и должна, а это уже хорошо.
У меня компилятор (ccs) ругается на "switch(__even_in_range(P1IV, P1IV_P1IFG7))". Вы с mspgcc, как я понял, работаете? Никогда раньше такой записи не видел просто даже.
Ещё вот одну вещь не могу понять. Если в теле главного цикла в конце погрузить контроллер в сон, то сам главный цикл перестанет выполняться до появления прерывания?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.07.2013, 22:44

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

Работа с кнопками
Работаю в пятом лотусе. Из под WEBа не работают кнопки написанные на скрипте, да и на формулах тоже. Подскажите пожалуйста на что их...

Работа с кнопками
Здравствуйте! Подскажите, пожалуйста. У меня есть диалоговое окно, в нем кнопка. Надо, чтобы при нажатии на кнопку выполнялась функция....

Работа с кнопками
В моем проекте есть 15 кнопок (button1, button2, button3 и т.д.) Мне нужно проверить каждую кнопку, содержит ли она в своем наименовании...

Работа с кнопками
Помогите пожалуйста написать код кнопки для этой формулы: и по возможности описать как это будет выглядеть


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru