实时显示电子时钟创新设计_第1页
实时显示电子时钟创新设计_第2页
实时显示电子时钟创新设计_第3页
实时显示电子时钟创新设计_第4页
实时显示电子时钟创新设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、J I A N G S U U N I V E R S I T Y 实时显示电子时钟创新设计The innovative design of real-time dynamic display device学院名称: 电 气 学 院 专业班级: 电子信息1102班 学生学号: 3110503039 学生姓名: 田 亚 坤 基于单片机的电子时钟Electronic clock based on MCU摘 要:单片机的应用给人们的生活带来了很大的变化。本文主要介绍了采用STC12C5A60S2单片机实现的电子计时钟。该电子钟系统的硬件主要由电源电路,按键电路,复位电路,时钟电路和蜂鸣器电路等几部分

2、组成。软件部分包括主程序,中断时钟程序,显示程序,闹钟程序,按键程序等。该设计的主要功能就是实现电子计时及准点报时,其中计时包括时分钟秒。关键词:STC12C5A60S2;单片机;数字钟;LED数码管Abstract :The application of SCM have brought to the life of people a big change.this paper has mainly introduced the electronic the clock based on STC12C5A60S2. The hardware of the electric clock sys

3、tem mainly includes power supply circuit, key circuits, reset circuit, clocking circuit and a buzzer circuit and so on. Software part includes the main program, the interrupt clock program, show program, alarm clock, procedures, key procedure and so on. Keywords: STC12C5A60S2 microcontroller; Digita

4、l clock;LED digital tube 目 录一、基于单片机的电子时钟电路设计 4 1.单片机实训目的 42.单片机实训要求及其实现的功能 4二、电子时钟硬件电路设计方案与设计方法 41.设计方案与设计方法 42.设计总体框图 53.设计应用硬件介绍 54.电子时钟电路原理图 75.PCB7三、电子时钟软件电路设计方案与设计方法81.程序设计方案 82.详细的程序清单和注释 9四、设计过程 191.Proteus仿真电路 19 2.实际电路板调试 19五、遇到的问题及其处理方法 20六、实训的个人体会及对本次实训的建议20七、参考书目21一、基于单片机的电子时钟电路设计 1.单片机实

5、训目的(1) 熟悉单片机应用系统的开发、研制过程;(2) 能运用单片机进行简单的应用系统的硬件设计;(3) 能运用单片机汇编语言或C51语言进行简单的应用系统的软件设计;(4) 掌握单片机应用系统的硬件、软件调试方法;(5) 检验用Proteus进行电路仿真的能力2.单片机实训要求及其实现的功能 【1】单片机实训要求 (1) 根据设计功能,选择元器件,绘制系统原理电路图;(2) 根据系统原理图绘制PCB图,并用感光板制作PCB板;(3) 完成硬件电路焊接与调试;(4) 完成软件编程与调试;(5) 完成实训报告的撰写; 【2】实现的功能(1) 用单片机和一个4位LED数码管、2个一位数码管动态显

6、示时、分、秒;(2) 用3个按键设置/修改时分秒的值; 在此次设计中,采用了三个按键实现复位/设置/加/减功能;(3) 上电和复位时的时分秒初值设为12:00:00二、电子时钟硬件电路设计方案与设计方法1.设计方案及其设计方法通过了解和分析此次电子时钟设计的要求及其所要实现的功能,参考网上资料、图书馆有些书籍,来选择此次电子时钟电路的设计电路,此次设计将其电路部分分为10个模块:单片机,基本复位电路、晶振电路、功能电路、数码管位选电路、数码管段选电路、上拉电路、电源整流电路、工作指示灯电路、数码管显示电路。应用Proteus的ISIS软件,编写简单的程序来测试电路设计正确性、可行性、准确性、实

7、用性,从而确定最后电路方案。2.设计总体框图数码管显示STC12C5A60S2D1302时钟芯片蜂鸣器键盘输入3.设计应用硬件介绍1)DS1302时钟芯片介绍 DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM,可通过简单的串行接口与单片机进行通信。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。可提供:-秒分时日日期月年的信息-每月的天数和闰年的天数可自动调整-可通过AM/PM

