标题: 基于51单片机的电动百叶窗设计(汇编语言) [打印本页]

作者: 小凉凉    时间: 2020-4-9 13:15
标题: 基于51单片机的电动百叶窗设计(汇编语言)

内容:本项目利用AD加光敏电阻传感器,按键及DA对直流电机的控制实现智能百叶窗的控制。具体功能:数码管显示测量结果光强,设置三个按键:手动/自动切换、手动正转和手动反转,用一个发光二极管显示手动/自动状态,自动状态时二极管亮。设置两个极限位置保护行程开关,用于保护百叶窗叶片:当正转到极限位置压下行程开关时,电机停止正转,但还可以反转;当反转到极限位置压下行程开关时,电机停止反转,但还可以正转。

意义:利用单片机进行光照监控及窗户自动化控制,能够很好的理解和学习单片机的控制及设计。

二、整体设计原理及方案
2.1使用器件

本次实验使用器件为Generic-8051系列单片机,ADC0809芯片,DAC0832芯片,8279键盘、显示控制器芯片,两个电位开关,三个发光二极管,LED灯以及自行焊接的光强信号采集电路板一块。

2.2工作原理

光强信号采集电路每一次采集光强信号之后,将光强信号传输至ADC0809芯片,通过模/数转换后,由单片机采集转换后的数字信号,实行判断光强是否超过阈值,通过8279键盘、显示控制器芯片显示光强信号的数值,并结合键盘上按键的控制(自动/手动切换,手动正转,手动反转),实现预定的输出。输出的数字信号经由DAC0832芯片转换成模拟信号,并将模拟信号输送到电机控制端实现执行功能。

因本实验电机不能实现反转,故用快转代替正转,慢转代替反转。

2.3设计方案
2.3.1 功能切换及功能指示

              该部分有3个按键及1个红色LED灯组成。其中一个按键为功能切换按键,连接着8051的外部中断接口。另外两个按键为手动正转和手动反转。接外部中断的按键按下可以切换工作模式:自动模式,手动模式。LED灯1为模式指示灯,当为自动模式的时候亮,手动模式的时候灭。当自动模式时,根据自设定的阈值,当超过最强光照强度时控制电机慢转,当低于最弱光强时控制电机快转。当处于手动模式时与光强度无关,按下手动正转键则电机正转,按下手动反转键则电机反转。

2.3.2光照获取及光照显示

首先由光敏电阻组成的传感器模块提供随光照强度变化的电压值,在由A/D0809转换电路,将模拟量转换为数字量。还有一个由8279控制的6位数码管,我们将光照信息实时显示在数码管的前2位。

2.3.3极限开关的设置

极限开关通过P0.1和P0.2分别控制手动正转和手动反转停止。当极限开关为低电平时使电机停转,高电平时不影响电机转动。同时当开关低电平时点亮一个发光二极管代表极限开关打开,电机停止转动。

三、硬件电路图
3.1单片机最小系统

该设计中除了热敏电阻电路其余电路均由实验台提供,实验台上提供了51单片机的最小系统并做了相关设定。

1)、微处理器:i80c31,它的P1口、P3口皆对用户开放,供用户使用。

2)、时钟频率:6.0MHz

3)、存储器:程序存储器与数据存储器统一编址,最多可达64k,板载ROM12k;RAM1(程序存储器6264)8k供用户下载实验程序,可扩展达32k;RAM2(数据存储器6264)8k供用户程序使用,可扩展达32k。在程序存储器中,0000H----2FFFH为监控程序存储器区,用户不可用,4000H----5FFFH为用户实验程序存储区,供用户下载实验程序。数据存储器的范围为:6000H----7FFFH,供用户实验程序使用。

注意:因用户实验程序区位于4000H-----5FFFH,用户在编写实验程序时要注意,程序的起始地址应为4000H,所用的中断入口地址均应在原地址的基础上,加上4000H。例如:外部中断0的原中断入口为0003H,用户实验程序的外部中断0的中断程序入口为4003H。

中断名称    8051原中断程序入口      用户实验程序响应程序入口

外部中断0          0003H                 4003H

定时器0中断        000BH                 400BH

外部中断1          0013H                 4013H

定时器1中断        001BH                 401BH

串行口中断          0023H                 4023H

表1-1:用户中断程序入口表

利用这些提供的基本硬件电路就可以进行相关的设计。

3.2 A/D转换

