home *** CD-ROM | disk | FTP | other *** search
- /* PWM per luminosita' led */
- #include <pic1684.h>
-
- void aspetta(unsigned int nvol);
- void inizializza();
- void getkey();
-
- void inizializza()
- {
- INTCON=0; /* disabilita gli IRQ */
- PORTB=0;
- TRISB=0xff; /* porta B: tutti i pin come input */
- OPTION=0; /* abilita resistenze di pull-up sulla porta B */
- TRISA=0; /* porta A: tutti i pin come output */
- PORTA=0;
- }
-
- void aspetta(unsigned int nvol) /* Con una frequenza di 6.7Khz */
- { /* aspetta circa nvol x 4 ms */
- unsigned int i;
- unsigned int ib;
- for(i=0;i!=nvol;i++) {
- for (ib=0;ib!=1;ib++);
- }
- }
-
- unsigned int n1,n2; /* valori di attesa per PWM */
- unsigned int key; /* stato della porta B */
- unsigned int key1,key2,kp1,kp2; /* variabili per filtro anti-rimbalzo */
-
- void main() {
- unsigned int dummy;
- n1=8; /* PWM a 4 bit */
- n2=15-n1;
- key1=0;
- key2=0;
- kp1=0;
- kp2=0;
- inizializza();
- do {
- PORTA=0x0f; /* ciclo PWM */
- aspetta(n1); /* con f.lavoro=6.7 Khz si raggiunge */
- dummy=PORTB&key; /* una frequenza di PWM di 15Hz circa */
- if (dummy!=0xff)
- getkey();
- PORTA=0;
- aspetta(n2);
- } while(1);
- }
-
- void getkey() {
- key=PORTB;
- if ((key&1)==0) { /* se sembra premuto il tasto su PB0 */
- if (kp1) { /* e se sembrava giα premuto 66 ms fa */
- key1++; /* incrementa il contatore del filtro */
- if (key1==15) { /* se sono 66x16 ms che il tasto sembra premuto */
- key1=0; /* allora vuol dire che Φ effettivamente premuto */
- if (n1!=0) /* e diminuisce la luce */
- n1--;
- else n1=15;
- n2=15-n1;
- }
- }
- else kp1=1; /* anche se non sembrava premuto 66 ms fa ora lo sembra! */
- }
- else { /* se non sembra premuto */
- kp1=0; /* non e' premuto (non gestisce il rilascio) */
- key1=0; /* resetta il contatore del filtro */
- }
- if ((key&2)==0) {
- if (kp2) {
- key2++;
- if (key2==15) {
- key2=0;
- n1++;
- n1=n1&0x0f;
- n2=15-n1;
- }
- }
- else kp2=1;
- }
- else {
- kp2=0;
- key2=0;
- }
- }
-
-