Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** I N C L U D E S **********************************************************/
- #include <p18F4550.h>
- #include <delays.h>
- #include <stdlib.h>
- #include <adc.h>
- #include <usart.h>
- #include <i2c.h>
- #include <xlcd.h>
- #pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
- #pragma config CPUDIV = OSC1_PLL2
- #pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
- #pragma config FOSC = HSPLL_HS
- #pragma config FCMEN = OFF
- #pragma config IESO = OFF
- #pragma config PWRT = OFF
- #pragma config BOR = ON
- #pragma config BORV = 3
- #pragma config VREGEN = ON //USB Voltage Regulator
- #pragma config WDT = OFF
- #pragma config WDTPS = 32768
- #pragma config MCLRE = OFF
- #pragma config LPT1OSC = OFF
- #pragma config PBADEN = OFF
- // #pragma config CCP2MX = ON
- #pragma config STVREN = ON
- #pragma config LVP = OFF
- // #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming
- #pragma config XINST = OFF // Extended Instruction Set
- #pragma config CP0 = OFF
- #pragma config CP1 = OFF
- // #pragma config CP2 = OFF
- // #pragma config CP3 = OFF
- #pragma config CPB = OFF
- // #pragma config CPD = OFF
- #pragma config WRT0 = OFF
- #pragma config WRT1 = OFF
- // #pragma config WRT2 = OFF
- // #pragma config WRT3 = OFF
- #pragma config WRTB = OFF // Boot Block Write Protection
- #pragma config WRTC = OFF
- // #pragma config WRTD = OFF
- #pragma config EBTR0 = OFF
- #pragma config EBTR1 = OFF
- // #pragma config EBTR2 = OFF
- // #pragma config EBTR3 = OFF
- #pragma config EBTRB = OFF
- /** V A R I A B L E S ********************************************************/
- #pragma udata
- /** P R I V A T E P R O T O T Y P E S ***************************************/
- /** V E C T O R R E M A P P I N G *******************************************/
- extern void _startup (void); // See c018i.c in your C18 compiler dir
- #pragma code _RESET_INTERRUPT_VECTOR = 0x000800
- void _reset (void)
- {
- _asm goto _startup _endasm
- }
- #pragma code
- #pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
- void _high_ISR (void)
- {
- ;
- }
- #pragma code _LOW_INTERRUPT_VECTOR = 0x000818
- void _low_ISR (void)
- {
- ;
- }
- #pragma code
- /** D E C L A R A T I O N S **************************************************/
- #pragma code
- #define VFD_CS_TRIS TRISBbits.TRISB7
- #define VFD_SCK_TRIS TRISBbits.TRISB6
- #define VFD_SDATA_TRIS TRISBbits.TRISB5
- #define VFD_CS LATBbits.LATB7
- #define VFD_SCK LATBbits.LATB6
- #define VFD_SDATA LATBbits.LATB5
- #define ASCII_SPACE 0x20 // to clear digits
- // = Display digit length settings =
- // Use it with vfd_bbbyte()
- #define VFD_DISP_9 0x0 // 9 digits vfd
- #define VFD_DISP_10 0x1 // 10 digits vfd
- #define VFD_DISP_11 0x2 // 11 digits vfd
- #define VFD_DISP_12 0x3 // 12 digits vfd
- #define VFD_DISP_13 0x4 // 13 digits vfd
- #define VFD_DISP_14 0x5 // 14 digits vfd
- #define VFD_DISP_15 0x6 // 15 digits vfd
- #define VFD_DISP_16 0x7 // 16 digits vfd
- // = Dimmer value settings =
- // Use it with vfd_bbbyte()
- #define VFD_DIMMER_1_16 0x8 // dimmer low
- #define VFD_DIMMER_2_16 0x9
- #define VFD_DIMMER_4_16 0xA
- #define VFD_DIMMER_6_16 0xB
- #define VFD_DIMMER_8_16 0xC
- #define VFD_DIMMER_10_16 0xD
- #define VFD_DIMMER_12_16 0xE
- #define VFD_DIMMER_14_16 0xF // dimmer high
- // = One-digit display frequency settings =
- // Use it with vfd_bbbyte()
- #define VFD_TDSP_HIGH 0xF6 // 128/fOSC
- #define VFD_TDSP_LOW 0xF7 // 256/fOSC
- // = Auto Increment settings =
- // Use it with vfd_bbbyte()
- #define VFD_AUTOINC_ON 0xF5 // digit position autoincrement enabled
- #define VFD_AUTOINC_OFF 0xF4 // digit position autoincrement disabled
- // = All-digit display ON/OFF =
- // Use it with vfd_bbbyte()
- #define VFD_DIGITS_OFF 0xF0 // all digits are off
- #define VFD_DIGITS_NORMAL 0xF1 // digits will be on if its a character in
- #define VFD_DIGITS_ON 0xF3 // all digits are on always
- // = Cursor ON/OFF =
- // Use it with vfd_set_cursor()
- #define VFD_CURSOR_OFF 0x80 // Seg35 off
- #define VFD_CURSOR_ON 0x10 // Seg35 on
- // = RAM characters =
- // Internally used on vfd_set_ram()
- #define VFD_WRITERAM 0xFC
- // = Outputs =
- // Internally used on vfd_set_output()
- #define VFD_SETOUT 0xF8
- void huguedelay(void)
- {
- Delay10KTCYx(255);
- Delay10KTCYx(255);
- Delay10KTCYx(255);
- Delay10KTCYx(255);
- Delay10KTCYx(255);
- Delay10KTCYx(255);
- }
- void vfd_busy_delay(void) { Nop(); Nop(); Nop(); Nop(); Nop(); Nop(); Nop(); Nop(); }
- void vfd_clock(void) { VFD_SCK = 0; vfd_busy_delay(); VFD_SCK = 1; }
- void vfd_zero(void) { VFD_CS = VFD_SCK = VFD_SDATA = 1; }
- void vfd_mulbbbyte(char data)
- {
- VFD_SDATA = (data & 0b10000000)>>7; vfd_clock();
- VFD_SDATA = (data & 0b01000000)>>6; vfd_clock();
- VFD_SDATA = (data & 0b00100000)>>5; vfd_clock();
- VFD_SDATA = (data & 0b00010000)>>4; vfd_clock();
- VFD_SDATA = (data & 0b00001000)>>3; vfd_clock();
- VFD_SDATA = (data & 0b00000100)>>2; vfd_clock();
- VFD_SDATA = (data & 0b00000010)>>1; vfd_clock();
- VFD_SDATA = (data & 0b00000001); vfd_clock();
- VFD_SDATA = 1;
- }
- void vfd_bbbyte(char data)
- {
- VFD_CS = 0;
- vfd_mulbbbyte(data);
- VFD_CS = 1;
- vfd_busy_delay();
- vfd_busy_delay();
- }
- void vfd_set_ram(char pos, char l1, char l2, char l3, char l4, char l5)
- {
- VFD_CS = 0;
- vfd_mulbbbyte(VFD_WRITERAM);
- vfd_mulbbbyte(pos);
- vfd_mulbbbyte(l1);
- vfd_mulbbbyte(l2);
- vfd_mulbbbyte(l3);
- vfd_mulbbbyte(l4);
- vfd_mulbbbyte(l5);
- VFD_CS = 1;
- vfd_busy_delay();
- vfd_busy_delay();
- }
- void vfd_set_cursor(char x, char data) { vfd_bbbyte(data | x); }
- void vfd_set_output(char p0, char p1) { vfd_bbbyte(VFD_SETOUT | p0 | (p1>>1)); }
- void vfd_goto(char x) { vfd_mulbbbyte(x | 0b11100000); }
- void vfd_putc(char data) { vfd_bbbyte(data); }
- void vfd_puts(char *data, char pos)
- {
- VFD_CS = 0;
- vfd_mulbbbyte(pos | 0b11100000);
- do { vfd_mulbbbyte(*data); vfd_busy_delay(); } while( *data++ );
- VFD_CS = 1;
- vfd_busy_delay();
- vfd_busy_delay();
- }
- void vfd_putrs(const rom char *data, char pos) {
- VFD_CS = 0;
- vfd_mulbbbyte(pos | 0b11100000);
- do { vfd_mulbbbyte(*data); } while( *data++ );
- VFD_CS = 1;
- vfd_busy_delay();
- vfd_busy_delay();
- }
- void main(void)
- {
- unsigned char j;
- vfd_zero();
- TRISBbits.TRISB7 = 0;
- TRISBbits.TRISB6 = 0;
- TRISBbits.TRISB5 = 0;
- huguedelay();
- vfd_bbbyte(VFD_DISP_16); // digit len
- vfd_bbbyte(VFD_DISP_16); // digit len
- vfd_bbbyte(VFD_DISP_16); // digit len
- vfd_bbbyte(VFD_DIMMER_14_16); // dimmer
- vfd_bbbyte(VFD_TDSP_HIGH); // digit frec
- vfd_bbbyte(VFD_DIGITS_NORMAL); // digits normal
- vfd_bbbyte(VFD_AUTOINC_ON); // auto increment
- vfd_bbbyte(VFD_DIGITS_ON); // digits normal
- //while(1);
- huguedelay();
- huguedelay();
- vfd_bbbyte(VFD_DIGITS_NORMAL); // digits normal
- //vfd_goto(14);
- vfd_putrs("XD",14);
- huguedelay();
- huguedelay();
- //vfd_goto(0);
- vfd_putrs("ABCDEFGHIJKLMNOP",0);
- huguedelay();
- huguedelay();
- while(1){
- VFD_CS = 0;
- vfd_goto(0);
- for (j=0;j<15;j++){
- vfd_mulbbbyte("x");
- vfd_busy_delay();
- }
- VFD_CS = 1;
- huguedelay();
- huguedelay();
- VFD_CS = 0;
- vfd_goto(0);
- for (j=0;j<15;j++){
- vfd_mulbbbyte(ASCII_SPACE);
- vfd_busy_delay();
- }
- VFD_CS = 1;
- huguedelay();
- huguedelay();
- }
- vfd_bbbyte(VFD_AUTOINC_OFF); // no auto increment
- while(1){
- for (j=0;j<8;j++){
- huguedelay();
- vfd_bbbyte(j | 0x08); // set dimmer as j changes
- vfd_putc(ASCII_SPACE); // clear previous digit
- vfd_goto(j); // goto digit j
- vfd_putc(j+0x30); // write ascii number of current number (0 is ascii 0x30)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement