实验六开机次数统计与独立式键盘显示控制设计实验.docx

上传人:b****2 文档编号:998531 上传时间:2022-10-15 格式:DOCX 页数:14 大小:49.08KB
下载 相关 举报
实验六开机次数统计与独立式键盘显示控制设计实验.docx_第1页
第1页 / 共14页
实验六开机次数统计与独立式键盘显示控制设计实验.docx_第2页
第2页 / 共14页
实验六开机次数统计与独立式键盘显示控制设计实验.docx_第3页
第3页 / 共14页
实验六开机次数统计与独立式键盘显示控制设计实验.docx_第4页
第4页 / 共14页
实验六开机次数统计与独立式键盘显示控制设计实验.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验六开机次数统计与独立式键盘显示控制设计实验.docx

《实验六开机次数统计与独立式键盘显示控制设计实验.docx》由会员分享,可在线阅读,更多相关《实验六开机次数统计与独立式键盘显示控制设计实验.docx(14页珍藏版)》请在冰豆网上搜索。

实验六开机次数统计与独立式键盘显示控制设计实验.docx

实验六开机次数统计与独立式键盘显示控制设计实验

实验六5.2开机次数统计与独立式键盘显示控制设计实验

系别专业:

电子系12级电信2班学号:

3121003210

某某:

李书杰指导教师:

X志群教师

5.2.1实验要求

1.复习构建单片机应用系统的方法。

2.注意实验前方案论证和硬软件设计过程,硬件电路要有原理图,软件局部要求画出流程图和编写程序并作适当注释,拟定实验〔调试、测试〕步骤。

5.2.2实验设备

PC机一台,TD-NMC+教学实验系统,万用表一台,AT24C04芯片,假如干电阻和导线

5.2.3实验目的

1.学会单片机应用系统的根本设计方法。

2.掌握单片机人机通道的键盘输入和LED显示技术。

3.掌握键盘工作原理和按键设置、处理方法。

4.学会单片机定时器的应用。

5.掌握带I2C总线接口的E2PROM存储器〔如AT24C04〕的应用。

6.学会面包板在电路设计中的使用。

7.进一步学习单片机I/O口的使用。

8.进一步学习单片机软件编程的方法。

9.掌握单片机应用系统的调试技巧。

5.2.4实验内容

根据TD-NMC+实验平台的单元电路,构建一个硬件系统,设计一个打开实验平台〔开机〕次数统计、显示并能掉电保存、可预置开机次数的控制系统,要求如下:

使用带I2C总线接口的E2PROM存储器保存开机次数,显示由实验平台上的键盘与数码管单元电路模块实现;开机次数可以从默认的0次开始统计,也可以由设计的系统电路中的按键预置,预置值最大只有两位,由2个独立式按键分别控制;允许屡次设置开机次数初值;同时系统中另外设计两个独立式功能按键,一个键用于决定是否预置开机次数初值〔但按了预置功能请用指示灯指示〕,另一个键用于预置后确实认,确认后系统能实现计数器的功能,即从预置初值开始,每隔1s〔要求用单片机的定时器实现〕加1计数,允许的最大计数值为99,计数值能在数码管上显示。

程序如下:

;本程序最大仅能统计255次开机或复位次数

SLAWEQU0A0H;AT24C02寻址字节写的节点地址

SLAREQU0A1H;AT24C02寻址字节读的节点地址

NUMBYTEQU2FH;被传送数据的字节数存放单元

MTDEQU50H;发送数据缓冲区首地址(24C02高8位地址)

MTD1EQU51H;24C02低8位地址

MRDEQU30H;接收字节缓冲区首地址

VSDABITP0.1;虚拟总线的数据线

VSCLBITP0.0;虚拟总线的时钟线

SLAEQU2BH;IIC字节读写的节点地址暂存单元

//按键和LED定义

SW_KBITP1.4;开机次数十位设置按键

GW_KBITP1.5;开机次数个位设置按键

SETUPBITP1.6;设置按键

COUNTBITP1.7;定时计数按键

LEDBITP1.0;设置指示灯

//数码管位定义

LEDSEGEQUP2

SEG1BITP1.2;数码管的十位

SEG2BITP1.3;数码管的个位

SHIEQU60H

GEWEIEQU61H

TIMESEQU62H

ETIMESFBIT00H;确认键按键奇偶标志位

T1SFBIT01H;定时1s标志位

ORG0000H

AJMPMAIN

ORG000BH

AJMPINTT0

ORG0030H

MAIN:

MOVSP,#70H;堆栈地址

ORLP1,#0F0H;设4个按键为输入口

CLRLED

CLRETIMESF;初始默认确认键按下偶数次

CLRT1SF

MOVTMOD,#01H

MOVTIMES,#20

SETBEA

LCALLRDIIC;读出24C02在本次开机前的开机次数

MOVA,MRD

ACALLH_BCD

LOOP:

LCALLDIS;调用显示子程序

SETUP,M1

LCALLSETUPTIMES

;JNBSETUP,$

M1:

COUNT,LOOP

LCALLENTER

AJMPLOOP

//M1:

COUNT,M2

//LCALLENTER

//AJMPLOOP

//M2:

CLRTR0

//CLRET0

//AJMPLOOP

;T0中断服务程序

INTT0:

PUSHACC

MOVTH0,#4CH

MOVTL0,#00H

DJNZTIMES,INTL

MOVTIMES,#20

MOVA,GEWEI

CJNEA,#9,INTL1

MOVGEWEI,#00H

MOVA,SHI

CJNEA,#9,INT2

MOVSHI,#00H

AJMPINT3

INTL1:

INCGEWEI

AJMPINT3

INT2:

INCSHI

INT3:

SETBT1SF

INTL:

POPACC

RETI

;预置开机次数初值子程序

SETUPTIMES:

CLRTR0

CLRET0

SETBLED

SW_K,ST3;十位按键设置

MOVA,SHI

CJNEA,#9,ST1

MOVSHI,#00H

AJMPST2

ST1:

INCSHI

ST2:

JNBSW_K,$;等待按键松开

ST3:

GW_K,ST6;个位按键设置

MOVA,GEWEI

CJNEA,#9,ST4

MOVGEWEI,#00H

AJMPST5

ST4:

INCGEWEI

ST5:

JNBGW_K,$;等待按键松开

ST6:

RET

;确认预置开机次数子程序

ENTER:

CPLETIMESF

;JNBETIMESF,ENT1

CLRLED

MOVA,SHI;保存预置值到EEPROM器件

MOVB,#10

MULAB

ADDA,GEWEI

MOVMRD,A

MOVMTD,#00H;MTD/MTD1:

EEPROM读写的首地址

MOVMTD+1,MRD

MOVSLA,#SLAW

MOVNUMBYT,#2

LCALLWRNBYT

LCALLDEL5MS

ENT1:

MOVTIMES,#20

MOVTH0,#4CH

MOVTL0,#00H

SETBET0

SETBTR0

RET

;显示子程序

DIS:

MOVDPTR,#DSEGS;数码管段表地址

MOVA,SHI

MOVCA,A+DPTR;查表

SETBSEG2

CLRSEG1;选通数码管十位位显示

MOVLEDSEG,A;送段显示

;CLRSEG1;选通数码管十位位显示

;SETBSEG2

ACALLDL1MS

MOVA,GEWEI

MOVCA,A+DPTR;查表

SETBSEG1

CLRSEG2;选通数码管个位位显示

MOVLEDSEG,A;送段显示

;SETBSEG1

;CLRSEG2;选通数码管个位位显示

ACALLDL1MS

RET

;共阴极数码管段显示值

DSEGS:

DB03FH,06H,05BH,04FH,066H,06DH,07DH,07H;0-7

DB07FH,06FH,077H,07CH,039H,05EH,079H,071H,40H;8-F,-

;延时1ms子程序

DL1MS:

MOVR7,#04H

DL0:

MOVR6,#125

DL1:

DJNZR6,DL1

DJNZR7,DL0

RET

;-----------------H_BCD---------------------

;单字节十六进制数转换为2位BCD码子程序

;入口参数:

A

H_BCD:

MOVB,#10;别离出十位和个位

DIVAB

MOVSHI,A

MOVGEWEI,B

RET

;-----------------WRIIC---------------------

;送数到24C04的子程序

WRIIC:

MOVMTD,#00H

MOVMTD+1,MRD

MOVSLA,#SLAW

MOVNUMBYT,#02H;再将它们发送到EEPROM中

LCALLWRNBYT

LCALLDEL5MS;延时等待EEPROM内部数据处理

RET

;-----------------RDIIC---------------------

;读出24C04在本次开机前的开机次数子程序

RDIIC:

MOVMTD,#00H;MTD:

EEPROM读写的首地址

MOVSLA,#SLAW

MOVNUMBYT,#1

LCALLWRNBYT

MOVSLA,#SLAR

MOVNUMBYT,#01H;从EEPROM的指定单元顺序读出1个数据

LCALLRDNBYT;并存放在以MRD(30H)为首地址的单元中

;大于99的判断

MOVA,MRD

CJNEA,#99,RDI1

AJMPRDI2

RDI1:

JCRDI3

RDI2:

MOVMRD,#00H;大于等于99如此清0

AJMPRDIEND

RDI3:

INCMRD;小于99如此开机加1

RDIEND:

MOVMTD,#00H;MTD/MTD1:

EEPROM读写的首地址

MOVMTD+1,MRD

MOVSLA,#SLAW

MOVNUMBYT,#2

LCALLWRNBYT

LCALLDEL5MS

RET

;-----------------WRNBYT---------------------

;*调用向被控器件发送N个字节数据WRNBYT子程序*;

WRNBYT:

MOVR3,NUMBYT

LCALLSTA;启动I2C总线

MOVA,SLA;发送SLAW字节

LCALLWRBYT

LCALLCACK;检查应答位

F0,WRNBYT;非应答位如此重发

MOVR1,#MTD

WRDA:

MOVA,R1

LCALLWRBYT

LCALLCACK

F0,WRNBYT

INCR1

DJNZR3,WRDA

LCALLSTOP

RET

;-----------------RDNBYT--------------------

;*调用通用N字节接收子程序RDNBYT*;

RDNBYT:

MOVR3,NUMBYT

LCALLSTA;发送启动位

MOVA,SLA;发送寻址字节〔读〕

LCALLWRBYT

LCALLCACK;检查应答位

F0,RDNBYT;非正常应答时重新开始

RDN:

MOVR1,#MRD;接收数据缓冲区首址MDR入R1

RDN1:

LCALLRDBYT;读入一个字节到接收数据缓冲中

MOVR1,A

DJNZR3,ACK;N节读完否?

未完转ACK

LCALLMNACK;N个字节读完发送非应答位

LCALLSTOP;发送停止信号

RET;子程序完毕

ACK:

LCALLMACK;发送应答位

INCR1;指向下一个接收数据缓冲单元

SJMPRDN1;转读入下一个字节数据

;-----------------STA-----------------------

;*I2C总线典型信号的模拟子程序*;

;启动STA子程序

STA:

SETBVSDA

SETBVSCL

NOP

NOP

CLRVSDA

NOP

NOP

CL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1