八路八位A/D实验电路由一片ADC0809,一片74LS04,一片74LS32组成,该电路中,ADIN0—ADIN7是ADC0809的模拟量输入插孔,CS0809是0809的AD启动和片选的输入插孔,EOC是0809转换结束标志,高电平表示转换结束。齐纳二极管LM336-5提供5V的参考电源,ADC0809的参考电压,数据总线输出,通道控制线均已接好。   

3.3 D/A转换

电路原理八路八位A/D实验电路由一片ADC0809,一片74LS04,一片74LS32组成,该电路中,ADIN0—ADIN7是ADC0809的模拟量输入插孔,CS0809是0809的AD启动和片选的输入插孔,EOC是0809转换结束标志,高电平表示转换结束。齐纳二极管LM336-5提供5V的参考电源,ADC0809的参考电压,数据总线输出,通道控制线均已接好。

D/A0832电路设计3.3.1电路原理八位双缓冲D/A实验电路由一片DAC0832。一片74LS00,一片74LS04,一片LM324组成,该电路中除DAC0832的片选未接好外,其他信号均已接好,片选插孔标号CS0832。输出插孔标号DAOUT。该电路为非偏移二进制D/A转换电路,通过调节POT3,可调节D/A转换器的满偏值,调节POT2,可调节D/A转换器的零偏值。


3.4 8279键盘、显示电路
3.4.1
电路原理

8279显示电路由6位共阴极数码管显示,74LS244为段驱动器,75451为位驱动器,可编程键盘电路由1片74LS138组成,8279的数据口,地址,读写线,复位,时钟,片选都已经接好,键盘行列扫描线均有插孔输出。键盘行扫描线插孔号为KA0~KA3;列扫描线插孔号为RL0~RL7;8279还引出CTRL、SHIFT插孔。六位数码管的位选、段选信号可以从8279引入,也可以有外部的其他电路引入,原理图如下:

3.4.2电路测试见整机测试

六位数码管电路的测试:除去电路板上数码管右侧的跳线,系统加点,用导线将插孔LED1接低电平(GND),再将插孔LED-A,LED-B,LED-C,LED-D,LED-E,LED-F,LED-G,LED-DP依次接高电平(VCC),则数码管SLED1的相应段应点亮,如果所有的段都不亮,则检查相应的芯片75451,如果个别段不亮,则检查该段的连线、及数码管是否损坏。用同样的方法依次检查其它数码管。

8279显示、键盘控制芯片电路的测试:加上数码管右边的所有短路线,复位系统,应能正常显示。否则检查8279芯片、244芯片、138芯片是否正常。


3.5 光强信号采集电路

              该信号采集电路由电压跟随器(输入级),差动比例放大器(中间级)以及反向比例放大器(输出级)构成。中间级为调零电路,输出级将高于零点的电位放大,并将测量上限放大为ADC输入上限。

3.6直流调压调速测速电机

直流调压调速电机模块由测速电路和调速电路两部分组成。模块的电源由接口总线引入。本模块中使用的电机为12V的直流电机。

3.6.1电机测速部分

(1)直流电机测速原理介绍

电机测速部分由一个霍尔开关和信号放大电路组成。与电机同轴的转盘上装有两块的强力磁钢,它们的磁极性相反,以保持转盘的平衡并保证转盘每转一周霍尔开关只导通一次。霍尔开关平时输出为正电压,当转盘上的磁钢与霍尔开关正对时,霍尔开关输出负电压,经整形、放大输出。单片机通过对负脉冲计数,可计算出电机的转速。  

(2)电机测速部分电路原理及说明

                                 

3144为霍尔开关,整形、放大由LM358完成。LM358作为比较器使用。SIGNAL为负脉冲输出接口,对应于模块上的SIGNAL插孔。可直接用SIGNAL信号进行测速。

此外,模块还提供了另一种测速方法。如下图所示:


平时使START保持低电平,OUT2输出为低电平,OUT1为高电平。拉高START表示允许测速,此时OUT1的下降沿启动计数,上升沿停止计数,表示测速结束。

(3)电机测速部分电路测试方法

   将模块插在接口挂箱或对象挂箱上并接通电源,调节电位器R9,使电机转动。用示波器在SIGNAL插孔处可以看到连续的负脉冲。

3.6.2电机调速部分

电机调速的原理是通过改变电机两端的电压来改变电机的转速。其原理如下:

                          

该部分电路测试方法:

DRV接GND,调节电位器R9,可以观察到电机转速的变化。


四、程序设计流程图

                                               自动模式

                                                手动模式

五、实验结果及数据

开机默认情况下是电机停转。

