1. Up to now, the Proteus version 7.7 does not support the LCD OF THE st7920 control chip, so no simulation has been made in Proteus.
2. Source Code1. st791_h <br/> // filename: st7920.h <br/> # define data_port P1 <br/> // define <br/> // pin definition <br/> // -------------------------------------------- <br/> // define connection MCU and st7920 <br/> sbit LCD _rs = P2 ^ 0; // H: Command mode, L: data mode <br/> sbit LCD _rw = P2 ^ 1; // enable, low level valid <br/> sbit LCD _e = P2 ^ 2; // write, low level valid <br/> sbit LCD _psb = P2 ^ 3; <br/> // sbit READ = P2 ^ 3; <br/> // ==== =============== Prototype list ====================================== =====< br/> void delay1ms (char N ); // to delay 1 MS about <br/> void sendcmd (char cmd); // write command to st7920 <br/> void senddata (char dat ); // write dat to st7920 <br/> void LCD _init (void); // initialize st7920 <br/> void print_string (char *); <br/> // ======================================== ==================================< br/> // ====== ====================================== =======================================================< Br/> void delay1ms (char N) <br/>{< br/> uchar I; <br/> uchar J; <br/> for (j = 0; j <n; j ++) <br/> for (I = 0; I <255; I ++ ); <br/>}< br/> // ============================ =======================================================< br/> void sendcmd (char cmd_code) <br/>{< br/> // is_buzy (); <br/> LCD _rs = 0; <br/> LCD _rw = 0; <br/> data_port = pai_code; <br/> LCD _e = 1; <br/> delay1ms (5); <br/> // writ = 1; <br/> L Cd_e = 0; <br/>}</P> <p> // ========================== =======================================================< br /> void senddata (char data_code) <br/>{< br/> // is_buzy (); <br/> LCD _rs = 1; <br/> LCD _rw = 0; <br/> data_port = data_code; <br/> LCD _e = 1; <br/> delay1ms (5); <br/> // writ = 1; <br/> LCD _e = 0; <br/>}< br/> // ============================ =====================================================< br/>/ /st7920 LCD initallize <br/> void LCD _init (voi D) <br/>{< br/> delay1ms (50); // waiting <br/> sendcmd (0x30 ); // function set <br/> // 0x30 = 00110000, 8bit bus, basic instruction <br/> delay1ms (5 ); <br/> sendcmd (0x30); // 0x30 = 00110000, 8bit bus, basic instruction <br/> delay1ms (5 ); <br/> sendcmd (0x0f); // display on, cursor on, blink on <br/> delay1ms (5); <br/> sendcmd (0x01 ); // display clear <br/> delay1ms (5); <br/> sendcmd (0x06); // cursor move right AC increased by 1, display not shift <br/> delay1ms (5); <br/> // sendcmd (0x80 ); // set ddram address <br/> delay1ms (5); <br/>}< br/> void print_string (char * Str) {<br/> int I; <br/> for (I = 0; STR [I]! = '/0'; I ++) <br/>{</P> <p> senddata (STR [I]); <br/>}< br/> 2. global. h <br/> // filename: Global. h <br/> # define uchar unsigned char <br/> # define uint unsigned int <br/> 3. main. c <br/> // latest revise: 2010-2-11 <br/> // by: Alex shoal <br/> // Email: alex.shoal@gmail.com <br/> # include <reg51.h> <br/> # include "Global. H "<br/> # include" st7920.h "<br/> main () {<br/> // delay1ms (10); <br/> LCD _init (); <br/> print_strin G ("Hello, world! "); <Br/> print_string (" this is Alex! "); <Br/> while (1); <br/>}< br/>
3. LCD model JXD12864F-1, control chip for st7920, according to my research, at present its official website attached information on Pin definition error, resulting in waste of my time, after confirming the correct should be as follows.
4. Running result.