Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2017, 20:41   #1
Tamago4aRUS
Новичок
Джуниор
 
Регистрация: 18.08.2015
Сообщений: 16
По умолчанию Микроконтроллеры Visual C++ - При нажатии кнопки 1, по стандарту выставляется число 0, если нажать ещё раз - выставится 1, потом 2. и так до числа 9. После 9 идёт 0

Хочу сделать: "При нажатии кнопки 1, по стандарту выставляется число 0, если нажать ещё раз - выставится 1, потом 2. и так до числа 9. После 9 идёт 0."
На данный момент есть это:
Код:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	План работы простейшего калькулятора, умеющего считать однозначные числа																				//
//	1) Очистка содержимого портов																							//
//	2) Установка портов на нужные биты(выходы)																				//
//	3) При нажатии кнопки 1, по стандарту выставляется число 0, если нажать ещё раз - выставится 1, потом 2.				//
//	и так до числа 9.																										//
//	4) При выборе первой кнопкой нужного числа, пользователь нажимает вторую чтобы сохранить результат.						//
//	Это число сохраняется в памяти чтобы в дальнейшем его использовать.														//
//	5) Повторяется пункт 3 для второго числа.																				//
//	6) Повторяется пункт 4 для второго числа.																				//
//	7) Пользователю даётся возможность выбрать число от 0 до 3. 0 - сложение, 1 - вычитание, 2 - умножение, 3 - деление.	//
//	8) На "полосе" светодиодов проанимировать полосу загрузки. Типо всё так круто что он там что-то думает и считает =)		//
//	9) Выдать готовый результат на табло.																					//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define F_CPU 16000000UL //16MHz
#include <avr/io.h>
#include <util/delay.h>

#define DIG1_PD4 4
#define DIG2_PD5 5
#define A_PD6 6
#define B_PD7 7
#define C_PB0 0
#define D_PB1 1
#define E_PB2 2
#define F_PB3 3
#define G_PB4 4
#define DELAY_MS 1000
#define BUTTON1_PD 3
#define BUTTON2_PD 2
void clean(void) {
	//1. Очистка содержимого портов
	PORTD |= ((1<<A_PD6)|(1<<B_PD7));
	PORTB |= ((1<<C_PB0)|(1<<D_PB1)|(1<<E_PB2)|(1<<F_PB3)|(1<<G_PB4));
	PORTD |= ((1<<DIG1_PD4)|(1<<DIG2_PD5)|(1<<A_PD6)|(1<<B_PD7)); //отключение битов 4-7 порта D
	PORTB |= ((1<<C_PB0)|(1<<D_PB1)|(1<<E_PB2)|(1<<F_PB3)|(1<<G_PB4)); //отключение битов 0-4 порта B
	PORTD = 0x00;
	PORTB = 0x00;
	PORTC = 0x00;
}
int main(void) {
	//2. Установка портов на нужные биты(выходы)
	UCSRB &=~((1<<RXEN)|(1<<THEN));//некуда было пихнуть
	DDRD = 0xFF;
	DDRB = 0xFF;
	DDRC = 0xFF;

	DDRD |= ((1<<DIG1_PD4)|(1<<DIG2_PD5)|(1<<A_PD6)|(1<<B_PD7)); //выставление битов 4-7 порта D на вывод
	DDRB |= ((1<<C_PB0)|(1<<D_PB1)|(1<<E_PB2)|(1<<F_PB3)|(1<<G_PB4)); //выставление битов 0-4 порта B на вывод

	DDRD &= ~((1<<BUTTON1_PD)|(1<<BUTTON2_PD));
	PORTD |= ((1<<BUTTON1_PD)|(1<<BUTTON2_PD));
}
// функция включения цифр от 0 до 9
void show(int digit) {
	switch(digit) {
		case 0: {
			PORTD &= ~((1<<A_PD6)|(1<<B_PD7));
			PORTB &= ~((1<<C_PB0)|(1<<D_PB1)|(1<<E_PB2)|(1<<F_PB3));
		}
		break;
		case 1: {
			PORTD &= ~(1<<B_PD7);
			PORTB &= ~(1<<C_PB0);
		}
		break;
		case 2: {
			PORTD &= ~((1<<A_PD6)|(1<<B_PD7));
			PORTB &= ~((1<<D_PB1)|(1<<E_PB2)|(1<<G_PB4));
		}
		break;
		case 3: {
			PORTD &= ~((1<<A_PD6)|(1<<B_PD7));
			PORTB &= ~((1<<C_PB0)|(1<<D_PB1)|(1<<G_PB4));
		}
		break;
		case 4: {
			PORTD &= ~(1<<B_PD7);
			PORTB &= ~((1<<C_PB0)|(1<<F_PB3)|(1<<G_PB4));
		}
		break;
		case 5: {
			PORTD &= ~(1<<A_PD6);
			PORTB &= ~((1<<C_PB0)|(1<<D_PB1)|(1<<F_PB3)|(1<<G_PB4));
		}
		break;
		case 6: {
			PORTD &= ~(1<<A_PD6);
			PORTB &= ~((1<<C_PB0)|(1<<D_PB1)|(1<<E_PB2)|(1<<F_PB3)|(1<<G_PB4));
		}
		break;
		case 7: {
			PORTD &= ~((1<<A_PD6)|(1<<B_PD7));
			PORTB &= ~(1<<C_PB0);
		}
		break;
		case 8: {
			PORTD &= ~((1<<A_PD6)|(1<<B_PD7));
			PORTB &= ~((1<<C_PB0)|(1<<D_PB1)|(1<<E_PB2)|(1<<F_PB3)|(1<<G_PB4));
		}
		break;
		case 9: {
			PORTD &= ~((1<<A_PD6)|(1<<B_PD7));
			PORTB &= ~((1<<C_PB0)|(1<<D_PB1)|(1<<F_PB3)|(1<<G_PB4));
		}
		break;
	}
}

main(void) {
	while(1) {
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(0);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(1);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(2);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(3);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(4);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(5);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(6);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(7);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(8);
		}
		if( (PIND & 1<<BUTTON1_PD) == 0 ) {
			show(9);
		}
	}
Не вникайте в очистку и настройку выходов. Ведь у каждого микроконтроллера по своему это делается. Меня больше интересует самая нижняя часть кода. Как поставить счётчик на show или на case. Или надо цикл поменять? Или инкремент где-то поставить?
Tamago4aRUS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поменять положительное число на отрицательное при получении результата после формулы "если", При использовании формулы "если" выходят положительные и отрицательные числа asanee Помощь студентам 2 05.01.2017 08:45
Говорят, что число "Счастливое" если сумма цифр левой половины числа равна сумме цифр правой половины числа. если число имеет нече Xumera Паскаль, Turbo Pascal, PascalABC.NET 1 18.11.2013 21:45
Каждый раз при нажатии кнопки - новое действие, как? FleXik Общие вопросы Delphi 3 28.10.2013 09:48
в поле ввести число и при нажатии кнопки получить рандом от этого числа NIQK HTML и CSS 4 03.03.2010 10:51