小艳单片机课设报告.doc_第1页
小艳单片机课设报告.doc_第2页
小艳单片机课设报告.doc_第3页
小艳单片机课设报告.doc_第4页
小艳单片机课设报告.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计报告 题目:电子钟表和温度表的设计学校:长安大学学院:电控学院专业:电气工程及其自动化姓名:秦小艳学号:3204090141目录一: 摘要 . .二 : 说明书 .1各部分硬件及软件说明1).74LS138芯片介绍 .2).74LS245芯片介绍.3. 八段显示器.4).DS18B2的介绍2.方案分析及设计1)时钟程序设计 .2)温度程序设计.3.功能调试1).调试过程(图片).2).调试过程问题及解决方案.三 :框图及程序四: 经验总结.一:摘要题目:电子钟表和温度表的设计(一)设计要求:(不能采用专用芯片)(1)时间显示:时、分、秒(2)钟表时分秒参数的手动调整设置(3)选择传感器,并设计相应的信号处理电路。(4)实现实时温度显示功能(每秒刷新一次),温度测量范围4060(5)实现整点报时功能(6)当温度超过38度,或低于零下-10时,声光报警提示(二)扩充功能:(1)防止极性接反,电压不足时,报警提示。(2)电子钟表可以作为秒表使用(3)实现闹钟功能本系统使用STC89C52RC单片机为主要控制器,辅以74LS138译码器、74LS245总线驱动器、温度传感器DS18B20、矩阵键盘以及LCD显示等电路。该系统使用单片机的中断方式进行计时,能有效减小了系统误差,再使用译码器进行片选,节省了单片机的I/O口,使用了矩阵键盘进行功能的选择。该系统具有设计简单,结构清晰,界面友好的特点,经测试,能够较好的实现题目所要求的基本和扩充功能。这个系统主要由单片机系统,数码管显示系统,温度传感系统和键盘系统组成。电子表用六个数码管显示时,分,秒,时分秒参数均可手动调整设置。温度表显示由两个数码管组成,每秒刷新一次,温度测量范围-40+60。二: 说明书1. 174LS38芯片的介绍74LS138 为3 线8 线译码器其工作原理如下:当一个选通端(E3)为高电平,另两个选通端(E1)和/(E2))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。 利用 E1、E2和E3可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。74LS138的管脚图2. 74LS245芯片的介绍74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当/CE为高电平时,A、B均为高阻态。由于P2口始终输出地址的高8位,接口时74LS245的三态控制端/1G和/2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,/E端接地,保证数据现畅通。8051的/RD和/PSEN相与后接DIR,使得/RD或/PSEN有效时,74LS245输入(P0.iDi),其它时间处于输出(P0.iDi)。3.八段显示器 LED数码管显示(八段)4.DS18B20的介绍DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20引脚定义:(1) DQ为数字信号输入/输出端。(2)GND为电源地。(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。DS18B20的主要特性:a、适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电。b、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。c、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。d、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。e、温范围55125,在-10+85时精度为0.5。f、可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。g、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。h、测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。i、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作单线数字温度传感器DS18202.方案设计用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BCD码即可,硬件接线有一定标准。软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显示驱动方式。由于本次设计硬件电路较为简单,因此我们选择了动态显示,软件译码的驱动方式。采用动态扫描法显示LED数码管,MCS-51的P1.0,P1.1,P1.2与74LS138的A,B,C连接74LS138通过74LS245与LED数码管的阴极相连来选择数码管,用P0口通过74LS245与数码管的阳极相连,P2口与键盘连接,传感器18B20与P1.3口相连构成温度控制。时分秒采用T0定时,秒表采用T1中断。K1调节秒参数,K2调节分参数,K3调节时参数,K4控制温度,K5控制秒表。3.调试刚一上电全部显示00:00:00,不调整显示时钟调试温度显示三:框图:1.主程序: 开始初始化程序启动定时器T0扫描键盘N有键按下?YYK0按下设置秒参数NY设置分参数K1按下NYK2按下设置时参数NYK3按下跳入温度显示N秒表显示K4键按下2.时钟框图开始初始化程序时钟工作状态NY有键按下Y60S到秒加一设置K0按下NYYN60分到分加一设置K1按下YNYN24H到时加一设置K2按下显示3.温度表功能程流程图 温度显示子程序流程图开始开始 调测量子程序 初始化18B20 读取转换完的温度值 调温度显示程序 负数? NYN有键按下 符号位输出“” 符号位输出“全灭”YNK4键按下输出十位数字Y时钟工作状态输出个位数字结束 4.秒表框图控制秒表键5按下 定时器1赋初值初始化扫描键盘N键5确实按下?Y开启定时器一秒表显示 扫描键盘执行相应操作有键按下?YN返回时钟显示程序: FLAG1 BIT 00H ; DS18B20标志位D_SET BIT P1.0M_SET BIT P1.1YA_SET BIT P1.2YB_SET BIT P1.3FW BIT P3.0 ;负位显示片选开关GW BIT P3.2 ;个位显示片选开关SW BIT P3.1 ;十位显示片选开关DQ BIT P3.7 ;DS18B20的数据总线接脚DATE EQU 30HMONTH EQU 31HYEAR EQU 32HTCNT1 EQU 34HTCNT2 EQU 43HTCNT4 EQU 44HTEMPER_NUM EQU 50H ; TEMPER_NUM:保存读出的温度数据TEMPER_L EQU 36H ;温度的低位TEMPER_H EQU 35H ;温度的高位TEMP EQU 37H ;临时存放温度数据的单元SJGW EQU 38H ;存放显示温度的个位数SJSW EQU 39H ;存放显示温度的十位数FH EQU 40HTCNT3 EQU 42HORG 0000HLJMP STARTORG 000BHLJMP INTT0ORG 001BHLJMP INTT1ORG 0080HSTART: MOV R0,#60H MOV R7,#06CLEARDISP: MOV R0,#00H INC R0 DJNZ R7,CLEARDISP MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 MOV R4,#14HSTART1: LCALL DISPLAY1 LCALL SCAN_KEYB MOV A,R5 CJNE A,#00H,NEXT1 LJMP SETSSNEXT1: CJNE A,#01H,NEXT2 LJMP SETMMNEXT2: CJNE A,#02H,NEXT3 LJMP SETHHNEXT3: CJNE A,#03H,NEXT4 LJMP MAINNEXT4: CJNE A,#04,NEXT5 LJMP MIAOBIAONEXT5: LJMP START1RETSCAN_KEYB: MOV P2,#0F0H MOV A,P2 ANL A,#0F0H XRL A,#0F0H JZ NO_KEY ACALL DL20MS MOV A,P2 ANL A,#0F0H XRL A,#0F0H JZ NO_KEY MOV R2,#0F7HSCAN: MOV A,R2 MOV P2,A MOV A,P2 ANL A,#0F0H MOV R3,A CJNE A,#0F0H,KEY_PRSD MOV A,R2 RR A MOV R2,A XRL A,#7FH JNZ SCANNO_KEY: MOV R5,#0FFH RETKEY_PRSD: MOV A,R2 ANL A,#0FH ORL A,R3 MOV R4,A MOV R5,#00H MOV DPTR,#KEY_TABCAL_VAL: MOV A,R5 MOVC A,A+DPTR XRL A,R4 JZ FIXED INC R5 SJMP CAL_VALFIXED: MOV P2,#0F0H MOV A,P2 ANL A,#0F0H XRL A,#0F0H JNZ FIXED ACALL DL20MS MOV A,P2 ANL A,#0F0H XRL A,#0F0H JNZ FIXED RET KEY_TAB: DB 77H,7BH,7DH,0B7H,0BBH,0BDH,0D7H,0DBH,0DDH;延时程序 DL20MS: MOV R6,#100DL1: MOV R7,#100HERE: DJNZ R7,HERE DJNZ R6,DL1 RETSETSS: MOV R0,#61H LCALL ADD1 MOV A,R3 CLR C CJNE A,#60H,OVER LCALL CLR0SETMM: MOV R0,#63H LCALL ADD1 MOV A,R3 MOV 50H,R3 CLR C CJNE A,#60H,OVER LCALL CLR0SETHH: MOV R0,#65H LCALL ADD1 MOV A,R3 MOV 51H,R3 CLR C CJNE A,#24H,OVER LCALL CLR0OVER: LJMP START1MAIN: ACALL TEMPER LCALL DISPLAY2 LCALL SCAN_KEYB CJNE R5,#0FFH,START4 LJMP MAINSTART4: LJMP START1TEMPER: ACALL RE_CONFIG ;初始化18B20 ACALL GET_TEMPER ;采样 LCALL TEMPER_COV RET; 重新写DS18B20暂存存储器设定值RE_CONFIG: JB 00H,RE_CONFIG1; 若DS18B20存在,转RE_CONFIG1 RETRE_CONFIG1:MOV A,#0CCH; 发SKIP ROM命令 LCALL WRITE_1820 MOV A,#4EH; 发写暂存存储器命令 LCALL WRITE_1820 MOV A,#00H; 不 TH(报警上限)中写入00H LCALL WRITE_1820 MOV A,#00H; TL(报警下限)中写入00H LCALL WRITE_1820 RET ; 读出转换后的温度值GET_TEMPER: SETB P1.3 ; 定时入口 LCALL INIT_1820 JB 00H,TSS1 RET ; 若DS18B20不存在则返回TSS1: MOV A,#0CCH; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H; 发出温度转换命令 LCALL WRITE_1820 MOV R0,#250;等待A/D转换结束,12位的话750usTSS2: NOP DJNZ R0, TSS2 LCALL INIT_1820 MOV A,#0CCH; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH; 发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 MOV 50H,A; 将读出的温度数据保存 RET ; 初始化DS18B20的程序INIT_1820: SETB P1.3 NOP CLR P1.3 ;主机发出延时540us的复位低脉冲 MOV R0,#180TSR1: NOP DJNZ R0, TSR1 SETB P1.3 ;然后拉高数据线 NOP NOP MOV R0,#36TSR2: JNB P1.3, TSR3 ;等待DS18B20的回应 DJNZ R0,TSR2 LJMP TSR4; 延时TSR3: SETB 00H; 置标志位,表示DS1820存在 LJMP TSR5TSR4: CLR 00H; 清标志位,表示DS1820不存在 LJMP TSR7TSR5: MOV R0,#06BH; 200us ?TSR6: DJNZ R0,TSR6; 复位成功!时序要求延时一段时间TSR7: SETB P1.3 RET ; 写DS18B20的程序WRITE_1820: MOV R2,#8 CLR CWR1: CLR P1.3 MOV R3,#6 DJNZ R3,$ RRC A MOV P1.3,C MOV R3,#23 DJNZ R3,$ SETB P1.3 NOP DJNZ R2,WR1 SETB P1.3 RET; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_1820: MOV R4,#2; 将温度高位和低位从DS18B20中读出 MOV R1,#36H; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)RE00: MOV R2,#8RE01: CLR C SETB P1.3 NOP NOP CLR P1.3 NOP NOP NOP SETB P1.3 MOV R3,#7 DJNZ R3,$ MOV C,P1.3 MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00 RET; 将从DS18B20中读出的温度数据进行转换TEMPER_COV: MOV A,35H ;判断正负 ANL A,#11111000B XRL A,#11111000B JNZ ZH_WENDU ;为正数,转走MOV 40H,#10 ;负数,顺序执行 XRL 35H,#0FFH XRL 36H,#0FFH MOV A,36H ADD A,#1 MOV 36H,A MOV A,35H ADDC A,#00H MOV 35H,A ;取补码-源码AJMP TEMPER1ZH_WENDU: MOV 40H,#11TEMPER1: MOV A,#0F0H ANL A,36H ; 舍去温度低位中小数点后的四位温度数值 SWAP A MOV 50H,A MOV A,36H JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值 INC 50HTEMPER_COV1: MOV A,35H ANL A,#07H SWAP A ORL A,50H MOV 50H,A ; 保存变换后的温度数据RET ;温度显示程序 DISPLAY2: MOV DPTR,#TABLE1 MOV A,FH ;显示符号位 MOV P0,#00H MOV P1,#02H MOVC A,A+DPTR MOV P0,A LCALL DELAY3 MOV P1,#07H MOV 78H,TEMPER_NUM CLR C MOV A,TEMPER_NUM SUBB A,#38 JC JMPTT3 ;C为1温度比38小 MOV P1,#06 ACALL DL20MS ACALL DL20MS ACALL DL20MS ACALL DL20MS MOV P1,#07 ACALL DL20MS ACALL DL20MS ACALL DL20MS ACALL DL20MS JMPTT3: MOV TEMPER_NUM,78H MOV A,TEMPER_NUM ;显示温度十位数值 MOV B,#10 MOV P1,#03H DIV AB MOVC A,A+DPTR MOV P0,A LCALL DELAY3 MOV P1,#07H MOV A,B ;显示温度个位数值 MOV P1,#04H MOVC A,A+DPTR MOV P0,A LCALL DELAY3 MOV P1,#07H MOV A,#12 MOV P1,#05H MOVC A,A+DPTR MOV P0,A LCALL DELAY3 MOV P1,#07H RET DELAY3: MOV R6,#10 X1: MOV R7,#250 X2: DJNZ R7,X2 DJNZ R6,X1 RET DELAY4: LOP: MOV R1,#06H LOP1: DJNZ R1,LOP1 DJNZ R0,LOP RETTAB1: DB 30,31,28,31,30,31,30,31,31,30,31,30,31TAB2: DB 30,31,29,31,30,31,30,31,31,30,31,30,31TABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,00H,39H ;时钟显示DISPLAY1: MOV R1,#60H MOV R5,#05HPLAY: MOV A,R5 MOV P0,#00H MOV P1,A MOV A,R1 MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A LCALL DL1MS INC R1 MOV A,R5 JZ ENDOUT DEC A MOV R5,A AJMP PLAYENDOUT: MOV P1,#0FFH MOV P0,#00HJB P2.3,GOON RETGOON:MOV P1,#06 ACALLDL20MSACALL DL20MSACALL DL20MS CLR P2.3 RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H;DL1MS: MOV R6,#14HDL11: MOV R7,#19HDL22: DJNZ R7,DL22 DJNZ R6,DL11 RET ;时钟定时INTT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H ;定50MS SETB TR0 DJNZ R4,OUTT0 ;50*20=100ADDSS: MOV R4,#14H MOV R0,#61H LCALL ADD1 MOV A,R3 CLR C CJNE A,#60H,ADDMMADDMM: JC OUTT0 LCALL CLR0 MOV R0,#63H LCALL ADD1 MOV A,R3 MOV 50H,R3 CLR C CJNE A,#60H,ADDHHADDHH: JC OUTT0 LCALL CLR0 MOV R0,#65H SETB P2.3 LCALL ADD1 MOV A,R3 MOV 51H,R3 CLR C CJNE A,#24H,HOURHOUR: JC OUTT0 LCALL CLR0OUTT0: POP PSW POP ACC SETB ET0 RETIADD1: MOV A,R0 DEC R0 SWAP A ORL A,R0 ADD A,#01H DA A MOV R3,A ANL A,#0FH MOV R0,A MOV A,R3 INC R0 SWAP A ANL A,#0FH MOV R0,A RETCLR0: CLR A MOV R0,A DEC R0 MOV R0,A RETMIAOBIAO: MOV R0,#70H ;秒表显示单元清0 MOV R7,#0BH CLEARDIS:MOV R0,#00H INC R0 DJNZ R7,CLEARDIS MOV TL1,#0D8H ;定义T1数据寄存器初值 MOV TH1,#0F0H SETB EA ;总中断开放 MOV TMOD,#11HPROG05:LCALL SCAN_KEYB MOV A,R5 CJNE A,#4,PROGF SETB ET1 SETB TR1 PROG01: LCALL MBDISPLAY LCALL SCAN_KEYB MOV A,R5 CJNE A,#4,PROG01 CLR TR1 ;KEY5按下,关中断,秒表暂停 LCALL SCAN_KEYB MOV A,R5 CJNE A,#5,PROG05 MOV R0,#70H ;KEY6按下,秒表清0 MOV R2,#06H LABEL: MOV R0,#00H INC R0 DJNZ R2,LABEL LCALL MBDISPLAY PROGF: LCALL SCAN_KEYB MOV A,R5 CJNE A,#0,PROG03 LJMP SETSS ;KEY1按下,跳SETSSPROG03: CJNE A,#1,PROG04 LJMP SETMM ;KEY2按下,跳SETMMPROG04: CJNE A,#2,PROG0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论