C51 PG12864f proteus仿真 - 图文

更新时间:2023-10-13 23:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

这个别人是用AVR单片机仿的,我只会C51就把它的仿真图和程序改了下,调试了可以显示。

因为我也没有PG12864f的液晶资料,不过大家可以对着程序理解下,其实原理和1206有点类似。

仿真总图:

单片机接线图:

12864液晶接线:

#include

#define uchar unsigned char #define uint unsigned int

sbit wr=P2^0; sbit rd=P2^1; sbit ce=P2^2; sbit cd=P2^3; sbit rst=P2^4;

void delay(uint t); void init_12864();

void write_data(uchar dat);

void 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;i<128;i++) {

display_char(i/16,i,'0'+i); }

clear_screen();

}

//处在x y处显示ch

void display_char(uchar x,uchar y,uchar ch)//x 0-7 y 0-15 {

write_cmd3((((x*2)<<4)+y),0x00,0x24);//地址指针位置

write_cmd2(ch-32,0xc0);//t6963c字符表与ASCII差32@@@@@@@@@@@@@@@@ }

void delay(uint t) {

uint i,j;

for(i=0;i

void init_12864() { P2=0Xff; P1=0Xff; rst=1; delay(10); rst=0;

wr=1; rd=1; ce=1; cd=1; rst=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 0 N2 N1 N0

}

void clear_screen()

{ uint i;

write_cmd3(0x00,0x00,0x24);//地址指针设置

check_status();

write_cmd1(0xb0);//数据自动写,每写一次,地址指针自动加一 check_status(); for(i=0;i<8192;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=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置为。命令读写准备好。数据读写准备好 }

本文来源:https://www.bwwdw.com/article/vv1f.html

Top