728x90

728x90

Showing posts with label MPLABX. Show all posts
Showing posts with label MPLABX. Show all posts

Friday, July 18, 2025

PIC18F2550 Simple DIY Prototype Board

Overview

PIC18F2550 is a high-end 8-bit PIC micro-controller from Microchip Technology. I has a USB transceiver inside. Its Flash memory is 32kBytes and able to operates up to 48MHz (12MIPS) using its hardware PLL.

This chip is a little old but I have a dozen of of it. So I decided to make a prototype board with a PICKIT2 device programmer together since I have all required components at my workshop.

PIC18F2550 Simple DIY Prototype Board
3D View of PIC18F2550 Simple DIY Prototype Board


 

PIC18F2550 Simple DIY Prototype Board
3D View of PIC18F2550 Simple DIY Prototype Board

PIC18F2550 Simple DIY Prototype Board

PIC18F2550 Simple DIY Prototype Board

 

PIC18F2550 Simple DIY Prototype Board

PIC18F2550 Simple DIY Prototype Board 

 

Using a prototype board could be safer and quicker than placing and wiring all components on breadboard.

 

There are some functions on this board:

  1. PICKit2 device programmer
  2. +5VDC voltage regulator
  3. RS-232 to TTL converter
  4. ICSP and AVR ISP header for PIC and AVR programming
  5. DIP switch for device programming enable
  6. Four LEDs
  7. Two push buttons
  8. Reset button
  9. 28-pin male header
  10. 20MHz crystal oscillator with DIP switch

 

Schematic

Protues VSM has schematic capture, PCB design tool, 3D visualization, Gerber generator and view, etc. The version I use is Protues 8.9 SP3 (Build 36097). Most of components used in this PCB projects exist in this EDA software. Some footprints with 3D models needs to download from snapeda website. It's free of use but I need to register and log in to download those models. 


PIC18F2550 Simple DIY Prototype Board
Schematic Sheet #1
PIC18F2550 Simple DIY Prototype Board
Schematic Sheet #2

PIC18F2550 Simple DIY Prototype Board
Schematic Sheet #2

It contains three A4 sheets of schematics. Some identical components are used for IC sockets while other are used for IC(s).

PCB Design

PCB design tool in Protues is easy to use than other EDA tools. I make this PCB as a double-side PCB. I don't have to fabricate them by hands using a CNC machine or tone transfer method. Some PCB manufacturer could fabricate it at very low cost.

PIC18F2550 Simple DIY Prototype Board
PCB View in Protues

PCB drill holes are not accurate since it's not a Gerber view of this board. 

This PCB size is approximately 10cmx10cm which is very low cost to order from any PCB manufacturer for instance PCBWay. For single or double sided PCB of 10cmx10cm it cost only 5USD exclude shipping cost. It's a standard and high quality PCB with fast manufacturing and delivery time.

PIC18F2550 Simple DIY Prototype Board

We can order another PCB design at this size to save shipping cost.

PCBWay also offers sponsor project budget for student, electronics hobbyists for their products (PCB, PCBA, etc).

This standard PCB cost only 5USD for 5 to 10pcs (exclude shipping cost) for single or double-sided PCB. It has silk screen component legend and solder mask for both sides.

PIC18F2550 Simple DIY Prototype Board
Top Layer

PIC18F2550 Simple DIY Prototype Board
Bottom Layer

We can instantly upload the Gerber file of the PCB design and instantly quote for price. Additionally there are many shipping method for customer to choose.

If we prefer an in-house DIY PCB processing we can use the image below. Some electronics hobbyists prefer a toner transfer method which is common for most of a single sided PCB. For the double sided PCB with via we need a CNC machine to precisely drill the holes of PCB before it can be putted into an electroplating bath that connect both copper sides.
 

PIC18F2550 Simple DIY Prototype Board

PIC18F2550 Simple DIY Prototype Board

PIC18F2550 Simple DIY Prototype Board

PIC18F2550 Simple DIY Prototype Board

PIC18F2550 Simple DIY Prototype Board

Copper sides pattern making could be make using a CNC machine or a dry film process that require a chemical acid element to etch the copper clad.

Click here to download this design file. 

 

PCB Fabrication

I have been using PCBWay for many years now. PCBWay fabricate PCBs at low cost, fast processing time for only 24 hours, and fast delivery time using any carrier options. This double side 10cmx10cm can be fabricate at only 5USD for 5 to 10pcs by PCBWay. It's a standard PCB with silk screen and solder mask.

A DIY dsPIC30F2010 and dsPIC30F1010 Prototype Board with Programmer
10 PCBs for only 5USD
 

