在proteus中仿真成功 为什么硬件电路不成功,仔细检查了电路 没有问题。比如在51单片机中lcd无法显示 有背

作者&投稿:父康 (若有异议请与网页底部的电邮联系)
proteus仿真成功,硬件电路不成功是为什么~

首先要知道仿真是什么意思。所谓仿真,直接说就是用软件来模拟实际的情况。既然是模拟,就不可能完全一样,总是有点区别,甚至有时有出入。
实事求是地说,PROTEUS仿真,特别是关于单片机方面的仿真还是不错的,总体还是满意的,但不可能十全十美。大部分情况,仿真与实际是比较吻合的,但有一些是有出入的。
所以,最终以实物调试为准。你的问题就属于仿真与实际有较大差别的情况。

51单片机P0口驱动能力小,需要接上拉电阻

给你一个1602的实例吧,可能是软件问题。

#define LCD1602_FLAG

#define LCD1602_PORT P0

#include<reg51.h>

#include<stddef.h>

#define uchar unsigned char

sbit lcd1602_rs=P2^0;

sbit lcd1602_e=P2^2;

sbit lcd1602_rw=P2^1;

sbit lcd1602_busy=P0^7;

uchar str[]="This is Key Test";

uchar keyval,keystr[16];

void delay(uchar a)

{

uchar i;

while(a--)for(i=0;i<120;i++);

}

/*

************************************

* 函数名称:lcd1602_CheckBusy()

* 函数功能:状态查询

************************************

*/

void lcd1602_CheckBusy()

{

do

{

lcd1602_busy=1;

lcd1602_rs=0;

lcd1602_rw=1;

lcd1602_e=0;

lcd1602_e=1;

}

while(lcd1602_busy);

}

/*

***************************************

* 函数名称: lcd1602_WriteCmd()

* 函数功能:写命令

* 入口参数:命令字

* 出口参数:无

***************************************

*/

void lcd1602_WriteCmd(const uchar cmd)

{

lcd1602_CheckBusy();

lcd1602_rs=0;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=cmd;

lcd1602_e=0;

}

/*

*******************************************

* 函数名称:lcd1602_WriteData()

* 函数功能:写数据

* 入口参数:c--待写数据

* 出口参数:无

*********************************************

*/

void lcd1602_WriteData(const uchar c)

{

lcd1602_CheckBusy();

lcd1602_rs=1;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=c;

lcd1602_e=0;

}

/*

***********************************************

* 函数名称:lcd1602_Init()

* 函数功能:初始化LCD

* 入口参数:无

* 出口参数:无

***********************************************

*/

void lcd1602_Init()

{

lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵

lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,

lcd1602_WriteCmd(0x06); //flag move to right,screen don't move

lcd1602_WriteCmd(0x01); //clear screen

}

/*

************************************************

* 函数名称:lcd1602_Display()

* 函数功能: 字符显示

* 入口参数:ptr--字符或字符串指针

* 出口参数:无

* 说    明:用户可通过以下方式来调用:

*           1)lcd1602_Display("Hello,world!");

*           2) INT8U 存储类型 txt[]="要显示的字符串";

*              或者 INT8U 存储类型 txt[]={'t','x','t',..,'\0'};

*              INT8U *ptr;

*              ptr=&txt;

*              lcd1602_Display(ptr);

*              或 lcd1602_Display(txt);

*              或 lcd1602_Display(&txt);

************************************************

*/

void lcd1602_Display(const uchar *ptr,uchar line)

