📄 f_8_21_ledsw1.c
字号:
#include "config.h"#include "delay.h"#include "serial.c"// tests power-on reset bits, watchdog timer, and persistent variables
//prototypeschar getch (void);
void putch (char c);
void pcrlf(void);
/* return 8 bit char from Recieve port */char getch (void){ unsigned char c; while (!RCIF); /* check RCIF bit */ c = RCREG; return(c);}/* send 8 bit char to Recieve port */void putch (char c){ /* wait until transmit reg empty */ while (!TXIF); /* check TXIF bit */ TXREG = c;} void pcrlf (void){ putch(0x0a); putch(0x0d);}// 'persisent' prevents reset_cnt from being cleared on reset// however, reset_cnt is still stored in register bank, so is volatile// each press and release changes state#define LED_OFF 0 // turn off#define LED_ON 1 // turn on#define LED_BLINK 2 // start blinking#define LED_STOP 3 // stop blinkingunsigned char state;void main(void){ serial_init(95,1); // 19200 in HSPLL mode, crystal = 7.3728 MHz pcrlf(); // this subroutine prints a newline to the terminal printf("Led Switch/IO started"); pcrlf(); state = LED_OFF; // RB4 is the output, RB7, RB0 are inputs TRISB = 0xEF; LATB = 0x00; // enable the weak pullup on port B RBPU = 0; while(1) { switch (state) { case LED_OFF: printf("LED_OFF");pcrlf(); LATB4 = 0; while(RB0);DelayMs(30); // wait for press while(!RB0);DelayMs(30); // wait for release state = LED_ON; break; case LED_ON: printf("LED_ON");pcrlf(); LATB4 = 1; while(RB0);DelayMs(30); // wait for press while(!RB0);DelayMs(30); // wait for release if (RB7) state = LED_BLINK; else state = LED_OFF; break; case LED_BLINK: printf("LED_BLINK");pcrlf(); // while not pressed while (RB0) { // toggle LED if (LATB4) LATB4 = 0; else LATB4 = 1; DelayMs(250); } DelayMs(30);//switch debounce state = LED_STOP; break; case LED_STOP: printf("LED_STOP");pcrlf(); LATB4 = 1; // freeze on while(!RB0); // wait for release DelayMs(30);//switch debounce state = LED_OFF; break; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -