当前位置:首页 > 单片微型计算机原理与接口技术课程设计报告 - 温度测量
本系统设计三个按键,采用查询方式,一个用于选择切换设置温度上下限和当前温度,另外两个分别用于设置报警温度的加和减。均采用软件消抖。
图3.4按键电路
3.5步进电机
3.5.1步进电机驱动电路
本设计选用驱动芯片ULN2003驱动四相步进电机。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。ULN2003 的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和 CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003 工作电压高,工作电流大,灌电流可达 500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。
图3.5.2.1 ULN2003方框图
表3.5.2 ULN2003极限值参数
ULN2003
与单片机连接驱动步进电机原理图如下:
图3.5.2.2步进电机驱动电路
3.6双机通信
利用单片机串行口实现两个单片机(主机、从机)之间的通信,其中
一个单片机作为主机(发送方),另一个为从机(接收方),主机读入按键值并将相应命令发送给从机,从机收到命令后执行相应的功能。双机通信示意图如下:
TXD RXD GND RXD TXD GND AT89C51 AT89C51 图3.6双机通信示意图
4、软件清单
系统程序主要包括主程序和通信程序。
其中主程序包括延时函数、扫描显示函数、DS18B20 复位函数、DS18B20 写命令函数、DS18B20 读1 字节函数、读出温度函数、温度数据处理函数、报警函数、步进电机函数、设置温度显示转换函数、按键查询程序、主函数。
通信上位机程序包括延时函数、扫描显示函数、初始化函数、按键查询程序、主函数。下位机函数包括初始化、接收程序、主函数。 上位机软件清单:
#include \
#include \//_nop_();延时函数用
#define dm P0 //段码输出口 #define uchar unsigned char #define uint unsigned int uint h;
sbit w0=P2^0; //数码管4
sbit w1=P2^1; //数码管3 sbit w2=P2^2; //数码管2 sbit w3=P2^3; //数码管1 sbit aa=P1^0; sbit bb=P1^1; sbit cc=P1^2;
uchar idata buf[1];
uchar code table_dm[15]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x38,0x76,0x39};
//共阴LED 段码表\\\\\\不亮%uchar data display[4]={0x00,0x00,0x00,0x00}; //显示单元数据,共4 个数据和一个运算暂用
/******11us 延时函数*******/ void delay(uint t) {
for (;t>0;t--); }
/************scan*************/ void scan() { int j;
for(j=0;j<4;j++) {
switch (j) { case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1; case 1: dm=table_dm[display[1]];w1=0;delay(50);w1=1; case 2: dm=table_dm[display[2]];w2=0;delay(50);w2=1; case 3: dm=table_dm[display[3]];w3=0;delay(50);w3=1; } } }
/**********初始化函数***********/ void init() {
TMOD=0x20; TH1=0xfd; TL1=0xfd; PCON=0x00; TR1=1;
SCON=0x50; }
/*************keyscan***********/ void keyscan() {
if (aa==0) {
SBUF=0x06;
do{} while(TI==0);TI=0; }
else if (bb==0) {
SBUF=0xaa;
do{} while(TI==0);TI=0; }
else if(cc==0) {SBUF=0x55; display[3]=0x0d; display[2]=0x0d; display[1]=0x0d; display[0]=0x0d;
do{} while(TI==0);TI=0; } else ; }
/************main***************/ void main() { init();
dm=0x00; //初始化端口 w0=0; w1=0; w2=0; w3=0;
for(h=0;h<4;h++) //开机显示\{
display[h]=0; }
while(1) {
scan();
共分享92篇相关文档