单片机开机次数记忆器结构设计
毕业设计(论文)-基于51单片机控制的电子密码锁设计

基于51单片机控制的电子密码锁设计摘要:本设计以单片机以AT89C51作为密码锁监控装置的检测和控制核心,分为主机控制和从机执行机构,实现要是信息在主机的初步认证注册、密码信息的加密、钥匙丢失报废等功能。
根据51单片机之间的串行通信原理,这便对于密码信息的随机加密和保护。
而且采用键盘输入的电子密码锁具有较高的优势。
采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。
软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统可扩展性和运行的稳定性。
测试结果表明,本系统各功能已达到本设计的所有要求。
关键词:AT89C51;密码锁;单片机设计;电子锁目录摘要 (1)关键词 (1)第一章密码锁的简介及现况 (1)1.1引言 (1)1.2电子密码锁的简介 (1)1.3电子密码锁发展趋势 (2)1.4本设计所要实现的目标 (2)1.5设计的密码锁的功能 (2)第二章设计方案的选择 (3)2.1方案的论证与比较 (3)第三章单片机的组成 (4)3.1AT89C51单片机的简介 (4)3.2电路图的绘制 (7)第四章单片机硬件资源 (7)4.1开锁机构 (7)4.2按键电路设计 (8)4.3显示电路设计 (10)4.4AT89C51单片机复位方式 (11)4.5密码锁的电源电路设计 (12)第五章程序调试 (13)5.1程序调试用到的软件及工具 (13)5.2KEIL C51简介 (14)5.3调试过程 (14)5.4调试、仿真与实现 (15)第六章软件设计 (16)6.1系统软件设计的总统思想 (16)6.2各子程序设计 (17)1 键盘扫描子程序 (17)2 LED显示子程序 (18)3 密码比较和报警程序 (19)设计总结与展望 (21)致谢 (22)附录:总原理图 (22)参考文献 (24)第一章密码锁的简介及现况1.1引言在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
单片机记录开机次数课设报告

单片机记录开机次数课设报告1.引言1.1 概述概述在现代科技快速发展的背景下,单片机作为一种常见的嵌入式系统,在各个领域都有着广泛的应用。
而本篇课设报告则着重探讨了如何利用单片机记录开机次数的方法与实现。
开机次数是单片机应用中一个重要的指标,它能够记录设备的使用情况,为后续的数据分析和性能优化提供参考依据。
本篇报告将首先介绍单片机的基本原理,包括其工作原理和结构组成,以便读者更好地理解后续的开机次数记录方法。
接着,将进行对记录开机次数的需求分析,从实际应用的角度出发,针对不同场景下的需求特点进行分析和总结。
在需求分析的基础上,本篇报告将提供一种实现记录开机次数的方法,详细介绍其原理和操作步骤,并给出实验结果与相应的讨论。
本篇报告旨在通过深入研究和实践,为读者提供一种简单而有效的记录开机次数的方法,并探讨其在实际应用中的适用性和优劣势。
通过本篇报告的学习,读者将能够更好地理解单片机的工作原理和应用场景,培养自己解决问题和创新思维的能力。
同时,本篇报告也可作为相关课程的辅助教材,供同学们参考和学习。
在未来的研究和实践中,希望通过更好地利用单片机的功能,实现更多的应用创新和技术突破。
1.2文章结构1.2 文章结构本篇报告主要包括以下几个部分:第一部分为引言,主要从概述、文章结构和目的三个方面介绍本课设报告的背景和目标。
第二部分为正文,主要分为两个小节。
首先,介绍单片机的基本原理,包括什么是单片机以及其工作原理和构成要素等。
接下来,进行记录开机次数的需求分析,探讨为什么需要记录开机次数、记录开机次数的应用场景及其功能要求等。
第三部分为结论,主要包括两个小节。
首先,提出实现记录开机次数的方法,介绍具体的设计方案和实施步骤。
接着,对实验结果进行分析和讨论,评估所设计的方法的可行性和效果,并探讨可能存在的问题和改进方向。
通过以上结构,本报告将全面而系统地介绍单片机记录开机次数的课设内容,使读者能够清晰地了解单片机的基本原理和记录开机次数的需求分析,同时具备实现该功能的方法和工具。
最好的24C02储存开机次数实验读写程序

