单片机开发工程案例分析与解析

上传人:子 文档编号:46849006 上传时间:2018-06-28 格式:PDF 页数:40 大小:374.40KB
返回 下载 相关 举报
单片机开发工程案例分析与解析_第1页
第1页 / 共40页
单片机开发工程案例分析与解析_第2页
第2页 / 共40页
单片机开发工程案例分析与解析_第3页
第3页 / 共40页
单片机开发工程案例分析与解析_第4页
第4页 / 共40页
单片机开发工程案例分析与解析_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《单片机开发工程案例分析与解析》由会员分享,可在线阅读,更多相关《单片机开发工程案例分析与解析(40页珍藏版)》请在金锄头文库上搜索。

1、3单片机开发工程案例分析与解析3 . 1定时报警器设计一个单片机控制的简易定时报警器。要求根据设定的初始值(1 - 5 9 秒)进行倒计时,当计 时到 0 时数码管闪烁0 0(以 1 H z 闪烁) ,按键功能如下: (1 )设定键:在倒计时模式时,按下此键后停止倒计时,进入设置状态;如果已经处于设置 状态则此键无效。 (2 )增一键:在设置状态时,每按一次递增键,初始值的数字增 1 。 (3 )递一键:在设置状态时,每按一次递减键,初始值的数字减 1 。 (4 )确认键:在设置状态时,按下此键后,单片机按照新的初始值进行倒计时及显示倒计时 的数字。如果已经处于计时状态则此键无效。 3 . 1

2、 . 2模块 1 : 系统设计 (1 )任务分析与整体设计思路 根据题目的要求,需要实现如下几个方面的功能。 计时功能:要实现计时功能则需要使用定时器来计时,通过设置定时器的初始值来控制溢出中 断的时间间隔,再利用一个变量记录定时器溢出的次数,达到定时 1 秒中的功能。然后,当计时每 到 1 秒钟后,倒计时的计数器减 1 。当倒计时计数器到 0 时,触发另一个标志变量,进入闪烁状态。 显示功能:显示倒计时的数字要采用动态扫描的方式将数字拆成十位和个位动态扫描 显示。如果处于闪烁状态,则可以不需要动态扫描显示,只需要控制共阴极数码管的位控线,实现 数码管的灭和亮。 键盘扫描和运行模式的切换:主程

3、序在初始化一些变量和寄存器之后,需要不断循环地读取键 盘的状态和动态扫描数码管显示相应的数字。根据键盘的按键值实现设置状态、计时状态的切换。 (2 )单片机型号及所需外围器件型号,单片机硬件电路原理图 选用 M C S - 5 1系列 A T 8 9 S 5 1单片机作为微控制器,选择两个四联的共阴极数码管组成 8位显示 模块,由于 A T 8 9 S 5 1 单片机驱动能力有限,采用两片 7 4 H C 2 4 4 实现总线的驱动,一个 7 4 H C 2 4 4 完成 位控线的控制和驱动,另一个 7 4 H C 2 4 4 完成数码管的 7 段码输出,在输出口上各串联一个 1 0 0 欧姆

4、 的电阻对 7 段数码管限流。 由于键盘数量不多,选择独立式按键与 P 1 口连接作为四个按键输入。没有键按下时 P 1 . 0 - P 1 . 3 为高电平,当有键按下时,P 1 . 0 - P 1 . 3 相应管脚为低电平。电路原理图如图 3 - 1 所示。图 3 - 1定时报警器电路原理图1A 121A 241A 361A 482A 1112A 2132A 3152A 4171Y 1181Y 2161Y 3141Y 4122Y 192Y 272Y 352Y 431G12G19U 3H C2 441A 121A 241A 361A 482A 1112A 2132A 3152A 4171Y

