Как мога да се опрости тази функция?

O

otuzsubat

Guest
Използвам 4x3 клавиатура в проекта си. Аз използвам C0, C1, C2 и C5 щифтове като продукция, и E0, E1, E2 като суровини. Може ли тази функция да бъде по-просто? Чар one_char (Void) {грозен Int ред,, (ред = 0; ред
 
Няма да помогне много, за да се опрости, тъй като човешките пръсти са много по-бавно от Калифорнийския университет. Както и да е, ако се приеме, че други игли от порт C не са изходни пина, може просто да изведе 0x17 до пристанище C в края на за цикъл, вместо да има толкова много output_high. (При условие, че забраните CCS, авто-трис настройка разбира се) При изпитвания за колони, ако можете да се гарантира че потребителски преси само на един клавиш във времето, можете просто да тествате за този единствен пин. Опитайте се да използвате ред + ред + ред или ред + = (ред
 
Аз използвам други игли на C. Всъщност, аз искам да знам как мога да задам или да изчистите някои щифтове по едно и също време, без да се променят други игли. Междувременно кандидатствах sugestion, и функцията ми работи по-бързо сега.
 
Между другото, да сте се опитали код преди? Имате ли външен превключвател debouncing верига? Защото това не е направено в областта на софтуера [/ цитат] ще добавя кодекси за debouncing,, но преди това аз искам да се намали размера на функция.
 
Можете да направите някои трикове. Като например за връщане част: промяна, ако връщане ((ред * 3) един 0 X30; друго, ако (входните (PIN_E0) && входни (PIN_E1) ​​&& вход ((вход (PIN_E0) && Входяща мощност (PIN_E1) ​​&& вход (PIN_E2)!)! PIN_E2)) връщане ((ред * 3) +2 +0 X30); друго, ако (вход (PIN_E0) && вход (PIN_E1), && вход (PIN_E2)) връщане ((ред * 3) 3 0 X30); друг връщане ( 0);: CONST грозен Чар преобразуване [8] = {0,0,0,1,0,2,3,0}; връщане (конверсия [вход (port_E) и 0x07] == 0 0: (конверсия [? вход (port_E) и 0x07] + 0x30 + ред * 3)); Не проверява за коректност, но концепцията е ОК.
 
Ако приемем, че може да подаде към всичките четири бита на пристанищните в един изход операция, бихте могли да се променят от ред + + между цикли, да гребе
 
Смених си функция, както по-долу. Аз го разделени на две функции. Основните промени са, аз съм "за" контур за променливата "ред" и вместо на възвръщаемост ((ред * 3) 3 0 X30) и използването tus_degeri = (ред + = (ред
 
Вие също може да зададете всички изходните пинове високо след това изберете кой от тях да поставите нисък с отчета за случая. Но за тази програма, която най-вече спестява писане. Той може да бъде по-компактен код, но този не винаги е така, когато броят на случаите е незначителен.
 
След определяне на pin_c пристанища познато състояние в началото на функцията, вие само трябва да напишете с тези промени: за CHAR tus_tara_degerlendir (Void) {байт Temp, ред, ред = 0; output_low (pin_c0); output_high (pin_c1) ; output_high, (pin_c2); output_high, (pin_c5); Temp = tus_degerlendir (ред), ако (temp! = 0) връщане (Temp); ред = 1; output_high, (pin_c0); output_low (pin_c1) / / не НЕОБХОДИМИ output_high ( pin_c2); / НЕ / НЕОБХОДИМИ output_high, (pin_c5) Temp = tus_degerlendir-(ред); ако, (temp! = 0) връщане (Temp); ред = 2 / / не НЕОБХОДИМИ output_high, (pin_c0); output_high, (pin_c1); output_low (pin_c2); / / не НЕОБХОДИМИ output_high, (pin_c5); Temp = tus_degerlendir (ред), ако, (temp! = 0) връщане (Temp); ред = 3; / НЕ / НЕОБХОДИМИ output_high, "(pin_c0); / / не НЕОБХОДИМИ output_high , (pin_c1); output_high (pin_c2); output_low, (pin_c5); Temp = tus_degerlendir (ред), ако (temp! = 0) връщане (Temp); връщане (0x00);}
 

Welcome to EDABoard.com

Sponsor

Back
Top