汽车尾灯控制电路毕业设计(论文)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要
随着现代科技的发展,电子线路技术是一门非常重要的专业技术。

安全问题一直以来是人们不可忽视,也无法忽视的问题。

汽车业的发展也有安全的隐患,人们在设计汽车时用了汽车尾灯是预防汽车追尾事故措施之一。

汽车左转弯时左灯循环闪烁,右转时右灯循环闪烁。

急刹车时左右灯同时闪烁。

关键字:尾灯、转弯、循环、闪烁
ABSTRACT
With the development of modern science and technology, electronic circuit technology is a very important professional technology. Security problem has been not to be ignored, nor ignore the problem. The development of automobile industry also has the security hidden danger, the people in the design of the automobile with the automobile tail light is one of the measures preventing rear-end accidents. The car turned to the left when Zuo Deng blinking cycle, make a right turn when the right light blinking cycle. The brakes when the left and right sides lights flashing at the same time.
Keywords: taillights, turn, circulation, scintillation
目录
1设计任务与要求 (5)
1.1设计课程名称 (5)
1.2设计要求 (5)
2总体方案设计 (5)
2.1设计方案 (5)
2.2方案选择 (6)
2.3系统的总设计框图 (6)
2.3.1设计框图的设计 (6)
2.3.2设计框图的工作流程 (7)
3芯片介绍 (7)
3.1 AT89S52芯片介绍 (7)
3.1.1 AT89S52芯片简介 (7)
3.2 AT89S52芯片引脚 (7)
4单元电路的设计 (8)
4.1 电路 (8)
4.1.1振荡电路 (8)
4.1.2复位电路的工作原理 (9)
4.1.3键盘电路 (9)
4.1.4 LED显示电路 (9)
5软件系统介绍 (10)
5.1.2 键盘电路分配 (10)
5.1.2 发光二级管显示设定 (10)
5.2 流程框图 (10)
5.2.1监控函数流程图 (10)
5.2.2 S1键(左转弯键)扫描流程图 (11)
5.2.3 S2键(右转弯键)扫描流程图 (12)
5.2.4 S3键(急刹车键)扫描流程图 (12)
6 电路仿真 (13)
6.1 PROTUES仿真软件简介 (13)
6.1.1 Proteus界面介绍 (13)
6.1.2 Proteus主窗口菜单 (16)
6.2 仿真结果 (17)
6.2.1左转弯键按下时仿真结果 (17)
6.2.2右转弯键按下时仿真结果 (18)
6.2.3急刹车键按下时仿真结果 (19)
7 安装、焊接与电路的检查 (20)
7.1 线路检查 (20)
7.1.1 连线是否正常 (20)
7.1.2 元件的焊接与安装 (20)
7.1.3 电源供电,信号源连接是否正确 (21)
7.1.4 电源端对地是否有短路现象 (21)
7.2 通电检查 (21)
7.3 调试注意的事项 (21)
8 总结与心得 (22)
附录 (23)
1元器件清单 (23)
2原理图及仿真原理图 (24)
3程序清单 (25)
4参考文献 (27)
1设计任务与要求
1.1设计课题名称
汽车尾灯控制电路
1.2设计要求
假设汽车尾部左右两侧各3个指示灯(用发光二极管模拟)。

1汽车正常运行时指示灯全灭。

2右转弯时,右侧3个指示灯按右循环顺序点亮。

3左转弯时,左侧3个指示灯按左循环顺序点亮。

4临时刹车时所有所有指示灯同时闪亮。

2总体方案的设计
2.1设计方案
由题目可以看出需要设计这样实现汽车尾灯控制电路,根据所学的“电路分析基础”“模拟电子技术基础”和“数字电子技术基础”及“单片机基础”这几门课中所学过的知识,得出下列方案。

方案一
如下图1.1所示:其中开关S0、S1起控制左右转灯循环的作用,S0开关控制左转弯灯循环,S1开关控制右转弯灯循环,由译码电路与显示、驱动电路构成尾灯电路进行显示,三进制计数器控制译码电路顺序输出低电平,从而控制尾灯按要求点亮。