For different size of PCB we can instantly quote on PCBWay website using a zip PCB Gerber file without account.


A DIY dsPIC30F2010 and dsPIC30F1010 Prototype Board with Programmer
PCBWay Instant Quote
 

We can accurately see the preview of fabricated PCB generated by the company's online Gerber file viewer.

PCBWay also offer PCBA assembly service at reasonable price.

A DIY dsPIC30F2010 and dsPIC30F1010 Prototype Board with Programmer
PCBWay PCB Assembly Service

   

 

Friday, July 11, 2025

DIY PICMicro Low Pin Count DIP Prototype Board

Overview 

Using a prototype board for micro-controller firmware testing could save time and safer. Putting an on-board device programmer with prototype board could be more satisfy for electronic hobbyists.

I have some PIC18 and PIC16 series of micro-controllers left from previous projects. I don't know what to do with them anymore. So I put them on single board to PIC program testing next time I need them without checking their pin diagram, and wiring them on bread board. 

DIY PICMicro Low Pin Count DIP Prototype Board
PCB Front View

DIY PICMicro Low Pin Count DIP Prototype Board
PCB Back View
 

I designed a PCB with a 

  1. PICKit2 device programmer (with AVR ISP header)
  2. +5VDC and +3.3VDC low drop out power supply
  3.  RS-232 to TTL logic converter
  4. I2C DS1307 RTC and 24LC08 EEPROM 
  5. 4-bit LCD (HD4478)
  6. 3-digit 056'common cathode multiplexing display 
  7. One passive buzzer with transistor driver (using CCP1 PWM output pin of PIC16F876A)
  8. 8-LED that connects to PORTC of PIC16F876A
  9. A 4x4 keypad matrix that connects to PORTB of PIC16F876A
  10. Three analog inputs (one LM35 and two potentiometers) that connect to RA0...RA1 of PIC16F876A. 
  11. A 28-pin IC socket for 28-pin PIC devices
  12. A 20-pin IC socket for 20-pin PIC devices
  13. A 18-pin IC socket for 18-pin PIC devices
  14. A 14-pin IC socket for 14-pin PIC devices
  15. And a 8-pin IC socket for 8-pin PIC devices

This board seem to be a large PCB with two copper layer near a size of an A4 paper that I'm not yet fabricate it. It need a PCB fabrication service.

Schematic

I use Protues VSM Release 8.16 SP3 to design draw its circuit diagram. Some components are not in its original libraries. So I find and download some devices symbol, footprints and 3D objects from snapeda website. I separate its schematic into A4 sheets. 



DIY PICMicro Low Pin Count DIP Prototype Board
Sheet #1

DIY PICMicro Low Pin Count DIP Prototype Board
Sheet #2

DIY PICMicro Low Pin Count DIP Prototype Board
Sheet #3

DIY PICMicro Low Pin Count DIP Prototype Board
Sheet #4

DIY PICMicro Low Pin Count DIP Prototype Board
Sheet #5

This board could fit,

  1. 28-pin PIC microcontrollers: PIC16F876A, PIC16F886, etc.
  2. 20-pin PIC microcontrollers: PIC16F1459(USB), PIC16F690, etc.
  3. 18-pin PIC microcontrollers: PIC16F1827, PIC16F84A, PIC16F818, etc.
  4. 14-pin PIC microcontrollers: PIC16F630, PIC16F676, etc.
  5. 8-pin PIC microcontrollers: PIC12F629, PIC12F675, PIC12F683, etc.

These are some mid-range PIC micro-controllers I have at my own workshop.

Printed Circuit Board (PCB)

This board size is 8.02x6.30 inches that could be a little bit expensive to order from any professional PCB fabrication service. But if we need to use it with classmate or friend the share cost is cheaper.

DIY PICMicro Low Pin Count DIP Prototype Board
Top Copper non-mirror


DIY PICMicro Low Pin Count DIP Prototype Board
Bottom Copper


DIY PICMicro Low Pin Count DIP Prototype Board
Top Silk

I preview this PCB on an online Gerber viewer software.

DIY PICMicro Low Pin Count DIP Prototype Board
Gerber View Top Copper

DIY PICMicro Low Pin Count DIP Prototype Board
Gerber View Bottom Copper


 Click here to download its design file.


PCB Fabrication

I have been using PCBWay for many years now. PCBWay fabricate PCBs at low cost, fast processing time for only 24 hours, and fast delivery time using any carrier options. This double side 10cmx10cm can be fabricate at only 5USD for 5 to 10pcs by PCBWay. It's a standard PCB with silk screen and solder mask.

A DIY dsPIC30F2010 and dsPIC30F1010 Prototype Board with Programmer
10 PCBs for only 5USD
 

