基于at89c51单片机的声光控制开关设计内容摘要:

与声音信号对应 的电压 值 .若有声音时则会输出一电压值 ,由于传声器转换的电压值非常小 ,所以必须将该电压经过 LM324 运算放大器进行放大 ,放大倍数为 RV1/R9,RV1 为可变电阻 ,通过调节其阻值使其放大倍数产生变化 ,起到了调节声音灵敏度的作用 . 放大后的电压必须经过 AD0832 进行模数转换 ,由单片机内部程序对转换值进行对比 .当值高于预设值时单片机启动 T0 计时中断和照明灯控制电路 ,使照明灯点亮 ,并通过数码管显示倒计时时间 .当没有声音或声音微弱时 ,系统不进行下一步的工作 . 单片机最小系统、时钟电路与复位电路 单片机最小应用系统 [6],是指用最少的原件组成的单片机可以工作的系统 .对于 51 系列单片机来说 ,最小系统应包括单片机、复位电路、晶振电路 . 最小系统电路图如图 6所示 : 图 6 单片机最小系统 AT89C51 单片机的时钟产生方法有两种 .内部时钟方式和外部时钟方式 .本 9 设计采用内部时钟方式 ,利用芯片内部的振荡电路 ,在 XTAL XTAL2 引脚上外接定时元件 ,内部的振荡电路便产生自激振荡 . 内部方式时 ,时钟发生器对振荡脉冲二分频 .系统对外接电容的值虽然没有严格的要求 ,但电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性 .因此本系统的晶体振荡器的值为 12MHZ,电容取 30pF. 当操作或程序运行出错使系统处于死锁状态时 ,为了摆脱困境可以通过复位键重新启动 .当系统处于正常工作状态时 ,且振荡器稳定后 ,如果 RST 引脚上有一个高电平并维持 2 个机器周期 (24 个振荡周期 )以上 ,则 CPU 就可以响应并将系统复位 .单片机系统的复位方式有 :手动按钮复位和上电复位 . 本设计使用的是按键手动复位 .手动按 钮复位需要人为在复位输入端 RST 上加入高电平 .一般采用的办法是在 RST端和正电源 VCC之间接一个按钮 .在按键复位的使用过程中 ,按键抖动现象是不容忽视的 ,所以为了确保按键的一次闭合单片机只处理一次 ,就必须在设计时考虑到抖动的消除 . 延时显示电路 数码管 [7]是此系统将用到的必要元器件 .数码管是一种半导体发光器件 ,其基本单元是发光二极管 .数码管按段数分为七段数码管和八段数码管 ,八段数码管比七段数码管多一个发光二极管单元 (多一个小数点显示 )。 按能显示多少个“8” 可分为 1 位、 2位、 4位、 5 位、 6位、 7位等数码管。 按 发光二极管单元连接方式分为共阳极数码管和共阴极数码管 .共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极 (COM)的数码管 ,共阳数码管在应用时应将公共极COM 接到 +5V,当某一字段发光二极管的阴极为低电平时 ,相应字段就点亮 ,当某一字段的阴极为高电平时 ,相应字段就不亮 .共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极 (COM)的数码管 ,共阴数码管在应用时应将公共极COM接到地线 GND上 ,当某一字段发光二极管的阳极为高电平时 ,相应字段就点亮 ,当某一字段的阳极为低电平时 ,相应字段就不亮 . led 数码 管 (LED Segment Displays)是由多个发光二极管封装在一起组成“8” 字型的器件 ,引线已在内部连接完成 ,只需引出它们的各个笔划 ,公共电极 .led 数码管常用段数一般为 7段有的另加一个小数点 ,还有一种是类似于 3位“+1” 型 .位数有半位 ,1,2,3,4,5,6,8,10 位等等 ,led 数码管根据 LED 的接法不同分为共阴和共阳两类 ,了解 LED 的这些特性 ,对编程是很重要的 ,因为不同类型的数码管 ,除了它们的硬件电路有差异外 ,编程方法也是不同的 .图 7 这是一个 7段两位带小数点 10 引脚的 LED 数码管 ,引脚定义每 一笔划都是对应一个字母表 10 示 ,DP是小数点 ,图 8 这是 10 引脚的 LED 数码管 . 图 7 LED 数码管引脚定义 图 8 10 引脚的 LED 数码管 数码管要正常显示 ,就要用驱动电路来驱动数码管的各个段码 ,从而显示出我们要的数字 ,因此根据数码管的驱动方式的不同 ,可以分为静态式和动态式两类 . 静 态显示驱动 静态 驱动也称直流驱动 .静态驱动是指每个数码管的每一个段码都由一个 单片机 的 I/O端口进行驱动 ,或者使用如 BCD码二 十进制译码器译码进行驱动 .静态驱动的优点是编程简单 ,显示亮度高 ,缺点是占用 I/O 端口多 ,如驱动 5个数码管静态显示则需要 58=40 根 I/O 端口来驱动 ,实际应用时必须增加译码驱动器进行驱动 ,增加了硬件电路的复杂性 . 动态显示驱动 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一 ,动态驱动是将所有数码管的 8 个显示笔划 “ a,b,c,d,e,f,g,dp” 的同名端连在一起 ,另外为每 个数码管的公共极 COM 增加位选通控制电路 ,位选通由各自独立的 I/O 线控制 ,当单片机输出字形码时 ,所有数码管都接收到相同的字形码 ,但究竟是哪个数码管会显示出字形 ,取决于单片机对位选通 COM 端电路的控制 ,所以我们只要将需要显示的数码管的选通控制打开 ,该位就显示出字形 ,没有选通的数码管就不会亮 .通过分时轮流控制各个数码管的的 COM 端 ,就使各个数码管轮流受控显示 ,这就是动态驱动 .在轮流显示过程中 ,每位数码管的点亮时间为 1~ 2ms,由于人的视觉暂留现象及发光二极管的余辉效应 ,尽管实际上各位数码管并非同时点亮 ,但只要扫描的速度足够快 ,给人的 印象就是一组稳定的显示数据 ,不会有闪烁感 ,动态显示的效果和静态显示是一样的 ,能够节省大量的 I/O端口 ,而且功耗更低 . AT89C51芯片内有两个 16位的定时 /计数器 ,都可以由软件来设定 .在此设计中用到的是 T0 作为定时器 .由于在系统中需要设置延时时间电路 ,目的是在照明灯点亮后经过一定延时能自动熄灭 .电路中采用了单片机内部定时器 . 定时 /计数部分 AT89C51 芯片内有两个 16 位的定时 /计数器 ,都可以由软件 11 来设定 .在此设计中用到的是 T0 作为定时器 .由于在系统中需要设置延时时间电路 ,目的是在照明灯点亮后经过一定延 时能自动熄灭 .电路中采用了单片机内部定时器 . 显示电路分析 系统功能中有一点是可以根据场所及使用人群的不同设置不同的延时时间值 .虽然动态显示的效果和静态显示是一样的 ,但动态显示能够节省大量的 I/O端口 ,而且功耗更低 .所以设计中采用 LED动态显示方式显示倒计时数据 .电路如图 9所示 : 图 9 延时时间显示电路 由图可知采用了共阴极的 2位数码显示管做显示电路 ,所以只要数码管的 a、b、 c、 d、 e、 f、 g、 h 引脚为高电平 ,那么其对应的二极管就会发光 ,使数码显示管显示 0~ 9的编码见表 2. 表 2 共阴极数码显示管字型代 码 字型 共阴极代码 字型 共阴极代码 0 3FH 5 6DH 1 06H 6 7DH 2 5BH 7 07H 3 4FH 8 7FH 4 66H 9 6FH 为了实现不同场所及使用人群的不同而灯亮的时间不一 ,在单片机的 P1 口接入了三个按键 .电路如图 9所示 .当单片机进行按键扫描时 ,如果 灯亮时间为 10s,并且显示器进行 10s 倒计时。 如果 口按下则为 20s 倒计时。 12 如果 口按下则为 30s. 数码显示管的八位段选端接入单片机的 P0口 ,而位选端由 P2口控制 ,分别为 口为十 位 , 口为个位 .设计中采用了 目前最常用的软件消抖的方法 ,选择 5ms 的延时来消除抖动 ,延时后在进行一次按键是否闭合 . 图 10 按键接口电路 图 10 中的按键部分可以进行扩展 ,如果接入一个键盘则可以对延时时间自行进行设置 .由于本设计中按键功能已经可以满足需要 ,所以没有进行扩展 . 13 总原理图 图 11 总原理图 3 系统软件流程图 本系统的软件设计是通过 C 语言进行编程 ,主要有主程序、键盘扫描程序、初始化程序、 A/D 转换程序、延时程序等部分组成 .主程序流程图如图 12 所示 : 14 图 12 系统流程图 延时程序 在整个 编写程序中要用到许多的延时 ,所以程序中包含一个大约为 1ms 的延时子程序 ,方便在程序中的调用 ,程序代码如下 : //延时子程序。 void delay(uint z) { uint x,y。 for(x=z。 x0。 x) for(y=125。 y0。 y)。 } 按键扫描子程序 由于在 P1 口接入了三个按键 ,通过按键扫描来确定定时的时间长度 ,所以先 15 写入一个按键扫描子程序 ,可在主程序中直接调用 .程序代码如下 : //键盘扫描函数。 void keyscan() { if(key1==0) { delay(5)。 //消抖。 if(key1==0) //按下 key1 灯亮时间为 10s。 { temp=10。 //10s 延时。 } } if(key2==0) { delay(5)。 //消抖。 if(key2==0) //按下 key2 灯亮时间为 20s。 { temp=20。 } } if(key3==0) { delay(5)。 //消抖。 if(key3==0) //按。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。