图1.1 汽车尾灯控制电路原理框图
方案二
如下图1.2
所示:由S1、S2、S3三个按键控制输入信号给AT89S52芯片,由芯片内部下载好的程序来使尾灯电路按要求点亮循环或者闪烁。

S1 S2 S3
图1.2 汽车尾灯控制电路原理框图
2.2 方案的选择
用以上两种方案均可实现对汽车尾灯电路的控制要求,考虑到制作PCB 板
时的难以程度,用方案一的话,由于选择的电路原理图上的芯片过多使得布线的难度大大加大,而用方案二的话,只有一个芯片,且电路结构简单,利于PCB 的布线及其制板,只要把程序编好下载到芯片里就可以了。

所以综上考虑,我们选择方案二来实现汽车尾灯的控制。

2.3 系统的总设计框图 2.
3.1设计框图简述
系统设计框图如图2.3.1所示。

通过按键的开关信号进行对单片机芯片的输入操作,进而是发光二级管产生一定的输出信号。

单片机最小 系统
按键控制 电路
尾灯电路 LED 二极管显示
按键S1 左转弯键
LED1 LED2 LED3 LED4 LED5 LED6
图2.3.1 汽车尾灯控制电路总设计框图
2.3.2 设计框图的工作流程
接通电源后,按下左转弯键,输出KED1-LED3轮流左循环闪烁;按下右转弯键,输出LED4-LED6轮流右循环闪烁;按下急刹车键,LED1-LED6同时闪烁。

3芯片介绍
3.1 AT89S52芯片介绍 3.1.1 AT89S52单片机简介
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器,其DIP 封装及引角图如图3.1所示。

该单片机使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash ,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能: 8k 字节Flash ,256字节RAM ,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,
按键S2 右转弯键
按键S3
急刹车键
AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止
3.2 AT89S52芯片引脚
如图3.1所示,
§输入/输出口线
P0.0~P0.7 P0口8位双向口线
P1.0~P1.7 P1口8位双向口线
P2.0~P2.7 P2口8位双向口线
P3.0~P3.7 P3口8位双向口线
§地址所存控制信号ALE
在系统扩展是,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。

此外由于ALE是以1/6晶振频率的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。

§外部程序存储器读选通信号PSEN
在读外部ROM时PSEN有效(低电平),以实现外部ROM单元的读操作。

§访问程序存储器控制信号EA
当EA信号为低电平时,对ROM的读操作是针对外部程序存储器的;而当EA 信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。

§复位信号RST
当输入的复位信号延续两个周期以上时即为有效,用于完成单片机的复位操作。

§外接晶体引线端XTAL1和XTAL2
当使用芯片内部时钟时,XTAL1和XTAL2用于外接石英晶体谐振器和微调电容;当使用外部时钟时,用于接入外部时钟脉冲信号。

§地线GND
V
§+5V电源
CC
4单元电路的设计
4.1单元电路
4.1.1 振荡电路
单片机的振荡电路如图 4.1所示,单片机片内时钟振荡方式需在单片机的XTAL1和XTAL2引脚上接上一个石英晶体和振荡电容,因为单片机时钟兼容1.2MHZ~12MHZ的晶振,为了软件定时的简便和精确,这里选用了12 MHz晶振,在参考AT89S52芯片资料后,振荡电容选用两个33pF的陶瓷电容。

图4.1 振荡电路
4.1.2 复位电路
系统复位电路如图4.2所示,复位操作有上电自动和按键
手动复位两种方式。

上电复位是通过外部复位电路的电容充电
来实现的。

按键复位是通过复位端经电阻与VCC电源接通而实
现的,本设计选后者。

两种复位电路都是输入单片机的RST
引脚的,但应该注意的是单片机的复位信号是高电平有效,且
有效时间应持续24个振荡脉冲周期(即2个机器周期)以上,
经调试和验证,确定一个200Ω和22μF的电容并联再1k的
电阻串联组成上电和手动复位电路符合要求。