8、 指示决定采用24 或12 小时格式-保持数据和时钟信息时功率小于1mW2)STC12C5A60S2芯片介绍STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。1、增强型8051CPU,1T(1024G),单时钟/机器周期2、工作电压 5.5-3.5V3、1280字节RAM4、通用I/O口,复位后为:准双向口/弱上拉 可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/

9、高阻,开漏 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA5、有EEPROM功能6、看门狗7、内部集成MAX810专用复位电路8、外部掉电检测电路9、时钟源:外部高精度晶体/时钟,内部R/C振荡器 常温下内部R/C振荡器频率为:5.0V单片机为:1117MHz 3.3V 单片机为:812MHz10、4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T111、3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在 P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟12、外部中断I/O口7路,传统的下降沿中断或电平触

10、发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3,CCP0/P1.313、PWM2路14、A/D转换,10位精度ADC,共8路,转换速度可达250K/S15、通用全双工异步串行口(UART)16、双串口,RxD2/P1.2,TxD2/P1.317、工作范围:-408518、封装:LQFP-48,LQFP-44,PDIP-40,PLCC 4.电子时钟电路原理图5.PCB三、电子时钟软件电路设计方案与设计方法1.程序设计方案 此次基于单片机的电子时钟设计的

11、软件系统主要可分为主程序、显示程序、定时计数中断程序、时间调整程序、延时程序五大模块。 设计方案如下:开始DS1302中断入口通过查表方式动态扫描、显示数据数码位选亦通过查表方式,逐位显示判断是否进入时间设置SET状态进入时间设置功能程序YYNNN判断tcount=20Y分计数加1N判断是否满60minY时计数加1判断是否满24hour中断返回时间置为00:00:002.详细的程序清单和注释/* 说明:老师所给片选针脚为p3.4p3.7,本程序跳线连接至p2.0p2.3,更改程序中片选编码可不跳线。将头文件STC12C5A60S2.h和本程序须放在同目录下。*/#include "S

12、TC12C5A60S2.h"#define HZL#define uchar unsigned char#define uint unsigned int #define D P1 /段选#define W P2 /位选sbit IO=P04; /数据口sbit SCLK=P05; /控制数据时钟sbit RST=P03; /使能端、复位端 /*按键引脚定义*/sbit s1=P30; /按键 加sbit s2=P31; /按键 减sbit s3=P32; /按键 选择sbit led=P33; /闪烁的小数点uchar s, knum=0,snum,fnum;bit flag;/*

13、写时分秒地址*/#define write_shi 0x84#define write_fen 0x82#define write_miao 0x80/*读时分秒地址*/#define read_shi 0x85#define read_fen 0x83#define read_miao 0x81bit miao_flag;char miao_num;char Dmiao;char shi,fen,miao; /读出数据存储变量uchar d=0x03,0X9F,0X25,0X0D,0X99,0X49,0X41,0X1F,0X01,0X09; /不带小数点Uchardd=0x02,0X9e,0

14、X24,0X0c,0X98,0X48,0X40,0X1e,0X00,0X08; /带小数点void delay(uint z) /延时函数,z的取值为这个函数的延时ms数 uint x,y;for(x=z;x>0;x-) for(y=110;y>0;y-); void t0_init() /定时50ms一个中断 TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;uchar read_1302(uchar add) /读函数uchar i,date;RST=0; /禁止读写数据for

15、(i=0;i<8;i+) RST=1; SCLK=0; IO=add&0x01; add>>=1; SCLK=1;for(i=0;i<8;i+) if(IO) date=date|0x80; else date=date|0x00; SCLK=1; date>>=1; SCLK=0;RST=0;date=date/16*10+date%16;/进制转换 16转10进制IO=0; /数据读完后,IO口必须为0,不然小时一直显示85return date;void write_1302(uchar add,uchar dat) /写函数uchar i;R

16、ST=0; /禁止读写数据SCLK=0; for(i=0;i<8;i+) /写地址 RST=1; /允许读写数据 SCLK=0; IO=add&0x01; add>>=1; SCLK=1;for(i=0;i<8;i+) /写数据 RST=1; /允许读写数据 SCLK=0; IO=dat&0x01; dat>>=1; SCLK=1;RST=0;void init_1302() /初始化函数 设置时间 flag=read_1302(0x81); if(flag&0x80)write_1302(0x8e,0x00); /保护取消,可以进行

17、读写操作write_1302(write_miao,0x56); write_1302(write_fen,0x49);write_1302(write_shi,0x14);write_1302(0x90,0xa5);write_1302(0x8e,0x80); /保护启动,不能进行读写操作void display(uchar shi,uchar fen) /显示函数 if(knum=0) snum=30; fnum=30;if(knum=1) fnum+; snum=30;if(knum=2) snum+; fnum=30;if(snum>=30) W=0xFe; /位选 s=dshi

18、/10;/段码先给s,判断其值是否为0, if(s=0xc0) W=0xff; D=0xff; D=s;/s不为零则给D,让其显示 delay(5); D=0Xff; /消隐 if(miao_flag) /小数点闪烁 miao_flag=0; W=0xFd; D=ddshi%10; delay(5); D=0Xff; /消隐 else W=0xFd; D=dshi%10; delay(5); D=0Xff; if(snum=60) snum=0; if(fnum>=30) W=0xFb; D=dfen/10; delay(5); D=0Xff; /消隐 W=0xF7; D=dfen%10

19、; delay(5); D=0Xff; /消隐 if(fnum=60) fnum=0;void read_sf() miao=read_1302(read_miao);/*if(miao!=Dmiao) Dmiao=miao; TR0=1; miao_flag=1; */fen=read_1302(read_fen);shi=read_1302(read_shi); display(shi,fen);void keyscan() /按键扫描函数 if(s3=0) /选择按键按下 delay(10); if(s3=0) while(!s3) display(shi,fen); /按键按下就不会闪

20、 knum+; if(knum=1) /分闪烁 write_1302(0x8e,0x00); /保护取消 write_1302(write_miao,0x80); if(knum=3) /时钟启动 knum=0; write_1302(write_miao,0x00); write_1302(0x8e,0x80); /保护启动 if(knum=1) /分钟调节 if(s1=0) /加 delay(10); if(s1=0) while(!s1) display(shi,fen); /按键按下就不会闪 fen+; if(fen=60) fen=0; write_1302(write_fen,fe

21、n/10*16+fen%10); /写入1302/ read_sf(); /读出时间,然后显示 if(s2=0) delay(10); if(s2=0) while(!s2) display(shi,fen); /按键按下就不会闪 if(fen=-1) fen=59; write_1302(write_fen,fen/10*16+fen%10); read_sf(); if(knum=2) if(s1=0) delay(10); if(s1=0) while(!s1) display(shi,fen); /按键按下就不会闪 shi+; if(shi=24) shi=0; write_1302(

22、write_shi,shi/10*16+shi%10); read_sf(); if(s2=0) delay(10); if(s2=0) while(!s2) display(shi,fen); /按键按下就不会闪 shi-; if(shi=-1) shi=23; write_1302(write_shi,shi/10*16+shi%10); read_sf(); void main()init_1302();t0_init();while(1) if(miao_num<10) led=0; if(miao_num>=10) led=1; read_sf(); keyscan();

23、void t0_timer() interrupt 1 TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;miao_num+;if(miao_num>=20) miao_num=0; miao_flag=1;四、设计过程1.Proteus仿真电路(1)仿真电路图(2)制作过程的部分图片 2.实际电路板调试(1) 检测电路板没什么接触问题后,用烧录实验板把自己写的程序写入单片机;(2) 将单片机插入自己的电路板中,上电看是实验板数码管显示效果;分析出现效果不佳或者时间误差大的原因,并在软件上修改重新调试,直至达到实训要求与更佳效果。五、遇到的问题及其处理方法(1)问题一:用Proteus仿真电路原理图,用的芯片较多,电路比较复杂; 处理一:仿真时用Proteus内部的电流电压探针测试电路各端的电压电流值,判

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论