{

uchar data i=0;

uchar *data q;

q=ptr;

switch(line)

{

case 0:

lcd1602_WriteCmd(0x80);

while(q!=NULL && (*q!='\0') && i<16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

case 1:

lcd1602_WriteCmd(0xc0);

while(q!=NULL && (*q!='\0') && i<16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

}

}

uchar kbscan(void)

{

unsigned char sccode,recode;

P3=0x0f;  //发0扫描,列线输入

if ((P3 & 0x0f) != 0x0f)  //有键按下

{

delay(20);   //延时去抖动

if ((P3&0x0f)!= 0x0f)

{

sccode = 0xef;    //逐行扫描初值

while((sccode&0x01)!=0)

{

P3=sccode;

if((P3&0x0f)!=0x0f)

{

recode=(P3&0x0f)|0xf0;

while((P3&0x0f)!=0x0f);//等待键抬起

return((~sccode)+(~recode));

}

else

sccode=(sccode<<1)|0x01;

}

}

}

return 0;  //无键按下,返回0

}

uchar getkey(void)

{

uchar key;

key=kbscan();

if(key==0){keyval=0xff;return(0);}

switch(key)

{

case 0x11:keyval=7;break;

case 0x12:keyval=4;break;

case 0x14:keyval=1;break;

case 0x18:keyval=10;break;

case 0x21:keyval=8;break;

case 0x22:keyval=5;break;

case 0x24:keyval=2;break;

case 0x28:keyval=0;break;

case 0x41:keyval=9;break;

case 0x42:keyval=6;break;

case 0x44:keyval=3;break;

case 0x48:keyval=11;break;

case 0x81:keyval=12;break;

case 0x82:keyval=13;break;

case 0x84:keyval=14;break;

case 0x88:keyval=15;break;

default:keyval=0xff;break;

}

if(keyval!=0xff)return(1);

else return(0);

}

main()

{

uchar num;

lcd1602_Init();

lcd1602_Display(str,0);

while(1)

{

if(getkey())

{

if(keyval<10)keystr[num]=keyval+0x30;

else keystr[num]=keyval-10+'A';

lcd1602_Display(keystr,1);

num++;

num%=16;

}}}



你得检查硬件,看是否与proteus中一致,上次做了个LCD显示,就是因为硬件与proteus中硬件不同而失败,后几经检查才发现问题。
不过有时proteus也不可信。

背光的电阻没设置,仿真中可以不用背光电阻的,但是实际中必须要有

你可以看这个视频

http://v.youku.com/v_playlist/f5109034o1p1.html

说明你的硬件电路和你仿真的有不一样的地方,比如芯片型号等。

LCD在仿真跟实物上有很大的区别尤其是在初始化的阶段,在实物上需严格按照实物的规格书来写


如何在proteus中仿真蜂鸣器?
1、首先第一步就是进行双击打开proteus软件,如下图所示。2、接着就是进行在左侧的工具栏中中找到“P”并点击即可。3、然后在弹出的对话框中这时候要注意的是找到“关键字”,如下图所示。4、接着就是进行输入“BUZZER”,然后在列报中选择第一个,如图,最后点击“确定”即可。5、然后这时候要在...

请问proteus如何仿真
1、首先在电脑上打开proteus软件。2、进入到软件界面后,在左侧工具栏中点击黑色箭头下面的那个图标。3、然后在出现的二级页面中,点击“P”字按钮。4、接着在出现的搜索界面输入“ldr”,就会出现两个光敏元件,其次进行双击,元件就出现在P字下方的菜单中。5、再接着将光敏电阻放到编辑区,光敏电阻的...

关于protues中仿所用的程序,用c语言编的程序和用汇编语言编写的程序,哪 ...
1.Proteus仿真时需要加载的是经过汇编(由汇编语言编写的源程序文件时)或编译与汇编(由C或其他高级语言编写的源程序文件要先编译成汇编语言,再汇编成hex、bin文件)的hex文件(称为目标文件)。2.Proteus与C语言没有必然关系,要的只是hex文件,可以经过编译生成hex文件的语言一大堆。3.学好Proteus没...

怎样在proteus中仿真出电源及接地?
1. 打开Proteus软件并创建一个新的电路图。在左侧的“组件”栏目中,你会看到各种电路元件的分类。为了找到仿真电源和接地,你需要点击“电源与接地”分类。2. 在“电源与接地”分类下,你会看到多种电源和接地选项。其中,“VCC”代表正电源,“GND”代表接地。你可以通过点击这些组件并将它们拖放到电...

proteus如何仿真单片机
proteus仿真单片机的方法:打开软件选择P进行元器件的摆放;在检索行输入89C52;找到需要的芯片拖入界面,放在合适的位置;选中单片机,在选中编辑属性;然后用编译软件编译完成后加载即可;加载完毕后,点击执行,即可完成。单片机是典型的嵌入式微控制器(MicrocontrollerUnit),由运算器,控制器,存储器,输入...

怎么用proteus来仿真51
1、首先我们打开Proteus软件,点击左边菜单栏的P按钮,然后再搜索框里输入80c51,选择第一个就是80c51单片机;2、然后在搜索框里面输入led,找到Optoelectronics,然后再里面选择LED-RED,红色的led,当然其他颜色也可以;3、接着我们点击鼠标右键可以选择led为合适的方向,方便我们的绘图;4、然后我们放上res...

proteus可以用来仿真哪些器件?
COMPIM器件,protues的解释是COM Port Physical Interface model串口物理端口模型。proteus中的COMPIM就是标准的RS232端口,是可能直接使用电脑的物理串口通信的,就是说COMPIM是通过电脑的物理串口进行实际通信的。这样,一面用proteus仿真,利用COMPIM通过电脑的串口与外界的其它设备进行通信,例如电脑串口上接一...

proteus中怎么知道哪个元件可以用来仿真,哪个只能用来画电路图_百度...
No Simulator Model,没有仿真模型。PCB preview 中没有封装预览就不能直接用来画PCB,要自己加封装。只画原理图就都可以用了。

proteus仿真步骤
1:在PROTEUS中画好能用于仿真的线路图,即所用的元件都应有仿真模型;如果线路图中没有单片机,则保存后就可以仿真了!2:编制相应的单片机程序,可以在PROTEUS中编译,也可以在相应的单片机开发平台中编译(不同厂家的单片机的开发平台不同)。a)如在PROTEUS中编译,要在“源程序”-》“定义生成代码...

02-2 Proteus仿真Arduino LED点阵
第一步,先将Proteus运行起来,同样新建一个Arduino 328的项目,自己为项目取个名字,此处取名为LEDMatrix。第二步,要从元件库当中找到LED点阵,并添加到工作区。点击左侧“Component Mode”按钮——点击“P”按钮——在输入框中输入 matrix——在下方的分类中选择 Optoelectronics,此时在右侧的结果(...

邹平县13248627914: 在proteus中仿真成功 为什么硬件电路不成功,仔细检查了电路 没有问题.比如在51单片机中lcd无法显示 有背 -
迟谈二羟: 你得检查硬件,看是否与proteus中一致,上次做了个LCD显示,就是因为硬件与proteus中硬件不同而失败,后几经检查才发现问题. 不过有时proteus也不可信.

邹平县13248627914: proteus仿真成功,硬件电路不成功是为什么 -
迟谈二羟: 甚至有时有出入首先要知道仿真是什么意思. 实事求是地说,PROTEUS仿真,特别是关于单片机方面的仿真还是不错的,但不可能十全十美.大部分情况,仿真与实际是比较吻合的,但有一些是有出入的. 所以,最终以实物调试为准.所谓仿真,直接说就是用软件来模拟实际的情况.既然是模拟,就不可能完全一样,总是有点区别,总体还是满意的

邹平县13248627914: protues中运行成功的电路,是否就说明理论上可行,实际中出错就是连接或元件问题. -
迟谈二羟: 说的对,模型本就是建立在理论基础之上的,因此仿真成功,更说明理论上是没有问题的,不过要明白的是,这些都无法给你证明电路的效率几何;而实际中的问题,则是参数的误差及电路环境的问题

邹平县13248627914: proteus中数码管仿真结果很好,是争取的,但是在实际显示全是“8”,为什么呢? -
迟谈二羟: 计算好电流,电流会影响数码管的显示.这个问题我也出现过,共阴极的数码管段位接单片机IO口的地方用排阻,也就是上拉电阻.

邹平县13248627914: 用proteus8.0运行设计的电路图之后,怎么看电路图运行是否成功 -
迟谈二羟: 首先,你要对此电路有所了解,某一个局部的功能电路是输出该是什么,或你想要其输出的是什么; 然后,在仿真中,设置一些观测点,如果这些点的输出符合自己的期望值,那么这部分电路就通过了,不符期望的,就去检查电路(及代码)了;

邹平县13248627914: PROTEUS仿真与实际接近度如何?
迟谈二羟: 有点差别,但是也有很大的相似性. 在Proteus中仿真成功,硬件上不一定能够成功;反之,在proteus中仿真不成功,在硬件山肯定不会成功! 就是说,proteus是十分理想的模拟环境,有的时序(延时)在物理实现中可能与理想环境存在着差异.

邹平县13248627914: proteus中为什么有很多元件不能仿真 -
迟谈二羟: 因为:Proteus中只有带仿真模型(原理图模型、SPICE模型、VSM模型等)的器件才能进行仿真,其他器件只能用于原理图设计.随着版本的发展,仿真模型会越来越多,但是不可能全部器件都能仿真.proteus中自制仿真元件的方法和过程...

邹平县13248627914: 为什么在proteus中进行仿真时,51没有接晶振但是显示正常? -
迟谈二羟: 因为在PROTEUS仿真中,晶振不起作用,起作用的是在单片机的属性中设置的振荡频率!

邹平县13248627914: 我用proteus仿真CD4046的倍频电路,为什么输出频率和输入频率一样?! -
迟谈二羟: 您好,我想请教问题 我也试了黑色底图那个 有两个问题:一是输入信号采用difital types中的Clock 频率计没有显示频率 用示波器观察输入是一条直线;二是用示波器观察输出的波形是锯齿波 为什么?和你的电路完全一样,

邹平县13248627914: 关于用protues仿真的问题 -
迟谈二羟: 首先,明确一点,除了Proteus外,其余的单片机仿真软件不堪入目,功能实在太弱.其次,只要你首先把你上面列举的器件熟悉一下,在Proteus中总可以找到替代器件.比如89S52,可以用89C52替代,功能几乎完全相同;至于运放和模数转换器,就更不用说了,比比皆是,随便拿一个就可以用.第三,纠正一点你的错误,Proteus中有CD4051器件,而且有多种类型.最后,给你一点忠告,尽快熟悉一下你需要用到的器件,然后在Proteus中仿真.

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