《c51 pg12864f proteus仿真》由会员分享,可在线阅读,更多相关《c51 pg12864f proteus仿真(7页珍藏版)》请在金锄头文库上搜索。
1、这个别人是用AVR单片机仿的,我只会C51就把它的仿真图和程序改了下,调试了可以显示。因为我也没有PG12864f的液晶资料,不过大家可以对着程序理解下,其实原理和1206有点类似。仿真总图:单片机接线图:12864液晶接线:#include #define uchar unsigned char#define uint unsigned intsbit wr=P20;sbit rd=P21;sbit ce=P22;sbit cd=P23;sbit rst=P24;void delay(uint t);void init_12864();void write_data(uchar dat);v
2、oid write_cmd1(uchar cmd);void write_cmd2(uchar dat,uchar cmd);void write_cmd3(uchar data1,uchar data2,uchar cmd);uchar read_status();void check_status();void clear_screen();void display_char(uchar x,uchar y,uchar ch);int main()uchar i,j=0;init_12864();for(i=0;i128;i+) display_char(i/16,i%16,0+i); c
3、lear_screen();/处在x y处显示chvoid display_char(uchar x,uchar y,uchar ch)/x 0-7 y 0-15write_cmd3(x*2)4)+y),0x00,0x24);/地址指针位置write_cmd2(ch-32,0xc0);/t6963c字符表与ASCII差32void delay(uint t)uint i,j;for(i=0;it;i+) for(j=0;j114;j+);void init_12864()P2=0Xff;P1=0Xff;rst=1;delay(10);rst=0;wr=1;rd=1;ce=1;cd=1;rst=
4、1;check_status();write_cmd3(0x01,0x00,0x21);/光标指针设置check_status();write_cmd3(0x00,0x00,0x40);/文本区首地址check_status();write_cmd1(0x80);/显示方式设置,正常显示check_status();write_cmd1(0x94);/。显示状态设置 1 0 1 0 N3 N2 N1 N0 文本显示,光标不显示,不闪烁/write_cmd1(0x98);/图形方式显示,不显示字母,只打点check_status();write_cmd1(0xa1);/光标形状设置1 0 1 0
5、 0 N2 N1 N0void clear_screen()uint i;write_cmd3(0x00,0x00,0x24);/地址指针设置check_status();write_cmd1(0xb0);/数据自动写,每写一次,地址指针自动加一check_status();for(i=0;i8192;i+) check_status(); write_data(0X00);check_status();write_cmd1(0xb2);/数据自动写结束void write_data(uchar dat)rd=1;cd=0;ce=0;wr=0;P0=dat;delay(10);wr=1;ce=
6、1;cd=1;void write_cmd1(uchar cmd)rd=1;cd=1;ce=0;wr=0;P0=cmd;delay(10);wr=1;ce=1;cd=0;/先送参数,再送指令void write_cmd2(uchar dat,uchar cmd)check_status();write_data(dat);check_status();write_cmd1(cmd);void write_cmd3(uchar data1,uchar data2,uchar cmd)check_status();write_data(data1);check_status();write_data(data2);check_status();write_cmd1(cmd);uchar read_status()uchar status;P0=0;/端口b置为输入rd=0;wr=1;ce=0;cd=1;status=P1;return status;void check_status()uchar s;P0=0Xff;/端口b置为输出while(s&0x03)!=0x03) s=read_status();/等待位1,2置为。命令读写准备好。数据读写准备好