怎样用proteus仿真实例

谈谈如何用Proteus制作PCB_电路图_电子元器件_中国百科网
谈谈如何用Proteus制作PCB_电路图
      时下,利用KeilC51和Proteus来进行单片机系统开发已成为众多单片机爱好者的首选。但是,用Proteus来制作印制电路板(PCB)却少有提及。下面结合一个简单的广告灯的设计电路(如下图所示)为例,谈谈如何用Proteus制作PCB。    用Proteus制作PCB通常包括以下一些步骤:    (1)绘制电路原理图并仿真调试;    (2)加载网络表及元件封装;    (3)规划电路板并设置相关参数;    (4)元件布局及调整;    (5)布线并调整;    (6)输出及制作PCB。
    1.绘制电路原理图并仿真调试    在Proteus6Professional中用ISIS6Professional设计好电路原理图,并结合KeilC51进行软僻编程和硬件的仿期试,调试成功后,便可开始制作PCB。在此不再赘述调试过程。    2.加载网络表及元件封装    2.1加载网络表在ISIS6Professional界面中单击DesignToolbar中的图标或通过Tools菜单的NetlisttoARES命令打开ARES6Professional窗口如上图所示。可以看到,在上图中左下角的元器件选择窗口中列出了从原理图加载过来的所有元器件。若原理图中的某些器件没有自动加载封装或者封装库中没有合适的封装,那么在加载网络表时就会弹出一个要求选择封装的对话框,如下图所示。这时就需要根据具体的元件及其封装进行手动选择并加载。
  2.2设计元件封装    对于封装库中没有的封装或者是与实际的元件不符的封装,就需要自己画。那么,怎么画封装呢?这里以示例中的按钮开关为例,设计一个元件的封装。
  2.2.1放置焊盘    在下图所示的界面中根据按钮的引脚间距放置4个焊盘,并修改焊盘的标号,使之与原理图中的元件引脚标号一致,否则,会弹出没有网络连接的错误提示,或者加载后没有连线。
    2.2.2放置外边框    利用2D画图工具中的  图标根据按钮的实际大小加一个外边框,如此便完成了按钮封装的设计(如下图所示)。
  2.2.3保存封装    选中封装。用左键单击  图标,出现保存对话框(如下图示),在New PACkage Name中键入要保存的元件封装名称(在此用KS);在Package Category(保存范畴)中选中Miscellaneous;在Package Type(封装类型)中选中Through Hole;在Package Sub-Category(保存子范畴)中选中Switches;单击OK,就把按钮封装保存到了USERPKG(用户自建封装库)库中。
  2.2.4加载封装    自建封装保存后,再到库中加载,就可以把自己制作的元件封装加载到PCB中了(如下图所示)。
  按照上面的方法把需要的元件封装都画好以后,再从原理图单击Design Toolbar中的  图标。重新加载网络表。这样,就把所有的元件都加载到了PCB中。
  3.规划电路板并设置相关参数    3.1规划电路板    在ARES 6 Professional窗口中选中2D画图工具栏的  图标,在底部的电路层中选中Board Edge层(黄色),即可以单击鼠标左键拖画出PCB板的边框了。边框的大小就是PCB板的大小,所以在画边框时应根据实际,用测量工具  来确定尺寸大小(如下图所示)。
  3.2设置电路板的相关参数    PCB板边框画好以后,就要设置电路板的相关参数。单击System中的Set Default Rules项,在弹出的对话框中设置规则参数,有焊盘间距、线与焊盘间距、线与线间距等一些安全允许值。然后在Tools中选中  (布线规则)项,在弹出的对话框中单击Edit.Strategies项,出现一个对话框如下图所示。在左上Strategy栏中分别选中POWER和SlGNAL,在下面的Pair1中选同一层。这样,就完成了在单层板中布线的设置。到此,对一些主要的参数设置就完成了。别的系统参数设置,可以在System和Tools中去设置完成。
  4.元件布局及调整    4.1元件布局    电路板的规则设计好以后,就可导入元件并布局。布局有自动布局和手动布局两种方式。若采用自动布局方式,只要在界面的菜单栏中选中  项,弹出对话框,单击OK,就自动把元件布局于PCB板中了。而如果采用手动布局的方式,则在左下角的元件选择窗口中选中元件,在PCB板边框中适当位置单击左键,就可以把元件放入。    4.2元件调整    无论是自动布局还是手动布局,都需要对元件进行调整。主要是对元件的移动和翻转等操作。对元件的布局原则是:美观、便于布线、PCB板尽可能小。PCB的元件布局完成如下图所示。
  5.布线并调整    同样,PCB的布线也是有自动布线和手动布线两种布线方式。一般,是先用自动布线,然后手工修改,也可以直接手工布线。布线规则的设置在上面已经描述,这里主要说明布线时用的导线的粗细设置以及焊盘大小的修改。首先,选中工具菜单栏中的  项,在左下角的导线选择窗口中选中想要的导线粗细类型,也可以选择DEFAULT(默认),再单击E按钮,在弹出的对话框中修改Width的值就可以了。在布线的过程中,如果需要改变某一根线的大小,可以双击右键,选择TraceStyle选项中的合适类型;要删除该线,则左键单击Delete。如果要删除整个布线,那么就选中所有的连线,左键单击工具菜单栏中的  图标即可。对于焊盘的修改,可以在布线完成之后进行。先选中工具菜单栏中的  选项,然后在选择窗口中选中合适的焊盘,在需要改变的元件焊盘处单击鼠标左键即可。布线完成后的PCB板如下图所示。(说明:1000mil=1inch=25.4mm)
  6.输出及制作PCB    最后就是输出打印电路版图了。先单击Output选项中的SetOutputArea选项,按住鼠标左键并拖动,选中要输出的版图。如下图所示。
  然后是设置要打印的输出电路层。在Output选项中单击Print/Plot Layout选项,出现设置对话框,如下图所示。
  在设置对话框中,单击选择Printer,可以选择打印机和设置打印纸张以及版图放置方向。在下面的Layers/Artworks栏中选择要打印的层。因为布线是在底层进行的,所以在打印布线层时,在BottorllCopper和BoardEdge选项前打勾,表示选中要打印输出;而在打印元件的布局层(丝印层)时,在TopSILk和BoardEdge选项前打勾(这一层在打印时注意需要选择镜像打印);Scale选项是打印输出的图纸比例,选100%;Rotation和Reflection选项分别是横向/纵向输出和是否要镜像的设置。设置好以后就可以打印了,如上图和下图所示的分别为丝印层与布线层的打印效果图。    到此,我们就完成了用Proteus制作印制电路板的全过程。
