基于ds18b20的温度测量和秒表设计_单片机最小系统实验报告(编辑修改稿)内容摘要:

作,在对象 选择器窗口中,已有了 7SEGMPX6CABLUE、 AT89C5RES 三个元器件对象,若单击 AT89C51,在预览窗口中,见到 AT89C51 的实物图,如图所示;若单击 RES 或 7SEGMPX6CABLUE,在预览窗口中,见到 RES 和7SEGMPX6CABLUE 的实物图,如图所示。 此时,我们已注意到在绘图工具栏中的元器件按钮 处于选中状态。 ( 4)放置元器件至图形编辑窗口 Placing Components onto the Schematic 在对象选择器窗口中,选中 7SEGMPX6CABLUE,将鼠标置于图形编辑窗口该对象的欲放位置、单击鼠标左键,该对象被完成放置。 同理,将 AT89C51 和 RES放置到图形编辑窗口中。 如图所示。 ( 5)放置总线至图形编辑窗口 单击绘图工具栏中的总线按钮 ,使之处于选中状态。 将鼠标置于图形编辑窗口,单击鼠标左键,确定总线的起始位置;移动鼠标,屏幕出现粉红色细直线,找到总线的终了位置,单击鼠标左键,再单击鼠标右键,以表示确认并结束画总线操作。 此后,粉红色细直线被蓝色的粗直线所替代,如图所示。 12 ( 6)元器件之间的连线 Proteus 的 智能化可以在你想要画线的时候进行自动检测。 下面,我们来操作将电阻 R1的右端连接到 LED显示器的 A端。 当鼠标的指针靠近 R1右端的连接点时,跟着鼠标的指针就会出现一个“”号,表明找到了 R1 的连接点,单击鼠标左键,移动鼠标 (不用拖动鼠标 ),将鼠标的指针靠近 LED 显示器的 A端的连接点时,跟着鼠标的指针就会出现一个“”号,表明找到了 LED 显示器的连接点,同时屏幕上出现了粉红色的连接,单击鼠标左键,粉红色的连接线变成了深绿色,同时,线形由直线自动变成了 90186。 的折线,这是因为我们选中了线路自动路径功能。 Proteus 具有线路自动路径功能 (简称 WAR),当选中两个连接点后, WAR 将选择一个合适的路径连线。 WAR 可通过使用标准工具栏里的“ WAR”命令按钮 来关闭或打开,也可以在菜单栏的“ Tools”下找到这个图标。 同理,我们可以完成其它连线。 在此过程的任何时刻,都可以按 ESC 键或者单击鼠标的右键来放弃画线。 ( 7)元器件与总线的连线 画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。 此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可,如图所示。 ( 8)给与总线连接的导线贴标签 PART LABELS 单击绘图工具栏中的导线标签按钮 ,使之处于选中状态。 将鼠标置于图形编辑窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个“”号,如图所示。 13 表明找到了可以标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图所示。 在“ string”栏中,输入标签名称 (如 a),单击“ OK”按钮,结束对该导线的标签标定。 同理,可以标注其它导线的标签,如图所示。 注意,在标定导线标签的过程中,相互接通的导线必须标注相同的标签名。 至此,我们便完成了整个电路图的绘制。 KeilC 与 Proteus 连接调试 进入 KeilC μ Vision2 开发集成环境,创建一个新项目 (Project),并为该项目选定合适的单片机 CPU 器件(如: Atmel 公司的 AT89C51)。 并为该项目加入 KeilC源程序。 实验仿真图: 14 15 源程序如下: include define LEDS 6 //led 灯选通信号 unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10,0x20}。 unsigned char code LED_CODES[]= {0xc0,0xF9,0xA4,0xB0,0x99,//04 0x92,0x82,0xF8,0x80,0x90,//59 0x88,0x83,0xC6,0xA1,0x86}。 void main() { char i=0,j=0。 long int k。 while(1) { P2=0。 P1=LED_CODES[i]。 P2=Select[j]。 for(k=3000。 k0。 k)。 //该 LED 模型靠脉冲点亮,第 i 位靠脉冲点亮后,会自动熄来头。 //修改循环次数,改变点亮下一位之前的延时,可得到不同的显示效果。 i++。 j++。 if(j5) j=0。 if(i14)i=0。 16 } } 基于 DS18b20 的温度测量和秒表设计 设计方案:通过功能键(外部中断)选择进入不同的模式工作。 当 K=0 时,工作在时间显示模式,当 k=1 时,工作在秒表 模式,其中开关 3 时调节自己需要倒计时的时间,没按下时,对应的数值加一。 开关 4 为开始 /暂停按键。 当 k=4时,显示采集回来的温度。 LED LED LED3 灯是用来更直观的看本设计工作在什么下的, LED4 为是闪烁,闪烁频率为 1s. ( 1)、硬件部分 ( 2)软件部分 源程序: include define DataPort P0 //定义数据端口 程序中遇到 DataPort 则用 P0 替换 define uchar unsigned char define uint unsigned int /*****************位定义 ***********************/ sbit menu = P3^2。 //位声明,外部中断口,功能键 sbit LED1 = P1^5。 //LED 灯 sbit LED2 = P1^6。 sbit LED3 = P1^7。 sbit LED4 = P1^4。 sbit add_m= P1^0。 //按键,调分 sbit add_s= P1^1。 //按键,调秒 17 sbit add_us=P1^2。 //按键,调微秒 sbit reset =P1^3。 //清零,秒表状态下也是清零 sbit LATCH1=P2^0。 //定义锁存使能端口 段锁存 sbit LATCH2=P2^1。 // 位锁存 sbit DQ = P2^2。 //定义 18b20 的通信端口 /*****************参数定义 ***********************/ uint a,b,j。 uchar TempData[8]。 uint m,s,w, //时钟 m0,s0,w0,//秒表 k。 //状态转换标志 uchar code weima[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}。 //位码 uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 //段码 /*****************函数声明 ***********************/ void delay_18B20(uint i)。 void Init_DS18B20()。 int ReadOneChar()。 WriteOneChar(uchar dat)。 ReadTemperature(void)。 void Display1()。 void init()。 void keyscan()。 void display(uchar a,uchar b,uchar c)。 void delay(uchar z)。 void wendu()。 /*****************主函数 *************************/ void main() { init()。 //初始化 while(1) {。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。