For different size of PCB we can instantly quote on PCBWay website using a zip PCB Gerber file without account.


A DIY dsPIC30F2010 and dsPIC30F1010 Prototype Board with Programmer
PCBWay Instant Quote
 

We can accurately see the preview of fabricated PCB generated by the company's online Gerber file viewer.

PCBWay also offer PCBA assembly service at reasonable price.

A DIY dsPIC30F2010 and dsPIC30F1010 Prototype Board with Programmer
PCBWay PCB Assembly Service


Tuesday, February 20, 2024

PIC16F887 SPI and Nokia 5110 LCD XC8 Example

Overview

The Nokia 5110 LCD module is very popular among electronics hobbyists. This LCD module use the Phillip PCD8544 LCD controller/driver with a display data RAM of 48x84 bit. It can operates between 2.7V and 5.0V DC. Its SPI interface could operate up to 4MBits/s.

PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Sample Program using PIC16F887
 

Its slave SPI interface is very easy to control using a dedicated hardware SPI module or even a software SPI bit-banging method.

PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Nokia 5110 LCD Module


PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Nokia 5110 LCD Module Back Side

PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Panel LPH7366


PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Panel LPH7366

 

Its operating voltage is between +3.3V and +5.0V DC, suitable for most of DIY hobbyist electronics projects.. Its 8 pins are,

  1. RST : Reset (Active Low)
  2. CE   : Chip Enable (Active Low)
  3. DC   : Data(1) or Command(0)
  4. DIN  : Data In 
  5. CLK  : Clock In
  6. VCC  : Positive Supply Voltage
  7. BL    : Back Light
  8. GND : Ground

We can write the data to the display RAM using a vertical or horizontal addressing mode. Using the horizontal addressing mode is very common.

PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Instruction Set

The controller accepts command or data via DC pin (logic 1 for data and logic 0 for command).

PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Serial Protocol

The microprocessor can transfer the data to this chip using a single byte or multiple bytes transmission mode.

PIC16F887 SPI Interfacing using XC8 C compiler

Using the SPI module of PIC16F887 is very easy. It allow a high speed transmission of data to the LCD without interrupting the micro-controller program.

PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Simulating program in Proteus

In this example, the micro-controller send graphic data and text to the LCD repeatedly. 

PIC16F887 SPI and Nokia 5110 LCD XC8 Example
Running Program on PIC16F887 Prototype Board
 

Source Code:

  1.  
  2. #include <xc.h>
  3. #include "config.h"
  4. #include "pcd8544.h"
  5. #include "graphic_84x48.h"
  6.  
  7. #define _XTAL_FREQ 8000000UL
  8.  
  9. void main(void){
  10. OSCCONbits.IRCF=7;
  11. lcd_initialize();
  12. lcd_fill(0x00);
  13.  
  14. while(1){
  15. for(uint16_t i=0;i<sizeof(graphic_84x48);i++)
  16. lcd_write(LCD_D,graphic_84x48[i]);
  17. __delay_ms(5000);
  18. lcd_fill(0);
  19. lcd_text("PIC16F887");
  20. lcd_new_line();
  21. lcd_text("Nokia 5110");
  22. lcd_new_line();
  23. lcd_text("LCD Example");
  24. lcd_new_line();
  25. lcd_text("Using MPLABX");
  26. lcd_text("XC8 Compiler");
  27. lcd_text(" BLOGGER ");
  28. __delay_ms(5000);
  29. lcd_fill(0);
  30. }
  31. }
  32.  

 

I make an PCD8544 driver included in this project. It based on Arduino Playground example.

