00001
00002
00003
00004
00005
00006 #include "piccolo_all.h"
00007 #include <stdio.h>
00008 #include <delays.h>
00009
00027
00028 #define RSHIGH() LEDport |= 0x01;
00029 #define RSLOW() LEDport &= 0xFE;
00030 #define RWHIGH() LEDport |= 0x02;
00031 #define RWLOW() LEDport &= 0xFD;
00032 #define EHIGH() LEDport |= 0x04;
00033 #define ELOW() LEDport &= 0xFB;
00034 #if defined(__18F14K50)
00035 #define BUSY_FLAG PORTCbits.RC7;
00036 #elif defined(__18F4550)
00037 #define BUSY_FLAG PORTDbits.RD7;
00038 #endif
00039 #define DATA_DIR_RD() LEDtris = 0xF0;
00040 #define DATA_DIR_WR() LEDtris = 0x00;
00041 #define OUTPUT_DATA(x) {LEDport = (LEDport & 0x0F) | x;}
00042
00043
00044 void epulse(void){
00045 Delay10TCYx(2);
00046 EHIGH(); Delay10TCYx(2);
00047 ELOW(); Delay10TCYx(1);
00048 }
00049
00050
00051 void lcd_write(unsigned char cmd,
00052 unsigned char data_flag,
00053 unsigned char chk_busy,
00054 unsigned char dflag){
00055 char bflag,c;
00056 if (chk_busy) {
00057 RSLOW();
00058 DATA_DIR_RD();
00059 RWHIGH();
00060 do {
00061 EHIGH();
00062 Delay10TCYx(2);
00063 bflag = BUSY_FLAG;
00064 ELOW(); Delay10TCYx(2);
00065 epulse();
00066 } while(bflag);
00067 } else {
00068 Delay10KTCYx(12);
00069 }
00070 DATA_DIR_WR();
00071 if (data_flag) {
00072 RSHIGH();
00073 }
00074 else RSLOW();
00075 RWLOW();
00076 c = cmd & 0xF0;
00077 OUTPUT_DATA(c);
00078 epulse();
00079 if (dflag) {
00080 c = (cmd & 0x0F)<<4;
00081 OUTPUT_DATA(c);
00082 epulse();
00083 }
00084 }
00085
00086
00087 void lcd_init(void) {
00088
00089 DATA_DIR_WR();
00090 ELOW();
00091 RSLOW();
00092 RWLOW();
00093
00094 Delay10KTCYx(60);
00095 lcd_write(0x30,0,0,0);
00096 Delay10KTCYx(6);
00097 lcd_write(0x30,0,0,0);
00098 lcd_write(0x30,0,0,0);
00099 lcd_write(0x20,0,0,0);
00100
00101 lcd_write(0x28,0,0,1);
00102
00103 lcd_write(0x08,0,1,1);
00104 lcd_write(0x01,0,1,1);
00105 lcd_write(0x0C,0,1,1);
00106 stdout = _H_USER;
00107
00108 }
00109
00110
00111
00112 void _user_putc (auto char c) {
00113 lcd_write(c,1,1,1);
00114 }
00115
00116 void main(void){
00117 DISABLE_ALL_ANALOG();
00118
00119 lcd_init ();
00120 printf(" Isten hozott a PICCOLO projekthez! ");
00121 lcd_write(0xC0,0,1,1);
00122 #if defined(__18F14K50)
00123 printf(" PIC18F14K50 MCU, lcd_4bit.c program");
00124 #else
00125 printf(" PIC18F4550 MCU, lcd_4bit.c program ");
00126 #endif
00127 while(1) {
00128 Delay10KTCYx(120);
00129 Delay10KTCYx(120);
00130 Delay10KTCYx(120);
00131 lcd_write(0x18,0,1,1);
00132 }
00133 }