ImageVerifierCode 换一换
格式:DOCX , 页数:44 ,大小:1.04MB ,
资源ID:7816767      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7816767.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51的电子闹钟设计报告附原理图PCB图程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51的电子闹钟设计报告附原理图PCB图程序.docx

1、基于51的电子闹钟设计报告附原理图PCB图程序成都信息工程学院第五届嵌入式创新技术大赛基于MCS51的智能电子闹钟设计报告姓名学院班级 实物图1.电子时钟的设计原理和方法1.1设计原理1.2硬件电路的设计1.2.1 STC89C51RC简介STC89C51RC是一种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory)的低电压、高性能CMOS8位微型处理器,即单片机芯片。单片机的可擦除只读存储器可以反复擦除1000次,内部FLASH擦写次数为100000次以上。该芯片使用高密度非易失存储制造技术,与工业标准的MCS

2、-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器集成在单个芯片中,使得STC89C51RC成为了一种性价比极高的微型处理器芯片,在许多电路设计中都得到了应用。STC89C51RC单片机特点:工作电压:5.5V-3.4V工作频率:0-40MHz用户应用程序空间:8K片上集成128*8RAMISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器可通过串口(P3.0/P3.1)直接下载用户程序EEPROM功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使用外部中断4路通用异步串行口(UART),还可用定时器软件实现多个UART工作温度范围:0-75引

3、脚说明:VCC:供电电压GND:接地P0:P0是一个8位漏级开路双向I/O口,低8位地址复用总线端口。P1:P1是一个内部提供上拉电阻的8位双向I/O口,静态通用端口。P2:P2是一个内部提供上拉电阻的8位双向I/O口,高8位地址总线动态端口。P3:P3是一个内部提供上拉电阻的8位双向I/O口,双功能静态端口。P3口也可作为一些特殊功能口。P3.0RXD(串行输入口)P3.1TXD(串行输出口)。RST:复位自输入。XTAL1/XTAL2:反向振荡器的输入与输出。 1.2.2 键盘电路的设计键盘采用四个个独立按键配以实现对时钟和闹钟的设定及修改。按键未按下时,IO口为高电平,按键按下后IO口被

4、拉低。1.2.3蜂鸣器驱动电路发音部分是通过三极管放大驱动蜂鸣器工作,当IO口输出低电平时,三极管导通,蜂鸣器响。1.2.4 数码管驱动电路由于点亮数码管所需电流较大,对单片机IO口连接上拉电阻,提高IO口的电流输出能力。1.2.5 电源电路由于系统需要在712V的供电下正常工作,故采用了78M05三段稳压芯片。78M05能将735V的直流电源转换成5V直流电压。1.3软件部分的设计1.3.1主程序部分的设计程序部分主要采用了程序结构的模块化设计,避免了一些函数的不必要的重复书写,使程序变得单间易懂。程序在执行时,主程序要须通过调用子函数就可完成相应的功能 。1.3.2中断计时器及时间进位数字

5、电子钟设计中主要使用定时器T0中断ET0,利用ET0中断进行计时时间的自增,从而实现计时功能。STC89C51RC有两个通用定时/计数器。两者均可配置为定时器或事件计数器。另外增加了定时器T0/T1,溢出时T0/T1脚自动翻转的功能选项。 用作“定时器”功能时,每经过一个机器周期,寄存器值加1。 用作“计数器”功能时,寄存器在对应的外部输入管脚T0/T1上每发生一次1到0的跳变时加1。使用该功能时,外部输入每个机器周期被采样一次。设计中采用了中断方式1作为定时中断,其定时计数初值的设置可由以下公式计算得到。1.3.3 闹钟子函数闹钟时间的判别主要是通过设定时间与实时时间对逐位对比确定是否进行闹

6、铃。1.3.4 按键扫描这些函数主要是判断是否有按键按下,并根据相应按键按下的情况调用相关函数执行。1.3.5 时钟闹钟设置此部分主要是通过判断flag_sw、flag_set在不同值时通过调用加1、减1子函数对时间和闹钟进行设置。1.3.6 显示数字函数函数通过判断需要显示的数字及显示的位置进行相应显示。1.3.7 显示界面函数函数通过判断标志位flag_sw判断需要显示的界面。1.3.8 闹钟记录及读取STC89C51RC单片机内部集成了的EEPROM是与程序空间是分开的,利用ISP/IAP技术可将内部Data Flash当EEPROM,擦写次数在10万次以上。EEPROM可分为若干个扇区

7、,每个扇区包含512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。EEPROM可用于保存一些需要在应用过程中修改并且掉电不丢失的参数数据。在用户程序中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。IAP及EEPROM新增特殊功能寄存器介绍符号描述地址位地址及符号MSB LSB复位值ISP_DATAISP/IAP Flash Data RegisterE2H11111111BISP_ADDRHISP/IAP Flash Address HighE3H0000 0000BISP_ADDRLISP/I

8、AP Flash Address LowE4H0000 0000BISP_CMDISP/IAP Flash Command RegisterE5H- - - - - - MS1MS0xxxx xx00BISP_TRIGISP/IAP Flash Command TriggerE6Hxxxx xxxxBISP_CONTRISP/IAP Control RegisterE7HISPEN SWBS SWRST - - WT2 WT1WT0000x x000B1. ISP/IAP数据寄存器ISP_DATA ISP_DATA : ISP/IAP操作时的数据寄存器。ISP/IAP 从Flash读出的数据放

9、在此处,向Flash写的数据也需放在此处2. ISP/IAP地址寄存器ISP_ADDRH和ISP_ADDRL ISP_ADDRH : ISP/IAP 操作时的地址寄存器高八位。该寄存器地址为E3H,复位后值为00H. ISP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。该寄存器地址为E4H,复位后值为00H. 3. ISP/IAP命令寄存器ISP_CMD ISP/IAP命令寄存器IAP_CMD格式如下: SFR nameAddressbitB7B6B5B4B3B2B1B0ISP_CMDE5Hname-MS1MS0MS2MS1MS0命令 / 操作 模式选择000Standby 待机

10、模式,无ISP操作001从用户的应用程序区对Data Flash/EEPROM区进行字节读010从用户的应用程序区对Data Flash/EEPROM区进行字节编程011从用户的应用程序区对Data Flash/EEPROM区进行扇区擦除程序在系统ISP程序区时可以对用户应用程序区/数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除;程序在用户应用程序区时,仅可以对数据Flash 区(EEPROM)进行字节读/字节编程/扇区擦除。已经固化有ISP引导码,并设置为上电复位进入ISP 4. ISP/IA命令触发寄存器ISP_TRIG ISP_TRIG: ISP/IAP 操作时的命令触发

11、寄存器。在ISPEN(ISP_CONTR.7) = 1时,对ISP_TRIG先写入46h,再写入B9h,ISP/IAP 命令才会生效。ISP/IAP操作完成后,ISP地址高八位寄存器ISP_ADDRH、ISP地址低八位寄存器ISP_ADDRL 和ISP命令寄存器ISP_CMD的内容不变。如果接下来要对下一个地址的数据进行ISP/IAP操作, 需手动将该地址的高8位和低8位分别写入ISP_ADDRH和ISP_ADDRL寄存器。每次ISP操作时,都要对ISP_TRIG先写入46H,再写入B9H,ISP/IAP命令才会生效。5. ISP/IAP命令寄存器ISP_CONTR ISP/IAP控制寄存器I

12、AP_CONTR格式如下: SFR name Address bit B7 B6 B5 B4 B3 B2 B1B0 IAP_CONTR E7H name ISPEN SWBS SWRST - - WT2 WT2 WT0 ISPEN: ISP/IAP功能允许位。0:禁止IAP/ISP读/写/擦除Data Flash/EEPROM 1: 允许IAP/ISP读/写/擦除Data Flash/EEPROM SWBS: 软件选择从用户应用程序区启动(送0),还是从系统ISP监控程序区启动(送1)。要与SWRST直接配合才可以实现SWRST: 0: 不操作; 1: 产生软件系统复位,硬件自动复位。设置等待

13、时间 CPU等待时间(机器周期),(1个机器周期=12个CPU工作时钟 ) WT2 WT1 WT0 Read/读Program/编程(=72uS) Sector Erase 扇区擦除(=13.1304ms) Recommended System Clock 跟等待参数对应的推荐系统时钟 0 1 1 6个机器周期30个机器周期5471个机器周期 5MHz 0 1 0 11个机器周期60个机器周期10942个机器周期10MHz 0 0 1 22个机器周期120个机器周期21885个机器周期20MHz 0 0 0 43个机器周期240个机器周期43769个机器周期40MHz STC89C51RC/R

14、D+系列单片机EEPROM空间大小及地址STC89C51RC/RD+系列单片机内部可用EEPROM的地址与程序空间是分开的:程序在用户应用程序区时,可以对EEPROM 行IAP/ISP操作。具体某个型号单片机内部EEPROM大小及详细地址请参阅: 1. STC89C51RC/RD+系列单片机内部EEPROM详细地址表2. STC89C51RC/RD+系列单片机内部EEPROM空间大小选型一览表STC89C51RC系列单片机内部EEPROM详细地址表具体某型号有多少扇区的EEPROM,参照前面的EEPROM空间大小选型一览表, 每个扇区0.5 K字节第一扇区第二扇区第三扇区第四扇区起始地址结束地

15、址起始地址结束地址起始地址结束地址起始地址结束地址2000h21FFh2200h23FFh2400h25FFh2600h27FFh第五扇区第六扇区第七扇区第八扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2800h29FFh2A00h2BFFh2C00h2DFFh2E00h2FFFh每个扇区512字节,建议同一次修改的数据放在同一扇区, 不是同一次修改的数据放在不同的扇区,不必用满, 当然可全用。2.硬件调试PCB制作完成后,为检测其能否正常工作,我编写了将数码管全部点亮,蜂鸣器控制口置低电平的程序。发现如下问题:1.某一数码管右侧的所有数码管的相同段不亮;2.数码管的小

