单片机开机次数记忆器的设计及实现

2020-12-23 06:20:02下载本文作者:会员上传
简介:写写帮文库小编为你整理了这篇《单片机开机次数记忆器的设计及实现》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《单片机开机次数记忆器的设计及实现》。

信息与电气工程学院

单片机应用系统(三级项目)

设计说明书

(2014/2015学年第二学期)

开机次数记忆器设计及实现

专业班级

电子信息工程班

学生学号

学生姓名

指导教师

设计周数

2周设计成绩

2015年X月X日

1、项目设计

1.1

设计要求

(1)以单片机AT89C52为核心,使用24C02串行EEPROM进行存储开机次数;

(2)用LCD1602显示存储的开机次数;

(3)单片机复位一次,从24C02中读取数据,然后加1;

(4)在此基础上可以拓展对一组密码数据存储对比后,才能进入正常界面。

1.2

设计目的(1)培养学生正确的设计思想,理论联系实际的工作作风,严肃认真、实事求是的科学态度和勇于探索的创新精神。

(2)锻炼学生自学软件的能力及分析问题、解决问题的能力。

(3)通过课程设计,使学生在理论计算、结构设计、工程绘图、查阅设计资料、标准与规范的运用和计算机应用方面的能力得到训练和提高。

(4)巩固、深化和扩展学生的单片机理论知识。

(5)培养学生的团队合作能力。

2、项目设计正文

2.1方案设计

2.1.1设计思路

此次项目设计的目的是实现单片机开机次数的记忆及显示功能,即其复位断电关机都能准确的将开机次数显示在LCD1602显示屏上。根据对项目设计要求和实际应用的分析,选用以单片机AT89C52为核心,使用24C02串行EEPROM进行存储开机次数的方法,使C52单片机的P2.0口和P2.1口分别控制24C02的数据线SDA和时钟信号线SCK来完成数据的读写功能,然后用LCD1602显示屏将24C02中存储的数据显示出来。

具体设计实现的逻辑流程图如图1所示:

图1

逻辑实现流程图

2.1.2主要元器件

(1)

处理器AT89C52,引脚图如图2所示:

图2

AT89C52单片机引脚图

AT89C52是一个低电压,高性能CMOS

8位单片机,片内含8k

bytes的可反复擦写的Flash只读程序存储器和256

bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2

个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

(2)

外部存储器24C02

串行E2PROM是基于I2C-BUS的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。具有以下几大特点:

1.宽范围的工作电压1.8v~5.5v

2.低电压技术:

1mA典型工作电流

1uA典型待机电流

3.储存器组织结构

4.2线串行接口,完全兼容I2C总线

5.施密特触发输入噪声抑制

6.硬件数据写保护

7.内部与周期(最大5ms)

8.自动递增地址

9.可按照字节写

10.esd保护大于2.5kV

11.高可靠性:擦写寿命:100万次

数据保持时间:100年

12.无铅工艺,符合RoHS标准

2.2单元电路设计

2.2.1处理器AT89C52引脚的选择

本次项目设计选择的引脚分别为P0口、P2口、RES端口。

P0

口是一组8

位漏极开路型双向I/O

口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8

个TTL逻辑门电路,对端口P0

写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8

位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0

口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P2口

是一个带有内部上拉电阻的8

位双向I/O

口,P2的输出缓冲级可驱动(吸收或输出电流)4

个TTL

逻辑门电路。对端口P2

写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。访问外部程序存储器或16

位地数据存储器(例如执行MOVX

@DPTR

指令)时,P2

口送出高8

位地址数据。在访问8

位地址的外部数据存储器(如执行MOVX@RI

指令)时,P2

口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。P2.0口和P2.1口分别控制24C02的数据线SDA和时钟信号线SCK来完成数据的读写功能。

RST为复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

单片机引脚图连接选择如图3所示:

图3

单片机的引脚连接图

2.2.2

RC复位电路

复位电路图如图4所示:

图4

复位电路图

系统复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着VCC对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。在图4的复位电路中,当VCC掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“1”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,CPU可能会从一个未被定义的位置开始执行程序。

2.2.3

LCD1602显示屏的连接

LCD1602各引脚的功能如下:

第1脚:VSS为电源地

第2脚:VDD接5V电源正极

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

第6脚:E(或EN)端为使能(enable)端。

第7~14脚:D0~D7为8位双向数据端。

单片机的P2.5,P2.6,P2.7分别接LCD1602的RS、RW、E端口,如图5所示:

图5

LCD1602显示屏的连接

2.2.4

24C02的连接

C52单片机的P2.0口和P2.1口分别控制24C02的数据线SDA和时钟信号线SCK来完成数据的读写功能,具体电路图如图6所示:

图6

24C02的连接

2.2.5

整体电路

系统整体仿真电路和实物操作电路如图7和图8所示:

图7

整体仿真电路图

图8

仿真实物图

2.3系统实现程序

#include

#include

sbit

SDA

=

P2^0;

//AT24C01串行数据

5脚

sbit

SCL

=

P2^1;

//AT24C01串行时钟

6脚

int

time=0;

int

time2=0;

typedef

unsigned

char

uint8;

/*

defined

for

unsigned

8-bits

integer

variable

无符号8位整型变量

*/

typedef

signed

char

int8;

/*

defined

for

signed

8-bits

integer

variable

有符号8位整型变量

*/

typedef

unsigned

char

BYTE;

typedef

unsigned

int

WORD;

typedef

bit

BOOL

;

sbit

rs

=

P2^6;

sbit

rw

=

P2^5;

sbit

ep

=

P2^7;

BYTE

code

dis1[]

=

{“TIME“};

BYTE

dis2[10]={“0123456789“};

BYTE

dis3[10]={“0123456789“};

delay(BYTE

ms)

{

//

延时子程序

BYTE

i;

while(ms--)

{

for(i

=

0;

i<

250;

i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

BOOL

lcd_bz()

{

//

测试LCD忙碌状态

BOOL

result;

rs

=

0;

rw

=

1;

ep

=

1;

_nop_();

_nop_();

_nop_();

_nop_();

result

=

(BOOL)(P0

&

0x80);

ep

=

0;

return

result;

}

lcd_wcmd(BYTE

cmd)

{

//

写入指令数据到LCD

while(lcd_bz());

rs

=

0;

rw

=

0;

ep

=

0;

_nop_();

_nop_();

P0

=

cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep

=

1;

_nop_();

_nop_();

_nop_();

_nop_();

ep

=

0;

}

lcd_pos(BYTE

pos)

{

//设定显示位置

lcd_wcmd(pos

|

0x80);

}

lcd_wdat(BYTE

dat)

{

//写入字符显示数据到LCD

while(lcd_bz());

rs

=

1;

rw

=

0;

ep

=

0;

P0

=

dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep

=

1;

_nop_();

_nop_();

_nop_();

_nop_();

ep

=

0;

}

lcd_init()

{

//LCD初始化设定

lcd_wcmd(0x38);

delay(1);

lcd_wcmd(0x0c);

delay(1);

lcd_wcmd(0x06);

delay(1);

lcd_wcmd(0x01);

//清除LCD的显示内容

delay(1);

}

////2402程序2

void

AT2401_Delay()

{;;}

void

busy()

{

BYTE

temp;

temp=0x00;

rs=0;

rw=1;

ep=1;

while((temp&0x80)==0x80)

{

ep=0;

_nop_();

ep=1;

_nop_();

}

}

void

AT2401_Start()//启动信号

{

SDA=1;

AT2401_Delay();

SCL=1;

AT2401_Delay();

SDA=0;

AT2401_Delay();

}

void

AT2401_Stop()//停止信号

{

SDA=0;

AT2401_Delay();

SCL=1;

AT2401_Delay();

SDA=1;

AT2401_Delay();

}

void

AT2401_Respons()//响应

{

uint8

i;

SCL=1;

AT2401_Delay();

while((SDA==1)&&(i<250))

i++;

SCL=0;

AT2401_Delay();

}

void

AT2401_Init()//初始化函数

{

SDA=1;

AT2401_Delay();

SCL=1;

AT2401_Delay();

}

void

AT2401_WByte(uint8

date)//写一个字节

{

uint8

i,temp;

temp=date;

for(i=0;i<8;i++)

{

temp=temp<<1;

SCL=0;

AT2401_Delay();

SDA=CY;

AT2401_Delay();

SCL=1;

AT2401_Delay();

}

SCL=0;

AT2401_Delay();

SDA=1;

AT2401_Delay();

}

uint8

AT2401_RByte()//读一个字节

{

uint8

i,k;

SCL=0;

AT2401_Delay();

SDA=1;

AT2401_Delay();

for(i=0;i<8;i++)

{

SCL=1;

AT2401_Delay();

k=(k<<1)|SDA;

SCL=0;

AT2401_Delay();

}

return

k;

}

void

AT2401_WAddr(uint8

address,uint8

date)//指定地址写一个数据

{

AT2401_Start();

AT2401_WByte(0xa0);

AT2401_Respons();

AT2401_WByte(address);

AT2401_Respons();

AT2401_WByte(date);

AT2401_Respons();

AT2401_Stop();

}

uint8

AT2401_RAddr(uint8

address)//指定地址读取一个字节

{

uint8

date;

AT2401_Start();

AT2401_WByte(0xa0);

AT2401_Respons();

AT2401_WByte(address);

AT2401_Respons();

AT2401_Start();

AT2401_WByte(0xa1);

AT2401_Respons();

date=AT2401_RByte();

AT2401_Stop();

return

date;

}

void

wr_com(BYTE

com)

{

ep=0;

rs=0;

rw=0;

P0=com;

_nop_();

ep=1;

_nop_();

ep=0;

}

void

wr_data(BYTE

date)

{

busy();

ep=0;

rs=1;

rw=0;

P0=date;

_nop_();

ep=1;

_nop_();

ep=0;

}

///////////////////////////////////////

///////////////////////////////////////

main()

{

BYTE

i;

lcd_init();

//

初始化LCD

AT2401_Init();

time

=

AT2401_RAddr(0x01);

time2

=

AT2401_RAddr(0x02);

if(time>=9)

{

AT2401_WAddr(0x01,0);

time2+=1;

}

time+=1;

if(time2>9&&time>=9)

{

time=0;

time2=0

;

}

AT2401_WAddr(0x01,time);

AT2401_WAddr(0x02,time2);

lcd_pos(4);

//

设置显示位置为第一行的第5个字符

i

=

0;

while(dis1[i]

!=

'\0')

{

//

显示字符“TIME“

lcd_wdat(dis1[i]);

i++;

}

lcd_pos(0x49);

//

设置显示位置为第二行第一位字符

dis2[time];

lcd_wdat(dis2[time]);

//

显示字符

delay(1);

lcd_pos(0x48);

//

设置显示位置为第二行第二位字符

dis2[time2];

lcd_wdat(dis3[time2]);

//

显示字符

while(1);

}

3、项目设计总结

通过此次课程设计,使我更加扎实的掌握了有关单片机应用系统设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了AT89C52、24C02和LCD1602的基本知识和连接测试,也通过查资料熟悉了外部存储24C02的工作原理。了解了C语言程序在单片机系统设计中的应用,掌握了系统电路的调试方法。

在此次的课程设计过程中,也对团队精神的进行了考察,我们小组三个人分工合作,查资料、电路设计、程序设计、硬件实物仿真都做得有条不紊,我们配合越来越默契,有问题一起解决,在成功后一起体会喜悦。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。我认为,此次课设不仅培养了我们独立思考、团队协作、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多自主学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。

4、参考文献

[1]

张毅刚,彭喜元,董继成.单片机原理及应用.北京:高等教育出版社,2003.[2]

史良.LCD12864显示模块与微处理器的接口设计

[J].矿业安全与环保,1999.项目设计

项目设计

成绩

指导教师

(签字)

****年**月**日

下载单片机开机次数记忆器的设计及实现word格式文档
下载单片机开机次数记忆器的设计及实现.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    基于单片机实现的调光控制器设计”的心得体会

    “基于单片机实现的调光控制器设计”的心得体会 经过这次单片机实验我感觉自己学到了很多东西。回想一下整个的单片机实验的过程,感觉那些经历还还历历在目。 从刚开始鲁老师......

    基于单片机的交通灯控制系统设计与实现

    基于单片机的交通灯控制系统设计与实现 目的:本文以AT89S51 单片机为核心器件,设计了多功能交通灯控制系统。 软件仿真和硬件实现的结果表明该系统具有红绿灯显示功能、时间......

    基于单片机的恒压供水系统的设计与实现

    湖南科技大学毕业设计(论文) 题目 作者 学院 专业 学号 指导教师 二〇一一年四月八日 单片机构成的恒压供水控制系统设计 李铁雄 信息与电气工程 自动化 0704020117 沈宏远老......

    交通灯单片机实现实习报告

    单 片 机 课 程 设 计学院: 专业: 班级: 小组成员:交通灯单片机课程设计 SECOND1 EQU 30H ;东西路口计时寄存器 LED_G1 BIT P1.0 ;东西路口绿灯 LED_Y1 BIT P1.1 ;东西路......

    右脑记忆和右脑记忆器的关系

    右脑记忆和右脑记忆器的关系 我们人类80%到90%的人,一般都是所谓的左脑思维模式的人,而这种左脑型记忆必须花费大量的时间对所记忆内容进行理解,常常看到一种情形,背了之后会忘,......

    基于SPCE061A单片机的教学楼用打铃器

    基于SPCE061A单片机的教学楼用打铃器 作 者:贾金贞 摘要:本文是做一个SPCE061A单片机的教学楼用打铃器,可以实时显示当前时间。硬件电路由键盘、声音输出模块、指示灯、LED数......

    基于单片机的智能跟随小车的设计与实现

    基于单片机的智能跟随小车的设计与实现 【摘要】本文设计了一种能够通过传感器实时采集信号、智能分析周围环境以及路径信息、自动控制方向等功能的智能小车。小车以STC89c5......

    基于单片机体温检测仪系统的设计与实现

    In this paper, a temperature detection system based on a single-chip microcomputer is designed to detect human body temperature, display it in digital form, and......