


program electronique_sirene_007;
var
i, iProg, iDelay, iPeriod: integer;
bBtnPressed: boolean;
InProg: sbit at GPIO.0;
OutAudio: sbit at GPIO.1;
OutLed: sBit at GPIO.2;
const
iProgMax = 2;
procedure Init;
begin
CMCON := %00000111; // comparators OFF
TRISIO.0 := 1;
TRISIO.1 := 0;
TRISIO.1 := 0;
ANSEL.ANS0 := 0; // set as digital I/O
ANSEL.ANS1 := 0; // set as digital I/O
ANSEL.ANS2 := 0; // set as digital I/O
end;
procedure Play_Prg_00;
begin
for iDelay := 1 to 100 do
begin
for iPeriod := 0 to 5 do
begin
OutAudio := OutAudio xor 1;
for i := 0 to iDelay do
delay_us(1);
end;
end;
end;
// ...// autres programmes sonores
// ...
// main program
begin
Init;
iProg := 0;
while true do
begin
// program change ?
if Button(GPIO, 0, 100, 0) and (not bBtnPressed) then
begin
bBtnPressed := true;
if iProg < iProgMax then
inc(iProg)
else
iProg := 0;
end;
// program to play ?
if GPIO.0 = 1 then bBtnPressed := false;
case iProg of
0 : Play_Prg_00;
1 : Play_Prg_01;
2 : begin
Play_Prg_00;
Play_Prg_01;
end;
end;
// synchro led on / off
OutLed := OutLed xor 1;
end;
end.