5、1181Y 2161Y 3141Y 4122Y 192Y 272Y 352Y 431G12G19U 4H C2 44C9A2B6D11E12F3G8H10C OM 17C OM 34C OM 25C OM 41L ED 4SC HC9A2B6D11E12F3G8H10C OM 17C OM 34C OM 25C OM 41U 6L ED 4SC HL ED _A L ED _B L ED _C L ED _DL ED _E L ED _F L ED _G L ED _HL ED _A 1 L ED _B 1 L ED _C 1 L ED _D 1L ED _E 1 L ED _F1 L ED

6、_G 1 L ED _H 1R 2100 R 3100 R 4100 R 610 0R 710 0 R 810 0 R 910 0 R 1010 0L ED _A 1L ED _B 1L ED _C 1L ED _D 1L ED _E 1L ED _F1L ED _G 1L ED _H 1L ED _A 1L ED _B 1L ED _C 1L ED _D 1L ED _E 1L ED _F1L ED _G 1L ED _H 1L _CO M 1L _CO M 2L _CO M 3L _CO M 4L _CO M 5L _CO M 6L _CO M 7L _CO M 8L _CO M 1 L

7、_CO M 2 L _CO M 3 L _CO M 4L _CO M 5 L _CO M 6 L _CO M 7 L _CO M 8L ED _J0 L ED _J1 L ED _J2 L ED _J3L ED _J5 L ED _J6 L ED _J7L ED _J4E A/V P31X 119X 218R ESE T9R D17W R16IN T012IN T113T 014T 115P10/T1P11/T2P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P25

8、26P2627P2728PSEN29A LE /P30T XD11R XD10U 289 S52V CCL ED _J0 L ED _J1 L ED _J2 L ED _J3L ED _A L ED _B L ED _C L ED _D L ED _E L ED _F L ED _G L ED _HY 1 11 .05 92C 1C APC 2C APR 1110KR 1100C 322 UV CCS1 R ESE TR STR STK EY 1K EY 2K EY 3K EY 4L ED _J4 L ED _J5 L ED _J6 L ED _J7R 510KR 12 10KR 13 10K

9、R 14 10KV CC(3 )程序设计思路,单片机资源分配以及程序流程 单片机资源分配 采用单片机的 P 3 口作为按键的输入,使用独立式按键与 P 3 . 0 - P 3 . 3 连接,构成四个功能按键。 在计时功能中,需要三个变量分别暂存定时器溢出的次数(T 1 _ c n t ) 、倒计时的初始值 (i n i t _ v a l )以及当前倒计时的秒数(c n t _ v a l ) 。 按键扫描功能中,需要两个变量,一个变量(k e y _ v a l _ n e w )用来存储当前扫描的键值(若无 按键按下则为 2 5 5 ) ,另一个变量(k e y _ v a l _ o l

10、 d )用来存储上一次扫描的键值。只有这两个变量值 不一样时,才能说明是一次新的按键按下或弹起了,同时将新的键值赋给 k e y _ v a l _ o l d 变量。 在显示功能中,需要定义一组数组(c o d e 类型) ,值为 0 - 9 数字对应的数码管 7 段码。还需要 定义一个变量( s h o w _ v a l ) 暂存要显示的数据,用于动态扫描显示中。 在整个程序中,定义了一个状态变量(s t a t e _ v a l )用来存储当前单片机工作在哪种状态。 程序设计思路 鉴于题目要求,存在三种工作模式:初始值设置模式、倒计时模式、计时到 0 时的闪烁模式。 变量 s t a

11、 t e _ v a l为 0时,处于倒计时模式。变量 s t a t e _ v a l为 1时,处于初始值设置模式。变量 s t a t e _ v a l为 2时,处于闪烁模式。这些状态的切换取决于按下哪一个键以及是否计时到 0 。状态 的切换图如图 3 - 2图 3 - 2状态的切换 单片机复位之后,默认处于倒计时模式,启动定时器,定时器每隔 2 5 0 u s 溢出一次,根据定时 器溢出次数来计时,到 1 秒时将时间的计数器减 1 。当设置键按下时,变量 s t a t e _ v a l 由 0 变 为 1 ,切换到设置模式。可以使用递增键递减键对计时初始值进行修改。按下确认键时,

