Proteus 12864液晶程序

作者&投稿:郸颖 (若有异议请与网页底部的电邮联系)
单片机 12864液晶 Proteus~

你这初始化只是给了些初始指令而已吧,你并没有让屏幕显示任何东西啊,在仿真这里就没亮。。我是真么认为的。你可试着让它显示一些字符就知道啦行不行啦。。。。

我怀疑你根本就没开显示。12864你用命令开了显示了吗?如果不是,看我下面所写的。

Proteus里的12864是个无字库纯点阵的液晶屏。我给你几个函数,因为这里不能全贴上,字数有限。只能给你几个关键的基础函数,给你太多反而看不懂,因此只给你3个。你在看懂这些函数的情况下在修改自己的函数。
proteus里的12864不需要像实际的液晶那样的有各自不同厂商的个性设置,只需要使用基本指令就够了。因此它其实初始化是很简单的,开显示就行。而实际的12864使用都是有字库的,初始化复杂。而无字库12864一般用的不多。


void _L12864Init(void)
{LcdWriteComOrData(0,0x3f); //显示开 }

//这个函数是应用函数,是在基础函数上构造的,意义不大,只是举个例子。
//内容是左右半屏方式,显示图像static void ShowPicture(uchar (*p)[64])//显示一张图片,因为图片是没有字符那样的局部空间,一个整体{ //显示一页就是64列,这里64是二维数组的第二维是64uchar i,j; CS1=0;CS2=1; //显示左半屏 for(i=0;i<8;i++) { LcdWriteComOrData(0,AddressX|i); //确定要显示的页 LcdWriteComOrData(0,AddressY); //确定要显示的初始列,不能丢,很重要 for(j=0;j<64;j++) LcdWriteComOrData(1, p[i<<1][j] ); //把i*2变成i<<1,乘法变成移位 } CS1=1;CS2=0; //换右半屏显示 for(i=0;i<8;i++) { LcdWriteComOrData(0,AddressX|i); //page还从第0行开始 LcdWriteComOrData(0,AddressY); for(j=0;j<64;j++) LcdWriteComOrData(1, p[(i<<1)+1][j]); }; }


//下面两个是重要的基础函数,如果不显示主要是这里有问题,看懂我的看看自己的程序哪里有问题。
static void LcdWriteComOrData(uchar x,uchar content) {LcdReadComBusy(); //检测忙标志P0Data=content;E=0; //按照HD44780/KS0066控制器的脉冲时序走 if(x==0){RS=0;RW=0; } //如果是0,选址程序寄存器写;这种程序结构来自于金鹏LCDelse {RS=1;RW=0; } //如果是1,选择数据寄存器写E=1; Delay1ms(1); //写程寄存器需要一段延时,执行也有延时。因为控制字写入之后,查书发现,执行至少需要40us,如果在E=1和0之间没有延时,程序不执行E=0; //这行和上一行Delay1ms(1)交换后,发现检测不到了,原因就是以上的延时问题。}//************************************************************static void LcdReadComBusy(void) //这种程序结构来自于网友大海橡树的程序{ P0Data=0; //准备读忙标志,用的是P0口,所以可以直接放低就可以了,如果用其他口,Px不能直接写0,必须先写1才能读入外部信息RS=0; //选择程序寄存器RW=1; //读E=1; //使能打开while( P0Data & 0x80 ) ; //如果是忙P0data与0x80就不等于0,所以while语句总是执行。E=0; //使能关闭}//***********************************************************
下面这个图是告诉你我是成功的,所以你不用怀疑我函数的正确性。

我不知道你用的是哪一种12864,我用的是没有CS1和CS2的

#include <reg52.h>
#include <stdio.h>

#define uint unsigned int
#define uchar unsigned char

#define comm 0
#define dat 1

sbit RS = P3^0; //H=data; L="command";
sbit RW = P3^1; //H=read; L="write";
sbit E = P3^2; //input enable;
sbit PSB= P3^3; //H=并口; L="串口";
sbit RST= P3^5; //Reset Signal 低电平有效

sbit busy=P0^7; //lcd busy bit

void wr_lcd (uchar dat_comm,uchar content);
void chk_busy (void);

uchar code tab[]={
"需要显示的字"
};

void init_lcd (void)
{
RST = 1;
PSB = 1;
wr_lcd(comm,0x30); /*30---基本指令动作*/
wr_lcd(comm,0x01); /*清屏,地址指针指向00H*/
wr_lcd(comm,0x06); /*光标的移动方向*/
wr_lcd(comm,0x0c); /*开显示,关游标*/
}

void clrram(void)
{
wr_lcd(comm,0x30);
wr_lcd(comm,0x01);
}

void wr_lcd(uchar dat_comm,uchar content)
{
chk_busy ();
if(dat_comm)
{
RS = 1; //data
RW = 0; //write
}
else
{
RS = 0; //command
RW = 0; //write
}
P0=content; //output data or comm
E = 1;
;
E = 0;
}

void chk_busy(void)
{
P0 = 0xff;
RS = 0;
RW = 1;
E = 1;
while(busy==1);
E = 0;
}

void main()
{
int i;

SP=0x5f;
init_lcd();

wr_lcd(comm,0x30);
wr_lcd(comm,0x80);
for(i=0;i<6;i++)
{
wr_lcd(dat,tab[i]);
}

while(1);
}

Proteus仿真论坛 上面有很多实例


珠海市17021451202: PROteus单片机仿真软件中通用型1602、12232、12864液晶的代码分别是什么呢? -
佼吴银翘: 要注意,你说的通用型其实并不通用,LCD模块中使用不同的控制器,其控制方法都不同!所有的LCD模块都在Optoelectronics大类下.1602是LM016L;12232有好几种:AGM1232G DISPLAY 122x32 Graphical LCD with SED1520 ...

珠海市17021451202: 12864液晶(ST7902控制器)在Proteus软件中咋么画 -
佼吴银翘: 在Proteus软件中有例子,在帮助里面找,你打开例子自己看吧,慢慢研究

珠海市17021451202: proteus中12864与实际引脚不同呢?不知道程序怎么写,有cs1和cs2引脚的那种,cs1、cs2是片选什么的啊? -
佼吴银翘: proteus中的是无i字库的,cs1,cs2是片选屏幕.你所看到的屏幕其实是由左右两个屏幕组成的

珠海市17021451202: proteus能仿真12864的串口吗?
佼吴银翘: 不能的 proteus软件中,LCD12864的只有两种控制字的,一种是ks0108,一种是SE1335的,他们不带字库,只能通过并行方式数据写入. ST7920控制字的,可以并行和串行两种方式写入数据,他是带字库的一种.

珠海市17021451202: proteus中12864液晶的仿真 怎样仅仅显示一个点 不用数组可以实现吗??? -
佼吴银翘: 不明白你的意思,你是说用数组存储显示在屏幕的数据,然后要打点的时候通过修改数组的数据,然后再把数组写入屏幕中来达到打点这目的的么.proteus中的12864模型是可以通过指令直接读某个地方的数据,但是我仿真过,没仿真出来.

珠海市17021451202: 谁用proteus仿真过12864啊 求解释啊 -
佼吴银翘: 我仿真过.proteus里AMPIRE 128x64器件.它是最基本的12864了,基本控制指令就行.比实物要简单.网络上有个“大海橡树”的,他写了比较详细的关于它的教程.你可以找找.//************************************************************#define ...

珠海市17021451202: proteus里面12864液晶并行连接,CS1,CS2,VOUT怎么连? -
佼吴银翘: 问题解决没 你用的是哪款液晶呢 是ks0108控制字的吧 cs1和cs2直接接单片机的io啊,程序中是分屏的作用 Vout是产生负压的,对地分分压后接V0 可以在proteus下仿真 交流

珠海市17021451202: LCD12864在proteus仿真中选择哪个型号的器件? -
佼吴银翘: 收索框输入【LCD】就可以了.很多.都是带cs1,cs2片选的.

珠海市17021451202: Proteus当中的1602液晶在什么地方可以找到? -
佼吴银翘: 确实有的,在Optoelectronics里,仔细找找.或者是因为你的版本过低···· 用PROTUES7.4以上版本,其他的我不敢保证····

珠海市17021451202: proteus lcd12864在哪 -
佼吴银翘: lcd12864是点阵数128*64的单色液晶屏,很多单色屏都可以生产的,不同厂家命名也不一样.leehon单色的产品相对比较齐全

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网