00001
00002
00003
00004
00005
00006 #include "piccolo_all.h"
00007 #include <stdio.h>
00008 #include <delays.h>
00009
00028 unsigned char chk_busy;
00029 unsigned char i,ch;
00030 const rom unsigned char betwk[] = {0x02,0x04,0x0E,0x01,0x0F,0x11,0x0F,0x00,
00031 0x02,0x04,0x0E,0x11,0x1F,0x10,0x0E,0x00,
00032 0x02,0x04,0x0C,0x04,0x04,0x04,0x0E,0x00,
00033 0x02,0x04,0x0E,0x11,0x11,0x11,0x0E,0x00,
00034 0x02,0x04,0x11,0x11,0x11,0x13,0x0D,0x00,
00035 0x0A,0x00,0x11,0x11,0x11,0x13,0x0D,0x00,
00036 0x05,0x0A,0x11,0x11,0x11,0x13,0x0D,0x00,
00037 0x05,0x0A,0x0E,0x11,0x11,0x11,0x0E,0x00};
00038
00039
00040
00041 #define RSHIGH() LEDport |= 0x01;
00042 #define RSLOW() LEDport &= 0xFE;
00043 #define RWHIGH() LEDport |= 0x02;
00044 #define RWLOW() LEDport &= 0xFD;
00045 #define EHIGH() LEDport |= 0x04;
00046 #define ELOW() LEDport &= 0xFB;
00047 #if defined(__18F14K50)
00048 #define BUSY_FLAG PORTCbits.RC7;
00049 #elif defined(__18F4550)
00050 #define BUSY_FLAG PORTDbits.RD7;
00051 #endif
00052 #define DATA_DIR_RD() LEDtris = 0xF0;
00053 #define DATA_DIR_WR() LEDtris = 0x00;
00054 #define OUTPUT_DATA(x) {LEDport = (LEDport & 0x0F) | x;}
00055
00056
00057 void epulse(void){
00058 Delay10TCYx(2);
00059 EHIGH(); Delay10TCYx(2);
00060 ELOW(); Delay10TCYx(1);
00061 }
00062
00063
00064 void lcd_write(unsigned char cmd,
00065 unsigned char data_flag,
00066 unsigned char chk_busy,
00067 unsigned char dflag){
00068 char bflag,c;
00069 if (chk_busy) {
00070 RSLOW();
00071 DATA_DIR_RD();
00072 RWHIGH();
00073 do {
00074 EHIGH();
00075 Delay10TCYx(2);
00076 bflag = BUSY_FLAG;
00077 ELOW(); Delay10TCYx(2);
00078 epulse();
00079 } while(bflag);
00080 } else {
00081 Delay10KTCYx(12);
00082 }
00083 DATA_DIR_WR();
00084 if (data_flag) {
00085 RSHIGH();
00086 }
00087 else RSLOW();
00088 RWLOW();
00089 c = cmd & 0xF0;
00090 OUTPUT_DATA(c);
00091 epulse();
00092 if (dflag) {
00093 c = (cmd & 0x0F)<<4;
00094 OUTPUT_DATA(c);
00095 epulse();
00096 }
00097 }
00098
00099
00100 void lcd_init(void) {
00101
00102 DATA_DIR_WR();
00103 ELOW();
00104 RSLOW();
00105 RWLOW();
00106
00107 Delay10KTCYx(60);
00108 lcd_write(0x30,0,0,0);
00109 Delay10KTCYx(6);
00110 lcd_write(0x30,0,0,0);
00111 lcd_write(0x30,0,0,0);
00112 lcd_write(0x20,0,0,0);
00113
00114 lcd_write(0x28,0,0,1);
00115
00116 lcd_write(0x08,0,1,1);
00117 lcd_write(0x01,0,1,1);
00118 lcd_write(0x0C,0,1,1);
00119 stdout = _H_USER;
00120
00121 }
00122
00123 void lcd_init_cgram(void) {
00124 lcd_write(0x40,0,1,1);
00125 for(i=0; i<64; i++) {
00126 lcd_write(betwk[i],1,1,1);
00127 }
00128 lcd_write(0x80,0,1,1);
00129 }
00130
00131
00132 void _user_putc(char cx) {
00133 switch(cx) {
00134 case 'á': cx = 0x00; break;
00135 case 'é': cx = 0x01; break;
00136 case 'í': cx = 0x02; break;
00137 case 'ó': cx = 0x03; break;
00138 case 'ú': cx = 0x04; break;
00139 case 'ü': cx = 0x05; break;
00140 case 'ű': cx = 0x06; break;
00141 case 'ő': cx = 0x07; break;
00142 case 'ö': cx = 0xEF; break;
00143 }
00144 lcd_write(cx,1,1,1);
00145 }
00146
00147 void main(void){
00148 DISABLE_ALL_ANALOG();
00149 mInitAllLEDs();
00150 mInitSwitch1();
00151 lcd_init();
00152 lcd_init_cgram();
00153 stdout = _H_USER;
00154 printf(" Adjon az Isten ");
00155 lcd_write(0xC0,0,1,1);
00156 printf(" szebb jövőt! ");
00157 for(i=0; i<25; i++) {
00158 Delay10KTCYx(240);
00159 }
00160 lcd_write(0x01,0,1,1);
00161 ch = 0x00;
00162 while(1) {
00163 lcd_write(0x80,0,1,1);
00164
00165 printf("%02x: ",ch);
00166 for(i=0; i<16; i++) {
00167 lcd_write(ch,1,1,1);
00168 ch++;
00169 }
00170 lcd_write(0xC0,0,1,1);
00171
00172 printf("%02x: ",ch);
00173 for(i=0; i<16; i++) {
00174 lcd_write(ch,1,1,1);
00175 ch++;
00176 }
00177 lcd_write(0x94,0,1,1);
00178
00179 printf("%02x: ",ch);
00180 for(i=0; i<16; i++) {
00181 lcd_write(ch,1,1,1);
00182 ch++;
00183 }
00184 lcd_write(0xD4,0,1,1);
00185
00186 printf("%02x: ",ch);
00187 for(i=0; i<16; i++) {
00188 lcd_write(ch,1,1,1);
00189 ch++;
00190 }
00191 while(SW1);
00192 Delay1KTCYx(240);
00193 while(!SW1);
00194 Delay1KTCYx(240);
00195 }
00196 }