24C02储存开机次数实验24C02是2K字节的串行EEPROM, 内部含有256个8位字节,该器件通过总线操作,并有专门的写保护功能。
串行EEPROM简称I2C总线式串行器件。
串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时具有工作电源宽、抗干扰能力强、功耗低、数据不易丢失和支持在线编程等特点。
I2C总线是一种用于IC器件之间连接的二线制总线。
它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。
我们通过一个实验来了解24C02的读写操作过程:该实验功能是单片机复位一次,自动从24C02中读取数据,然后加1,最终数码管中的数据就是开机的次数,具有一定的实用意义。
相关原理:程序运行的照片:接线方法:1、接8位数码管的数据线。
将数码管部份的数据口 JP5接到CPU部份的P0口JP51.2、接8位数码管的显示位线。
将数码管部份的显示位口 JP8接到CPU部份的P2口JP52.3、用一根2PIN数据线一端插入CPU部份JP53(P3口)的P3.6,P3.7另外一端插入24C02部份的控制端JP38。
烧写后用手按复位键可以看到数码管每按一下加一。
程序流程图:汇编语言参考程序: SDA24 EQU P3.7 SCLK24 EQU P3.6 ORG 0000HAJMP MAINORG 0080HMAIN:CLR P3.7 ;打开写保护MOV DPTR,#TABMOV A,#00H ;读地址LCALL RD24CJNE A,#10,TTTT: JNC TT1AJMP TT2TT1: MOV A,#00TT2: MOV 30H,AMOVC A,@A+DPTRCLR P2.6 ;开数码管MOV P0,A ;送显示MOV A,30HINC AMOV B,AMOV A,#00HLCALL WT24AJMP $TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60HRD24: PUSH ACC ;读24C02子程序。
单片机数码管记忆系统实验报告

单⽚机数码管记忆系统实验报告电⼦信息⼯程专业单⽚机原理及应⽤课程设计班级电⼦信息⼯程学号0000000000姓名xxxxx指导教师xxxxxxxx⽇期00000000⼀、题⽬基于AT24C02的数码管显⽰记忆系统⼆、设计内容1、内容设计⼀个基于A T24C02芯⽚的单⽚机数码管显⽰记忆系统。
数码管和两个74HC573芯⽚进⾏连接,P2.6和P2.7管脚分别控制这两个573芯⽚;P2.0和P2.1管脚连接AT24C02芯⽚的SCL和SDA管脚,使⽤C51语⾔设计程序,当系统上电后,数码管从000~255每隔1s⼀次显⽰计数,当计数到255后,则从000重新显⽰计数,并且在系统断电后再次上电时,数码管依旧按断电前的数字继续进⾏计数,不会丢失数据,数字显⽰在X6~X8数码管上。
2、元件清单列表序号标号器件名称型号数量1 R1 电阻10K 112 C1.C2. 电容1nf 23 C3 电解电容1nf 14 XTAL 晶振12MHz 15 Switch 开关 26 U4 单⽚机89c52 17 U8、U12 芯⽚74HC573 28 U7 芯⽚A T24C02 19 LED 数码管4393H 2三、软件设计1、流程图否是是是否开始系统初始化按键是否按下按下按键计数器依次加⼀是否关闭电源记忆当前的数据值计数器继续依次加⼀判断计数器的值是否达到255计数器清零2、代码#include //包含头⽂件#define unint unsigned int //定义数据类型#define uchar unsigned charsbit SDA=P2^0; //定义SDAsbit SCL=P2^1; //定义SCLsbit WEI=P2^7; // 定义数码管的位选端sbit DUAN=P2^6; //定义数码管的段选端unint dat2; //定义全局变量,显⽰记录信息uchar Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极字段显⽰码void delay(){;;} //短延时声明void init() //初始化24C02{SDA=1;SCL=1;delay();}void start() //开始信号{SDA=1;delay();SCL=1;delay();SDA=0;delay();}void stop() //停⽌信号{SDA=0;delay();SCL=1;delay();SDA=1;delay();}void ack() //应答信号{uchar i;SCL=1;delay();while((SDA==1)&&(i<255))i++;SCL=0;delay();}void write_byte(uchar dat) //写⼀个字节{uchar i,temp;temp=dat;for(i=0;i<8;i++){SCL=0;delay();temp<<=1;SDA=CY;delay();SCL=1;delay();}SCL=0;delay();SDA=1;delay();}uchar read_byte() //读⼀个字节{unint i,j;SCL=0;delay();SDA=1;delay();for(i=0;i<8;i++) //循环8次读出⼀个字节数据{SCL=1;delay();j=(j<<1)|SDA;SCL=0;delay();}return j;}void write_addr(uchar address,uchar dat1){ //往指定地址写数据start(); //初始信号write_byte(0xa0); //写⼊芯⽚地址0XA0ack(); //应答信号write_byte(address); //写⼊芯⽚内部寄存器地址ADDRESS ack(); //应答信号write_byte(dat1); //写⼊数据ack(); //应答信号stop(); //停⽌信号}uchar read_addr(uchar address){ //从指定地址读数据uchar dat3;start(); //初始信号write_byte(0xa0); //写⼊芯⽚地址0XA0ack(); //应答信号write_byte(address); //写⼊芯⽚内部寄存器地址ack(); //应答信号start(); //初始信号write_byte(0xa1); //写⼊芯⽚地址0XA1ack(); //初始信号dat3=read_byte(); //读出数据stop(); //停⽌信号return dat3; //返回读出值}void init_T0() //初始设置定时器T0{TMOD=0x01; //定时器T0⼯作在⽅式1TCON=0x10; //启动T0TH0=(65536-461)/256; //FEH,11.059 2MHz,0.5ms TL0=(65536-461)%256; //33H,IE=0x82; //T0的中断允许}void wei_lock(uchar wei) //数码管位控制{WEI=1;P0=wei;WEI=0;}void duan_lock(uchar duan) //数码管段控制{DUAN=1;P0=Temp[duan];DUAN=0;}void display(uchar date) //数码管显⽰{unint i;uchar ge,shi,bai;ge=date%100%10;shi=date%100/10;bai=date/100;duan_lock(ge);wei_lock(0x7f);for(i=0;i<300;i++);duan_lock(shi);wei_lock(0xbf);for(i=0;i<300;i++);duan_lock(bai);wei_lock(0xdf);for(i=0;i<300;i++);wei_lock(0xff);}void timer0() interrupt 1 //T0的中断服务函数{unint i;if(i++>=2000) //1s时间到{i=0;if(dat2++>=255)dat2=0; //调整显⽰数字}TH0=(65536-461)/256; //重新给T0赋初值TL0=(65536-461)%256; }void main(){init_T0(); //T0初始化dat2=read_addr(0); //读24C02存储器数据while(1){init(); //存储器初始化write_addr(0,dat2); //指定地址写数据display(dat2); //读出数据并显⽰}}四、仿真分析1、原理图2、仿真结果图3、结果分析通过控制AT24C02芯⽚向指定的地址进⾏数据的读写操作,利⽤其记忆功能达到实验⽬的。
51单片机课程设计——单词记忆器的设计实现

