Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.67 KB | None | 0 0
  1.  
  2. /** I N C L U D E S **********************************************************/
  3. #include <p18F4550.h>
  4. #include <delays.h>
  5. #include <stdlib.h>
  6. #include <adc.h>
  7. #include <usart.h>
  8. #include <i2c.h>
  9. #include <xlcd.h>
  10.  
  11. #pragma config PLLDIV   = 5         // (20 MHz crystal on PICDEM FS USB board)
  12. #pragma config CPUDIV   = OSC1_PLL2  
  13. #pragma config USBDIV   = 2         // Clock source from 96MHz PLL/2
  14. #pragma config FOSC     = HSPLL_HS
  15. #pragma config FCMEN    = OFF
  16. #pragma config IESO     = OFF
  17. #pragma config PWRT     = OFF
  18. #pragma config BOR      = ON
  19. #pragma config BORV     = 3
  20. #pragma config VREGEN   = ON      //USB Voltage Regulator
  21. #pragma config WDT      = OFF
  22. #pragma config WDTPS    = 32768
  23. #pragma config MCLRE    = OFF
  24. #pragma config LPT1OSC  = OFF
  25. #pragma config PBADEN   = OFF
  26. //      #pragma config CCP2MX   = ON
  27. #pragma config STVREN   = ON
  28. #pragma config LVP      = OFF
  29. //      #pragma config ICPRT    = OFF       // Dedicated In-Circuit Debug/Programming
  30. #pragma config XINST    = OFF       // Extended Instruction Set
  31. #pragma config CP0      = OFF
  32. #pragma config CP1      = OFF
  33. //      #pragma config CP2      = OFF
  34. //      #pragma config CP3      = OFF
  35. #pragma config CPB      = OFF
  36. //      #pragma config CPD      = OFF
  37. #pragma config WRT0     = OFF
  38. #pragma config WRT1     = OFF
  39. //      #pragma config WRT2     = OFF
  40. //      #pragma config WRT3     = OFF
  41. #pragma config WRTB     = OFF       // Boot Block Write Protection
  42. #pragma config WRTC     = OFF
  43. //      #pragma config WRTD     = OFF
  44. #pragma config EBTR0    = OFF
  45. #pragma config EBTR1    = OFF
  46. //      #pragma config EBTR2    = OFF
  47. //      #pragma config EBTR3    = OFF
  48. #pragma config EBTRB    = OFF
  49.  
  50.  
  51. /** V A R I A B L E S ********************************************************/
  52. #pragma udata
  53.  
  54. /** P R I V A T E  P R O T O T Y P E S ***************************************/
  55.  
  56. /** V E C T O R  R E M A P P I N G *******************************************/
  57.  
  58. extern void _startup (void);        // See c018i.c in your C18 compiler dir
  59. #pragma code _RESET_INTERRUPT_VECTOR = 0x000800
  60. void _reset (void)
  61. {
  62.     _asm goto _startup _endasm
  63. }
  64. #pragma code
  65.  
  66. #pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
  67. void _high_ISR (void)
  68. {
  69.     ;
  70. }
  71.  
  72. #pragma code _LOW_INTERRUPT_VECTOR = 0x000818
  73. void _low_ISR (void)
  74. {
  75.     ;
  76. }
  77. #pragma code
  78.  
  79.  
  80. /** D E C L A R A T I O N S **************************************************/
  81. #pragma code
  82.  
  83. #define VFD_CS_TRIS         TRISBbits.TRISB7
  84. #define VFD_SCK_TRIS        TRISBbits.TRISB6
  85. #define VFD_SDATA_TRIS      TRISBbits.TRISB5
  86. #define VFD_CS              LATBbits.LATB7
  87. #define VFD_SCK             LATBbits.LATB6
  88. #define VFD_SDATA           LATBbits.LATB5
  89.  
  90. #define ASCII_SPACE         0x20    // to clear digits
  91.  
  92. // = Display digit length settings =
  93. //  Use it with vfd_bbbyte()
  94. #define VFD_DISP_9          0x0     // 9 digits vfd
  95. #define VFD_DISP_10         0x1     // 10 digits vfd
  96. #define VFD_DISP_11         0x2     // 11 digits vfd
  97. #define VFD_DISP_12         0x3     // 12 digits vfd
  98. #define VFD_DISP_13         0x4     // 13 digits vfd
  99. #define VFD_DISP_14         0x5     // 14 digits vfd
  100. #define VFD_DISP_15         0x6     // 15 digits vfd
  101. #define VFD_DISP_16         0x7     // 16 digits vfd
  102.  
  103. // = Dimmer value settings =
  104. // Use it with vfd_bbbyte()
  105. #define VFD_DIMMER_1_16     0x8     // dimmer low
  106. #define VFD_DIMMER_2_16     0x9
  107. #define VFD_DIMMER_4_16     0xA
  108. #define VFD_DIMMER_6_16     0xB
  109. #define VFD_DIMMER_8_16     0xC
  110. #define VFD_DIMMER_10_16    0xD
  111. #define VFD_DIMMER_12_16    0xE
  112. #define VFD_DIMMER_14_16    0xF     // dimmer high
  113.  
  114. // = One-digit display frequency settings =
  115. // Use it with vfd_bbbyte()
  116. #define VFD_TDSP_HIGH       0xF6    // 128/fOSC
  117. #define VFD_TDSP_LOW        0xF7    // 256/fOSC
  118.  
  119. // = Auto Increment settings =
  120. // Use it with vfd_bbbyte()
  121. #define VFD_AUTOINC_ON      0xF5    // digit position autoincrement enabled
  122. #define VFD_AUTOINC_OFF     0xF4    // digit position autoincrement disabled
  123.  
  124. // = All-digit display ON/OFF =
  125. // Use it with vfd_bbbyte()
  126. #define VFD_DIGITS_OFF      0xF0    // all digits are off
  127. #define VFD_DIGITS_NORMAL   0xF1    // digits will be on if its a character in
  128. #define VFD_DIGITS_ON       0xF3    // all digits are on always
  129.  
  130. // = Cursor ON/OFF =
  131. // Use it with vfd_set_cursor()
  132. #define VFD_CURSOR_OFF      0x80    // Seg35 off
  133. #define VFD_CURSOR_ON       0x10    // Seg35 on
  134.  
  135. // = RAM characters =
  136. // Internally used on vfd_set_ram()
  137. #define VFD_WRITERAM        0xFC
  138.  
  139. // = Outputs =
  140. // Internally used on vfd_set_output()
  141. #define VFD_SETOUT          0xF8   
  142.  
  143.  
  144. void huguedelay(void)
  145. {
  146.     Delay10KTCYx(255);
  147.     Delay10KTCYx(255);
  148.     Delay10KTCYx(255);
  149.     Delay10KTCYx(255);
  150.     Delay10KTCYx(255);
  151.     Delay10KTCYx(255);
  152. }
  153.  
  154. void vfd_busy_delay(void) { Nop(); Nop(); Nop(); Nop(); Nop(); Nop(); Nop(); Nop(); }
  155. void vfd_clock(void) { VFD_SCK = 0; vfd_busy_delay(); VFD_SCK = 1; }
  156. void vfd_zero(void) { VFD_CS = VFD_SCK = VFD_SDATA = 1; }
  157.  
  158. void vfd_mulbbbyte(char data)
  159. {
  160.     VFD_SDATA = (data & 0b10000000)>>7; vfd_clock();
  161.     VFD_SDATA = (data & 0b01000000)>>6; vfd_clock();
  162.     VFD_SDATA = (data & 0b00100000)>>5; vfd_clock();
  163.     VFD_SDATA = (data & 0b00010000)>>4; vfd_clock();
  164.     VFD_SDATA = (data & 0b00001000)>>3; vfd_clock();
  165.     VFD_SDATA = (data & 0b00000100)>>2; vfd_clock();
  166.     VFD_SDATA = (data & 0b00000010)>>1; vfd_clock();
  167.     VFD_SDATA = (data & 0b00000001);    vfd_clock();
  168.     VFD_SDATA = 1; 
  169. }
  170.  
  171. void vfd_bbbyte(char data)
  172. {
  173.     VFD_CS = 0;
  174.     vfd_mulbbbyte(data);
  175.     VFD_CS = 1;
  176.     vfd_busy_delay();
  177.     vfd_busy_delay();
  178. }
  179.  
  180. void vfd_set_ram(char pos, char l1, char l2, char l3, char l4, char l5)
  181. {
  182.     VFD_CS = 0;
  183.     vfd_mulbbbyte(VFD_WRITERAM);
  184.     vfd_mulbbbyte(pos);
  185.     vfd_mulbbbyte(l1);
  186.     vfd_mulbbbyte(l2);
  187.     vfd_mulbbbyte(l3);
  188.     vfd_mulbbbyte(l4);
  189.     vfd_mulbbbyte(l5);
  190.     VFD_CS = 1;
  191.     vfd_busy_delay();
  192.     vfd_busy_delay();
  193. }
  194.  
  195. void vfd_set_cursor(char x, char data) { vfd_bbbyte(data | x); }
  196. void vfd_set_output(char p0, char p1) { vfd_bbbyte(VFD_SETOUT | p0 | (p1>>1)); }
  197.  
  198. void vfd_goto(char x) { vfd_mulbbbyte(x | 0b11100000); }
  199. void vfd_putc(char data) { vfd_bbbyte(data); }
  200. void vfd_puts(char *data, char pos)
  201. {
  202.     VFD_CS = 0;
  203.     vfd_mulbbbyte(pos | 0b11100000);
  204.     do { vfd_mulbbbyte(*data);  vfd_busy_delay(); } while( *data++ );
  205.     VFD_CS = 1;
  206.     vfd_busy_delay();
  207.     vfd_busy_delay();
  208. }
  209. void vfd_putrs(const rom char *data, char pos) {
  210.     VFD_CS = 0;
  211.     vfd_mulbbbyte(pos | 0b11100000);
  212.     do { vfd_mulbbbyte(*data); } while( *data++ );
  213.     VFD_CS = 1;
  214.     vfd_busy_delay();
  215.     vfd_busy_delay();
  216. }
  217.  
  218.  
  219. void main(void)
  220. {
  221.     unsigned char j;
  222.  
  223.     vfd_zero();
  224.     TRISBbits.TRISB7 = 0;
  225.     TRISBbits.TRISB6 = 0;
  226.     TRISBbits.TRISB5 = 0;
  227.  
  228.  
  229.     huguedelay();
  230.  
  231.  
  232.     vfd_bbbyte(VFD_DISP_16);        // digit len
  233.     vfd_bbbyte(VFD_DISP_16);        // digit len
  234.     vfd_bbbyte(VFD_DISP_16);        // digit len
  235.     vfd_bbbyte(VFD_DIMMER_14_16);   // dimmer
  236.     vfd_bbbyte(VFD_TDSP_HIGH);      // digit frec
  237.     vfd_bbbyte(VFD_DIGITS_NORMAL);  // digits normal
  238.     vfd_bbbyte(VFD_AUTOINC_ON);     // auto increment
  239.    
  240.     vfd_bbbyte(VFD_DIGITS_ON);  // digits normal
  241.     //while(1);
  242.     huguedelay();
  243.     huguedelay();
  244.     vfd_bbbyte(VFD_DIGITS_NORMAL);  // digits normal
  245.  
  246.     //vfd_goto(14);
  247.     vfd_putrs("XD",14);
  248.     huguedelay();
  249.     huguedelay();
  250.     //vfd_goto(0);
  251.     vfd_putrs("ABCDEFGHIJKLMNOP",0);
  252.     huguedelay();
  253.     huguedelay();
  254.  
  255.  
  256.     while(1){
  257.         VFD_CS = 0;
  258.         vfd_goto(0);
  259.         for (j=0;j<15;j++){
  260.             vfd_mulbbbyte("x");
  261.             vfd_busy_delay();
  262.         }
  263.         VFD_CS = 1;
  264.         huguedelay();
  265.         huguedelay();
  266.  
  267.         VFD_CS = 0;
  268.         vfd_goto(0);
  269.         for (j=0;j<15;j++){
  270.             vfd_mulbbbyte(ASCII_SPACE);
  271.             vfd_busy_delay();
  272.         }
  273.         VFD_CS = 1;
  274.         huguedelay();
  275.         huguedelay();  
  276.     }
  277.  
  278.     vfd_bbbyte(VFD_AUTOINC_OFF);    // no auto increment
  279.  
  280.  
  281.  
  282.  
  283.     while(1){
  284.         for (j=0;j<8;j++){
  285.             huguedelay();
  286.             vfd_bbbyte(j | 0x08);   // set dimmer as j changes
  287.             vfd_putc(ASCII_SPACE);  // clear previous digit
  288.             vfd_goto(j);            // goto digit j
  289.             vfd_putc(j+0x30);       // write ascii number of current number (0 is ascii 0x30)
  290.         }  
  291.     }
  292.  
  293. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement