吉首大学《单片机技术》课程设计报告项目名称:家用多功能定时器设计与制作专业年级:物理机电工程工程2012级学号: 20124052023学生姓名:刘锐指导教师:陈善荣报告完成日期2015 年7 月 1 日评阅结果评阅教师第一章绪论 (1)1.1 系统背景 (1)1.1.1 单片机的电子技术 (1)1.1.2 定时器介绍 (1)1.2 设计要求 (2)第二章系统电路设计 (2)2.1 设计框架介绍 (2)2.2 系统硬件单元电路设计 (2)2.2.1 复位电路设计 (2)2.2.2 时钟电路设计 (3)2.2.3 按键电路设计 (4)2.3 系统硬件总电路 (4)第三章系统软件设计 (5)3.1 系统软件流程图 (5)3.2 系统程序设计 (5)3.2.1 主程序 (5)3.2.2 中断程序 (12)第四章实验结果和分析 (13)4.1 实验使用的仪器设备 (13)4.2测试结果分析 (13)结束语 (13)参考文献 (14)第一章绪论1.1 系统背景1.1.1 单片机的电子技术单片机是将CPU、RAM\ROM\定时器/计数器以及输入输出(I/O)接口等计算机的主要部件集成在一块的集成电路芯片,作为微机系统它还可以实现模/数转换、脉宽调制、计数器捕获/比较逻辑、高速I/O口和WDT各种控制功能。
通过在MCS-51系列的单片机中增设了全双工串行口I/O、片内数据存储器采用寻址范围为256kb的8位地址、均有四种工作方式的2个16位的定时/计数器、增加了中断系统、增设了颇具特色的布尔处理机、让单片机具有较强的指令寻址和运算功能这些技术,使单片机拥有了完善的外部并行总线(AB、DB、CB)具有多机识别功能的串行通信接口,规范了功能单元的特殊功能寄存器控制模式及适应控制器特点的布尔处理系统和指令系统,位发展具有良好兼容性的新一代单片机奠定了良好的基础。
单片机被广泛地应用在各种领域。
例如用来作家用电器中如洗衣机、电冰箱、微波炉、电饭煲、电视机、录像机以及其他视频音像设备的控制器;在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;在工业中,像工业过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。
1.1.2 定时器介绍人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。
1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。
它利用机械钟带动开关来控制煤气阀门。
定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多,家用电器都安装了定时器来控制开关或工作时间。
1.2 设计要求主要内容和任务:完成单片机最小系统板设计与制作,在此基础上通过编程设计家用多路定时控制器。
目标:通过编写程序,使单片机最小系统具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。
第二章系统电路设计2.1 设计框架介绍按键输入电路:对定时器输入定时时间、时钟时间,并对其调整。
时钟电路:给单片机一个时钟信号,让其工作。
复位电路:使单片机为初始状态,并从初态开始工作。
数码管:显示时间或者其它。
2.2 系统硬件单元电路设计2.2.1 复位电路设计复位操作有上电自动复位、按键电平复位和外部脉冲复位三钟方式,本次实验用的是按键电平复位,利用电容的充放电公式来选择所需的电容、电阻,能保证复位信号高电平持续时间大于2个机器周期。
2.2.2 时钟电路设计该时钟电路是由晶体振荡器和两个微调电容组成的。
在单片机芯片内部有一个高增益反相放大器,其输入端为引脚XTAL1,其输出端为引脚XTAL2。
只需要在片外通过XTAL1和XTAL2引脚跨接晶体振荡器或在引脚与地之间加接微调电容,形成反馈电路,振荡器即可工作。
由于该晶振使用的是12MHZ的晶体,因此它的时钟周期是0.167us,机器周期为1us。
2.2.3 按键电路设计键K1(图中下方)控制状态的切换:K1为0时,表示出处在正常的计时工作状态;为1,处在校正数字钟的“时”;为2,处在校正数字钟的“分”;为3,处在调整定时起始时间的“时”;为4,处在调整定时起始时间的“分”;为5,处在调整定时终止时间的“时”;为6,处在调整定时终止时间的“分”。
键K2(图中上方)为加号键,控制在各状态时加1。
该系统键扫描的方式为中断扫描方式,当键位上有键压下时,产生中断请求,CPU响应中断,执行中断服务程序,判断键位上压下的键的键号,继而做相应的处理。
2.3 系统硬件总电路第三章系统软件设计3.1 系统软件流程图主程序在执行时,通过单片机内部中断对程序不断的扫描判断、刷新显示,当有键按下时,将数字钟中的时间与定时时间相比较,然后根据比较程序显示状态,并且还要延时消除抖动,之后进行按键处理,从而显示不同的状态,如此周期循环。
3.2 系统程序设计3.2.1 主程序ORG 0000HLJMP START;ORG 0003H;LJMP KEY_1 ;时钟、定时时间修改的切换键ORG 000BHLJMP TO_50ms ;数字钟时间定时器。
每次定时时间为50ms,20次定时为1S,产生数字钟所需要的秒ORG 0013H;LJMP KEY_2 ;时钟、定时时间修改的+号键ORG 0030HSTART: MOV SP,#60H ;初始化堆栈首地址MOV 5FH,#0 ;定时器T0溢出次数单元清零MOV 5EH,#0 ;“秒”计数单元清MOV 5DH,#00 ; 数字钟“分”初始值为0分钟MOV 5CH,#12 ;数字钟“时”初始值设为12点MOV 5BH,#30 ;定时起始时间“分”初始值设为30分MOV 5AH,#11 ;定时起始时间“时”初始值设为11 MOV 50H,#40 ;定时终止时间“分”初始值设40分MOV 4fH,#11 ;定时终止时间“时”初始值设11点MOV 51H,#00H;设置显示方式为:显示正常时间和定时时间的初始时间SETB 20H.0CLR 20H.1;首先显示定时时间的起始时间;中断和定时器初始化MOV TMOD,#00000001H;设定定时器T0工作在定时方式,工作在方式1,16位计数方式SETB IE0;外部中断INT0为边沿触发方式SETB IE1;外部中断INT1为边沿触发方式SETB ET0;允许定时器产生中断SETB EX0;允许外部中断INT0产生中断SETB EX1;允许外部中断INT1产生中断SETB EA;开启所有中断mov p1,#0ffhclr p1.0;定时器初始化MOV TH0,#3CH;设置定时时间常数,定时时间为50msMOV TL0,#0B0H;SETB TR0;启动T0开始定时计数LOOP1: lcall key_1lcall key_2jb 20h.1,loop_qishiLCALL BCD;将数字钟和定时器的时间转换为显示字符码,送相应的字符码存储单元ljmp loopaloop_qishi: lcall bcd1loopa: JB 20H.0,LOOP2;在小时的低位的数码管的小数点每0.5秒闪动一次MOV A,58HANL A,#01111111BMOV 58H,ALJMP LOOP4LOOP2: MOV A,58HORL A,#10000000BMOV 58H,AJB 20H.1,LOOP3;如果处在调整定时终止时间状态,则定时时间“小时”的低位数码管的小数点点亮,否则该小时点熄灭MOV A,54HANL A,#01111111BMOV 54H,ALJMP LOOP4LOOP3: MOV A,54HORL A,#10000000BMOV 54H,ALOOP4: LCALL DISPLAY ;调用显示子程序,显示数字钟时间和定时时间LJMP LOOP1SJMP $KEY_1: jb p1.6 ,key_1k;lcall delay40mslcall delay40mslcall delay40msjb p1.6 ,key_1kMOV A,51HCJNE A,#06H,KEY_1AMOV 51H,#00HSJMP KEY_1endKEY_1A: INC 51Hkey_1end: mov a,51hcjne a,#00h,key_1ccclr 20h.1sjmp key_1kkey_1cc: cjne a,#01h,key_1cclr 20h.1sjmp key_1kkey_1c: cjne a,#02h,key_1dclr 20h.1sjmp key_1kkey_1d: cjne a,#03h,key_1eclr 20h.1sjmp key_1kkey_1e: cjne a,#04h,key_1fclr 20h.1sjmp key_1kkey_1f: cjne a,#05h,key_1hsetb 20h.1sjmp key_1kkey_1h: cjne a,#06h,key_1k setb 20h.1key_1k: RETkey_2: jb p1.7,key_2bb;lcall delay40mslcall delay40mslcall delay40msjb p1.7 ,key_2endMOV A,51HCJNE A,#01H,KEY_2AMOV A,5CHCJNE A,#23,KEY_2BMOV 5CH,#00HLJMP KEY_2ENDKEY_2B: INC 5CHkey_2bb: LJMP KEY_2ENDKEY_2A: CJNE A,#02H,KEY_2C MOV A,5DHCJNE A,#59,KEY_2DMOV 5DH,#00HLJMP KEY_2ENDKEY_2D: INC 5DHLJMP KEY_2ENDKEY_2C: CJNE A,#03H,KEY_2E MOV A,5AHCJNE A,#23,KEY_2FMOV 5AH,#00HLJMP KEY_2ENDKEY_2F: INC 5AHLJMP KEY_2ENDKEY_2E: CJNE A,#04H,KEY_2G MOV A,5BHCJNE A,#59,KEY_2HMOV 5BH,#00HLJMP KEY_2ENDKEY_2H: INC 5BHLJMP KEY_2ENDKEY_2G: CJNE A,#05H,KEY_2I MOV A,4FHCJNE A,#23,KEY_2JMOV 4FH,#00HLJMP KEY_2ENDKEY_2J: INC 4FHLJMP KEY_2ENDKEY_2I: CJNE A,#06H,KEY_2ENDMOV A,50HCJNE A,#59,KEY_2KMOV 50H,#00HLJMP KEY_2ENDKEY_2K: INC 50HKEY_2END: RETBCD: MOV DPTR,#TAB ;设置字符码首地址MOV A,5CH ;取数字钟“小时”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 59H,A ;通过高位的值查表,获得高位数的字符码,并存入59H单元MOV A,BMOVC A,@A+DPTRMOV 58H,A ;通过低位的值查表,获得低位数的字符码,并存入58H单元MOV A,5DH ;取数字钟“分”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 57H,A ;通过高位的值查表,获得高位数的字符码,并存入57H单元MOV A,BMOVC A,@A+DPTRMOV 56H,A ;通过低位的值查表,获得低位数的字符码,并存入56H单元MOV A,5AH ;取定时器“小时”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 55H,A ;通过高位的值查表,获得高位数的字符码,并存入55H单元MOV A,BMOVC A,@A+DPTRMOV 54H,A ;通过低位的值查表,获得低位数的字符码,并存入54H单元MOV A,5BH ;取定时器“分”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 53H,A ;通过高位的值查表,获得高位数的字符码,并存入53H单元MOV A,BMOVC A,@A+DPTRMOV 52H,A ;通过低位的值查表,获得低位数的字符码,并存入52H单元RETBCD1: MOV DPTR,#TAB ;设置字符码首地址MOV A,5CH ;取数字钟“小时”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 59H,A ;通过高位的值查表,获得高位数的字符码,并存入59H单元MOV A,BMOVC A,@A+DPTRMOV 58H,A ;通过低位的值查表,获得低位数的字符码,并存入58H单元MOV A,5DH ;取数字钟“分”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 57H,A ;通过高位的值查表,获得高位数的字符码,并存入57H单元MOV A,BMOVC A,@A+DPTRMOV 56H,A ;通过低位的值查表,获得低位数的字符码,并存入56H单元MOV A,4fH ;取定时器“小时”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 55H,A ;通过高位的值查表,获得高位数的字符码,并存入55H单元MOV A,BMOVC A,@A+DPTRMOV 54H,A ;通过低位的值查表,获得低位数的字符码,并存入54H单元MOV A,50H ;取定时器“分”的值MOV B,#10DIV AB ;分离高位和地位的值,A中存放高位值,B中存放低位的值MOVC A,@A+DPTRMOV 53H,A ;通过高位的值查表,获得高位数的字符码,并存入53H单元MOV A,BMOVC A,@A+DPTRMOV 52H,A ;通过低位的值查表,获得低位数的字符码,并存入52H单元RETDISPLAY: MOV P2,#11111110B ;将数字钟“小时”的高位的字符码送第一个数码管显示MOV P0,59HLCALL DELAY20MS ;显示时间为20msMOV P2,#11111101B ;将数字钟“小时”的低位的字符码送第二个数码管显示MOV P0,58HLCALL DELAY20MS ;显示时间为20msMOV P2,#11111011B ;将数字钟“分”的高位的字符码送第三个数码管显示MOV P0,57HLCALL DELAY20MS ;显示时间为20msMOV P2,#11110111B ;将数字钟“分”的低位的字符码送第四个数码管显示MOV P0,56HLCALL DELAY20MS ;显示时间为20msMOV P2,#11101111B ;将定时器“时”的高位的字符码送第五个数码管显示MOV P0,55HLCALL DELAY20MS ;显示时间为20msMOV P2,#11011111B ;将定时器“时”的低位的字符码送第六个数码管显示MOV P0,54HLCALL DELAY20MS ;显示时间为20msMOV P2,#10111111B ;将定时器“分”的高位的字符码送第七个数码管显示MOV P0,53HLCALL DELAY20MS ;显示时间为20msMOV P2,#01111111B ;将定时器“分”的低位的字符码送第八个数码管显示MOV P0,52HLCALL DELAY20MS ;显示时间为20msRET ;上述显示方式,一直循环,实现动态显示3.2.2 中断程序TO_50ms: CLR TR0;关闭T0中断MOV A,5FH;读中断次数CJNE A,#9,TO_50ms2;判断是否到0.5秒CPL 20h.0;到0.5秒,标志位求反,实现“时”的地位闪动效果,是对秒指示TO_50ms2: CJNE A,#19,TO_50ms1;未到1秒,中断次数加1,退出定时中断MOV 5FH,#00H;到1秒,中断次数单元内容清0,同时转到对“秒”的判CPL 20h.0;到0.5秒,标志位求反,实现“时”的地位闪动效果,是对秒指示SJMP MIAOTO_50ms1: INC 5FHLJMP T0_ENDMIAO: MOV A,5EH;读秒单元内容CJNE A,#59,MIAO1;判断是否到60秒,没有到60秒,则秒单元加1MOV 5EH,#00H;否则秒单元清0,同时转到”分”单元的判断LJMP FENMIAO1: INC 5EHLJMP T0_ENDFEN: MOV A,5DH;读分单元内容CJNE A,#59,FEN1;判断是否到60分,没有到60分,则分单元加1MOV 5DH,#00H;否则分单元清0,同时转到对“时“单元的判断LJMP SHIFEN1: INC 5DHLJMP T0_ENDSHI: MOV A,5CH;读“时”单元内容CJNE A,#23,SHI1;判断是否到24小时,没有到24小时,则时单元加1MOV 5CH,#00H;否则时单元清0,LJMP T0_ENDSHI1: INC 5CHT0_END: SETB TR0;启动T0中断MOV TH0,#3CH;设置定时时间常数,定时时间为50msMOV TL0,#0B0H;RETIDELAY20MS: MOV R7,#10DELAY1: MOV R6,#200DELAY2: DJNZ R6,DELAY2DJNZ R7,DELAY1RETDELAY40MS: MOV R7,#100DELAY3: MOV R6,#200DELAY4: DJNZ R6,DELAY4DJNZ R7,DELAY3RETTAB: DB 40H,79H,24H,30H,19H,12H,02H ;0 1 2 3 4 5 6的字符码 DB 78H,00H,10H,08H,03H,46H,21H,06H,0EH;7 8 9 A B C D E F的字符码TAB1: DB 8CH;P.的字符码TAB2: DB 7FH;空,不显示的字符END第四章实验结果和分析4.1 实验使用的仪器设备电脑,PTOTEUS软件,KEIL软件,电烙铁,吸锡器,钳子,直流电源,电阻,电容等基本元器件。