版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机系统设计(课程设计)实 验 报 告题 目: 实时时钟 组 号: 任课教师: 组 长: 成 员: 联系方式: 年 月 日 目 录一、实施方案 11.1设计要求 11.2实现功能 11.3设计方案 1二、 原理简述 22.1主控模块 2 2.2时钟电路 3 2.3显示电路 5 2.4键盘输入电路 7 2.5蜂鸣器电路 8三、 调试过程 93.1硬件调试 93.2软件调试 9四、 主要程序 10五、 心得体会 12 一、 实施方案1.设计要求通过对DS1302编程,实现实时时钟功能,用数码管显示时、分,用小数点作秒闪。可用键盘设置时间。2.实现功能本组的课程设计成果最终将实现如下功能:(1)实
2、现实时时钟功能,四位数码管前两位显示时、后两位显示分,小数点作秒闪;(2)按下S8键,可实现对小时的加1设置;(3)按下S7键,可实现对分钟的加1设置;(4)按下S1键,可实现小时的单独显示;(5)实现整点蜂鸣器报时功能。3.设计方案根据系统设计的功能的要求,初步确定设计系统由主控模块、时钟电路、显示电路、键盘输入电路及蜂鸣器电路组成。电路系统框图如图1所示。时 钟 电 路主 控 模 块键盘输入电路显 示 电 路蜂 鸣 器 电 路图1 系统设计框图其中,主控芯片使用51系列AT89C52单片机,时钟芯片使用DS1302,晶振为11.0592MHz,显示电路由四位共阳LED数码管完成,键盘采用线
3、性连接,使用查询法实现调整功能,蜂鸣器电路由有源蜂鸣器完成。二、 原理简述1. 主控模块 图2 AT89C52 管脚图AT89C52是低功耗、高性能的CMOS8位单片机。片内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。另外,AT89C52的指令系统和引脚与80C52完全兼容。管脚功能如下:VCC:供电电压;GND:接地;P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。;P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流;P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电
4、流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流;P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入;P3口管脚功能: P3.0是RXD(串行输入口);P3.1是TXD(串行输出口);P3.2是/INT0(外部中断0);P3.3是/INT1(外部中断1);P3.4是T0(记时器0外部输入);P3.5是T1(记时器1外部输入);P3.6是/WR(外部数据存储器写选通);P3.7是/RD(外部数据存储器读选通);P3口同时为闪烁编程和编程校验接
5、收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许输出电平用于锁存地址的地位字节。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2. 时钟电路图3 硬件时钟DS1302电路DS1302
6、 时钟芯片包括实时时钟/日历和 31 字节的静态 RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于 31 天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用 24h 或带 AM(上午)/PM(下午)的 12h 格式。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM 数据。 DS1302 在任何数据传送时必须先初始化,把 RST 脚置为高电平,然后把 8位地址和命令字装入移位寄存器,数据在 SCLK 的上升沿被输入。无论是读周期还是写周期,开始 8 位指定 40 个寄存器中哪个
7、被访问到。在开始 8 个时钟周期,把命令装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲在单字节方式下为 8 加 8,在多字节方式下为 8加字节数,最大可达 248 个字节数。如果在传送过程中置 RST 脚为低电平,则会中止本次数据传送,并且 I/O引脚变为高阻态。相关代码如下:/*ds1302与at89s52引脚连接*/sbit T_RST=P36; /RST脚接P36sbit T_CLK=P34; /CLK脚接P34sbit T_IO=P35; /IO脚接P35sbit ACC0=ACC0;/定义标志位sbit ACC7=ACC7;/*DS1302:写入操
8、作(上升沿)* / void write_byte(unsigned char da) unsigned char i; ACC=da; for(i=8;i0;i-) T_IO=ACC0;T_CLK=0;T_CLK=1;ACC=ACC1; /*DS1302:读取操作(下降沿)*/unsigned char read_byte(void) unsigned char i; for(i=0;i1; T_CLK = 1; T_CLK = 0; ACC7 = T_IO; return(ACC);/*DS1302:写入数据(先送地址,再写数据)*/ void write_1302(unsigned ch
9、ar addr,unsigned char da) T_RST=0; /停止工作 T_CLK=0; T_RST=1; /重新工作 write_byte(addr); /写入地址 write_byte(da); T_RST=0; T_CLK=1;/*DS1302:读取数据(先送地址,再读数据)*/unsigned char read_1302(unsigned char addr) unsigned char temp; T_RST=0; /停止工作 T_CLK=0; T_RST=1; /重新工作 write_byte(addr); /写入地址 temp=read_byte(); T_RST=0
10、; T_CLK=1; /停止工作 return(temp);3. 显示电路图4 四位共阳数码管电路显示部分采用普通的共阳数码管显示,使用动态扫描,以便减少硬件电路。LED数码管里面有8只发光二极管,与实验板P0端口所接的二极管是相同的。分别记作abcdefgdp,其中dp为小数点,每一只发光二极管都有一根电极引到外部引脚上,而另外一只引脚就连接在一起同样也引到外部引脚上。该数码管为共阳极,且通过P0=P2直接把按键状态给到LED上,并没有中间变量,通过按键控制数码管的各管脚的高低电平接入情况。当数码管里面的发光二极管的阳极接在一起作为公共引脚,在正常使用时此引脚接电源正极。发光二极管的阴极接低
11、电平时,发光二极管被点亮,从而相应的数码段显示数字。LED接到单片机的P0口,若为低电平,可使LED亮起。发光二极管的亮、灭由内部程序控制,因为流水灯与数码管同时接在P0端口,所以流水灯的8个LED发光二极管与LED数码管亮暗相同。相关程序如下:/*定义数码管显示引脚*/ sbit LED_0=P14;/数码管8个控制引脚定义sbit LED_1=P15;sbit LED_2=P10;sbit LED_3=P11;sbit LED_4=P12;sbit LED_5=P13;sbit LED_6=P16;sbit LED_7=P17;unsigned char seg=0xc0,0xf9,0xa
12、4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09段码/*显示程序*/* 动态扫描条件(单个LED在1秒内): count =50次 /点亮次数 */* time =2ms /持续时间 */* DS1302秒,分,时寄存器是BCD码形式:用16求商和余进行高4位和低4位分离 */*/ void led_disp(unsigned char *poi) P0=seg*(poi+1) % 16; /第1个数码管:显示分(个位); LED_5=0; delay(3); LED_5=1; P0=seg*(poi+1) / 16; /第2个数码管:显示分(十位); LED
13、_4=0; delay(3); LED_4=1; P0=seg*(poi+2) % 16-(*poi%16)%2)7); /第3个数码管:显示时(个位); LED_3=0; delay(3); LED_3=1; P0=seg*(poi+2) /16; /第4个数码管:显示时(十位); LED_2=0; delay(3); LED_2=1; void led_disp1(unsigned char *poi) P0=seg*(poi+2) % 16-(*poi%16)%2)7); /第1个数码管:显示时(个位); LED_5=0; delay(3); LED_5=1; P0=seg*(poi+2
14、) /16; /第2个数码管:显示时(十位); LED_4=0; delay(3); LED_4=1;4. 键盘输入电路图5 8路独立按键电路单片机的按键各自独立,按下归零,抬起置一。相关程序如下:sbit sw0=P27; /按键8sbit sw1=P26; /按键7sbit sw2=P20; /按键1 5. 蜂鸣器电路图6 有源蜂鸣器电路蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的。因此需要一定的电流才能驱动它,单片机I/O口输出的电流较小,其TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。程序中通过改变单片机对应I/O口输出波形的频率,就可以调整
15、控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变其占空比,也可以控制蜂鸣器的声音大小。可以有两种驱动方式,即用PNP或NPN三极管电流放大电路驱动。本电路通过一个PNP三极管9012来放大驱动蜂鸣器,当输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;当输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制I/O口输出的电平来使蜂鸣器发出声音和关闭,从而实现各种可能音响的产生。相关程序如下:#include /包含头文件sbit buz=P37;/定义蜂鸣器引脚是P33 void Delay(unsigned int i) /最常用的延时函
16、数,已经反复使用过 while(i-);void main(void)/主函数开始for(;) /以下实现buzzer和relay以一定频率改变状态buz=0; /蜂鸣器响 继电器开Delay(60000); /延时buz=1; /蜂鸣器不响 继电器关Delay(60000); /延时 三、 调试过程1. 硬件调试使用烙铁、焊锡、镊子等工具,根据原理图,将各种电子元件正确装配到电阻板上。焊接过程中注意电路板与原理图连接一致,分清电解电容、二极管、芯片、排阻、蜂鸣器、单片机I/O接口等元件的引脚正反,避免虚焊、引脚短路现象。为了避免较低的元件焊接不便,焊接时元件需要从低往高焊,较低的元件如电阻、
17、单排圆孔、排阻、晶振等,普通高度元件有瓷片电容、按键、LED、芯片座、USB头、数码管、柱状晶振等,较高的元件有串口头、排针排孔、电源头等。完成电路板的焊接工作并检查无误后,借助测试程序测试电路板的好坏。在板子上正确下载DS1302实时时钟测试程序后,经测试电路板能够正确完成程序的功能,说明电路板焊接正确无误,可放心地进行下一步软件调试。2. 软件调试DS1302实时时钟测试程序可以完成从12:00开始计时,并在数码管上显示相应时间,在此程序基础上进行修改,即可完成本项目的预期功能。在完成按键设置时间功能时,发现数码管显示数据出现时而正常,时而乱码该情况。研究程序代码后发现,由于DS1302中
18、秒、分、时寄存器是BCD码形式的,所以在进行加法运算时需要对BCD码进行修正,当结果大于9时,要进行加6操作,另外时和分的个位满10进一,分满60进一归零,时满24归零的判断分支语句顺序不是任意的,必须遵守一定的顺序。在修改了上述错误后,发现由于按键消抖动不彻底,也导致了显示时间存在一定问题。通过修改延迟时间,发现设置为20000时按键不灵活,设置为15000时按键存在抖动。再通过一定调试后,最终将数值设置为18000。在完成整点报时功能时,会出现蜂鸣器鸣叫持续一分钟的情况,这与鸣叫次数与小时相同的设计初衷违背。研究发现是由于蜂鸣器相关语句位置太后,其中参数的值已经改变原有的值的原因,通过反复
19、测试及分析,最终将蜂鸣器代码位置放在修改进位语句后面,从而完成了蜂鸣器整点报时的功能。四、 主要程序#include /包含头文件*主程序*/void delaysw(unsigned int i)while(i-);void main(void)unsigned char clk_time3=0x00,0x00,0x12; /秒,分,时寄存器初始值unsigned char temp=0x80; /数组序号unsigned char i; delay(300);write_1302(0x8e,0x00); /WP=0 写操作for(i=0;i3;i+) write_1302(temp,clk
20、_timei); temp+=2;/delay(300);write_1302(0x8e,0x80); /WP=1 写保护/delay(300); while(1) if(sw0=0) /按键8按下,时加1delaysw(18000);if(sw0=0)clk_time2=read_1302(0x85); clk_time2=clk_time2+1; dflag=1; /标志位置1 if(sw1=0) /按键7按下,分加1delaysw(18000);if(sw1=0)clk_time1=read_1302(0x83); clk_time1=clk_time1+1; dflag=1; /标志位
21、置1 if(dflag=1) /标志位为1 if(clk_time1%16=10) clk_time1=clk_time1+6; /分的个位满10,分的十位加1 if(clk_time1%96=0) clk_time1=0 ; clk_time2+=1; /分满60归零,时加1 if(clk_time2%16=10) clk_time2=clk_time2+6; /时的个位满10,时的十位加1 if(clk_time2%36=0) clk_time2=0 ; / 时满24归零 if(clk_time1=0) /整点报时 for(i=0;iclk_time2;i+) led_disp(clk_t
22、ime); buz=0; delay(60000); buz=1; delay(60000); temp=0x80; write_1302(0x8e,0x00); /WP=0 写操作 for(i=0;i3;i+) write_1302(temp,clk_timei); temp+=2; /delay(300); write_1302(0x8e,0x80); /WP=1 写保护 /delay(300); dflag=0; /标志位置0 if(sw2=0) /按键1按下 delaysw(18000); if(sw2=0) dflag=dflag; if(dflag=0) /发送时间到数码管显示 l
23、ed_disp(clk_time);else led_disp1(clk_time); temp=0x81; for(i=0;i3;i+)clk_timei=read_1302(temp); /实现每秒读时间temp+=2;五、 心得体会本次课程设计是对我们单片机学习的检验及对实际动手能力的又一次提高。回顾此次单片机课程设计,真是感慨颇多。期间不仅巩固了以前所学过的知识,还学到了很多在书本上所没有学到过的知识。在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴地解决,而在解决的过程当中你会发现自己在飞速地提升。对于单片机设计,其硬件电路是比较简单的,只要实验板焊接正确就问题不大了,主要的还是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。 通过这次课程设计我发现单片机原理应用性极强,只有老师
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度广告牌租赁合同
- 2024年度公交IC卡广告媒体经营权转让合同
- 2024年度供应链管理合同:电子产品制造与分销
- 2024年度成都市新能源开发利用合同
- 2024年度林场土地使用权抵押贷款合同
- 2024年度仇媛广告投放合作协议
- 2024年度企业质量管理体系建设合同
- 2024年度产品维护与保养合同:玻璃钢、GRG、FRP
- 教育挂靠资质合同模板
- 2024年度工地门窗安装工程合同甲方权利和义务
- 普外科一科一品一特色科室活动方案
- 11.20世界慢阻肺日认识你的肺功能预防控制和消除慢阻肺课件
- 外研版英语2024七年级上册全册单元知识清单(默写版)
- 国开2024年秋《机电控制工程基础》形考任务4答案
- 沂蒙红色文化与沂蒙精神智慧树知到期末考试答案2024年
- 国开一体化平台01588《西方行政学说》章节自测(1-23)试题及答案
- 航天禁(限)用工艺目录(2021版)-发文稿(公开)
- 2024年极兔速递有限公司招聘笔试参考题库附带答案详解
- 收费站冬季安全注意事项
- 科比简介PPT幻灯片
- 苏教版五年级上册数学解决问题的策略——列举教学设计
评论
0/150
提交评论