机电系统测控装置设计制作实践报告
设计项目:单片机:自动散热器 PLC:机械吊臂 班级:09机械1班 设计小组组员:
序号 1 姓名 苏汉生 学号 0915020045 分工 单片机编程,电路的检测,元件的购买 PLC编程,电路焊接 备注 2 3 江子毅 李国俊 电路焊接, PLC模型制作 设计人姓名:苏汉生,江子毅,李国俊 提交日期:2012年3月9日
1 / 17
一、设计任务
(1) 单片机自动监控系统 (2) PLC系统
二、设计过程
1、单片机系统
(1)单片机自动控制系统:自动散热器
(2)功能说明:自动检测发热体(用电灯泡代替),当温度超过25℃,蜂鸣器响,LED灯亮,表示警告,风扇启动对发热体进行散热;当温度不超过25℃,蜂鸣器不响,LED灯熄灭,表示正常状态。发热体(电灯泡)的开与关是用红外控制的。 (3)电路原理图:
2 / 17
(4)流程图:
红外控制发热体的开与关 温度检测 是 温度>25 否 蜂鸣器响 蜂鸣器不响 LED灯亮 LED灯熄灭 风扇启动对发热体进行散热 风扇关闭停止对发热体进行散热
(5)程序及每个函数的说明:
const unsigned char
Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
用于在数码管上显示数字的数组,对应的是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
void time0_init(void) {
OCR0A = 10; TCCR0A |= (1< TCCR0B |= ((1< TIMSK0 |= (1< 定时器0的初始化 3 / 17 void init_devices(void) { CLI(); time0_init(); DDRC |= 0x1E; DDRD |= 0xD8; PORTC &= 0xE1; PORTD |= (1<<3); SEI(); } 设备初始化,对单片机上的I/O口进行初始化。 void display_num(unsigned char num) { static unsigned char wei = 0; unsigned char num_l,num_r,i; num_r = num; num /= 10; num_l = num; if(wei) num_r = Seg7_Data[num_r]; else num_r = Seg7_Data[num_l]; for (i=0;i<8;i++) { if (num_r & 0x80) PORTC |= 0x04; else PORTC &= 0x0FB; num_r = num_r<<1; PORTC |= 0x02; PORTC &= 0x0FD; } if (!wei) { PORTC |= (1<<3); PORTC &=~(1<<4); } else { PORTC &=~(1<<3); PORTC |= (1<<4); } wei = !wei; } 采用74LS164 8位移位寄存器(串行输入,并行输出)的显示函数,用于把要显示的数字送到数码管上,并显示出来。 void init_1820(void) { TEM_DDR &=~ (1< 4 / 17 SET_TEM_DDR; SET_TEM_SDT; CLR_TEM_SDT; delay_nus(180); SET_TEM_SDT; CLR_TEM_DDR; delay_nus(5); while(CHECK_TEM_SDT); SET_TEM_DDR; SET_TEM_SDT; delay_nus(80); } 该程序是DS18B20的初始化,主机总线??0时刻发送一复位脉冲(最短为480us,最长为960us的低电平信号),接着在??1时刻释放总线并进入接受状态, DS18B20在检测到总线的上升沿之后,等待15-60us,接着DS18B20在??2时刻发出存在脉冲(低电平,持续60-240us)。 void write_1820(unsigned char data) { unsigned char i; for(i=0;i<8;i++) { CLR_TEM_SDT; if(data&(1< CLR_TEM_SDT; delay_nus(20); SET_TEM_SDT; } SET_TEM_SDT; } 写时间隙,当主机总线??0时刻从高拉至低电平时,就产生写时间隙,见图1、图2,从??0时刻开始15us之内应将所需写的位送到总线上,DS18B20在??0后15-60us间对总线采样。若低电平,写入的位是0,见图1;若高电平,写入的位是1,见图2。连续写2位间的间隙大于1us。 5 / 17