图4.2 复位电路4.1.3 键盘电路
键盘作为人机对话的基本窗口,我们可以利用它对外设进行各种不同的控制。

按键的分类有独立式按键与行列式按键,由
于本设计输入设备简单且要求方便故独立式键盘
为首选,其电路如图 4.3所示,单片机的
P1.0-P1.2口线通过限流电阻接VCC ,用户可以
通过软件来采集所接口线上的状态,当口线为 0
时表示有键按下,反之则没有键按下。

图4.3 键盘电路
4.1.4 LED显示电路
显示是用来观察所预定的结果,是一种或者说几种功能的实现,用来向用户提供信息LED二极管分别接至P3口的P3.0~P3.5,电路如图4.4所示,其中阳极接高电平,阴极接入P3口,编程时,只要对应位的口线是低电平就可使发光二级管点亮。

图4.4 LED二极管显示电路
5软件系统介绍
5.1 单片机系统资源分配
5.1.1 键盘设定
S1键(左转弯键)接P1.0;
S2键(右转弯键)接P1.1;
S3键(急刹车键)接P1.2。

5.1.2 发光二级管显示设定
LED1(左转弯灯3)接P3.0;
LED2(左转弯灯2)接P3.1;
LED3(左转弯灯1)接P3.2;
LED4(右转弯灯1)接P3.3;
LED5(右转弯灯2)接P3.4;
LED6(右转弯灯3)接P3.5。

5.2 流程框图
5.2.1 监控函数流程图
监控函数流程图如图5.2.1
图5.2.1
5.2.2 S1键扫描流程图
S1 键扫描流程框图如图5.2.2
图5.2.2
5.2.3 S2键扫描流程图
S2 键扫描流程框图如图5.2.3
图5.2.3 5.2.4 S3键扫描流程图
S3键扫描流程框图如图5.2.4
图5.2.4
6电路仿真
6.1 PROTUES仿真软件简介
Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。

此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“The Route to PCB CAD”。

Proteus 产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。

用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。

其功能模块:—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARES PCB设计。

PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。

此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。

支持许多通用的微控制器,如PIC,AVR,HC11以及8051。

最新支持ARM。

交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。

强大的调试工具,包括寄存器和存储器,断点和单步模式。

IAR C-SPY 和Keil uVision2等开发工具的源层调试。

应用特殊模型的DLL界面-提供有关元件库的全部文件。

6.1.1 Proteus界面介绍
Proteus ISIS的工作界面是一种标准的Windows界面,如图6.1所示。

包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。

图6.1 Proteus ISIS的工作界面
1.原理图编辑窗口(The Editing Window)
顾名思义,它是用来绘制原理图的。

蓝色方框内为可编辑区,元件要放到它里面。

注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。

2.预览窗口(The Overview Window)
它可显示两个内容,一个是:当你在元件列表中选择一个元件时,它会显示
该元件的预览图;另一个是,当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。