The PCD8544.h header file:

  1. /* Microchip Technology Inc. and its subsidiaries. You may use this software
  2.  * and any derivatives exclusively with Microchip products.
  3.  *
  4.  * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
  5.  * EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
  6.  * WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
  7.  * PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION
  8.  * WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.
  9.  *
  10.  * IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
  11.  * INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
  12.  * WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
  13.  * BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
  14.  * FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS
  15.  * IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF
  16.  * ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
  17.  *
  18.  * MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE
  19.  * TERMS.
  20.  */
  21.  
  22. /*
  23.  * File:
  24.  * Author:
  25.  * Comments:
  26.  * Revision history:
  27.  */
  28.  
  29. #include <xc.h>
  30. #include "spi.h"
  31.  
  32. #define LCD_C 0
  33. #define LCD_D 1
  34.  
  35. #define LCD_X 84
  36. #define LCD_Y 48
  37.  
  38. #define D_C RC0
  39. #define RST RC1
  40. #define CS RC2
  41. unsigned char char_count=0;
  42.  
  43. void lcd_character(char charactor);
  44. void lcd_fill(unsigned char data);
  45. void lcd_initialize(void);
  46. void lcd_text(char *character);
  47. void lcd_write(char dc,unsigned char _data);
  48. void lcd_new_line();
  49.  
  50. static const char ASCII[][5] =
  51. {
  52. {0x00, 0x00, 0x00, 0x00, 0x00} // 20
  53. ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
  54. ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
  55. ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
  56. ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
  57. ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
  58. ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
  59. ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
  60. ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
  61. ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
  62. ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
  63. ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
  64. ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
  65. ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
  66. ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
  67. ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
  68. ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
  69. ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
  70. ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
  71. ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
  72. ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
  73. ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
  74. ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
  75. ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
  76. ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
  77. ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
  78. ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
  79. ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
  80. ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
  81. ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
  82. ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
  83. ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
  84. ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
  85. ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
  86. ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
  87. ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
  88. ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
  89. ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
  90. ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
  91. ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
  92. ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
  93. ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
  94. ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
  95. ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
  96. ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
  97. ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
  98. ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
  99. ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
  100. ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
  101. ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
  102. ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
  103. ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
  104. ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
  105. ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
  106. ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
  107. ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
  108. ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
  109. ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
  110. ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
  111. ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
  112. ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥
  113. ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
  114. ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
  115. ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
  116. ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
  117. ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
  118. ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
  119. ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
  120. ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
  121. ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
  122. ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
  123. ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
  124. ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
  125. ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
  126. ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
  127. ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
  128. ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
  129. ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
  130. ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
  131. ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
  132. ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
  133. ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
  134. ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
  135. ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
  136. ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
  137. ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
  138. ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
  139. ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
  140. ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
  141. ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
  142. ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
  143. ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
  144. ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
  145. ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
  146. ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ~
  147. ,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f DEL
  148. };

 

The PCD8544.c source file:

  1.  
  2. #include "pcd8544.h"
  3.  
  4. void lcd_character( char character){
  5. int i;
  6. static int x_count=0;
  7. lcd_write(LCD_D,0x00);
  8. for(i=0;i<5;i++){
  9. lcd_write(LCD_D,ASCII[character-0x20][i]);
  10. }
  11. lcd_write(LCD_D,0x00);
  12. x_count+=1;
  13. if(x_count>=12){
  14. x_count=0;
  15. }
  16. char_count=x_count;
  17. }
  18.  
  19. void lcd_fill(unsigned char data){
  20. for(uint16_t i=0;i<LCD_X*LCD_Y/8;i++) lcd_write(LCD_D,data);
  21. }
  22.  
  23. void lcd_new_line(){
  24. int temp;
  25. temp=12-char_count;
  26. if(temp!=0){
  27. for(int i=0;i<temp;i++)
  28. lcd_character(' ');
  29. }
  30. }
  31.  
  32. void lcd_initialize(void){
  33. spi_init();
  34. TRISC0=0;
  35. TRISC1=0;
  36. CS=1;
  37. RST=1;
  38.  
  39. lcd_write(LCD_C,0x21); // LCD Extended Commands
  40. lcd_write(LCD_C,0xB1); // SET LCD CONTRAST
  41. lcd_write(LCD_C,0x04); // set temp coefficient 0x04
  42. lcd_write(LCD_C,0x14); // LCD bias
  43. lcd_write(LCD_C,0x20);
  44. lcd_write(LCD_C,0x0C); // LCD normal Mode
  45.  
  46. /*
  47.   lcd_write(LCD_C,0b00100001);
  48.   lcd_write(LCD_C,0b10010000);
  49.   lcd_write(LCD_C,0b00100000);
  50.   lcd_write(LCD_C,0b00001101);
  51.   */
  52. }
  53.  
  54. void lcd_text( char *character){
  55. while(*character) lcd_character(*character++);
  56. }
  57.  
  58. void lcd_write( char _dc, unsigned char _data){
  59. D_C=_dc;
  60. CS=0;
  61. spi_send(_data);
  62. CS=1;
  63. }
  64.  
  65.  

Click here to download its source file.




320x50

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (57) AVR (58) CCS PICC (28) DAC (1) DHT11 (2) Display (106) Distance Sensor (3) DS18B20 (3) dsPIC (3) dsPIC30F1010 (3) dsPIC30F2010 (1) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (68) Interrupt (19) Keil (5) Keypad (10) LCD (48) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (73) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (10) PCD8544 (3) PCF8574 (5) PIC (108) PIC12F (3) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (12) PICKit2 (1) PWM (11) RTC (9) Sensor (11) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (96)

tyro-728x90