Copyright by ;All rights reserved.用Proteus ISIS的怎样原理图仿真
用Proteus ISIS的怎样原理图仿真
用Proteus ISIS的怎样原理图仿真下载
下载资料需要,并消耗一定积分。
下载此资料的人还喜欢:
技术交流、我要发言! 发表评论可获取积分! 请遵守相关规定。
本周热点资料
电子资料热门词
上传者其它资料
PCB设计规则下载排行21ic官方微信
后使用快捷导航没有帐号?
查看: 4493|回复: 4
DS18B20用Proteus仿真运行正常,但硬件温度保持27.9℃保持不变怎么回事
&&未结帖(20)
主题帖子积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
本人做基于单片机的温度自动检测与控制系统,刚焊完硬件,但温度保持27.9℃保持不变,接上报警模块,蜂鸣器不停的响,调整温度上下限值后,仍然在不停的报警,是怎么回事?我是买的最小系统,其上面的晶振是11.0592KHZ,仿真是用12KHZ。
#include&intrins.h&
#include &1602.h&
#define uint unsigned int
#define uchar unsigned char
void delay_uint(uint q)
& & & & while(q--);
/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void write_1602com(uchar com)
& & & & e=0;
& & & & rs=0;
& & & & rw=0;
& & & & P0=
& & & & delay_uint(25);
& & & & e=1;
& & & & delay_uint(100);
& & & & e=0;
/********************************************************************
* 名称 : write_data(uchar dat)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write_1602data(uchar dat)
& & & & e=0;
& & & & rs=1;
& & & & rw=0;
& & & & P0=
& & & & delay_uint(25);
& & & & e=1;
& & & & delay_uint(100);
& & & & e=0;& & & &
/********************************************************************
* 名称 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示&ab cd ef& ,调用该函数如下
& & & &&&& & & &&&write_string(1,5,&&)
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void write_1602string(uchar hang,uchar add,uchar *p)
& & & & if(hang==1)& &
& & & & & & & & write_1602com(0x80+add);
& & & & else
& & & & & & & & write_1602com(0x80+0x40+add);
& & & & while(1)
& & & & & & & & if(*p == '\0')&&
& & & & & & & & write_1602data(*p);
& & & & & & & & p++;
& & & & }& & & &
/***********************lcd1602上显示特定的字符************************/
void write_1602zifu(uchar hang,uchar add,uchar date)
& & & & if(hang==1)& &
& & & & & & & & write_1602com(0x80+add);
& & & & else
& & & & & & & & write_1602com(0x80+0x40+add);
& & & & write_1602data(date);& & & &
/***********************lcd1602初始化设置************************/
void init_1602()
& & & & write_1602com(0x38);& & & &
& & & & write_1602com(0x0c);
& & & & write_1602com(0x06);
& & & & delay_uint(1000);& & & &
& & & & write_1602string(1,0,&Hello Everyboby&);
& & & & write_1602string(2,1,&&&Temp:&);& & & &
#include &reg52.h&& & & && && && & //调用单片机头文件
#define uchar unsigned char&&//无符号字符型 宏定义& & & & 变量范围0~255
#define uint&&unsigned int& & & &&&//无符号整型 宏定义& & & & 变量范围0~65535
#include &intrins.h&
#include &eeprom52.h&
#include &1602.h&
#include &1302.h&
sbit dq& &= P3^6;& & & & //18b20 IO口的定义
sbit beep = P3^7;& &//蜂鸣器IO口定义
bit flag_300
bit key_500ms&&;& & & & & & & & & & & && &
uchar code table_num[]=&abcdefg&;
uchar menu_1;& && &&&//菜单设计的变量
uint t_high =300,t_low = 100;
//温度正负号标志位
uchar timeflag=1;& & & &&&//时间显示标志位
/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
& & & & uint i,j;
& & & & for(i=0;i&q;i++)
& & & & & & & & for(j=0;j&110;j++);
/******************把数据保存到单片机内部eepom中******************/
void write_eeprom()& & & & //保存数据
& & & & SectorErase(0x2000);
& & & & byte_write(0x2000, t_high%256);
& & & & byte_write(0x2001, t_high/256);
& & & & byte_write(0x2002, t_low%256);
& & & & byte_write(0x2003, t_low/256);
& & & & byte_write(0x2055, a_a);& & & &
/******************把数据从单片机内部eepom中读出来*****************/
void read_eeprom()& & & &&&//读出保存数据
& & & & t_high=byte_read(0x2001);
& & & & t_high&&=8;
& & & & t_high|=byte_read(0x2000);
& & & & t_low=byte_read(0x2003);
& & & & t_low&&=8;
& & & & t_low|=byte_read(0x2002);
& & & & a_a=byte_read(0x2055);
///**************开机自检eeprom初始化*****************/
void init_eeprom()& & & &&&////开始初始化保存的数据
& & & & read_eeprom();& & & &&&//读出保存数据
& & & & if(a_a !=1)& & & & & & & & & & & & & & & & & & & & //新的单片机初始单片机内问EEPROM
& & & & & & & & t_high=300;
& & & & & & & & t_low =100;
& & & & & & & & a_a =1;
& & & & & & & & write_eeprom();& & & & //保存数据
& & & & }& & & & & & & &
/***********************lcd1602上显示两位十进制数************************/
void write_sfm3_18B20(uchar hang,uchar add,uint date)
& & & & if(hang==1)& &
& & & & & & & & write_1602com(0x80+add);
& & & & else
& & & & & & & & write_1602com(0x80+0x40+add);
& & & & write_1602data(0x30+date/100%10);
& & & & write_1602data(0x30+date/10%10);
& & & & write_1602data('.');
& & & & write_1602data(0x30+date%10);
/***********************18b20初始化函数*****************************/
void init_18b20()
& & & & dq=1;& & & & & & & & & & & & & & & & //把总线拿高
& & & & delay_uint(1);& & & && &&&//15us
& & & & dq=0;& & & & & & & & & & & & & & & & //给复位脉冲
& & & & delay_uint(80);& & & & & & & & //750us
& & & & dq=1;& & & & & & & & & & & & & & & & //把总线拿高 等待
& & & & delay_uint(10);& & & & & & & & //110us
& & & & q=& & & & & & & & & & & & & & & & //读取18b20初始化信号
& & & & delay_uint(20);& & & & & & & & //200us
& & & & dq=1;& & & & & & & & & & & & & & & & //把总线拿高 释放总线
/*************写18b20内的数据***************/
void write_18b20(uchar dat)
& & & & for(i=0;i&8;i++)
& & & & {& & & & & & & & & & & & & & & & & & & &&&//写数据是低位开始
& & & & & & & & dq=0;& & & & & & & & & & & &&&//把总线拿低写时间隙开始
& & & & & & & & dq=dat&0x01; //向18b20总线写数据了
& & & & & & & & delay_uint(5);& & & &&&// 60us
& & & & & & & & dq=1;& & & & & & & & & & & &&&//释放总线
& & & & & & & & dat&&=1;
& & & & }& & & &
/*************读取18b20内的数据***************/
uchar read_18b20()
& & & & uchar i,
& & & & for(i=0;i&8;i++)
& & & & & & & & dq=0;& & & & & & & & & & & &&&//把总线拿低读时间隙开始
& & & & & & & & value&&=1;& & & &&&//读数据是低位开始
& & & & & & & & dq =1;& & & & & & & & & & & &&&//释放总线
& & & & & & & & if(dq==1)& & & & & & & &&&//开始读写数据
& & & & & & & & & & & & value|=0x80;
& & & & & & & & delay_uint(5);& & & &&&//60us& & & & 读一个时间隙最少要保持60us的时间
& & & && & & & & & & &&&//返回数据
/*************读取温度的值 读出来的是小数***************/
uint read_temp()
& & & && & & & & & & & & & & && & //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
& & & & init_18b20();& & & & & & & && & //初始化18b20
& & & & write_18b20(0xcc);& & & && & //跳过64位ROM
& & & & write_18b20(0x44);& & & && & //启动一次温度转换命令
& & & & delay_uint(75);& & & & & & & && & //500us
& & & & init_18b20();& & & & & & & && & //初始化18b20
& & & & EA=0;
& & & & write_18b20(0xcc);& & & && & //跳过64位ROM
& & & & write_18b20(0xbe);& & & && & //发出读取暂存器命令
& & & & EA=1;
& & & & low=read_18b20();& & & && & //读温度低字节
& & & & value=read_18b20();&&//读温度高字节
& & & & value&&=8;& & & & & & & && & //把温度的高位左移8位
& & & & value|=& & & & & & & && & //把读出的温度低位放到value的低八位中
& & & & value*=0.625;& & & && && &&&//转换到温度值 小数
& & if(value&0x0fff)
& & tflag=0;
& & value=~value+1;
& & & & tflag=1;
& & & && & & & & & & && & //返回读出的温度 带小数
/*************定时器0初始化程序***************/
void time_init()& & & && &
& & & & EA=1;& & & &&&& & & && &//开总中断
& & & & TMOD=0X01;& & & && &//定时器0、定时器1工作方式1
& & & & ET0=1;& & & & & & & && &//开定时器0中断
& & & & TR0=1;& & & & & & & && &//允许定时器0定时
/********************独立按键程序*****************/
uchar key_& & & &&&//按键值
void key()& & & && && &//独立按键程序
& & & & static uchar key_
& & & & key_can=20;& && && && && &//按键值还原
& & & & P1|=0xf0;
& & & & if(key_500ms==1)& & & & //连加
& & & & & & & & key_500ms=0;
& & & & & & & & key_new=1;
& & & & if((P1&0xf0)!=0xf0)& & & & & & & & //按键按下
& & & & & & & & delay_1ms(1);& & & && && && & & & //按键消抖动
& & & & & & & & if(((P1&0xf0)!=0xf0) && (key_new==1))
& & & & & & & & {& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & key_new=0;& & & && & //确认是按键按下
& & & & & & & & & & & & switch(P1&0xf0)
& & & & & & & & & & & & {& & & & & & & & & & & && &&&
& & & & & & & & & & & &&&case 0xd0: key_can=3;& & & && & //得到k1键值
& & & & & & & & & & & &&&case 0xb0: key_can=2;& & & && & //得到K2键值
& & & & & & & & & & & &&&case 0x70: key_can=1;& & & && & //得到k3键值& & & & & & & & & & & &
& & & & & & & & & & & & }
& & & && &}& & & & & & & & & & & &
& & & & else
& & & & & & & & if(key_new==0)
& & & & & & & & {
& & & & & & & & & & & & key_new=1;
& & & & & & & & & & & & write_eeprom();& & & & & & & & //保存数据
& & & & & & & & }
& & & & }& & & &
/****************按键显示函数***************/
void key_with()
& & & & if(key_can==1)& & & && & //设置键
& & & & & & & & menu_1++;
& & & & & & & & if(menu_1&=5)
& & & & & & & & {
& & & & & & & & & & & & menu_1=0;
& & & & & & & & }
& & & & & & & & if(menu_1==0)
& & & & & & & & {
& & & & & & & && &&&write_1602com(0x01);//清显示
& & & & & & & & & & & & timeflag=1;
& & & & & & & & & & & & init_1602();& & & &
& & & & & & & & }
& & & & if(menu_1==1)& & & & & & & & & & & &
& & & && &write_1602com(0x01);//清显示
& & & && &write_1602com(0x0c);
& & & && &write_1602string(1,0,&20&&-&&-&&&);
& & & && &write_1602string(2,0,&&&:&&:&&&);& & & && &
& & & && &timeflag=0;
& & & && &timesetting();
& & & & if(menu_1==2)& & & & & & & & & & & &
& & & && &write_1602com(0x01);//清显示
& & & && &timeflag=1;
& & & && &write_1602string(1,0,&Htemp:& &Ltemp:&);
& & & && &write_sfm3_18B20(2,1,t_high);
& & & && &write_1602zifu(2,5,0xdf);&&//显示度
& & & && &write_1602zifu(2,6,0x43); & & & &
& & & && &write_sfm3_18B20(2,9,t_low);
& & & && &write_1602zifu(2,13,0xdf);&&//显示度
& & & && &write_1602zifu(2,14,0x43);
& & & & if(menu_1==3)& & & && & //设置高温报警
& & & && &if(key_can==2)
& & & && &{
& & & & & & & &&&t_high+=10;& & & &
& & & & & & & & if(t_high&500)
& & & & & & & & & & & & t_high=500;
& & & && &}
& & & & & & & & if(key_can==3)
& & & & & & & & {
& & & & & & & &&&t_high-=10;& & & & //温度减1
& & & & & & & &&&if(t_high&=t_low)
& & & & & & & &&&t_high=t_low+1;
& & & & & & & & }
& & & & & & & & write_sfm3_18B20(2,1,t_high);& & & & & & & & & & & & //显示高温报警温度
& & & & & & & & write_1602com(0x80+0x40+1);& && && && & //将光标移动到秒个位
& & & & & & & & write_1602com(0x0f);& && && && && && &&&//显示光标并且闪烁& & & &
& & & & & & & & write_eeprom();& & & & //保存数据
& & & & }& & & & & & & & & & & & & & & & & & & &&&
& & & & if(menu_1==4)& & & &&&//设置低温报警
& & & && &if(key_can==2)
& & & &&&{
& & & && &t_low+=10;& & & & //温度加1& & & &
& & & && &if(t_low&=t_high)
& & & && &t_low=t_high-1;
& & & &&&}
& & & &&&if(key_can==3)
& & & && &t_low-=10;
& & & && &if(t_low&=10)
& & & && &{
& & & && & t_low=10;& & & &
& & & && &}
& & & & write_sfm3_18B20(2,9,t_low);
& & & & write_1602com(0x80+0x40+0x09);& && && && &//将光标移动到秒个位
& & & & write_1602com(0x0f);& && && && && && &&&//显示光标并且闪烁& & & &
& & & & write_eeprom();& & & & //保存数据
& & & & }& & & &
/********************菜单对应的处理函数***********************/
void menu_display()
& & & & if((menu_1==3))& & & & & & & & & & & &&&//对光标不处理,要不然光标不会显示在正确的位置
& & & & & & & & write_1602com(0x80+0x40+0x01);&&//将光标移动到
& & & & & & & & write_1602com(0x0f);& && & //显示光标并且闪烁& & & & & & & &
& & & & }else if((menu_1==4))
& & & & & & & & write_1602com(0x80+0x40+0x09);&&//将光标移动到
& & & & & & & & write_1602com(0x0f);& & & && & //显示光标并且闪烁& & & &
/****************报警函数***************/
void clock_h_l()
& & & & if((temperature&=t_low)||(temperature&=t_high))
& & & & & & & & value ++;&&//消除实际距离在设定距离左右变化时的干扰
& & & & & & & & if(value &=2)
& & & & & & & & {
& & & & & & & & & & & & beep =~ & & & && &//蜂鸣器报警& & & & & & & & & & & &
& & & & & & & & }& & & &
& & & & else
& & & & & & & & beep=1;& & & &
& & & & }& & & & & & & & & & & &
/****************主函数***************/
void main()
& & & & beep=0;& & & & & & & && && && && && &&&//开机叫一声& &
& & & & delay_1ms(150);
& & & & init_1602();& && && && && && &&&//1602初始化
& & & & temperature=read_temp();& & & & & & & & //先读出温度的值
& & & & time_init();& && && && && && &&&//初始化定时器
& & & & init_eeprom();& & & & & & & & & & & & & & & & & & & & //开机自检eeprom初始化
& & & & if(menu_1==4)
& & & & write_sfm3_18B20(1,2,t_high);& & & &
& & & & write_sfm3_18B20(1,10,t_low);
& & & & temperature=read_temp();& & & & //先读出温度的值
& & & & write_sfm3_18B20(2,9,temperature);& & & & & & & & & & & & & & & &
& & & & while(1)
& & & &&&if(timeflag==0)
& & & && &ds1302_init() ;
& & & && &read1302();
& & & & if(menu_1==1)
& & & &&&timesetting();
& & & & }& & & &&&
& & & & & & & & if(flag_300ms==1)& & & && && && &//300ms 处理一次温度程序
& & & & & & & & {& & & &
& & & & & & & & & & & & flag_300ms=0;
& & & & & & & & & & & & if(menu_1&2)
& & & & & & & & & & & & {& & & &
& & & & & & & & & & & & temperature=read_temp();& & & & //先读出温度的值
& & & & & & & & & & & & if(tflag==1)
& & & & & & & & & & & & write_1602zifu(2,8,0x2d);
& & & & & & & & & & & & else
& & & & & & & & & & & & write_1602zifu(2,8,0x20);
& & & & & & & & & & & & write_sfm3_18B20(2,9,temperature);
& & & & & & & & & & & & write_1602zifu(2,13,0xdf);&&//显示度
& & & && && && &write_1602zifu(2,14,0x43);
& & & & & & & & & & & & }
& & & & & & & & & & & & menu_display();& &//不同级的菜单对应显示1602对应显示不同& & & & & & & &
& & & & & & & & }
& & & & & & & & key();& & & & & & & & & & & & & & & & & & & & //按键程序
& & & & & & & & if(key_can&10)
& & & & & & & & {
& & & & & & & & & & & & key_with();& & & & & & & & & & & && &&&//设置报警温度& & & &
& & & & & & & & }
/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
& & & & TH0=0x3c;
& & & & TL0=0xb0;& &&&// 50ms
& & & & value++;& & & &&&
& & & & if(value%6==0)
& & & & & & & & flag_300ms=1;& & & && & //300ms
& & & & & & & & value=0;
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:0.30受赏:81.00
主题帖子积分
其上面的晶振是11.0592KHZ,仿真是用12KHZ。
是不是打错了?
很明显是程序有问题.
天降大任于斯国也,必先霾其头,灰其脸,黄其皮肤,自一头雾水而出,方知其堪当大任也!
主题帖子积分
中级工程师, 积分 3233, 距离下一级还需 1767 积分
中级工程师, 积分 3233, 距离下一级还需 1767 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:15.00
主题帖子积分
中级工程师, 积分 3233, 距离下一级还需 1767 积分
中级工程师, 积分 3233, 距离下一级还需 1767 积分
给18B20发出温度转换指令后,需要等待750ms以后才能去读取,否则很有可能读取失败或者读取错误,请仔细看手册,如果不想傻傻的等待,那就先发指令,然后计数并去干别的事,到时间后来读取,读完之后,再发出转换指令,然后继续去闲逛,等下一次读取。
工作不养闲人,团队不养懒人。赚不到钱赚知识,赚不到知识赚经历,赚不到经历赚阅历,让人迷茫的原因只有一个,那就是本该拼搏的年纪,却想得太多,做的太少!
主题帖子积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
ZG11211 发表于
给18B20发出温度转换指令后,需要等待750ms以后才能去读取,否则很有可能读取失败或者读取错误,请仔细看手 ...
谢谢帮助,我将延时改成750us后,温度传感器正常工作。
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
1302.h 程序是啥啊,求
坚毅之洋流
发帖类勋章
时间类勋章
核心会员奖章
等级类勋章
技术领袖奖章
人才类勋章
技术奇才奖章
人才类勋章
时间类勋章
湍急之河流
发帖类勋章
精华达人奖章
等级类勋章
热门推荐 /6}

我要回帖

更多关于 proteus仿真实例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信