天津大学智能装置课程设计电子时钟.docx
- 文档编号:26887265
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:49
- 大小:44.04KB
天津大学智能装置课程设计电子时钟.docx
《天津大学智能装置课程设计电子时钟.docx》由会员分享,可在线阅读,更多相关《天津大学智能装置课程设计电子时钟.docx(49页珍藏版)》请在冰豆网上搜索。
天津大学智能装置课程设计电子时钟
智能装置课程设计
一.课程设计目的:
1.深入了解PIC16F877单片机的工作原理,熟练掌握汇编语言程序设计方法,熟练使用MPLAB-ICD仿真器及MPLAB-IDE仿真调试软件。
2.通过该课程设计使学生初步掌握以单片机为核心的智能装置设计的简单原则、步骤和方法。
3.熟悉智能装置设计中有关的硬件设计调试,如人机界面等。
4.熟悉智能装置设计中相关软件的设计、编程和调试。
二.课程设计内容
1.以16F877单片机为核心,结合给出的其他原器件和智能装置实验系统原有的内容设计电子时钟硬件电路电路。
2.利用实验板上的半导体温度传感器和四个独立按键,温度传感器按其原理介绍采集,时钟利用液晶显示器进行显示。
3.时钟按照时分秒、温度以及年月日显示,并可以利用按键逐位进行修改设置。
4.利用PIC16F877自带EEPROM进行掉电保护(选做)。
三.课程设计要求:
1.根据实验指导书的设计内容及和智能装智实验系统所给出的元件,设计电子时钟的硬件原理图。
2.按照设计好的硬件原理图在实验系统上用导线搭建硬件电路。
3.用万用表检查硬件电路连接是否正确,检查无误后上电并编制简单的测试程序分步调试各部分功能。
4.在各部分功能实现后,编制完整的电子时钟系统软件,并进行软硬件联调,直到达到设计要求。
5.按照设计内容要求测试仪表误差并做分析,给出仪表精度,完成后由教师进行验收检查。
四.课程设计设备
仪器:
MPLAB-ICD模块与仿真头
智能装置实验系统
安装了MPLAB-IDE开发软件的计算机
数字万用表
导线若干
五.课程设计硬件原理图:
七.课程设计硬件设计思路:
电子时钟的硬件接线比较简单,复杂之处在于程序的设计,需要外部连接的硬件只有LCD液晶显示屏以及按键。
1.LCD屏写数据是串行输入,所以产生时序的问题。
LCD显示输出采用手动时钟完成,这样便于控制时序,且传送字符时的传输效率比较高,当采用其他总线传送方式的时候,由于计算机在传送每个字节前也会加上相应的头部,这样与LCD所要求的时序不符,控制需要三条线,一条时钟线,一条数据线,一条片选线,三条线互相配合保证将数据正确写入LCD的数据缓冲区。
所以使用三条I/O端口线向LCD写数据,选用RD0~RD2控制,其中RD0接CS端,RD1接CLK,RD2接SID。
2.四个按键分别与RC0.RC1.RC2.RC3相连,按键低电平有效,采用扫描方式判断哪一个按键按下。
八.调试步骤以及各步骤调试过程中出现的问题与解决方法:
1.LCD输出调试:
由于所有实验现象都要在LCD屏显试才能看到,所以这是首先要调试好的一个程序。
最初接线完成之后没有显示,先确定了一遍接线没有问题,进而检查程序。
首先进行调试的是写命令子程序,方法就是将显示状态开/关的控制字设置成显示光标,如果这句控制字能够成功写入,屏幕上将有一个光标,则至少时钟书写命令程序是正确的,经试验写命令程序时正确的,后来在检查写数据程序时发现时首地址设错了,上行是80H到87H,我们给的首地址是89H,改变地址后输出正常。
后来又产生一个问题就是在输出多个字的时候容易产生乱码,我们的解决方式是每写完一条指令后需要加一段短延时,大致在20ms左右,这样保证屏幕完成指令接收,并保证下一条指令可以正确写入。
2.二进制转BCD模块调试:
由于只有将LCD输出模块与二进制转BCD码程序调试成功,才能看到实验现象进而调试其他模块,所以首先要将二进制转BCD码程序调试成功。
此子程序采用了简单的加三移位算法,方法是结果字节首先清零,然后待转换字节向左移动8次,每次移动后都检查第四位LSD加3是否大于7,如果是则加3,否则不加,高四位MSD做同样处理。
如果是要变换双字节的16位二进制,则要将待转换字节左移16次。
在调试过程中整体比较顺利。
3.时分秒计时模块:
在调试本模块的过程中,出现了时间已到60秒但是分钟数没有进位的情况,单步执行后发现是判断语句发生了问题。
我们采用了XORLW这个语句,将秒数与60相异或,然后判断零标志位,当秒数到达六十时,异或操作使status寄存器零标志位为1,我们误以为这时候零标志位为零,所以判断语句用反,将BTFSS用成BTFSC,改正后,时分秒计时子程序正常工作。
4.年月日模块:
这是程序中最为复杂的程序因为年月日计时子程序不仅仅要解决进位的问题,在每个月都要分清不同的天数,还有平闰年的问题,所以这部分子程序最为复杂。
在日期数加一之前首先要确定本月月数。
为了使程序具有更高的可读性,在编辑程序时舍弃了那些逻辑复杂的简便月份判断方法,如是不是1,3,5,7,8,10,12月,再使日期进时可以加到31天,本模块的设计思路是先判断月份是几月,确定好月份之后再转到相应的日期判断子程序中,这样的代价就是使程序的长度边长,有了12段的简单重复,但好处是使程序简单易读,便于调试。
在调试过程中,出问题的是判断平闰年程序,当从二月变到三月的时候,不论是否是平年还是闰年最后2月都是只记28天。
经过单步执行,发现是我们没有给程序设置一个公共出口,在判断平闰年是,即使判断是闰年,但是由于判断闰年的程序的出口是确定本年是平年的程序,所以不管是不是闰年,程序的最终出口都是将年份数判断为平年,即二月的输出只有28天,解决方案是增加程序的公共出口,判断完平闰年后,程序返回,经调试,程序正常。
5.温度检测模块:
温度检测的难点是如何将AD转换后的得到的10位二进制数转化为对应的温度数,PIC单片机中ad模块的输入电压是5伏,温度传感器的输出电压为1伏时对应温度为100度,5V对应的是ad转换后的3FFH,经换算,可得到如下对应关系,1度对应0.05V,3ffh换算成为十进制为1023,约等于1000,通过近似,可知0.005V对应一个二进制位,在编程时,将ad转换后的二进制数减去1000,余数再进行转换才是以0度为基准的温度值,将余数除以2之后得到的二进制数即为当前温度,将温度的二进制形式作为入口参数调用二进制转BCD程序,之后就可以输出在LCD屏上了。
在ad转换程序中设置的是右对齐,最高的两位直接舍弃不用,因为只有当大于100度时最高两位才有数,但是如果作为测量试问的程序来说室温基本不会到那么高,所以可以将最高两位不带入计算了。
本程序的温度检测模块检测温度精度是0.5度。
6.按键模块:
按键模块的设计思路是在一秒中多次将RC口中的状态读进来,在没有按键按下时输入为FFH,一旦有按键输入,相应位置零,输入改变,通过判断是哪一位的输入置零,知道是哪个按键按下,之后再转到相应的案件处理子程序中。
在调试过程中,出现了按键响应不灵敏的问题,同时电子钟一秒定时的时间增加了。
在没有加入按键模块之前,一秒定时准确度比较高,加入按键模块之后一秒定时时间明显加大,我们怀疑是每秒中按键扫描次数过多导致,在减少扫描次数后情况好转,我们在定时程序中调用按键扫描程序,定时程序是120ms乘以5,每次定时器120ms到时调用一次按键扫描程序。
7.EEPROM读写模块:
我们直接应用了书上的EEPROM读写模块例程,理论上程序执行不应该出错,但是当实际执行的时候发现数据无法写入也无法读出,经过询问老师,我们了解到在本仿真软件的环境下对EEPROM的操作都要经过手动刷新,这样数据才能写入和读出。
软件设计流程框图
程序初始化
调用EEPROM读程序
调用一秒延时程序
调用温度检测程序
是否到24:
59:
59否
是
调用年月日计时程序
调用输出程序
调用EEPROM写程序
程序结束
软件程序清单:
LISTP=16F877
#INCLUDE
SPTEMEQU20H
BINTEMEQU21H
LED_TEMEQU22H
GENE1EQU23H
GENE2EQU24H
LEHEQU25H
LEMEQU26H
LELEQU27H
COUNT1EQU28H
COUNT2EQU29H
COUNT3EQU30H
COUNTEQU31H
GENE3EQU33H
GENE4EQU34H
GENE5EQU35H
DECTEMLOEQU36H
DECTEMHIEQU37H
TEMPEQU38H
SECEQU39H
MINEQU40H
HOUEQU41H
YEAREQU42H
MONTHEQU43H
DAYEQU44H
PINGRUNEQU45H
WENDUEQU46H
WENDU4EQU47H
HOUTEMPEQU48H
TAGEQU50H
HMEQU51H
MODJISHUEQU52H
ORG0050H
START;主程序
BSFSTATUS,RP0
BCFSTATUS,RP1
MOVLW01H;RA0输入,其他不用。
MOVWFTRISA
MOVLW0FFH;RC1234INPUT。
MOVWFTRISC
MOVLW00H
MOVWFTRISD;RD0、RD1、RD2输出。
MOVLW20H
MOVWFOPTION_REG
MOVLW00H
MOVWFINTCON;Timer0作计数器,初始化
BCFSTATUS,RP0
MOVLW31H
MOVWFT1CON;Timer1作定时器,定时1s,初始化
MOVLW01H
MOVWFMODJISHU
CLRFHM
CLRFSEC
CLRFMIN
CLRFHOU
CLRFPORTB
MOVLW17H
MOVWFHOU
MOVLW3BH
MOVWFMIN
MOVLW30H
MOVWFSEC
MOVLW10H
MOVWFYEAR
MOVLW02H
MOVWFMONTH
MOVLW1CH
MOVWFDAY
LEDOUT;LCD屏显示部分
MOVLW00H
MOVWFPORTD;准备传输
MOVLW01H
MOVWFLED_TEM;清除显示
CALLLEDORD
MOVLW20H;功能设定
MOVWFLED_TEM
CALLLEDORD
MOVLW02H;地址归位
MOVWFLED_TEM
CALLLEDORD
MOVLW06H;进入点设定
MOVWFLED_TEM
CALLLEDORD
MOVLW0CH;显示状态开,无光标
MOVWFLED_TEM
CALLLEDORD
MOVLW01H;清除显示
MOVWFLED_TEM
CALLLEDORD
MOVLW80H;DDRAM地址复位至80H
MOVWFLED_TEM
CALLLEDORD
CALLEEPROMRD
;CALLEEPROMWR
;CALLTEMPERATURE
AE
CALLEEPROMWR
CALLINTRB
CALLTEMPERATURE
CALLINTRB
CALLOUTPUT
CALLINTRB
CALLDISPLAYSFM
CALLDELAY2
;CALLEEPROMRD
INCFSEC,1
MOVLW3CH
SUBWFSEC,0
BTFSSSTATUS,Z
GOTOAE
CLRFSEC
INCFMIN,1
MOVLW3CH
SUBWFMIN,02
BTFSSSTATUS,Z
GOTOAE
CLRFMIN
;CALLEEPROMWR
INCFHOU,1
MOVLW18H
SUBWFHOU,0
BTFSSSTATUS,Z
GOTOAE
CLRFHOU
CALLNIAN
GOTOAE
NIAN;年月日子程序
INCFDAY,1
IS1MOVFMONTH,0
XORLW01H
BTFSSSTATUS,Z
GOTOIS2
GOTOBE1
IS2MOVFMONTH,0
XORLW02H
BTFSSSTATUS,Z
GOTOIS3
GOTOBE2
IS3MOVFMONTH,0
XORLW03H
BTFSSSTATUS,Z
GOTOIS4
GOTOBE3
IS4MOVFMONTH,0
XORLW04H
BTFSSSTATUS,Z
GOTOIS5
GOTOBE4
IS5MOVFMONTH,0
XORLW05H
BTFSSSTATUS,Z
GOTOIS6
GOTOBE5
IS6MOVFMONTH,0
XORLW06H
BTFSSSTATUS,Z
GOTOIS7
GOTOBE6
IS7MOVFMONTH,0
XORLW07H
BTFSSSTATUS,Z
GOTOIS8
GOTOBE7
IS8MOVFMONTH,0
XORLW08H
BTFSSSTATUS,Z
GOTOIS9
GOTOBE8
IS9MOVFMONTH,0
XORLW09H
BTFSSSTATUS,Z
GOTOIS10
GOTOBE9
IS10MOVFMONTH,0
XORLW0AH
BTFSSSTATUS,Z
GOTOIS11
GOTOBE10
IS11MOVFMONTH,0
XORLW0BH
BTFSSSTATUS,Z
GOTOIS12
GOTOBE11
IS12
GOTOBE12
BE1MOVFDAY,0
XORLW20H
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE2CALLJUDGE
BTFSCPINGRUN,0
GOTORUN
MOVFDAY,0
XORLW1DH
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
RUNMOVFDAY,0
XORLW1EH
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE3MOVFDAY,0
XORLW20H
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE4MOVFDAY,0
XORLW1FH
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE5MOVFDAY,0
XORLW20H
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE6MOVFDAY,0
XORLW1FH
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE7MOVFDAY,0
XORLW20H
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE8MOVFDAY,0
XORLW20H
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE9MOVFDAY,0
XORLW1FH
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE10MOVFDAY,0
XORLW20H
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE11MOVFDAY,0
XORLW1FH
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
INCFMONTH,1
GOTOBE
BE12MOVFDAY,0
XORLW20H
BTFSSSTATUS,Z
GOTOBE
MOVLW01H
MOVWFDAY
MOVLW01H
MOVWFMONTH
INCFYEAR,1
BE
RETURN
JUDGE
BTFSCYEAR,0
GOTOSHIPING
BTFSCYEAR,1
GOTOSHIPING
BSFPINGRUN,0
GOTOFANHUI
SHIPINGBCFPINGRUN,0
FANHUIRETURN
TEMPERATURE;温度检测子程序
BCFSTATUS,RP0
MOVLW41H
MOVWFADCON0;选择A/D转换在RA0,并打开A/D转换
BSFSTATUS,RP0
MOVLW0x8e
MOVWFADCON1;转换结果左移,且把RA0口设置成模拟量输入
MOVLW0x01
MOVWFTRISA
BCFSTATUS,RP0
BSFADCON0,2;GO/DONE位置1,开始A/D转换
NOP
NOP
HERE
BTFSCADCON0,2;检查是否转换完成
GOTOHERE
NOP
BSFSTATUS,RP0;读取转换结果高8位信息
MOVLW69H
SUBWFADRESL,0
BCFSTATUS,RP0
MOVWFWENDU
BCFSTATUS,C
RRFWENDU,1
BTFSCSTATUS,C
GOTOAA
MOVLW30H
MOVWFWENDU4
GOTOBB
AA
MOVLW35H
MOVWFWENDU4
BB
MOVFWENDU,0
MOVWFBINTEM
CALLBINTOBCD
MOVLW95H;DDRAM地址复位至93H
MOVWFLED_TEM
CALLLEDORD
MOVLW20H
MOVWFLED_TEM;NULL位
CALLLEDDAT
MOVFLEM,0;十位
MOVWFLED_TEM
CALLLEDDAT;
MOVFLEL,0;个位
MOVWFLED_TEM
CALLLEDDAT
MOVLW2EH
MOVWFLED_TEM
CALLLEDDAT
MOVFWENDU4,0
MOVWFLED_TEM
CALLLEDDAT
BCFSTATUS,RP0
RETURN
OUTPUT
MOVLW80H;DDRAM地址至80H
MOVWFLED_TEM
CALLLEDORD
MOVLW32H
MOVWFLED_TEM
CALLLEDDAT
MOVFYEAR,0
MOVWFBINTEM
CALLBINTOBCD
MOVFLEH,W
MOVWFLED_TEM
CALLLEDDAT
MOVFLEM,W
MOVWFLED_TEM
CALLLEDDAT
MOVFLEL,0
MOVWFLED_TEM
CALLLEDDAT
MOVLW2FH;/
MOVWFLED_TEM
CALLLEDDAT
MOVFMONTH,0
MOVWFBINTEM
CALLBINTOBCD
MOVFLEM,W
MOVWFLED_TEM
CALLLEDDAT
MOVFLEL,0
MOVWFLED_TEM
CALLLEDDAT
MOVLW2FH;/
MOVWFLED_TEM
CALLLEDDAT
MOVFDAY,0
MOVWFBINTEM
CALLBINTOBCD
MOVFLEM,W
MOVWFLED_TEM
CALLLEDDAT
MOVFLEL,0
MOVWFLED_TEM
CALLLEDDAT
RETURN
DISPLAYSFM;时分秒显示子程序
CALLINTRB
MOVLW90H;DDRAM地址至90H
MOVWFLED_TEM
CALLLEDORD
MOVFHOU,0
SUBLW0BH
BTFSCSTATUS,C
GOTOLESSTHAN12
GOTOMORETHAN12
MORETHAN12
MOVLW50H
MOVWFLED_TEM
CALLLEDDAT
MOVLW4DH
MOVWFLED_TEM
CALLLEDDAT
BTFSSHM,0
GOTOSHUCHU12
GOTOSHUCHU24
SHUCHU12
MOVFHOU,0
MOVWFHOUTEMP
MOVLW0CH
SUBWFHOUTEMP,0
MOVWFBINTEM
GOTOSHUC
SHUCHU24
MOVFHOU,0
MOVWFBINTEM
GOTOSHUC
LESSTHAN12
MOVLW41H
MOVWFLED_TEM
CALLLEDDAT
MOVLW4DH
MOVWFLED_TEM
CALLLEDDAT
MOVFHOU,0
MOVWFBINTEM
GOTOSHUC
SHUC
CALLBINTOBCD
MOVFLEM,W
MOVWFLED_TEM
CALLLEDDAT
MOVFLEL,0
MOVWFLED_TEM
CALLLEDDAT
MOVLW3AH;:
MOVWFLED_TEM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 天津大学 智能 装置 课程设计 电子 时钟
![提示](https://static.bdocx.com/images/bang_tan.gif)