Hallo,
ich habe das Problem gefunden. Hier nochmal mein kompletter Code für EasyPIC6 - GLCD:
main.c
glcd.cCode:#include "glcd.h" int q = 0; void main() { ANSEL = 0; // Configure AN pins as digital ANSELH = 0; C1ON_bit = 0; // Disable comparators C2ON_bit = 0; glcd_init(); glcd_delete_display(); while(1) { glcd_draw_point(68,q,1); q = q+1; Delay_ms(500); if(q == 63){ q = 0; } } while(1);//Endlosschleife }
glcd.h:Code:#include "glcd.h" char page = 0; char b = 0; char n = 0; char input = 0; void glcd_init(){ /*Initialize the display.*/ Delay_ms(250); TCS1 = 0; //Pin: output TCS2 = 0; TRS = 0; TRW = 0; TE = 0; TDB = 0; //Values: CSE = 0; CSZ = 0; RS = 0; RW = 0; E = 0; DB = 0; glcd_display_select(1);//Choose IC1 glcd_display_off(); glcd_display_on(); glcd_display_select(2);//Choose IC2 glcd_display_off(); glcd_display_on(); } void glcd_draw_point(char x, char y, char filled){ /* x : x-chord y: y-chord filled: 1: filled or 0: unfilled */ page = y / 8; b = glcd_read_page(x, page); n = page * 8; n = y - n; n = 1 << n; if(filled > 0 ){ glcd_draw(x, page, (b | n)); }else{ n = !n; glcd_draw(x, page, (b & n)); } } void glcd_display_select(char controller){ /*Chip select*/ if(controller == 1){ CSE = 0; CSZ = 1; }else{ CSE = 1; CSZ = 0; } } void glcd_draw(char x, char page, char byte){ /*Write byte to DDRAM(x |page).*/ if(x>=64){ glcd_display_select(2); glcd_setAddress(x-64); }else{ glcd_display_select(1); glcd_setAddress(x); } glcd_setPage(page); glcd_write(byte); } void glcd_display_off(){ /*Switch the display off*/ RS = 0; RW = 0; DB = 62; glcd_execute(); } void glcd_display_on(){ /*Switch the display on*/ RS = 0; RW = 0; DB = 63; glcd_execute(); } void glcd_execute(){ //Executes the comand on DB E = 1; //Delay_ms(0); E = 0; Delay_ms(1); } void glcd_setAddress(char address){ //Set the Address in DDRAM RS = 0; RW = 0; DB = 64 + address; glcd_execute(); } void glcd_setPage(char page){ //Set the Page in DDRAM RS = 0; RW = 0; DB = 184 + page; glcd_execute(); } void glcd_write(char byte){ //Write byte into the display DB = byte; RS = 1; RW = 0; glcd_execute(); } void glcd_delete_display(){ //Delete all points b = 0; while(b < 8){ n = 0; while(n < 128){ glcd_draw(n, b, 0); n++; } b++; } } char glcd_read_page(char x, char page){ //Returns read page if(x>=64){ glcd_display_select(2); glcd_setAddress(x-64); }else{ glcd_display_select(1); glcd_setAddress(x); } glcd_setPage(page); return glcd_read(); } char glcd_read(){ //Read the ddram TDB = 0xFF; //Databus-Pins: Input RS = 1; //Control-wires: RS: H / R/W: H RW = 1; E = 1; ///Dummy-Read Delay_ms(1); //Wait 1 ms E = 0; Delay_ms(1); //Wait 1 ms Delay_ms(1); //Wait 1 ms E = 1; //ENABLE: H Delay_ms(1); //Wait 1 ms input = DB; //Read Databus E = 0; //ENABLE: L RS = 0; RW = 0; TDB = 0; //Databus-Pins: Output return input; }MfG SebastianCode:#define TCS1 TRISB.F0 #define TCS2 TRISB.F1 #define TRS TRISB.F2 #define TRW TRISB.F3 #define TE TRISB.F4 #define TDB TRISD #define TRST TRISB.F5 #define CSE PORTB.F0 #define CSZ PORTB.F1 #define RS PORTB.F2 #define RW PORTB.F3 #define E PORTB.F4 #define DB PORTD #define RST PORTB.F5 void glcd_init(); void glcd_draw_point(char x, char y, char filled); void glcd_draw(char x, char page, char byte); void glcd_display_select(char controller); void glcd_display_on(); void glcd_display_off(); void glcd_execute(); void glcd_setAddress(char address); void glcd_setPage(char page); void glcd_write(char byte); void glcd_delete_display(); char glcd_read(); char glcd_read_page(char x, char page);






Zitieren

Lesezeichen