版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3 单片机开发工程案例分析与解析3.1 定时报警器设计一个单片机控制的简易定时报警器。要求根据设定的初始值(1-59秒)进行倒计时,当计时到0时数码管闪烁“00”(以1Hz闪烁),按键功能如下:(1)设定定键:在在倒计时时模式时时,按下下此键后后停止倒倒计时,进进入设置置状态;如果已已经处于于设置状状态则此此键无效效。(2)增一一键:在在设置状状态时,每每按一次次递增键键,初始始值的数数字增11。(3)递一一键:在在设置状状态时,每每按一次次递减键键,初始始值的数数字减11。(4)确认认键:在在设置状状态时,按按下此键键后,单单片机按按照新的的初始值值进行倒倒计时及及显示倒倒计时的的数字。如如
2、果已经经处于计计时状态态则此键键无效。3.1.22 模块块1:系系统设计计(1)任务务分析与与整体设设计思路路根据题目的的要求,需要实现如下几个方面的功能。计时功能:要实现现计时功功能则需需要使用用定时器器来计时时,通过过设置定定时器的的初始值值来控制制溢出中中断的时时间间隔隔,再利利用一个个变量记记录定时时器溢出出的次数数,达到到定时11秒中的的功能。然然后,当当计时每每到1秒秒钟后,倒倒计时的的计数器器减1。当当倒计时时计数器器到0时时,触发发另一个个标志变变量,进进入闪烁烁状态。显示功能:显示倒倒计时的的数字要要采用动动态扫描描的方式式将数字字拆成“十位”和“个位”动态扫扫描显示示。如果
3、果处于闪闪烁状态态,则可可以不需需要动态态扫描显显示,只只需要控控制共阴阴极数码码管的位位控线,实实现数码码管的灭灭和亮。键盘扫描和和运行模模式的切切换:主主程序在在初始化化一些变变量和寄寄存器之之后,需需要不断断循环地地读取键键盘的状状态和动动态扫描描数码管管显示相相应的数数字。根根据键盘盘的按键键值实现现设置状状态、计计时状态态的切换换。 (22)单片片机型号号及所需需外围器器件型号号,单片片机硬件件电路原原理图选用MCSS-51系系列ATT89SS51单单片机作作为微控控制器,选选择两个个四联的的共阴极极数码管管组成88位显示示模块,由由于ATT89SS51单单片机驱驱动能力力有限,采采
4、用两片片74HHC2444实现现总线的的驱动,一一个744HC2244完完成位控控线的控控制和驱驱动,另另一个774HCC2444完成数数码管的的7段码码输出,在在输出口口上各串联一一个1000欧姆姆的电阻阻对7段段数码管管限流。由于键盘数数量不多多,选择择独立式式按键与与P1口连接接作为四四个按键键输入。没有键按下时P1.0-P1.3为高电平,当有键按下时,P1.0-P1.3相应管脚为低电平。电路原理图如图3-1所示。 图33-1 定时报报警器电电路原理理图(3)程序序设计思思路,单单片机资资源分配配以及程程序流程程 = 1 * GB3 单片机机资源分分配采用单片机机的P33口作为为按键的的
5、输入,使使用独立立式按键键与P33.0-P3.3连接接,构成成四个功功能按键键。在计时功能能中,需需要三个个变量分分别暂存存定时器器溢出的的次数(T1_cnt)、倒计时的初始值(init_val)以及当前倒计时的秒数(cnt_val)。按键扫描功功能中,需需要两个个变量,一一个变量量(keey_vval_neww)用来来存储当当前扫描描的键值值(若无无按键按按下则为为2555),另另一个变变量(kkey_vall_olld)用用来存储储上一次次扫描的的键值。只只有这两两个变量量值不一一样时,才才能说明明是一次次新的按按键按下下或弹起起了,同同时将新新的键值值赋给kkey_vall_olld变量
6、量。在显示功能能中,需需要定义义一组数数组(ccodee类型),值值为0-9数字字对应的的数码管管7段码码。还需需要定义义一个变变量(sshoww_vaal)暂暂存要显显示的数数据,用用于动态态扫描显显示中。在整个程序序中,定定义了一一个状态态变量(state_val)用来存储当前单片机工作在哪种状态。程序设计计思路鉴于题目要要求,存存在三种种工作模模式:初初始值设设置模式式、倒计计时模式式、计时时到0时时的闪烁烁模式。变变量sttatee_vaal为00时,处处于倒计计时模式式。变量量staate_vall为1时时,处于于初始值值设置模模式。变变量sttatee_vaal为22时,处处于闪烁
7、烁模式。这这些状态态的切换换取决于于按下哪哪一个键键以及是是否计时时到0。状状态的切切换图如如图3-2 图图3-22 状态态的切换换单片机复位位之后,默默认处于于倒计时时模式,启启动定时时器,定定时器每每隔2550uss溢出一一次,根根据定时时器溢出出次数来来计时,到到1秒时时将时间间的计数数器减11。当“设置键键”按下时时,变量量staate_vall由0变变为1,切切换到设设置模式式。可以以使用“递增键键”“递减减键”对计时时初始值值进行修修改。按下“确认键键”时,回回到计时时模式开开始以新新的初始始值进行行倒计时时。当倒倒计时到到0时,变量state_val由1变为2,处于闪烁状态,在这
8、种状态下,根据按键的情况分别又切换到计时和设置状态。程序流程程主程序首先先需要初初始化定定时器的的参数和和一些变变量,然然后进入入一个循循环结构构,在循循环中始始终只做做两件事事,一是是键盘的的扫描,二二是数码码管的动动态扫描描。在扫描键盘盘后,根根据前一一次按键键的结果果是否与与本次键键值相同同。如果果不同,表表示有键键按下或或弹起,同同时用本本次按键键值更新新上一次次的按键键值。这这样设计计旨在避避免一个个按键长长时间按按下时被被重复判判为有新新键按下下,使得得当前按按下的键键只有松松开后,下下一次按按下时才才算为一一次新的的按键。根据按键的的值分别别改变变变量(sstatte_vval)
9、的的值或者者在设置置状态时时的倒计计时初始始值。完完整的主主程序图图如图33-3所所示。 图图3-33 主程程序的流流程图 在在定时器器的参数数中,选选择定时时器T11的8位位自动装装载模式式,每2250uus产生生一次溢溢出中断断,中断断服务程程序如图图3-44所示。 图33-4中中断服务务程序流流程图(4)软硬硬件调试试方案 软件调调试方案案:伟福福软件中中,在“文件新建文文件”中,新建建C语言言源程序序文件,编编写相应应的程序序。在“文件新建项项目”的菜单单中,新新建项目目并将CC语言源源程序文文件包括括在项目目文件中中。 在 “项项目编编译”菜单中中将C源源文件编编译,检检查语法法错误
10、及及逻辑错错误。在在编译成成功后,产产生以 “*.hhex”和“*.bbin” 后缀的的目标文文件。硬件调试方方案:在在设计平平台中,将将单片机机的P33.0-P3.3分别别与独立立式键盘盘的相应应位通过过插线连连接起来来。在伟福中将将程序文文件编译译成目标标文件后后,运行行MCUU下载程程序,选选择相应应的fllashh 数据据文件,点点击“编程”按钮,将将程序文文件下载载到单片片机的FFlassh中。然后,上电电重新启启动单片片机,检检查所编编写的程程序是否否达到题题目的要要求,是是否全面面完整地地完成试试题的内内容。3.1.33 程序序设计(仅供参参考的CC语言源源程序)/晶振:11.0
11、5992M T11-2550微秒秒 按键键P10 P11 P12 P13/*变量的的定义: shoow_vval: 显显示的值值0-559 iniit_vval: 初初始值 staate_vall: 状状态值 0-计计数状态态;1-设置状状态;22-闪烁烁状态 shaan_vval: keyy_vaal1: 四四个按键键的值 2555-无键键;1-设置键键 22-增一一键 3-减减一键 4-确定键键 T1_cntt: 定定时器计计数溢出出数 cntt_vaal: 倒倒计时的的数值 ledd_seeg_ccodee:数码码管7段段码*/#inclludee rreg551.hh /包包含文件件s
12、bit P11_0=P10; /设设置键sbit P11_1=P11; /增增一键sbit P11_2=P12; /减减一键sbit P11_3=P13; /确确定键unsiggnedd chhar datta sshann_vaal; /闪烁时时LEDD的开/关状态态unsiggnedd chhar datta ccnt_vall; /保存倒倒计数的的当前值值unsiggnedd innt datta TT1_ccnt; /保存定定时器溢溢出次数数unsiggnedd chhar datta kkey_vall_neew,kkey_vall_olld;/存放放当前扫扫描的键键和前一一次按下下
13、的键值值unsiggnedd chhar datta sstatte_vval; /状态值值unsiggnedd chhar datta sshoww_vaal; /存放需需要在数数码管显显示的数数字unsiggnedd chhar datta iinitt_vaal; /暂存倒倒计数的的初始值值char codde lled_segg_coode10=00 x3ff,0 xx06,0 x005b,0 x004f,0 x666,00 x6dd,0 xx7d,0 x007,00 x7ff,0 xx6f;/-延时时-void dellay(unssignned intt i) /大大约延时时i*2
14、2个微秒秒 whhilee(-i);/-按按键扫描描-unsiggnedd chhar scaan_kkey() unnsiggnedd chhar i; i=P1&0 x00f; deelayy(1000); /延时时,去抖抖动 iff (ii=(P1&0 x00f) if (P11_0=0) i=11; elsse iif (P1_1=0) i=2; eelsee iff (PP1_22=00) i=3; eelsee iff (PP1_33=00) i=44; ellse i=2555; reeturrn ii;/-数码管管显示-void ledd_shhow(unssignned in
15、tt v) unsiigneed ccharr i; if (staate_vall!=22) /动动态扫描描 i=vv%100; /取取要显示示的数的的个位 P0=ledd_seeg_ccodeei; /转转换为77段码 P2=0 xffe; /显显示个位位 dellay(15); /延延时 i=vv%1000/110; /取取十位 P0=ledd_seeg_ccodeei; /转转换为77段码 P2=0 xffd; /显显示十位位 dellay(5); /延延时 elsee P00=leed_sseg_codde00; /处处于闪烁烁状态 iff (sshann_vaal) P2=0 xf
16、ff; /将将数码管管的关闭闭 ellse P2=0 xffc; /将数码码管的打打开 /-定时时器T11中断服服务程序序-void tiimerr1() innterrruppt 33 /T11中断,2250uus中断断一次 T1_cntt+; swiitchh (sstatte_vval) casse 00: iff(T11_cnnt339999) /如果果计数39999, 计时11s T11_cnnt=00; iff(cnnt_vval!=0) cntt_vaal-; ellse sstatte_vval=2; /定时时计数到到0时,切切换状态态 shhow_vall=cnnt_vval
17、; bbreaak; caase 2: iff(T11_cnnt119999) /如如果计数数19999, 计时时0.55s T1_cntt=0; shhan_vall=!sshann_vaal; /闪烁烁状态 brreakk; /-主程序序-main()initt_vaal=559; /初始始化各变变量 cnt_vall=innit_vall; showw_vaal=ccnt_vall; statte_vval=0; key_vall_olld=2255; T1_ccnt=0; shann_vaal=00; /初始始化511的寄存存器TMOD=0 x220; /用T11计时 8位自自动装载载
18、定时模模式 TH1=0 x119; /2550微秒秒溢出一一次; 2250=(2556-xx)*112/111.005922 - x= 2330.44 TL1=0 x119; EA=11; /打开开总中断断允许 ET1=1; /开中中断允许许 TR1=1; /开定定时器TT1whilee(1) keey_vval_neww=sccan_keyy(); / 2555表示无无键按下下 iff (kkey_vall_neew!=keyy_vaal_oold) / 只有当当前扫描描的键值值与上次次扫描的的不同,才才判断是是有键按按下 keyy_vaal_oold=keyy_vaal_nnew; swi
19、itchh (kkey_vall_neew) ccasee 1: /设置键键 sttatee_vaal=11; /处处于设置置状态 TRR1=11; /停停止计时时 shhow_vall=innit_vall; /显显示原来来的倒计计数初始始值 brreakk; ccasee 2: iff(sttatee_vaal=1) /只只有在设设置状态态,增11键才有有用 if (innit_vall0) /更更改原来来的倒计计数初始始值 innit_vall-; elsse innit_vall=599; shoow_vval=iniit_vval;/显显示更改改后的倒倒计数初初始值 brreakk;
20、 ccasee 3: iff(sttatee_vaal=1) /只只有在设设置状态态,减11键才有有用 iff (iinitt_vaal39999) /如如果计数数39999, 计时时1s T1_cntt=0; if (cnnt_ssn!=0) /南南北方向向计时 ccnt_sn-; elsse sstatte_vval_sn+; iif (staate_vall_snn2) sttatee_vaal_ssn=00; ccnt_sn=iniit_ssnsstatte_vval_sn; sswittch (sttatee_vaal_ssn) /根根据状态态值,刷刷新各信信号灯的的状态 ccase
21、e 0: SNN_grreenn=0 ;/南北方方向绿灯灯 SNN_yeelloow=11 ;/南北北方向黄黄灯 SNN_reed=11 ;/南北北方向红红灯 brreakk; ccasee 1: SNN_grreenn=1 ;/南北方方向绿灯灯 SNN_yeelloow=00 ;/南北北方向黄黄灯 SN_redd=1 ;/南北方方向红灯灯 bbreaak; ccasee 2:SN_greeen=1 ;/南南北方向向绿灯 SN_yellloww=1 ;/南北方方向黄灯灯 SSN_rred=0 ;/南南北方向向红灯 bbreaak; if (cnnt_eew!=0) /东东西方向向计时 ccnt
22、_ew-; elsse sstatte_vval_ew+; iif (staate_vall_eww2) sttatee_vaal_eew=00; ccnt_ew=iniit_eewsstatte_vval_ew; sswittch (sttatee_vaal_eew) /根根据状态态值,刷刷新各信信号灯的的状态 caase 0: EW_greeen=1 ;/东东西方向向绿灯 EW_yellloww=1;/东东西方向向黄灯 EW_redd=0 ;/东西方方向红灯灯 breeak; caase 1: EW_greeen=0 ;/东东西方向向绿灯 EW_yellloww=1 ;/东西方方向黄灯灯
23、EW_redd=1 ;/东西方方向红灯灯 breeak; caase 2: EW_greeen=1 ;/东东西方向向绿灯 EW_yellloww=0 ;/东西方方向黄灯灯 EW_redd=1 ;/东西方方向红灯灯 breeak; /-main()/初始始化各变变量 cnt_sn=iniit_ssn00; cnt_ew=iniit_eew00; T1_ccnt=0; statte_vval_sn=0; /启启动后,默默认工作作在序号号为1的的状态 statte_vval_ew=0;/初始化化各灯的的状态 SN_ggreeen=00 ;/南北北方向绿绿灯亮 SN_yyelllow=1 ;/南南北方
24、向向黄灯灭灭 SN_rred=1 ;/南南北方向向红灯灭灭 EW_ggreeen=11 ;/东西西方向绿绿灯灭 EW_yyelllow=1;/东西西方向黄黄灯灭 EW_rred=0 ;/东东西方向向红灯亮亮/初始化化51的的寄存器器 TMODD=0 xx20;/用用T1计计时 88位自动动装载定定时模式式 TH1=0 x119;/0 xx4b; /5000微秒溢溢出一次次; 2550=(2566-x)*122/111.05592 - x= 2300.4 TL1=0 x119; EA=11; /开开中断 ET1=1; TR1=1; /开开定时器器T1whilee(1) leed_sshoww(c
25、nnt_ssn,ccnt_ew);/主程序序结束3.3.33 密码码锁单片机控制制的密码码锁设计计。ATT89SS52单单片机PP1引脚脚外接独独立式按按键S11-S88,分别别代表数数字键00-5、确确定键、取取消键。单单片机从从P3.0-PP3.33输出44个信号号,分别别为1个个电磁开开锁驱动动信号和和密码错错误指示示、报警警输出、已已开锁指指示信号号,分别别用发光光二极管管L1-L4指指示。PP3.44接一有有源蜂鸣鸣器,用用于实现现提示音音。基本要求:(1)初始始密码为为12334500,输完完后按确确定键开开锁,取取消键清清除所有有输入,每每次按键键有短“滴”声按键键提示音音。(2
26、)密码码输入正正确后,输输出一个个电磁锁锁开锁信信号与已已开锁信信号,并并发出两两声短“滴”声提示示。4秒秒后开锁锁信号与与已开锁锁指示清清零。(3)密码码输入错错误时,发发出一声声长“滴”声错误误指示提提示音,并并密码错错误指示示灯亮,三三次密码码错误时时,发出出长鸣声声报警,并并密码错错误指示示灯亮,报报警指示示灯亮,此此后155秒内无无法再次次输入密密码,115秒过过后,清清除所有有报警和和指示。(4)5秒秒内无任任何操作作后,清清除所有有输入内内容,等等待下次次输入。3.3.11模块11 系统统设计(1)分析析任务要要求。写写出系统统整体设设计思路路根据题目的的要求,需需要考虑虑如下几
27、几个任务务:按键键的输入入,密码码的判断断,密码码输入正正确或错错误的计计时、输输出信号号的控制制等。 键盘的输输入:由由于需要要输入66个数字字作为密密码,先先要判断断按键时时数字键键还是功功能键,若若判断为为数字键键按下,则则需要将将每次键键盘的输输入内容容依次暂暂存在一一个数组组中。在在每次按按键输入入时,需需要启动动定时器器实现待待机计时时(5秒秒)。若若5秒内内没有输输入内容容则清除除已输入入的内容容。密码的判断断和计时时:在按按下确认认键之后后,要将将输入的的内容与与初始密密码核对对,如果果密码正正确,输输出相应应的指示示,同时时还要启启动定时时器实现现4s的的计时。如如果密码码错
28、误,错错误计数数变量增增1,同同时输出出密码指指示信号号,若错错误次数数超过33s,则则输出报报警等信信号,同同时启动动定时器器实现115秒的的计时。 输出信号号的控制制主要根根据按键键输入与与密码的的核对情情况来决决定。 整体程序序设计思思想:程序分为主主程序和和中断服服务程序序两个主主要部分分,主程程序完成成变量和和单片机机特殊功功能寄存存器的初初始化后后,进入入一个循循环结构构。在循循环中,首首先判断断有无按按键按下下,若有有按键则则判断是是否数字字键还是是功能键键,根据据按键的的情况执执行相应应的功能能。然后后根据密密码是否否正确的的判断情情况,执执行相应应的操作作。循环环中最后后将需
29、要要显示的的内容通通过动态态扫描在在数码管管上显示示。 中断服务务程序只只要实现现三个状状态的计计时,待待机时需需要计时时5秒,密密码正确确需要计计时5ss,密码码3次输输入错误误需要计计时155秒。当当前处于于何种计计时,由由主程序序根据密密码判断断结果来来决定。(2)选择择单片机机型号和和所需外外围器件件型号,设设计单片片机硬件件电路原原理图 采用MCCS511系列单单片机AAt899S511作为主主控制器器,外围围电路器器件包括括数码管管驱动、蜂蜂鸣器的的输出驱驱动、独独立式键键盘以及及发光二二极管的的输出等等。数码管驱动动采用22个四联联共阴极极数码管管显示,由由于单片片机驱动动能力有
30、有限,采采用744HC2244作作为数码码管的驱驱动。在在74HHC2444的77段码输输出线上上串联1100欧欧姆电阻阻起限流流作用。蜂鸣器的驱驱动采用用PNPP三极管管85550来驱驱动,低低电平有有效。独立式按键键使用上上提拉电电路连接接,在没没有键按按下时,输输出高电电平。发发光二极极管串联联5000欧姆电电阻再接接到电源源上,当当输入为为低电平平时,发发光二极极管导通通发光。硬件电路原原理图如如图3-9所示示。 图图3-99 密码码锁电路路原理图图(3)分析析软件任任务要求求,写出出程序设设计思路路,分配配单片机机内部资资源,画画出程序序流程图图 软件任任务要求求主要包包括按键键扫描
31、、密密码判断断、动态态扫描输输入的内内容、计计时、指指示信号号输出以以及蜂鸣鸣器提示示音的输输出等。主主程序主主要完成成变量与与寄存器器的初始始化、按按键的扫扫描与判判断、密密码的判判断以及及数码管管动态扫扫描显示示等。主主程序流流程图如如图3-10所所示。 图图3-110 密密码锁的的主程序序流程图图中断服务程程序主要要完成三三种定时时的计时时工作,包包括按键之之后启动动的待机机计时,当当待机超超过5ss则清除除已输入入的内容容。密码输输入正确确之后的的计时,44s之后后清除开开锁驱动动信号与与已开锁锁指示信信号。 密码输输入错误误3次的的计时,计计时155s,在在则155s内无无法再次次输
32、入密密码,115秒过过后清除除所有报报警与指指示。中中断服务务程序流流程图如如图3-11所所示。 图3-11 密码锁锁中断服服务程序序流程图图 单片机资资源的分分配与变变量的定定义: 密码的输输入与判判断需要要定义44个变量量。原始始密码存存储在数数组innit_vall6中。键键盘输入入的密码码存储在在数据sshoww_vaal66中,变变量 kkey_inddex的的值表示示当前按按键是六六位密码码中的哪哪一位,每每输入一一个密码码数字该该变量增增一。密密码输入入错误的的次数暂暂存在变变量errrorr_nuum中。 计时功能能需要55个变量量。模式式变量ccnt_staate存存储计时时
33、属于什什么状态态,0表表示待机机计时,11表示密密码正确确的计时时,2表表示密码码错误33次的计计时。三三个变量量(cnnt_vval_15ss,cnnt_vval_5s, cntt_vaal_44s)分分别实现现待机、密密码正确确和密码码错误33次后的的计时工工作。定定时器TT1每2250mms产生生一次中中断,变变量T11_cnnt记录录定时器器溢出中中断的次次数,当当记录到到40000时表表示计时时1秒。(4)设计计系统软软件调试试方案、硬硬件调试试方案及及软硬件件联合调调试方案案 软件调调试方案案:伟福福软件中中,在“文件新建文文件”中,新新建C语语言源程程序文件件,编写写相应的的程序
34、。在在“文件新建项项目”的菜单单中,新新建项目目并将CC语言源源程序文文件包括括在项目目文件中中。 在 “项项目编编译”菜单中中将C源源文件编编译,检检查语法法错误及及逻辑错错误。在在编译成成功后,产产生以 “*.hhex”和“*.bbin” 后缀的的目标文文件。硬件调试方方案:在在设计平平台中,将将单片机机的P11.0-P1.7分别别与8个个独立式式键盘通通过插线线连接起起来,将将P3.0-PP3.33分别与与4个发发光二极极管连接接起来,PP3.44与蜂鸣鸣器的输输入连接接起来。在伟福中将将程序文文件编译译成目标标文件后后,将下下载线安安装在实实验平台台的下载载线接口口上,运运行“MCUU
35、下载程程序”,选择择相应的的flaash 数据文文件,点点击“编程”按钮,将将程序文文件下载载到单片片机的FFlassh中。然后,上电电重新启启动单片片机,检检查所编编写的程程序是否否达到题题目的要要求,是是否全面面完整地地完成试试题的内内容。3.3.22 程序序设计/晶振111.005922MHzz,T11每2500微秒中中断,按按键P1.0-P1.7,发发光二极极管接PP3.00-P33.3,pp3.44/*变量的的定义: shoow_vval6: 显示示的值 iniit_vval6: 密码初初始值 keyy_vaal: 返回回按键的的值 2255-表示无无按键按按下 keyy_innde
36、xx: 当前前按键是是哪一位位密码 T1_cntt: 定时时器计数数溢出数数 cntt_vaal_115s: 报报警计时时的数值值 cntt_vaal_55s: 待待机时间间计时 cntt_vaal_44s: 输输入正确确,等待待4秒清清除开锁锁信号 cntt_sttatee: 计时状状态 errror_numm: 错错误次数数 ledd_seeg_ccodee:数码码管7段段码*/#inclludee rreg551.hh/*说明kkey00=P110; keey1=P11;kkey22=P112; keey3=P13;kkey44=P114;keyy5=PP155;ennterr=P116
37、;escc=P117;*/sbit reelayy_oppen=P30; /电磁锁锁开锁驱驱动sbit pww_errrorr=P331; /密码错错误信号号sbit allarmm_ouut=PP322; /报警输输出sbit oppen_locck=PP333; /已开锁锁指示信信号sbit auudioo_ouut=PP344; /有源蜂蜂鸣器unsiggnedd chhar datta ccnt_vall_155s,ccnt_vall_5ss,cnnt_vval_4s,cntt_sttatee;unsiggnedd innt datta TT1_ccnt;unsiggnedd chha
38、r datta kkey_vall,keey_iindeex,kkey_vall_olld;unsiggnedd chhar datta sstatte_vval,errror_numm;unsiggnedd chhar datta sshoww_vaal66;char codde iinitt_vaal66=1,22,3,4,55,0;char codde lled_segg_coode11=00 x3ff,0 xx06,0 x005b,0 x004f,0 x666,00 x6dd,0 xx7d,0 x007,00 x7ff,0 xx6f,00 x000;/ledd_seeg_ccodee0
39、-9代代表0-9 lled_segg_coode10=0 xx00数数码管不不显示任任何内容容/-延延时程序序-void dellay(unssignned intt i)/延延时 whiile(-ii); /-清清除输入入内容-void iniit_vvariiantt()unsiigneed ccharr i; for(i=00;i39999) /如如果计数数39999, 计时时1s T1_cntt=0; swiitchh (ccnt_staate) ccasee 0: /待机,需需要计时时5s if(cntt_vaal_55s55) ccnt_vall_5ss+; elsse ccnt_
40、vall_5ss=0; iinitt_vaariaant();/待机机计时到到5秒时时,清除除输入的的内容 TTR1=0; /停止止计时 breeak; caase 1:/密码码输入正正确,需需要计时时4s if(cntt_vaal_44s44) ccnt_vall_4ss+; elsse ccnt_vall_4ss=0; iinitt_vaariaant();/密码码输入正正确,计计时到44秒时,清清除输入入的内容容 oopenn_loock=1; /已开开锁信号号清零 rrelaay_oopenn=1; /开锁锁信号清清零 ccnt_staate=0; TTR1=0; /停止止计时 bre
41、eak; caase 2: /密密码输入入错误33次,计计时155s if(cntt_vaal_115s15) ccnt_vall_155s+; elsse ccnt_vall_155s=00; iinitt_vaariaant();/三次次密码错错误时,计计时155秒,清清除输入入的内容容 oopenn_loock=1; / 清清除所有有指示和和报警 rrelaay_oopenn=1; aalarrm_oout=1; ppw_eerroor=11; ccnt_staate=0; TTR1=0; /停止止计时 breeak; /-判判断键盘盘输入内内容与密密码是否否一致-unsiggnedd
42、chhar cheeck_inpput_pw() unssignned chaar ii,k; k=11; forr(i=0;ii x=19 TL1=0 x119; EA=11; /开中中断 ET1=1; TR1=0; /开定定时器TT1 whille(11) keey_vval=scaan_kkey(); /按键输输入,有有键按下下keyy_vaal为00-7,无无键按下下keyy_vaal为2255。 iff (kkey_vall!=kkey_vall_olld) keyy_vaal_oold=keyy_vaal; if (keey_vval!=2555& cnnt_sstatte!=2)
43、 aaudiio_oout=0; ddelaay(1100); /延延时去抖抖动 aaudiio_oout=1; sswittch (keey_vval) caase 0: caase 1: caase 2: caase 3: caase 4: caase 5: if(keyy_inndexx6) /密码为为6位,超超过6位位视为输输入无效效 sshoww_vaalkkey_inddex=keey_vval; kkey_inddex+; breeak; caase 6: /确确认键 if(cheeck_inpput_pw() /密码正正确 errrorr_nuum=00; /密密码输入入错误次
44、次数清零零 /- pww_errrorr=1; /密密码错误误指示灯灯灭 reelayy_oppen=0; /开开锁驱动动信号灯灯亮 oppen_locck=00; /已已开锁信信号灯亮亮 /- deelayy(5000000); /两两声短“滴”声 auudioo_ouut=00; deelayy(5000000); auudioo_ouut=11; deelayy(5000000); auudioo_ouut=00; deelayy(5000000); auudioo_ouut=11; /- cnnt_sstatte=11; /下下一状态态处于44秒计时时的状态态 TRR0=11; /启启
45、动定时时 elsse iif (errror_numm39999) /如如果计数数39999, 计时时1s T1_cntt=0; if(cntt_300 x= 2300.4 TL1=0 x119; EA=11; /开中断断 ET1=1; TR1=0; /定时器器T0 TCONN=0 xx01; /Intt0中断断取边沿沿触发模模式 whille(11) keey_vval=scaan_kkey(); / 2555;/ iff (kkey_vall!=kkey_vall_olld) keyy_vaal_oold=keyy_vaal; if (keey_vval!=2555) sswittch (
46、keey_vval) caase 0: /启启动键 TTR1=1; /启启动计时时,TRR1=11为启动动了的标标志 brreakk; caase 1: /清清除键 iinitt_vaariaant(); /清清除变量量 TRR1=00; /关闭闭定时器器 brreakk; caase 2: /白白天/黑黑夜的切切换 iif(sstatte_vval=0) staate_vall=1; eelsee staate_vall=0; bbreaak; iff(IEE0=1& TRR1=1) /每每来1个个脉冲,中中断一次次 IE00=0; cntt_300=0; /330秒的的计时清清零 if(D
47、_ccnt=00.5) h=h+11; retuurn h;/* C551有专专门的库库文件MMATHH.H,里面有有个函数数 它是是这样定定义的eexteern flooat moddf(ffloaat xx, ffloaat *ip); 调用用它之后后,整数数部分被被放入*ip, 小数数部分作作为返回回值。*/-void tiimerr1() innterrruppt 33 /T11中断 T1_cntt+; if(T1_cnttT11_ovver_numm) /半周周期的计计数到达达 T1_cntt=0; pullse_outt=!ppulsse_oout; /反复复取反,产产生方波波 i
48、f(staate_vall=11)/连续按按键 if (seec_ooverr_nuum440000) /计时时未到11s secc_ovver_numm+; elsse /计时时到1ss时,执执行ellse的的代码 secc_ovver_numm=0; if(seccondd2) /当超超过2秒秒,seeconnd一直直为2,直直到松开开按键 seeconnd+; /连续续按下键键少于22秒时,ssecoond继继续增11。 elsse /连续续按下键键2秒,以以10次次/秒的的速度连连续增加加 TTR1=0; sswittch (keey_vval) caase 0: iif(hhz_ss
49、hu10) hzz_shhu=hhz_sshu-10; /减减10/秒 eelsee hzz_shhu=11; TT1_ooverr_nuum=gget_T1_oveer_nnum(hz_shuu); bbreaak; TR11=1; /-main()pulsse_oout=0; /初初始化各各变量 hz_sshu=5; T1_ccnt=0; statte_vval=0; secoond=0; sec_oveer_nnum=0; T1_ooverr_nuum=gget_T1_oveer_nnum(hz_shuu); /初始始化511的寄存存器 TMODD=0 xx20;/用用T1计计时 88位
50、自动动装载定定时模式式,T00计数pp3.44的脉冲冲数 TH1=0 x66; /2250微微秒溢出出一次; 2500(2556-xx)*112/112 - xx=6 TL1=0 x66; /2200HHz的半半周期为为2.55毫秒,要要溢出中中断100次 EA=11; /开开中断 ET1=1; TR1=1; /定定时器TT1 whille(11) keey_vval=scaan_kkey(); /扫描按按键 iff (kkey_vall!=kkey_vall_olld) /说说明有键键按下或或弹起 keyy_vaal_oold=keyy_vaal; if (keey_vval!=2555)
51、/说明明键按下下 sttatee_vaal=00; /清除除连续按按键标志志 seec_ooverr_nuum=00; swwitcch (keyy_vaal) casse 00: /增11键 hhz_sshu+; TT1_ooverr_nuum=gget_T1_oveer_nnum(hz_shuu); bbreaak; casse 11: /减11键 iif(hhz_sshu=2) hz_shuu-; eelsee hz_shuu=1; TT1_ooverr_nuum=gget_T1_oveer_nnum(hz_shuu); bbreaak; ellse /说明键键弹起 sttatee_va
52、al=00; ssecoond=0; ellse /一一直按下下或弹起起 if (keey_vval!=2555) sstatte_vval=1; /连续按按键 elsse sttatee_vaal=00; /没有按按键按下下,一直直处于弹弹起状态态 ledd_shhow(); /数码管管显示,动动态扫描描/-方方波发生生器-3.6简易易数字直直流电压压表 设设计一个个简易数数字直流流电压表表。(量量程0VV-2VV、测量量速度为为大于等等于2次次/秒、测测量误差差在0.005V以以内,有有超限报报警、数数码管显显示。)3.5.11模块11:系统统设计(1)分析析任务要要求,写写出系统统整体设
53、设计思路路从试题的要要求分析析,主要要包括的的内容为为ADCC转换电电路的控控制、采采用定时时器定时时读取AADC转转换器的的数据、将ADC转换器的数据计算为对应的电压值,最后在数码管上显示出来。整体设计思思路:硬硬件采用用单片机机的P00输出数数码管的的7段码码,P22口输出出数码管管的位控控信号。用用P1的的三个II/O管管脚连接接ADCC转换器器的接口口,通过过查询定定时器TT0中断断标志是是否有效效来启动动ADCC转换器器的工作作,并读读取ADDC转换换器的转转换结果果。然后后,根据据ADCC转换器器的参考考电压将将ADCC转换器器的转换换结果计计算为对对应的电电压值,并并在数码码管上
54、显显示出来来。(2)选择择单片机机型号和和所需外外围器件件型号,设设计单片片机硬件件电路原原理图 采用MCCS511系列单单片机AAt899S511作为主主控制器器,外围围电路器器件包括括数码管管驱动、AAD转换换器TLLC5449、基基准电压压TL4431等等。数码管驱动动采用22个四联联共阴极极数码管管显示,由由于单片片机驱动动能力有有限,采采用744HC2244作作为数码码管的驱驱动。在在74HHC2444的77段码输输出线上上串联1100欧欧姆电阻阻起限流流作用。AD转换器器的参考考电压由由精密基基准电源源TL4431提提供,标标准参考考电压VVreff+为22.5伏伏, Vreef-
55、为为0伏。由于0V-2V内的测量误差控制在0.05V内,因此8 位A/D转换器即可满足要求。AD转换器TLC549是以8位开关电容逐次逼近A/D转换器为基础而构造的CMOS A/D转换器。 它们设计成能通过3态数据输出和模拟输入与微处理器或外围设备串行接口。TLC549仅用输入/输出时钟(I/O CLOCK)和芯片选择 (CS)输入作数据控制。TLC549的IO CLOCK输入频率最高可达1.1MHz。TLC5449提供供了片内内系统时时钟,它它通常工工作在44MHzz且不需需要外部部元件。片片内系统统时钟使使内部器器件的操操作独立立于串行行输入/输出的的时序并并允许TTLC5548和和TLC
56、C5499象许多多软件和和硬件所所要求的的 I/OO CLLOCKK和内部部系统时时钟一起起可以实实现高速速数据传传送以及及对于TTLC5549为为每秒440,0000次次转换的的转换速速度。TTLC5549 的引脚脚排列分分别如图图3-117下。如图3-117 TTLC5549 的引脚脚排列 TTLC5549 的工作作时序如如图3-18所所示。 图3-118 TLCC5499 的工工作时序序转换周期需需要366个系统统时钟周周期(最最大为 17s),它它开始于于CS变变为低电电平之后后I/OO CLLOCKK的第88个下降降沿,这这适用于于该时刻刻其地址址存在于于存储器器中的通通道。在CS变
57、为为低电平平后,最最高有效效位 (AA7)自自动被放放置在DDATAA OUUT总线线上。其其余的77 位(AA6-AA0)在在前7个个I/OO CLLOCKK下降沿沿由时钟钟同步输输出。TLC5449的工作原原理TLC5449是在在单个芯芯片内的的完善的的数据采采集系统统。每一一个器件件包含内内部系统统时钟,采采样和保保持,88位A/D转换换器,数数据寄存存器以及及控制逻逻辑电路路。为了了提高灵灵活性和和访问速速度,器器件有两两个控制制输入:I/OOCLOOCK和和芯片选选择(CCS)。这这些控制制输入和和与TTTL兼容容的3态态输出易易于与微微处理器器或小型型计算机机的串行行通信。器器件可
58、在在17s或更更短时间间内完成成转换。TTLC5549每25s重复复一次完完整的输输入-转转换-输输出(iinpuut-cconvverssionn-ouutpuut)周周期。内部系统时时钟和II/OCCLOCCK独立立使用且且不需要要任何特特定的速速度或二二者之间间的相位位关系。这这种独立立性简化化了器件件的硬件件和软件件控制任任务。由由于这种种独立性性和系统统时钟的的内部产产生,控控制硬件件和软件件只需关关心利用用I/OO时钟读读出先前前转换结结果和启启动转换换。内部部系统时时钟以这这种方式式驱动转转换电路路以便控控制硬件件和软件件不需要要涉及此此项任务务。当CS为高高电平时时,DAATA
59、OOUT处处于高阻阻状态且且I/OOCLOOCK(II/O时时钟)被被禁止。正正常控制制时序为为:1.CS被被拉至低低电平。当CS变为低电平时,前次转换结果的最高有效位(MSB)开始出现在DATAOUT端。2.前4个个I/OOCLOOCK周周期的下下降沿输输出前次次转换结结果的第第2、第第3、第第4和第第5个最最高有效效位。在在I/OOCLOOCK第第4个高高电平至至低电平平的跳变变之后,片片内采样样和保持持电路开开始对模模拟输入入采样。采样操作主要包括内部电容器充电到模拟输入电压的电平。3.其后再再把三个个I/OOCLOOCK周周期加至至I/OOCLOOCK端端,在这这些时钟钟周期的的下降沿
60、沿,第66、第77和第88个转换换位被移移出。4.最后(第第8个)时时钟周期期被加至至I/OOCLOOCK。此此时钟周周期高电电平至低低电平的的跳变使使片内采采样和保保持电路路开始保保持功能能。保持持功能在在接着四四个内部部系统时时钟周期期内继续续进行,在在此之后后保持功功能结束束且在下下面322个系统统时钟周周期内完完成转换换,总共共为366个周期期。在第第8个II/OCCLOCCK周期期之后,CS必须变为高电平,否则I/OCLOCK必须保持低电平达至少36个系统时钟周期以供保持和转换功能的完成。在多个转换周期内CS可保持低电平。在多个转换周期内使CS保持低电平时必须特别注意防止I/OCLO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同安全考核上限
- 工会代理记账合同
- 提现合同模板
- 2025年昭通货运资格证模拟考试
- 2025年青岛货运考试题库
- 2025年云南货运从业资格证试题和答案
- 2025年漯河货运从业资格证考试试题及答案
- 2025年甘肃道路货运驾驶员从业资格证考试
- 山西省旅游景点租赁合同
- 冷藏堆场租赁合同
- 新概念第一册单词(含音标)
- MATLAB SIMULINK讲解完整版
- 加油站-课程设计
- 帛书老子道德经全文-校注
- 柑橘园的规划与设计(赵铮)
- 国家开放大学电大《中文学科论文写作》期末题库及答案
- 提高地下车库防水质量QC成果
- 物业消防系统承接查验表
- 俄罗斯联邦政府第782号决议 电梯安全技术规程(2009版)
- OPERA系统培训ppt课件
- 110Kv输变电工程电气安装技术交底
评论
0/150
提交评论