基于Proteus的单片机温控步进电机电路及程序仿真设计
一.课设目的:
1.通过本设计,使学生综合运用《单片机原理及应用》及电子技术等课程的内容,为以后从事基于单片机的检测与控制工作奠定一定的基础。
2.主要掌握芯片DS18B20、ULN2803等器件的使用,掌握步进电机的使用。
3.学会用Keil C51语言编写一个完整的程序。
4.掌握单片机应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等步骤。
5.掌握Proteus软件的应用。
二.课设内容:
采用单片机内部定时器,设计1s定时,每秒检查一次由温度传感器输入的当前温度。设置温度的上限(t2)和下限(t1),假定当前温度为t。由此可知:
若t≥t2,则控制步进电机顺时针旋转;
若t≤t1,则控制步进电机逆时针旋转;
若t1<t<t2,步进电机停止转动。
三.问题分析及设计思路:
由设计要求可知,需要通过由温度传感器采集的温度来控制步进电机的转动,因此可以在源程序中加入相应的语句加以实现。电路原理图的设计思路如下:
1.单片机P1.0接温度传感器DS18B20,采集外界的当前温度。DS18B20的电源和地线分别接VCC和GND。
2.单片机P2.0~P2.3接74LS04,74LS04的输出接ULN2803,ULN2803的输出通过电阻接步进电机。
3.设计程序每秒检查一次由温度传感器输入的当前温度,根据设置的温度控制步进电机转动的方向或停止步进电机。
四.电路原理图:
N
五. 程序流程图:
Y 初始化 读取数据aa 显示温度aa 电机正转 延时
aa<=0x20 aa>=0x25 Y N 电机反转
六.实验源程序:
#include
#define uchar unsigned char
#define uint unsigned int
uchar code fortab[9]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06,0x00};
uchar code revtab[9]={0x0e,0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x00};
int time=500;
void disp(uchar cc);
void dsend(uchar bb);
void dmsec (unsigned int count);
void tmreset (void);
void tmpre (void);
bit tmrbit (void);
unsigned char tmrbyte (void);
void tmwbyte (unsigned char dat);
void tmstart (void);
uchar tmrtemp (void);
void dfor(void);
void drev(void);
rom();
//对调用的函数进行初始化定义
uchar code temper_tab[100]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,
0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,0x51,
0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x60,0x61,0x62,0x63,0x64,0x65,
0x66,0x67,0x68,0x69,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x90,0x91,0x92,0x93,
0x94,0x95,0x96,0x97,0x98,0x99
}; //定义温度范围,0到100度
uchar code dis_code[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
//0 1 2 3 4 5 6 7 8 9
sbit TMDAT = P1^0; //根据实实际情况设定
uchar TMP; //读取后温度值存于TMP中,将其除以2即可得出实际温度;
uchar f; //结果是否为负温,“0”为正温,“1”为负温。
//正转子程序
void dfor(void)
{
uchar i;
uint j;
for(i=0;i<=8;i++)
{
P2=fortab[i];
for(j=0;j