实验六开机次数统计与独立式键盘显示控制设计实验_第1页
实验六开机次数统计与独立式键盘显示控制设计实验_第2页
实验六开机次数统计与独立式键盘显示控制设计实验_第3页
实验六开机次数统计与独立式键盘显示控制设计实验_第4页
实验六开机次数统计与独立式键盘显示控制设计实验_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、实验六 5.2 开机次数统计与独立式键盘显示控制设计实验系别专业:电子系12级电信2班 学号:3121003210姓名:李书杰 指导老师:刘志群老师5.2.1 实验要求1. 复习构建单片机应用系统的方法。 2. 注意实验前方案论证和硬软件设计过程,硬件电路要有原理图,软件部分要求画出流程图和编写程序并作适当注释,拟定实验(调试、测试)步骤。 5.2.2 实验设备PC 机一台,TD-NMC+教学实验系统,万用表一台,AT24C04芯片,若干电阻和导线 5.2.3 实验目的1. 学会单片机应用系统的基本设计方法。 2. 掌握单片机人机通道的键盘输入和 LED显示技术。 3. 掌握键盘工作原理和按键

2、设置、处理方法。 4. 学会单片机定时器的应用。 5. 掌握带I 2C总线接口的 E 2PROM存储器(如AT24C04)的应用。 6. 学会面包板在电路设计中的使用。 7. 进一步学习单片机 I/O口的使用。8. 进一步学习单片机软件编程的方法。 9. 掌握单片机应用系统的调试技巧。 5.2.4 实验内容根据TD-NMC+实验平台的单元电路,构建一个硬件系统,设计一个打开实验平台(开机)次数统计、显示并能掉电保存、可预置开机次数的控制系统,要求如下:使用带 I 2C总线接口的 E 2PROM存储器保存开机次数,显示由实验平台上的键盘及数码管单元电路模块实现;开机次数可以从默认的 0次开始统计

3、,也可以由设计的系统电路中的按键预置,预置值最大只有两位,由 2个独立式按键分别控制;允许多次设置开机次数初值;同时系统中另外设计两个独立式功能按键,一个键用于决定是否预置开机次数初值(但按了预置功能请用指示灯指示),另一个键用于预置后的确认,确认后系统能实现计数器的功能,即从预置初值开始,每隔 1s(要求用单片机的定时器实现)加 1计数,允许的最大计数值为99,计数值能在数码管上显示。程序如下: ;本程序最大仅能统计255次开机或复位次数SLAW EQU 0A0H ;AT24C02寻址字节写的节点地址SLAR EQU 0A1H ;AT24C02寻址字节读的节点地址NUMBYT EQU 2FH

4、 ;被传送数据的字节数存放单元MTD EQU 50H ;发送数据缓冲区首地址(24C02高8位地址)MTD1 EQU 51H ;24C02低8位地址MRD EQU 30H ;接收字节缓冲区首地址VSDA BIT P0.1 ;虚拟总线的数据线VSCL BIT P0.0 ;虚拟总线的时钟线SLA EQU 2BH ;IIC字节读写的节点地址暂存单元/ 按键和LED定义SW_KBITP1.4; 开机次数十位设置按键GW_KBITP1.5; 开机次数个位设置按键SETUPBITP1.6; 设置按键COUNTBITP1.7; 定时计数按键LEDBITP1.0; 设置指示灯/ 数码管位定义LEDSEGEQU

5、P2SEG1BITP1.2; 数码管的十位SEG2BITP1.3; 数码管的个位SHIEQU60HGEWEIEQU61HTIMESEQU62HETIMESFBIT00H; 确认键按键奇偶标志位T1SFBIT01H; 定时1s标志位ORG0000HAJMPMAINORG000BHAJMPINTT0ORG0030HMAIN:MOVSP,#70H; 堆栈地址ORLP1, #0F0H; 设4个按键为输入口CLRLEDCLRETIMESF; 初始默认确认键按下偶数次CLRT1SFMOV TMOD,#01HMOVTIMES, #20 SETB EA LCALL RDIIC ; 读出24C02在本次开机前的

6、开机次数MOVA, MRDACALLH_BCDLOOP:LCALL DIS; 调用显示子程序JBSETUP, M1LCALLSETUPTIMES;JNBSETUP, $M1:JBCOUNT, LOOPLCALLENTER AJMPLOOP/M1:JBCOUNT, M2/LCALLENTER/ AJMPLOOP/M2:CLRTR0/CLRET0/AJMPLOOP; T0中断服务程序INTT0:PUSHACCMOV TH0,#4CH MOV TL0,#00HDJNZTIMES, INTLMOVTIMES, #20MOVA, GEWEICJNEA, #9, INTL1MOVGEWEI, #00HMO

7、VA, SHICJNEA, #9, INT2MOVSHI, #00HAJMPINT3INTL1:INCGEWEIAJMPINT3INT2:INCSHIINT3:SETBT1SFINTL:POPACCRETI; 预置开机次数初值子程序SETUPTIMES:CLRTR0CLRET0SETBLEDJBSW_K, ST3 ; 十位按键设置MOVA, SHICJNEA, #9, ST1MOVSHI, #00HAJMPST2ST1:INCSHIST2:JNBSW_K, $; 等待按键松开ST3:JBGW_K, ST6 ; 个位按键设置MOVA, GEWEICJNEA, #9, ST4MOVGEWEI, #

8、00HAJMPST5ST4:INCGEWEIST5:JNBGW_K, $; 等待按键松开ST6:RET; 确认预置开机次数子程序ENTER:CPLETIMESF;JNBETIMESF, ENT1CLRLEDMOVA, SHI; 保存预置值到EEPROM器件MOVB, #10MULABADDA, GEWEIMOVMRD, AMOV MTD, #00H ;MTD/MTD1:EEPROM读写的首地址MOV MTD+1, MRDMOV SLA,#SLAWMOV NUMBYT,#2LCALL WRNBYTLCALL DEL5MSENT1:MOVTIMES, #20MOV TH0,#4CH MOV TL0

9、,#00HSETB ET0 SETB TR0RET;显示子程序DIS:MOV DPTR, #DSEGS; 数码管段表地址MOVA, SHIMOVC A, A+DPTR; 查表SETBSEG2CLRSEG1; 选通数码管十位位显示MOV LEDSEG, A; 送段显示;CLRSEG1; 选通数码管十位位显示;SETBSEG2ACALL DL1MSMOVA, GEWEIMOVC A, A+DPTR; 查表SETBSEG1CLRSEG2; 选通数码管个位位显示MOV LEDSEG, A; 送段显示;SETBSEG1;CLRSEG2; 选通数码管个位位显示ACALL DL1MSRET; 共阴极数码管段

10、显示值DSEGS:DB 03FH, 06H,05BH,04FH,066H,06DH,07DH, 07H; 0-7DB 07FH,06FH,077H,07CH,039H,05EH,079H,071H,40H; 8-F,-; 延时1ms子程序DL1MS:MOV R7,#04HDL0:MOV R6,#125DL1:DJNZ R6,DL1DJNZ R7,DL0RET;-H_BCD-;单字节十六进制数转换为2位BCD码子程序;入口参数:AH_BCD: MOV B,#10 ;分离出十位和个位 DIV AB MOV SHI,A MOV GEWEI,B RET;-WRIIC-;送数到24C04的子程序WRII

11、C: MOV MTD,#00H MOV MTD+1,MRD MOV SLA,#SLAW MOV NUMBYT,#02H ;再将它们发送到EEPROM中 LCALL WRNBYT LCALL DEL5MS ;延时等待EEPROM内部数据处理 RET;-RDIIC-;读出24C04在本次开机前的开机次数子程序RDIIC: MOV MTD,#00H ;MTD:EEPROM读写的首地址 MOV SLA,#SLAW MOV NUMBYT,#1 LCALL WRNBYT MOV SLA,#SLAR MOV NUMBYT,#01H ;从EEPROM的指定单元顺序读出1个数据 LCALL RDNBYT ;并存

12、放在以MRD(30H)为首地址的单元中 ; 大于99的判断 MOV A, MRD CJNE A, #99, RDI1 AJMP RDI2RDI1: JC RDI3RDI2: MOV MRD, #00H; 大于等于99则清0 AJMP RDIENDRDI3: INC MRD; 小于99则开机加1RDIEND: MOV MTD, #00H ;MTD/MTD1:EEPROM读写的首地址 MOV MTD+1, MRD MOV SLA,#SLAW MOV NUMBYT,#2 LCALL WRNBYT LCALL DEL5MS RET;-WRNBYT-;*调用向被控器件发送N个字节数据WRNBYT子程序*

13、;WRNBYT: MOV R3,NUMBYT LCALL STA ;启动I2C总线 MOV A,SLA ;发送SLAW字节 LCALL WRBYT LCALL CACK ;检查应答位 JB F0,WRNBYT ;非应答位则重发 MOV R1,#MTDWRDA: MOV A,R1 LCALL WRBYT LCALL CACK JB F0,WRNBYT INC R1 DJNZ R3,WRDA LCALL STOP RET;-RDNBYT-;*调用通用N字节接收子程序RDNBYT *;RDNBYT: MOV R3,NUMBYT LCALL STA ;发送启动位 MOV A,SLA ;发送寻址字节(读

14、) LCALL WRBYT LCALL CACK ;检查应答位 JB F0,RDNBYT ;非正常应答时重新开始RDN: MOV R1,#MRD ;接收数据缓冲区首址MDR入R1RDN1: LCALL RDBYT ;读入一个字节到接收数据缓冲中 MOV R1,A DJNZ R3,ACK ;N节读完否?未完转ACK LCALL MNACK ;N个字节读完发送非应答位 LCALL STOP ;发送停止信号 RET ;子程序结束ACK: LCALL MACK ;发送应答位 INC R1 ;指向下一个接收数据缓冲单元 SJMP RDN1 ;转读入下一个字节数据;-STA-;*I2C总线典型信号的模拟子