开关第一个键切换至自动模式,模式指示灯点亮,8279控制的数码管能够实时的显示A/D0809读取的值,并且跟随光照强度变化。而D/A输出值跟随A/D值同步变化。

当光强位于两个阈值中间值时,电机停转。当用手遮住一部分灯光,A/D值马上下降,达到最弱光强(60H)之下时,电机开始正转(快转),当用强光照射后,A/D值上升,超过设定最强光强(E0H)后,电机转速反转(慢转)。

开关第二个键为切换到手动正转键,电机正转(快转),当极限开关1为低电平时,电机停止转动,高电平时不影响。开关第三个键为切换到手动反转转键,电机反转(慢转)当极限开关2为低电平时,电机停止转动,高电平时不影响。

当工作在手动模式情况下,光强变化对电机工作状态均不起影响。

六、问题及心得

在本次设计中遇到的最大问题是在最后一周的时候才发现焊的电路板有问题,经过反复检查后决定重新焊电路板花费很长时间。之后程序设计经过反复修改得以顺利完成本次课程设计。

这次我学会了8279键盘的使用,以及AD转换和DA转换的原理,对单片机编程更加熟练,焊电路板也更加熟练。

  1. AD0809IN0                 EQU              0CFA0H                            ;0809地址
  2. CON8279                            EQU              0CFE9H                            ;8279命令字
  3. DATA8279                 EQU              0CFE8H                            ;8279数据字
  4. DA0832                             EQU 0CFB0H                            ;0832地址
  5.        ORG                                  0000H
  6.        MOV                                  R2,#00H                                            ;DAC初值
  7.        MOV                                  R3,#00H                                 ;自动手动标志
  8.        LJMP                    START
  9.        ORG                                  0100H
  10. START:              MOV                   DPTR,#CON8279                  ;8279命令字
  11.        MOV                              A,#0D1H                                                     ;清屏、清缓存命令
  12.        MOVX                @DPTR,A
  13.        MOV                              R2,#0FFH                  ;DA转换初值设为FFH,为停转
  14.        MOV                              R3,#00H                   ;R3自动标志位
  15.        WAIT:                MOVX                 A,@DPTR                                              ;读状态
  16.        JB                              ACC.7,WAIT                ;等待清屏幕完成
  17.        LJMP                START1                    ;有按键则跳转去判断键值
  18. ;****************AD转换函数*****************
  19. STARTADC:
  20.        MOV                   DPTR,#AD0809IN0         ;启动通道0
  21.        MOVX                 @DPTR,A
  22.        MOV                 R6,#0FFH                                      ;等待转换完成
  23. LOOP1: DJNZ               R6,LOOP1                               ;等待转换,完成后向下继续
  24.        MOVX                 A,@DPTR                                                ;读取转换值
  25.        CJNE                R3,#0FFH,DISP                    ;判断是否自动,不是自动模式跳转
  26.        MOV                 R1,A                                                    ;储存光强转换的数字量
  27. ;****************与阈值进行比较****************
  28.        CLR                    C                                                         ;清除进位位
  29.        SUBB     A,#0E0H                 ;与最强光照阈值进行比较
  30.        JC      A0                    ;小于最强光则转移去和最小值比较
  31.        MOV     R2,#20H       ;如果光强超过阈值,R2附初值FFH使其慢转
  32.        LJMP     DISP                    ;跳转去显示函数
  33. A0:    MOV     A,R1
  34.        CLR      C
  35.        SUBB    A,#60H                  ;与最小光强阈值进行比较
  36.        JNC      A1                      ;大于最小光强大则跳转
  37.        MOV      R2,#00H           ;小于最小光强,R2附初值00H使其快转
  38.        LJMP     DISP                    ;跳转去显示函数
  39. A1:    MOV     R2,#0FFH        ;中间值则停转
  40.        LJMP     DISP
  41. ;****************显示函数**********************
  42. DISP:              MOV                 A,R1                                           ;从R1中取转换结果
  43.        SWAP                 A                                                         ;分离高四位和低四位
  44.        ANL                 A,#0FH                                                  ;并依次存放在50H到51H中
  45.        MOV                 50H,A                   ;高4位存在50H
  46.        MOV                 A,R1
  47.        ANL                 A,#0FH                  ;低四位存在51H
  48.        MOV                 51H,A
  49. LOOP2: MOV                 DPTR,#CON8279                 ;写显示RAM命令字
  50.        MOV                 A,#90H            ;每写入数据都自动加一,从0地址开始
  51.        MOVX                 @DPTR,A
  52.        MOV                 R0,#50H                                        ;存放转换结果地址初值送R0
  53.        MOV                 R1,#02H                 ;2次取出
  54.        MOV                 DPTR,#DATA8279                       ;8279数据口地址
  55.        DL0:                 MOV                 A,@R0            ;取出存到A中
  56.        ACALL                 TABLE                                                   ;转换为显码
  57.        MOVX                 @DPTR,A                                         ;送显码输出
  58.        INC                 R0                      ;加一
  59.        DJNZ                 R1,DL0
  60.        LCALL    DEL1                   ;延迟一段时间使显示更稳定
  61. ;***************DA转换函数********************
  62. DAC:              MOV                    A,R2                                   ;初值送ACC
  63.        LCALL    DAZH                                                     ;调DA转换子程序
  64.        LCALL    DEL1                    ;延迟使稳定
  65.        LJMP     START                   ;循环
  66. ;**************键盘扫描函数******************
  67. START1: SETB              P1.0            ;第一个灯先灭
  68.        MOV               DPTR,#CON8279
  69.        MOV                   A,#0A0H                                                 ;显示\消隐命令
  70.        MOVX                @DPTR,A
  71.        MOV                   A,#40H                                                     ;读FIFO命令
  72.        MOVX              @DPTR,A
  73.        MOV                   DPTR,#DATA8279                      ;读键值
  74.        MOVX              A,@DPTR
  75.        MOV                   R1,A                                                      ;保存键值
  76. ;****************判断按得哪个键****************************
  77. A9:                            MOV                  A,R1
  78.        CJNE              A,#0C0H,A10      ;判断是不是自动按键,不是自动转移
  79.        CLR                  P1.0                    ;是自动点亮第一个灯
  80.        MOV                  R3,#0FFH                                       ;自动标志位
  81.        MOV                  R2,#0FFH                ;DAC初值停转
  82.        LJMP              LJSTART                 ;判断完后回到AD转换
  83. A10:              MOV                 A,R1                                               ;手动正转
  84.        CJNE              A,#0C1H,A11             ;比较是不是手动正转按键
  85.        SETB              P1.0                    ;使第一个灯灭
  86.        MOV  R3,#00H                 ;清零自动标志位
  87.        MOV                R2,#00H                 ;快转
  88. A13:              JB   P1.1,LJSTART                   ;极限按键,判断有木有低电平
  89.        MOV  R2,#0FFH                                     ;低电平有效则停止转动
  90. A11:              MOV   A,R1                                                  ;手动反转
  91.        CJNE              A,#0C2H,A12             ;比较是不是手动反转按键
  92.        SETB              P1.0                    ;使第一个灯灭
  93.        MOV  R3,#00H                 ;清零自动标志位
  94.        MOV                R2,#10H                 ;慢转
  95. A14:   JB    P1.2,LJSTART                      ;极限按键,判断有木有低电平
  96.        MOV   R2,#0FFH                ;低电平有效则停止转动
  97. A12:   SETB  P1.0                    ;如果都不是这些按键,使第一个灯灭
  98.        MOV   R2,#0FFH                ;R2初值慢转
  99.        MOV   R3,#00H                 ;自动标志位00
  100.        LJMP  LJSTART                 ;判断完后回到AD转换
  101. ;************DA执行函数**********************
  102. DAZH:              MOV                DPTR,#DA0832                 ;DAC输入寄存器端口地址
  103.        MOVX  @DPTR,A                    ;送出数据
  104.        INC                            DPTR                       ;加一,为DAC寄存器端口地址
  105.        MOVX              @DPTR,A                    ;启动转换
  106.        RET
  107. ;*************跳转接力***********************
  108. LJSTART:
  109.        LJMP               STARTADC              ;循环
  110. ;**************延时函数************************
  111. DEL1:  MOV               R6,#255               ;延时一段时间使显示更稳定
  112. DEL2:               MOV               R5,#255
  113. DEL3:               DJNZ              R5,DEL3
  114.        DJNZ              R6,DEL2
  115.        RET
  116. ;***************显示字表***********************
  117. TABLE: INC               A
  118.        MOVC              A,@A+PC
  119.        RET
  120.        DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
  121.        DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H
  122.        END
复制代码

试验图:

1.遮光时

2.强光照射时
3.自动处于中间值时
4.手动正转
5.手动反转
6.电路板正面
7.电路板反面

以上的Word格式文档51黑下载地址:
单片机51hei设计.doc (6.25 MB, 下载次数: 24)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1