一、设计任务:实现按键对继电器的控制 二、设计要求:1、用键盘控制单个继电器
2、用键盘控制多个继电器
3、实现按键中断功能
三、所需原件:
原件名称 数量 9cm*15cm的实验电路板 电源插座 PNP三极管 8M石英晶体 22pF电容 0—5.8k电位器 120电阻 1k电阻 200k电阻 ATmega16单片机 SPI程序下载端口 继电器 发光二极管 按键 集成电路插座40脚 数据下载线 排针、跳线 1 1 2 1 2 1 1 2 2 1 1 2 4 4 1 1 若干 四、设计步骤
硬件设计
设计要点
1、由于芯片自身电流不能带动继电器工作,故需要加入三极管,对电路的电流进放大,以确保可以驱动继电器。
2、首先考虑的是确保三极管和I/O口不会被反峰电压击穿,故与继电器并联了一个电容,可以对其产生的尖峰电压变化进行有效的过滤。
3、三极管集电极的负载继电器吸合线圈在三极管截止时会产生一个很高的反峰电压,故在继电器两端应并联一个二极管,以释放反峰电压。
4、键盘使用设计要求参见过去的作业。
电路图(详见附带图片)
实物图
软件设计
功能:1、实现芯片对波形频率和幅值的测量、显示
2、实现键盘对频率和幅值之间的转换
程序说明:
进入主程序
对全局变量进行赋值、定义
判断是否有按键按下
否 是 判断第几个键被按下
第一个键 第二个键 第三个键
第一个灯亮 第二个灯亮 两个灯都亮 判断复位键是否被按下
否 是保持现状 灯熄灭 程序内容:
/***************************************************** This program was produced by the CodeWizardAVR V1.25.7a Evaluation Automatic Program Generator
?Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project : Version :
Date : 2011/12/22
Author : Freeware, for evaluation and non-commercial use only Company : Comments:
Chip type : ATmega16 Program type : Application Clock frequency : 4.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256
*****************************************************/
#include #define Key_mask 0b00000001 unsigned char key_value,key_line; void main(void) { unsigned char key_temp; unsigned int i; PORTC=0x00; DDRC=0x03; PORTD=0x1F; DDRD=0x1E; while(1) { key_line=0b00000010; for(i=1;i<4;i++) { PORTD=~key_line; PORTD=~key_line; key_value=Key_mask&PIND; if(key_value==Key_mask) //判定是否有按键按下 key_line<<=1; else { if(key_line==0b00000010) //如果是第一个按键按下 { while(1) { PORTC=0x01; key_line=0b00010000; PORTD=~key_line; PORTD=~key_line; key_temp=Key_mask&PIND; if(key_temp!=Key_mask) //检测复位键是否按下 { PORTC=0x00; break; } } } if(key_line==0b00000100) //如果是第二个键按下 { while(1) { PORTC=0x02; key_line=0b00010000; PORTD=~key_line; PORTD=~key_line; key_temp=Key_mask&PIND; if(key_temp!=Key_mask) //检测复位键是否按下 { PORTC=0x00; break; } } } if(key_line==0b00001000) //如果是第三个键按下 { while(1) { PORTC=0x03; key_line=0b00010000; PORTD=~key_line; PORTD=~key_line; key_temp=Key_mask&PIND; if(key_temp!=Key_mask) { PORTC=0x00; break; } //检测复位键是否按下 } } } } } } 五、键盘控制继电器结果 键盘有4个键起作用,分别控制第一个灯,控制第二个灯,控制两个灯以及一个复位键。 第一个灯亮 当按下以一个键时,第一个灯亮。 第二个灯亮 当按下第二个键时,第二个灯亮。 当按下第三个键时,两个灯都亮。 六、总结 本次试验要重考虑到继电器线圈对整个电路的影响,并采取适当的保护措施,具体做法及原因已在硬件设计的设计要点中详细地进行了解释说明。 七、参考文献 [1] 马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出 版社,2009. 因篇幅问题不能全部显示,请点此查看更多更全内容