3.模型选择工具栏(Mode Selector Toolbar ):
主要模型(Main Modes ):
1* 选择元件(components )(默认选择的)
2* 放置连接点
3* 放置标签(用总线时会用到)
4* 放置文本
5* 用于绘制总线
6* 用于放置子电路
7* 用于即时编辑元件参数 (先单击该图标再单击要修改的元件)
配件(Gadgets ) 1* 终端接口(terminals ) 有 V CC 、地、输出、输入等接口
2* 器件引脚:用于绘制各种引脚
3
*
仿真图表
(g r a 用于各种分析,如
N oise Analysis 4* 录音机 5* 信号发生器(generators ) 6* 电压探针:使用仿真图表时要用到 7* 电流探针:使用仿真图表时要用到
8* 虚拟仪表:有示波器等
2D 图形(2
D
G
1* 画各种直线
2* 画各种方框
3* 画各种圆
4* 画各种圆弧
5* 画各种多边形 6* 画各种文本 7* 画符号 8* 画原点等
4.元件列表(The Object Selector ):
用于挑选元件(components ) 终端接口(terminals ) 信号发生器
( g enerators ) 仿真图表(graph )等。

举例,当你选择“元件
(components )”单击“P ”按钮会打开挑选元件对话框,选择了一个元件后该元件会在元件列表中显示,以后要用到该元件时,只需在元件列表中选择即可。

5
.方向工
具栏(O r i e n
t a t i o
n T o o l b 旋转:旋转角度只能是 90 的整数倍。

翻转:
完成水平翻转和垂直翻转。

使用方法:先右键单击元件,再点击(左击)相应的旋转图标。

6.仿真工具栏
仿真控制按钮 1* 运行
2* 单步运行
3* 暂停
4* 停止
6.1.2 Proteus 主窗口菜单
File (文件)
(1) New (新建)
新建一个电路文件 (2) Open (打开)… 打开一个已有电路文件 (3) Save (保存) 将电路图和全部参数保存在打开的电路文件中
(4) Save As (另存为)… 将电路图和全部参数另存在一个电路文件中 (5) Print (打印)… 打印当前窗口显示的电路图
(6) Page Setup (页面设置) 设置打印页面 (7) Exit (退出) 退出Proteus ISIS
Edit (编辑)
(1) Rotate (旋转) 旋转一个欲添加或选中的元件
(2) Mirror (镜像) 对一个欲添加或选中的元件镜像
(3) Cut (剪切) 将选中的元件、连线或块剪切入裁剪板 (4) Copy (复制) 将选中的元件、连线或块复制入裁剪板 (5) Paste (粘贴) 将裁切板中的内容粘贴到电路图中 (6) Delete (删除) 删除元件,连线或块
(7) Undelete (恢复)
恢复上一次删除的内容 (8) Select All (全选)
选中电路图中全部的连线和元件
View (查看)
(1) Redraw (重画)
重画电路
放大电路到原来的两倍
(2) Zoom In (放大)
缩小电路到原来的1/2
(3) Zoom Out (缩小)
(4) Full Screen (全屏)全屏显示电路
Place (放置)
(1) Wire (连线) 添加连线
(2) Element (元件) 添加元件
(3) Done (结束) 结束添加连线、元件Parameters (参数)
(1) Unit (单位) 打开单位定义窗口
(2) Variable (变量) 打开变量定义窗口
(3) Substrate (基片) 打开基片参数定义窗口
(4) Frequency (频率) 打开频率分析范围定义窗口
(5) Output (输出) 打开输出变量定义窗口
Simulate (仿真)
(1) Analysis (分析) 执行电路分析
(2) Stop (终止仿真) 强行终止仿真
Result (结果)
(1) Table (表格) 打开一个表格输出窗口
(2) Grid (直角坐标) 打开一个直角坐标输出窗口
(3) Smith (圆图) 打开一个Smith圆图输出窗口
(4) Histogram (直方图) 打开一个直方图输出窗口
6.2 仿真结果
6.2.1 左转弯键按下时左转弯灯循环闪烁如图6.2.1a、b。

图6.2.1a
图6.2.1b
6.2.2右转弯键按下时右循环灯循环闪烁如图6.2.2a、b。

图6.2.2a
图6.2.2b
6.2.3 急刹车键按下时六个发光二级管同时闪烁如图6.2.3a、b
图6.2.3a
图6.2.3b
7安装与调试
7.1线路检查
电子安装完毕,通常不急于通电,先要认真检查一下。

7.1.1.连线是否正确
(1)检测的方法通常有两种:
这种方法的特点是,根据电路图连线,按一定顺序一一检查安装好的线路,由此,可比较容易查出错线和少线.
(2)按照实际线路图来对照原理图电路进行检查:
这是一种以元件为中心进行查线的方法.把每个元件引脚的连线一次查清,检查每个去处在电路图上是否存在,这种方法不但可以查出错线和少线,还容易查出多线.
在此次设计过程中,我们采用了两种方法一并使用做到无误。

7.1.2. 元件的焊接与安装
检查元器件引脚之间有无短路;连接处有无接触不良,有无虚焊等情况。

7.1.3.电源供电,信号源连接是否正确。

7.1.4.电源端对地是否有短路现象。

注:在通电前,断开一根电源线,用万用表检查电源端对地是否存在短路。

若电路经过上述检查,并确认无误后,就可以转入调试。

7.2 通电检查
把经过准确测量的电源接入电路。

将编好的程序在keil中运行生成16进制文件下载到单片机中去,观察发现若将其中S1→S3之间任何一个按键按下,则LED二极管出现相应的情况,如:我们将S2键按下,发光二极管右循环闪烁。

再将其他的键按下做如上测试,发现结果和要求一致。

7.3 调试注意事项
调试结果是否正确,很大程度受测量正确与否和测量精度的影响。

为了保证调试的效果,必须减小测量误差,提高测量精度。

为此,需注意以下几点:
(1)正确使用万用表的接地端
凡是使用低端接机壳的电子仪器进行测量,仪器的接地端应该和放入器的接地端接在一起,否则仪器机壳引入干扰不仅会使放大器的工作状态发生变化,
而且将使测量结果出现误差。

根据这一原则,调试发射偏置电路时,若需要测量Vce,不仅把仪器的两端直接接在集电极和发射极上,而应分别对地测出Vc,Ve然后将二者相减得Vce。

若使用干电池供电的万用表进行测量,由于电表的两个输入端是浮动的,所以允许直接跨接到测量点之间。

测量电压所用仪器的输入端阻抗必须远大于被测处的等效阻抗。

因为,若测量仪器输入阻抗小,则在测量时会引起分流,给测量结果带来很大的误差。

(2)正确选择测量点
用同一台测量仪进行测量时,测量点不同,仪器内阻引进的误差大小将不同。

(3)测量方法要方便可行
需要测量电路的电流时,一般尽可能测电压而不测电流,因为测电压不必改动被测电路,测量方便。

若需知道某一支路的电流值,可以通过测取该支路上电阻两端的电压,经过换算而得到。

8课程设计总结与心得
通过这次的“电子线路综合设计”的课程设计,我进一步加强了动手、思考和解决问题的能力。

在整个设计过程中,我们通过借鉴及在专业基础课上所学的知识设计了这一套电路原理图及PCB图的导入连接。

在设计过程中,我们遇到了这样那样的问题,我自己心里还老想着这样的线路接法不会出错,可是呢,一检查,什么问题都有,所以就难免在这个阶段上花费了一番苦力。

课程设计也是对书本的知识进一步加强和巩固,由于书本知识太多,平时课间的学习并不能够很好的理解和运用各个元件及芯片,何况考试内容有限。

此次课程设计受益匪浅,首先,就是除对一些之前在实验室、电工电子实习过程中的元器件认识,还认识了好多的未见过的元件,这也从另外一方面为今后从事相关产业打下良好的基础;其次,对一些仿真软件的应用更上手了,不再像之前一样那么陌生,比如,对于Protel 99 SE的应用中,我会画一些元器件库里没有的元件,并对自己制作的元器件进行封装、管理,以及今后再次用到该元件是可以直接调用,这就提高了工作效率:然后就是锻炼自己的耐性,比
如在画PCB时,我当时用了一次自动布线,主要是想省事,结果发现这样会更加的麻烦,为使后面的焊接工作很难进行下去,更别说是线路的检查了。

因为在自动布线中,有些芯片的顶层都有线,这样焊接就无法进行,那么整个设计就因此陷入僵局,结果是推倒重新再来,浪费了更多的人力物力财力。

所以,不能够异想天开,要时时刻刻都要坚定一步一个脚印,稳扎稳打。

后来,我就动手画PCB图。

最后最重要的一点是要有虚心求教的精神,一个人不懂什么知识不重要,重要的是要有好的道德品质。

另外,软件系统的设计也是很重要的,尤其是对可编程逻辑器件的掌握及编程能力的锻炼是很有帮助的,在这方面,我们把自己编好的程序与他人交流,希望能够使程序最简以及自己需要改进的地方,做到取长补短,完善自我。

我们在此次的课程设计中,都共同领会到一点:在当今世界中,要想立足于这个知识爆炸时代,就必须学会与他人合作,团结大家,不断的完善自己,加强自己。

附录:
1元器件清单:
2 原理图
单片机系统原理图仿真原理图
3程序清单:
汇编程序
;******************************************************************** ****************
;项目:汽车尾灯的设计
;设计者:林文才
;班级:电气0901
;时间:2011年10月28日
;******************************************************************** *****************
;发光二级管设定;
;P3.0、P3.1、P3.2口灯左循环闪烁为汽车左转灯
;P3.3、P3.4、P3.5口灯右循环闪烁为汽车右转灯
;P3.0-P3.5口灯同时闪烁表示急刹车
;******************************************************************** *****************;
;独立键盘设定:
;两个键S1、S2、S3分别接至P1.0、P1.1、P1.2口
;******************************************************************** *****************;
;子程序:
;DELAY
;KEY
;******************************************************************** *****************;
;键功能程序:
;S1键按下表示左转
;S2键按下表示右转
;S3键按下表示急刹车
;******************************************************************** *****************;
;伪指令定义区
INTCISHU EQU 46H ;要求的计数溢出次数,即1秒计时的循环次数
;******************************************************************** *****************;
;系统起始程序区
ORG 0000H
START: LJMP MAIN
;******************************************************************** *****************;
;系统监控程序区
ORG 0030H
MAIN: MOV SP, #7FH ;确立堆栈区
MOV PSW, #00H ;初始化PSW,通用寄存器组为第0组
MOV R0, #20H ;RAM区首地址
MOV R7, #96 ;RAM区单元个数
ML: MOV @R0, #00H
INC R0
DJNZ R7, ML
MOV P3, #0FFH
;******************************************************************** *****************;
;判键程序区
LOOP: LCALL KEY
PANJIAN: MOV A, 20H
KEY0: CJNE A, #01H, KEY1 ;S1键按下顺序执行,否则转至判S2键
CLR 20H.1
LJMP S1GN
KEY1: CJNE A, #02H, KEY2 ;S2键按下顺序执行,否则转至判S3键
CLR 20H.2
LJMP S2GN
KEY2: CJNE A, #04H, KEY3 ;S3键按下顺序执行,否则转至KEY3
CLR 20H.3
LJMP S3GN
KEY3: LJMP LOOP
;******************************************************************** **********************;
;键功能程序区
S1GN: MOV P3, #0FEH
LCALL DELAY
MOV P3, #0FDH
LCALL DELAY
MOV P3, #0FBH
LCALL DELAY
LJMP S1GN
S2GN: MOV P3, #0BFH
LCALL DELAY
MOV P3, #0DFH
LCALL DELAY
MOV P3, #0EFH
LCALL DELAY
LJMP S2GN
S3GN: MOV P3, #0C0H
LCALL DELAY
MOV P3, #0FFH
LCALL DELAY
LJMP S3GN
;******************************************************************** *****************;
;键扫子程序KEY
;出口:B,20H
KEY: LCALL KEYCHULI ;调键处理子程序
JZ EXIT
NOP
NOP
LCALL KEYCHULI ;调键处理子程序
JZ EXIT ;
MOV B, 20H ;保存键值
KEYSF: LCALL KEYCHULI ;调键处理子程序
JZ KEYA ;按键释放,准备退出KEY子程序
NOP
NOP
LJMP KEYSF ;等待键释放
KEYA: MOV 20H, B ;恢复键值
EXIT: RET
;键处理子程序KEYCHULI
;出口:A,20H
KEYCHULI: MOV P1, #0FFH ;先向P1口写1
MOV A, P1
CPL A
MOV 20H, A ;保存取反后的键值
RET
;******************************************************************** *******************;
;延时子程序
;延时1ms子程序(晶振频率12MHz)DELAY
DELAY: MOV R7, #04H
DL0: MOV R5, #0FFH
DL1: MOV R6, #0FFH
DL2: DJNZ R6, DL2
DJNZ R5, DL1
DJNZ R7, DL0
RET
END
C语言程序清单
/**项目:汽车尾灯的设计;
/**设计者:林文才 ;
/**班级:电气0901 ;
/**时间:2011年11月01日;
/******************************************************************** ****
;发光二级管设定;
;P3.0、P3.1、P3.2口灯左循环闪烁为汽车左转灯
;P3.3、P3.4、P3.5口灯右循环闪烁为汽车右转灯
;P3.0-P3.5口灯同时闪烁表示急刹车
;******************************************************************** *****
;独立键盘设定:
;两个键S1、S2、S3分别接至P1.0、P1.1、P1.2口
;******************************************************************** *****/
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*定义并初始化变量*/
uchar keyzhiii,k,left,right,tsss;
sbit S1=P1^0; //S1键按下表示左转
sbit S2=P1^1; //S2键按下表示右转
sbit S3=P1^2; //S3键按下表示急刹车
/*********************************函数声明
********************************/
void Delay1ms(uchar count); //延时子程序
void keyscan( ); //键盘扫描子程序
/*********************************延时子程序
*******************************/
void DelayX1ms(uint count)
{
uint j;
while(count--!=0)
{
for(j=0;j<80;j++);
}
}
/******函数原型:keychuli();
*******功能:处理与键盘相连的P1口的内容,作为键值
*****************/
uchar keychuli()
{
uchar k;
k=P1; //P1口内容送K
k=~k; //取反
return(k); //返回键值
}
/**********函数原型:key();
***********功能:键盘扫描函数,函数返回值即键值
*********************/
uchar key()
{
uchar keyzhi,keyzhii; //电子钟键盘按键键值临时存放
keyzhi=keychuli(); //调P1口处理函数
if(keyzhi!=0) //有键动作延时去抖动,否则函数返回
{
DelayX1ms(10);
keyzhi=keychuli(); //再次调P1口处理函数
if(keyzhi!=0) //真正有键按下,取键值并暂存
{
keyzhii=keyzhi;
while(keyzhi!=0) //判按键是否释放,没有释放延时去抖动等待释放
{
DelayX1ms(10);
keyzhi=keychuli();
}
keyzhi=keyzhii; //按键释放后恢复按键键值
}
}
return(keyzhi); //返回按键键值
}
/************************主函数********************************/ void main(void)
{
while(1)
{
keyzhiii=key(); //调键盘扫描函数得到按键键码 switch(keyzhiii) //按键功能控制
{
case 1: //左转弯键按下,左循环点亮闪烁
left: P3=0Xfe;
DelayX1ms(500);
P3=0xfd;
DelayX1ms(500);
P3=0xfb;
DelayX1ms(500);
goto left;
case 2: //右转弯键按下,右循环点亮闪烁
right: P3=0Xbf;
DelayX1ms(500);
P3=0xdf;
DelayX1ms(500);
P3=0xef;
DelayX1ms(500);
goto right;
case 4: //急刹车键按下,六盏灯同时闪烁
tsss: P3=0xc0;
DelayX1ms(500);
P3=0xff;
DelayX1ms(500);
goto tsss;
default:break;
}
}
}
4参考文献
谢自美.电子线路设计·实验·测试(第三版)武汉:华中科技大学出版社2006 李广弟.单片机基础(第3版)北京:北京航空航天大学出版社2007
马忠梅.单片机的C语言程序应用设计(第4版)北京:北京航空航天大学出版社 2007
熊幸明.电工电子实训教程北京:清华大学出版社,2008
杨志忠.数字电子技术(第3版).北京:高等教育出版社,2008
曹才开.电路分析基础北京:清华大学出版社,2009
清源计算机工作室.Protel 99SE原理图于PCB及仿真。

机械工业出版社,2009 胡宴如.模拟电子技术(第2版).北京: 高等教育出版社,2010
参考网站:电子发烧友网道客巴巴网百度文库。

相关文档
最新文档