字符的显示:用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示 屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1” 的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符 就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示 RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
三、系统程序流程图
CHAPTER
02
硬件电路设计
一、总电路系统
二、时钟脉冲和单片机复位模块
晶振是晶体振荡器的简称 在电气上它可以等效成一 个电容和一个电阻并联再串联一个电容的二端网络 电工学上这个网络有两个谐振点 以频率的高低分其 中较低的频率是串联谐振 较高的频率是并联谐振 由 于晶体自身的特性致使这两个频率的距离相当的接近 在这个极窄的频率范围内 晶振等效为一个电感 所以 只要晶振的两端并联上合适的电容它就会组成并联谐 振电路 这个并联谐振电路加到一个负反馈电路中就 可以构成正弦波振荡电路 由于晶振等效为电感的频 率范围很窄 所以即使其他元件的参数变化很大 这个 振荡器的频率也不会有很大的变化。
g
k
o
s
w
0111 d
h
l
p
t
x
CHAPTER
04
课设实现
模拟仿真软件测试
基于单片机的单词记忆测试器毕业设计1 精品

基于单片机的单词记忆测试器目录第一章单词记忆测试器的设计 (2)1.1 硬件模块设计 (2)1.1.1中央处理模块 (2)1.1.2 显示模块的硬件部分介绍 (3)1.1.3 矩阵键盘 (6)1.2 电路原理图设计 (6)1.3 软件程序设计 (8)1.3.1 程序设计思路 (8)1.3.2矩阵键盘的程序设计 (8)1.3.3 LCD12864显示模块的驱动程序 (9)1.3.4 显示字模码的提取 (11)1.3 系统软件主程序结构及其函数 (12)1.4 软件的仿真 (17)第二章结语 (19)附录单片机单词记忆测试器C程序源代码基于单片机的单词记忆测试器摘要本论文的研究对象是基于单片机的单词记忆测试器的设计,此单词记忆测试器可以实现单词的输入并判断输入的单词是否正确,单词背完后给出正确率。
该单片机单词记忆测试器为在现实生活中有着广泛的应用,特别是对学习英语方面有很大的作用。
本设计以STC89C52单片机为处理器,以12854点阵液晶屏为显示器件,并使用5×6距阵键盘为输入设备,实现了功能全面的人机界面和高速的数据处理功能,利用单片机片上FLASH ROM,可储存10-20个英文单词和汉字,作为记忆测试用。
关键词:单片机单词记忆测试器 AT89C52 12864液晶屏第一章 单词记忆测试器的设计1.1 硬件模块设计本单词记忆测试器系统硬件部分分为三个模块:中央处理模块、显示模块、键盘输入模块。
系统模型图如下:图4 系统硬件模块图1.1.1中央处理模块中央处理模块选用STC89C52单片机系统组成,电路包括:STC89C52单片机、复位电路、时钟振荡电路。
STC89C52单片机需在复位电路和时钟振荡电路组成的最小系统下工作,单片机引脚图如图5,外围电路如图6和图7所示,时钟电路采用频率采用为12MHZ 的晶振,C1、C2与晶振构成了外部振荡电路。
复位电路采用电解电容与电阻串联,当系统上电时,由于电容充电,在RST 端会产生一个高电平,高电平持续的时间由电容和电阻的值决定,当RESET 信号为低电平时,系统为工作状态。
单片机课程设计word

