Основы программирования микроконтроллеров ATMega128 и 68hc908. Китаев Ю.В. - 37 стр.

UptoLike

Составители: 

37
program myATMega128;
{ $BOOTRST $0F000} {Reset Jump to $0F000}
{$NOSHADOW}
{ $W+ Warnings} {Warnings off}
Device = mega128, VCC=5;
Import ;
From System Import ;
Define
ProcClock = 6000000; //== частота основного кварц.резонатора - 6МГц
StackSize = $0064, iData; //== для времен. хранения адресов возврата и др.
FrameSize = $0064, iData; //== для хранения локальных переменных и
//== фактических параметров
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
const keyASCII: string = '123456789*0#';//== ASCII коды клавиш/цифр
const key8segm: string =
#$F9+#$A4+#$B0+#$99+#$92+#$82+#$F8+#$80+#$90+#$7F+#$C0+#$B6;
{ Var Declarations }
{$IDATA}
var sound :boolean;
s:string[5];//== для хранения 8-ми сегм. Цифр
maskind,j,key,kn,e2temp: byte;
adccode:word;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
function ScanKeyOnce (var kn: byte):boolean;//== однокр. сканирование клав-
ры
var row,col: byte; //== var kn - параметр переменная клавиши
var delay:word;
begin
for col:=0 to 3 do //== сканируем по столбцам матрицы клавиатуры
PORTD:=not(1 shl col);//== 11111110,11111101,11111011,11110111 бегущий
ноль)
for row:=0 to 2 do //== сканируем по строкам матрицы клавиатуры
if ((PIND and ($10 shl row))=0) then //== если обнаружен ноль, то
kn := col*3+row;//== вычисляем порядковый клавиши (0..11)
for delay:=0 to 5000 do endfor;//== задержка на дребезг контактов
return (true); //== возвращаем бит "обнаружено нажатие клавиши"