12、 回到计时模式开始以新的初始值进行倒计时。当倒计时到 0 时,变量 s t a t e _ v a l 由 1 变为 2 ,处于 闪烁状态,在这种状态下,根据按键的情况分别又切换到计时和设置状态。 程序流程 主程序首先需要初始化定时器的参数和一些变量,然后进入一个循环结构,在循环中始终只做 两件事,一是键盘的扫描,二是数码管的动态扫描。 在扫描键盘后,根据前一次按键的结果是否与本次键值相同。如果不同,表示有键按下或弹起, 同时用本次按键值更新上一次的按键值。这样设计旨在避免一个按键长时间按下时被重复判为有新 键按下,使得当前按下的键只有松开后,下一次按下时才算为一次新的按键。 根据按键的值分别

13、改变变量(s t a t e _ v a l )的值或者在设置状态时的倒计时初始值。完整的主 程序图如图 3 - 3 所示。State_val=0 计数State_val=1 设置State_val=2 闪烁按下 设置键按下 确认键按下 递增键按下 递减键倒计数减到0按下 确认键按下 设置键图 3 - 3主程序的流程图 在定时器的参数中,选择定时器 T 1的 8位自动装载模式,每 2 5 0 u s产生一次溢出中断,中断 服务程序如图 3 - 4 所示。图 3 - 4 中断服务程序流程图主程序 Mian()初始化变量 和定时器扫描按键Key_old=Key_new 保存键值Key_new=Ke

14、y_oldN动态扫描Key_new=1?Key_new=2?Key_new=3?NN设置模式 关定时器 设置模式 初始值-1设置模式 初始值+1Key_new=4?计数模式 开定时器YYYYY定时器 中断T1溢出计数值 T1_cnt+1状态=闪烁?LED状态值 Shan_val=!shan_valT1_cnt 3 9 9 9 )/ / 如果计数 3 9 9 9 ,计时 1 s T 1 _ c n t = 0 ; i f ( c n t _ v a l ! = 0 ) c n t _ v a l - - ; e l s e s t a t e _ v a l = 2 ; / / 定时计数到 0

15、时,切换状态 s h o w _ v a l = c n t _ v a l ; b r e a k ; c a s e2 : i f ( T 1 _ c n t 1 9 9 9 )/ / 如果计数 1 9 9 9 ,计时 0 . 5 s T 1 _ c n t = 0 ;s h a n _ v a l = ! s h a n _ v a l ;/ / 闪烁状态 b r e a k ; / / - - - - - - - - - 主程序- - - - - - - - - - - - - - - - m a i n ( ) i n i t _ v a l = 5 9 ;/ / 初始化各变量 c

16、n t _ v a l = i n i t _ v a l ; s h o w _ v a l = c n t _ v a l ; s t a t e _ v a l = 0 ; k e y _ v a l _ o l d = 2 5 5 ; T 1 _ c n t = 0 ; s h a n _ v a l = 0 ;/ / 初始化 5 1 的寄存器 T M O D = 0 x 2 0 ; / / 用 T 1 计时 8 位自动装载定时模式 T H 1 = 0 x 1 9 ;/ / 2 5 0 微秒溢出一次;2 5 0 = ( 2 5 6 - x ) * 1 2 / 1 1 . 0 5 9 2- x =2 3 0 . 4 T L 1 = 0 x 1 9 ; E A = 1 ;/ / 打开总中断允许 E T 1 = 1 ;/ / 开中断允许 T R 1 = 1 ;/ / 开定时器 T 1 w h i l e ( 1 ) k e y _ v a l _ n e w = s c a n _ k e y ( ) ;/ /2 5

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号