16、数点全部不亮;3.蜂鸣器负极直接单片机IO口,蜂鸣器声音微小。经检查后发现原因如下:1.数码管板底层走线较细,钻孔时被打断,由于两块PCB已焊接到一起,拆解修补困难,故在数码管板顶层直接飞线;2.PCB布局失误,使得固定螺丝与排孔引脚接错,而螺丝接地,使得该线路与GND短路;3.单片机灌电流过小,使得电流无法驱动蜂鸣器,再加上三极管扩流后,问题得到了解决。附录A:电路原理图附录B:电路PCB图附录C:源程序#include#include#define dp 10char sec, min, h, date = 1, mon = 1, year = 12;char h_ala = 0, min

17、_ala = 1, sw_ala=1;char flag_set, flag_sw;char count;sbit num1 = P00;sbit num2 = P04;sbit num3 = P27;sbit num4 = P23;sbit num5 = P20;sbit num6 = P21;sbit bell = P22;sbit key_set = P30;sbit key_sw = P31;sbit key_l = P32;sbit key_down = P33;sbit key_ok = P34;sbit key_up = P35;sbit key_r = P36;void Del

18、ay(unsigned int z); void display_num(char num, char po);void display_sec(void);void display_min(void);void display_h(void);void display_year(void);void display_mon(void);void display_date(void);void display_time(void);void display_dates(void);void display_h_ala(void);void display_min_ala(void);void

19、display_sw_ala(void);void display_alarm(void);void display(void);void carry(void);void key_swscan(void);void key_setscan(void);void set(void);void alarm(void);void InitTimer0(void);#define RdCommand 0x01 /定义ISP的操作命令#define PrgCommand 0x02#define EraseCommand 0x03#define Error 1#define Ok 0#define Wa

20、itTime 0x01 /定义CPU等待时间sfr ISP_DATA = 0xe2;sfr ISP_ADDRH = 0xe3;sfr ISP_ADDRL = 0xe4;sfr ISP_CMD = 0xe5;sfr ISP_TRIG = 0xe6;sfr ISP_CONTR = 0xe7;void ISP_IAP_enable(void);void ISP_IAP_disable(void);void ISPgoon(void);unsigned char byte_read(unsigned int byte_addr);void SectorErase(unsigned int sector

21、_addr);void byte_write(unsigned int byte_addr, unsigned char original_data);void read_ala(void);void record_ala(void);void main(void) read_ala(); / 读取闹铃 InitTimer0(); / 定时器0初始化 while(1) carry(); / 进位 display(); / 显示 alarm(); / 闹钟 key_swscan(); / 切换界面按键扫描 key_setscan(); / 设置按键(改变设置标志位)扫描 if (flag_set

22、 != 0) / 设置标志位不为0,开始设置 set(); /= 延时函数 =void Delay(unsigned int z) unsigned int x, y; for(x=z; x0 ;x-) for(y=120; y0; y-);/= 显示数字 =void display_num(char num, char po) unsigned char code Tab = 0x77,0x14,0xB3,0xB6,0xD4,0xE6,0xE7,0x34,0xF7,0xF6,0x08; if (!(num = 0 & (po = 1 | po = 3 | po = 5) | (flag_sw

23、 = 1 & po = 1) switch (po) case 1: P1 = Tabnum; num1 = 0; Delay(1); num1 = 1; break; case 2: P1 = Tabnum; num2 = 0; Delay(1); num2 = 1; break; case 3: P1 = Tabnum; num3 = 0; Delay(1); num3 = 1; break; case 4: P1 = Tabnum; num4 = 0; Delay(1); num4 = 1; break; case 5: P1 = Tabnum; num5 = 0; Delay(1);

24、num5 = 1; break; default: P1 = Tabnum; num6 = 0; Delay(1); num6 = 1; /= 显示秒 =void display_sec(void) if (flag_set = 3 & count 10 | flag_set != 3) display_num(sec / 10, 5); display_num(sec % 10, 6); /= 显示分 =void display_min(void) if (flag_set = 2 & count 10 | flag_set != 2) display_num(min / 10, 3); d

25、isplay_num(min % 10, 4); display_num(dp, 4);/= 显示时 =void display_h(void) if (flag_set = 1 & count 10 | flag_set != 1) display_num(h / 10, 1); display_num(h % 10, 2); display_num(dp, 2);/= 显示日 =void display_date(void) if (flag_set = 3 & count 10 | flag_set != 3) display_num(date / 10, 5); display_num

26、(date % 10, 6); /= 显示月 =void display_mon(void) if (flag_set = 2 & count 10 | flag_set != 2) display_num(mon / 10, 3); display_num(mon % 10, 4); display_num(dp, 4);/= 显示年 =void display_year(void) if (flag_set = 1 & count 10 | flag_set != 1) display_num(year / 10, 1); display_num(year % 10, 2); displa

27、y_num(dp, 2);/= 显示时间 =void display_time(void) display_sec(); display_min(); display_h();/= 显示日期 =void display_dates(void) display_date(); display_mon(); display_year();/= 显示闹钟时 =void display_h_ala(void) if (flag_set = 1 & count 10 | flag_set != 1) display_num(h_ala / 10, 1); display_num(h_ala % 10, 2); displ

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

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