Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:11

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Код на C - 89S51 подключен к 7 SEGMENT дисплею
СообщениеДобавлено: 08 мар 2014, 01:50 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
Приветствую, посмотрите код и скажите что не так. Нужно чтобы когда на всех входах P1 были нули (00000000) на P3 была комбинация 01000000 и тд...

#include "AT89X51.h"
void main() {

unsigned char aux;

aux=P1;
if (aux == 0)
P3=126;

if (aux == 1)

P3= 48;
...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код на C - 89S51 подключен к 7 SEGMENT дисплею
СообщениеДобавлено: 08 мар 2014, 15:46 
Заглядывает иногда

Зарегистрирован: 06 фев 2010, 13:53
Сообщения: 99
Откуда: Tushino
Когда значение переменной не может быть вычислено в самой программе (берется из порта ввода, определяется в прерывании и т.п.), в определении переменной должно быть указано "volatile".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код на C - 89S51 подключен к 7 SEGMENT дисплею
СообщениеДобавлено: 08 мар 2014, 18:39 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
Numerikon писал(а):
if (aux == 0)
P3=126;

if (aux == 1)
P3= 48;
...
Цепочка таких условных блоков будет работать быстрее, если вместо if...if...if...if... использовать if...else if...else if...else...

Или оператор switch:
switch (aux) {
case 0: P3=126; break;
case 1: P3=48; break;
... ...
}

Третий вариант - для случая, когда значения aux находятся в диапазоне целых чисел, причём без больших "дыр" в диапазоне. Как раз Ваш случай: значения aux - числа от 0 до 9. Используем массив значений P3, упорядоченный по значениям aux:
char my_7segm_font[10] = { 126, 48, ..., ..., ... };
P3 = my_7segm_font[aux];


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код на C - 89S51 подключен к 7 SEGMENT дисплею
СообщениеДобавлено: 08 мар 2014, 19:15 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4381
Откуда: г. Липецк
ТС постарался охватить как можно бОльшую аудиторию, разместил свой пост и в ветке " Детские вопросы". И там привел более полный пример программы (копипаст):
Цитата:
switch (aux) {
case 0 :
P3=0; //coloca zero no porto P3
break;

case 1 :
P3=1; //coloca zero no porto P3
break;

...

Разрывайтесь на обе, или не отвечайте ни на одну.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код на C - 89S51 подключен к 7 SEGMENT дисплею
СообщениеДобавлено: 08 мар 2014, 19:35 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
anakost писал(а):
ТС постарался охватить как можно бОльшую аудиторию, разместил свой пост и в ветке " Детские вопросы". И там привел более полный пример программы
... ...
Разрывайтесь на обе, или не отвечайте ни на одну.
Да, теперь и я это раздвоение обнаружил, засада :-)
ТС'у - ай-яй-яй.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код на C - 89S51 подключен к 7 SEGMENT дисплею
СообщениеДобавлено: 08 мар 2014, 20:23 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
Закройте тогда эту тему, в том разделе побольше людей обитает, кому интересно : viewtopic.php?f=14&t=18191


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB