• 934.00 KB
  • 2022-04-22 11:35:18 发布

单片机开机次数记忆器结构设计

  • 16页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'单片机开机次数记忆器结构设计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所示:15 图1逻辑实现流程图2.1.2主要元器件(1)处理器AT89C52,引脚图如图2所示:图2AT89C52单片机引脚图15 AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。(1)外部存储器24C02串行E2PROM是基于I2C-BUS的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。具有以下几大特点:1.宽范围的工作电压1.8v~5.5v2.低电压技术:1mA典型工作电流1uA典型待机电流3.储存器组织结构4.2线串行接口,完全兼容I2C总线5.施密特触发输入噪声抑制6.硬件数据写保护7.内部与周期(最大5ms)8.自动递增地址9.可按照字节写10.esd保护大于2.5kV11.高可靠性:擦写寿命:100万次数据保持时间:100年12.无铅工艺,符合RoHS标准2.2单元电路设计2.2.1处理器AT89C52引脚的选择本次项目设计选择的引脚分别为P0口、P2口、RES端口。15 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单片机的引脚连接图15 2.2.2RC复位电路复位电路图如图4所示:图4复位电路图系统复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着VCC对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。在图4的复位电路中,当VCC掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“1”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,CPU可能会从一个未被定义的位置开始执行程序。2.2.3LCD1602显示屏的连接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所示:15 图5LCD1602显示屏的连接2.2.424C02的连接C52单片机的P2.0口和P2.1口分别控制24C02的数据线SDA和时钟信号线SCK来完成数据的读写功能,具体电路图如图6所示:图624C02的连接2.2.5整体电路系统整体仿真电路和实物操作电路如图7和图8所示:15 图7整体仿真电路图图8仿真实物图15 2.3系统实现程序#include#includesbitSDA=P2^0;//AT24C01串行数据5脚sbitSCL=P2^1;//AT24C01串行时钟6脚inttime=0;inttime2=0;typedefunsignedcharuint8;/*definedforunsigned8-bitsintegervariable无符号8位整型变量*/typedefsignedcharint8;/*definedforsigned8-bitsintegervariable有符号8位整型变量*/typedefunsignedcharBYTE;typedefunsignedintWORD;typedefbitBOOL;sbitrs=P2^6;sbitrw=P2^5;sbitep=P2^7;BYTEcodedis1[]={"TIME"};BYTEdis2[10]={"0123456789"};BYTEdis3[10]={"0123456789"};delay(BYTEms){//延时子程序BYTEi;while(ms--){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}BOOLlcd_bz(){//测试LCD忙碌状态BOOLresult;rs=0;15 rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(BOOL)(P0&0x80);ep=0;returnresult;}lcd_wcmd(BYTEcmd){//写入指令数据到LCDwhile(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(BYTEpos){//设定显示位置lcd_wcmd(pos|0x80);}lcd_wdat(BYTEdat){//写入字符显示数据到LCDwhile(lcd_bz());rs=1;rw=0;ep=0;P0=dat;15 _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程序2voidAT2401_Delay(){;;}voidbusy(){BYTEtemp;temp=0x00;rs=0;rw=1;ep=1;while((temp&0x80)==0x80){ep=0;_nop_();ep=1;_nop_();}}15 voidAT2401_Start()//启动信号{SDA=1;AT2401_Delay();SCL=1;AT2401_Delay();SDA=0;AT2401_Delay();}voidAT2401_Stop()//停止信号{SDA=0;AT2401_Delay();SCL=1;AT2401_Delay();SDA=1;AT2401_Delay();}voidAT2401_Respons()//响应{uint8i;SCL=1;AT2401_Delay();while((SDA==1)&&(i<250))i++;SCL=0;AT2401_Delay();}voidAT2401_Init()//初始化函数{SDA=1;AT2401_Delay();SCL=1;AT2401_Delay();}voidAT2401_WByte(uint8date)//写一个字节{uint8i,temp;temp=date;15 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();}uint8AT2401_RByte()//读一个字节{uint8i,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();}returnk;}voidAT2401_WAddr(uint8address,uint8date)//指定地址写一个数据{AT2401_Start();AT2401_WByte(0xa0);AT2401_Respons();AT2401_WByte(address);AT2401_Respons();AT2401_WByte(date);AT2401_Respons();AT2401_Stop();15 }uint8AT2401_RAddr(uint8address)//指定地址读取一个字节{uint8date;AT2401_Start();AT2401_WByte(0xa0);AT2401_Respons();AT2401_WByte(address);AT2401_Respons();AT2401_Start();AT2401_WByte(0xa1);AT2401_Respons();date=AT2401_RByte();AT2401_Stop();returndate;}voidwr_com(BYTEcom){ep=0;rs=0;rw=0;P0=com;_nop_();ep=1;_nop_();ep=0;}voidwr_data(BYTEdate){busy();ep=0;rs=1;rw=0;P0=date;_nop_();ep=1;_nop_();ep=0;}//////////////////////////////////////////////////////////////////////////////main()15 {BYTEi;lcd_init();//初始化LCDAT2401_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]!=""){//显示字符"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]);//显示字符15 while(1);}3、项目设计总结通过此次课程设计,使我更加扎实的掌握了有关单片机应用系统设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了AT89C52、24C02和LCD1602的基本知识和连接测试,也通过查资料熟悉了外部存储24C02的工作原理。了解了C语言程序在单片机系统设计中的应用,掌握了系统电路的调试方法。在此次的课程设计过程中,也对团队精神的进行了考察,我们小组三个人分工合作,查资料、电路设计、程序设计、硬件实物仿真都做得有条不紊,我们配合越来越默契,有问题一起解决,在成功后一起体会喜悦。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。我认为,此次课设不仅培养了我们独立思考、团队协作、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多自主学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。4、参考文献[1]张毅刚,彭喜元,董继成.单片机原理及应用.北京:高等教育出版社,2003.[2]史良.LCD12864显示模块与微处理器的接口设计[J].矿业安全与环保,1999.15 项目设计评语项目设计成绩指导教师(签字)年月日15'