工作总结
职业工作总结 半年工作总结 年终工作总结 学校工作总结 公司工作总结 销售工作总结 医院工作总结 社区工作总结 个人工作总结 安全生产工作总结 工作总结范文 工作总结报告
优秀作文
英文作文 满分作文 小学作文 初中作文 高中作文 300字作文 400字作文 500字作文 600字作文 800字作文 读后感 观后感 日记 书信
合同协议
服务合同 IT行业合同 医疗医药合同 涉外合同 教育合同 婚姻家庭合同 银行信托合同 担保合同 买卖合同 借款合同 租赁合同 承揽合同 运输合同 经营合同 劳动合同 委托合同 房地产商投资合同 招标合同 赠与合同 合同样本 技术合同 保险合同 用工合同 合作协议 租房合同 购销合同 装修合同 销售合同 购房合同 采购合同 供货合同 劳务合同 承包合同 聘用合同 转让合同 代理合同 广告合同 加工合同 集体合同 加盟合同 合同书 知识产权合同 商标专利合同 建筑工程合同 施工合同 其它合同 证券合同
求职文档
个人简历 述职报告 实习报告 辞职报告 工作计划 入职转正 简历模板
党团工作
行政公文范文 机关行政公文 党团工作计划 入团申请书 入党申请书 入党思想汇报 转正申请书 自我鉴定 心得体会
毕业论文
经济论文 管理论文 文学论文 艺术论文 哲学论文 历史论文 法律论文 理工论文 计算机论文 医学论文 教育论文 其他论文
实用范文
演讲稿 礼仪范文 致辞 闭幕词 祝福短信 开幕词 祝酒词 婚礼大全 赠言大全 日常祝福语 问候语 生日祝福 结婚祝福语 其它礼仪 检讨书 心得体会 策划书 主持词 邀请函 口号 诗句大全 成语故事 名人名言 笑话 谚语 其它范文 精品范文 教学资源 企业文化 应用文书 自查报告 整改措施
范文大全
一号文库 二号文库 三号文库 四号文库 五号文库 六号文库 七号文库 八号文库 九号文库 十号文库
文库大全
首页 > 范文大全 > 一号文库

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

最新文章

信息与电气工程学院

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

设计说明书

(2024/2024学年第二学期)

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

专业班级

电子信息工程班

学生学号

学生姓名

指导教师

设计周数

2周设计成绩

2024年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]

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

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

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

项目设计

成绩

指导教师

(签字)

****年**月**日

本类热门