单片机课程设计word一、课程目标知识目标:1. 让学生掌握单片机的基本原理和结构,理解其工作流程和编程方法。
2. 使学生了解单片机在现实生活中的应用,如智能家居、自动化控制等领域。
3. 帮助学生掌握与单片机相关的电子元器件的原理和使用方法。
技能目标:1. 培养学生运用C语言进行单片机编程的能力,能够独立完成简单的程序设计。
2. 提高学生动手实践能力,学会使用面包板、编程器等工具进行单片机系统的搭建和调试。
3. 培养学生团队协作和问题解决能力,能够共同完成具有一定难度的单片机项目。
情感态度价值观目标:1. 激发学生对单片机及电子技术的兴趣,培养其主动探索、勤于思考的学习习惯。
2. 培养学生的创新意识,鼓励他们勇于尝试,将所学知识应用于实际项目中。
3. 引导学生认识到单片机技术在我国科技发展中的重要性,增强国家认同感和自豪感。
课程性质:本课程为实践性较强的学科,注重理论联系实际,强调动手能力和创新能力的培养。
学生特点:学生具备一定的电子基础和编程能力,对单片机有一定了解,但实践经验和系统设计能力不足。
教学要求:结合学生特点和课程性质,采用案例教学、任务驱动、小组合作等方法,注重理论与实践相结合,提高学生的综合运用能力。
通过本课程的学习,使学生能够达到上述课程目标,为后续相关课程和未来职业发展打下坚实基础。
二、教学内容本课程教学内容主要包括以下几部分:1. 单片机基础知识:介绍单片机的原理、结构和功能,使学生了解单片机的基本概念,对应教材第一章。
- 单片机的组成与工作原理- 单片机的性能指标和分类2. 单片机编程语言:学习C语言编程,掌握单片机程序设计方法,对应教材第二章。
- C语言基础知识- 单片机编程语法和技巧3. 单片机I/O接口技术:学习并实践单片机与外部设备的通信和控制,对应教材第三章。
- I/O接口的工作原理- 常用I/O接口编程及应用4. 单片机中断与定时器:介绍中断系统、定时器的工作原理和应用,对应教材第四章。
单片机课程设计题目大全

3. 电路设计(Proteus软件仿真通过)
7
4. Proteus仿真 打开元器件单片机属性窗口,在“Program File”栏中添加上
面编译好的目标代码文件“keil-1.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 仿真如下页图所示,其中,浮动窗口中显示的为DS1302当前 时钟状态:
21
程序执行后工作指示灯LED闪动,表示程序开始执行, LCD显示“00:00”,按下操作键K1~K4动作如下:
(1) K1—设置现在的时间。 (2) K2—显示闹钟设置的时间。 (3) K3—设置闹铃的时间。 (4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发
出“哗”的一声,设置为OFF发出“哗”的一声。 设置当前时间或闹铃时间如下。
37
3.电路设计(Proteus仿真通过) 本项目制作的数字温度计电路原理图,如下所示:
38
4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件 “keil-6.hex”;在“Clock Frequency”栏中输入晶振频率 为11.0592MHz。
课程设计题目
1
目录----课程设计题目
题目1 智能电子钟(LCD显示) 题目2 电子时钟(LCD显示) 题目3 秒表 题目4 定时闹钟 题目5 音乐倒数计数器 题目6 基于数字温度传感器的数字温度计 题目7 基于热敏电阻的数字温度计 题目8 十字路口交通灯控制 题目9 波形发生器设计 题目10 电容、电阻参数单片机测试系统的设计
34
题目6 基于数字温度传感器的数字温度计 1. 设计要求 利用数字温度传感器DS18B20与单片机结合来测量温度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机开机次数记忆器结构设计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.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端口。
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 位地址的外部数据存储器(如执行MOVXRI 指令)时,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 <reg51.h>#include <intrins.h>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程序2void 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_(BYTE ){ep=0;rs=0;rw=0;P0=;_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(); // 初始化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] != '\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、项目设计总结通过此次课程设计,使我更加扎实的掌握了有关单片机应用系统设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。