15、程序 *;启动STA子程序STA: SETB VSDA SETB VSCL NOP NOP CLR VSDA NOP NOP CLR VSCL RET;-STOP-;*I2C总线典型信号的模拟子程序;停止(STOP)子程序STOP: CLR VSDA SETB VSCL NOP NOP SETB VSDA NOP NOP CLR VSDA CLR VSCL RET;-MACK-;*I2C总线典型信号的模拟子程序 *;发送应答位MACK子程序MACK: CLR VSDA SETB VSCL NOP NOP CLR VSCL SETB VSDA RET;-MNACK-;发送非应答位 MNACK子程

16、序 *;MNACK: SETB VSDA SETB VSCL NOP NOP CLR VSCL CLR VSDA RET;-CACK-;I2C总线模拟的通用子程序 *;CACK: SETB VSDA ;置VSDA为输入方式 SETB VSCL ;使VSDA上数据有效 CLR F0 ;预设F0=0 MOV C,VSDA ;输入VSDA引脚状态 JNC CEND ;检查VSDA状态,正常应答转CEND,且F0=0 SETB F0 ;无正常应答,F0=1CEND: CLR VSCL RET;-WRBYT-;I2C总线模拟的通用子程序;发送一个字节数据(WRBYT)子程序;该子程序是向虚拟I2C总线的

17、数据线VSDA上发送一个字节数据的操作。调用本子程序前将要发送的数据送入A中。占用资源:R0,C。WRBYT: MOV R0,#08H ;8为数据长度送R0中WLP: RLC A ;发送数据左移,使发送位入C JC WR1 ;判断发送"1"还是"0",发送"1"转WR1 AJMP WR00 ;发送"0"转WR0WLP1: DJNZ R0,WLP ;8位是否发送完,未完转WLP RET ;8位发送完结束WR1: SETB VSDA ;发送"1"程序段 SETB VSCL NOP NOP CLR V

18、SCL CLR VSDA AJMP WLP1WR00: CLR VSDA ;发送"0"程序段 SETB VSCL NOP NOP CLR VSCL AJMP WLP1;-RDBYT-;*I2C总线模拟的通用子程序;从VSDA上接收一个字节数据(RDBYT)子程序,该子程序用来从VSDA上读取一个字节数据,执行本程序后,从VSDA上读取的一个字节存放在R2或A中。资源占用:R0,R2,C。RDBYT: MOV R0,#08H ;8位数据长度如R0RLP: SETB VSDA ;置VSDA为输入方式 SETB VSCL ;使VSDA上数据有效 MOV C,VSDA ;读入VSD

19、A引脚状态 MOV A,R2 ;读入"0"程序段,由C拼装入R2中 RLC A MOV R2,A CLR VSCL ;使VSCL=0可继续接收数据位 DJNZ R0,RLP ;8位读完否?未读完转RLP RET; 延时5ms子程序DEL5MS:MOV R7,#20DL10:MOV R6,#125DL11:DJNZ R6,DL11DJNZ R7,DL10RETEND5.2.5 方案提示系统框图如图 5.2.1所示。 软件编程的难点是 I 2C总线通用软件包的灵活应用;数字键和功能键的切换;功能键的编程;开机次数统计、保存、显示和预置的关系和实现过程。 5.2.6 思考题1.

20、谈谈硬件电路设计与调试、软件编程与调试的体会。 答:首先是焊接的顺序问题。焊接的顺序很重要,应该是应该按功能划分的器件进行焊接,顺序是功能部件的焊接-调试(OK)-另一功能部件的焊接,这样容易找到问题的所在。多观察,多思考。如我前些日子在调试320×240点阵LCD的时候,发现怎么也不能出现图像,后来在偶然的机会下,发现LCD在MPU的CS2口线下,出现闪动的情况,猜测这时候有数据写入到LCD中,仔细研究才发现,MPU的DATA0-7线与74LVC245的A0-7连接在一起,MPU的通过一个GAL16V8或是与非门等芯片进行逻辑组合后与74LVC245的OE引脚相连,这样MPU只有在某一地址范围内才可以进行数据读写操作。所以在调试过程中,对于出现的任何现象都不要放过,问题的解决就是从一些小的现象入手的。有可能的情况下,最好焊两块板子以上,这样才好有个比较,硬件上很小的问题有很多时候是很难发现的。 软件的调试要和硬件配合进行,往往问题可能不是硬件上的。2. 简述独立式键盘和行列式键盘的区别。 答:独立按键:一个按键占用单独的一个I/O口;矩阵键盘:为了节省I/O口,通常将按键排列成矩阵形式,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。3. 简述

温馨提示

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

评论

0/150

提交评论