




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子系统设计课程设计报告电子系统设计课程设计报告题目:基于单片机和CPLD的数字时钟姓名: XXX院系: 电力学院专业:电子科学与技术学号: XXXXXXXXX指导老师:XXXXXXXXX 完成时间: 2014 年 1 月 9 日设计题目基于单片机和CPLD的数字时钟设计要求设计过程(包括:设计方案、上机设计与仿真结果、硬件实验方案及实验结果、收获和体会)成绩评定指导教师评语课程设计等级23目 录第1章 设计概述 3 1.1使用软件简介 .41.2 设计目的及要求 .4第二章 总体设计 4 2.1 设计框图 42.2 设计框图概述 .5第三章 硬件设计 5 3.1数字时钟的结构 .53.2数字时钟的功能实现.73.3 数字时钟的功能模块设计.7第四章程序框图和清单 11 4.1 程序框图 .114.2 程序 .124.3 清单 .19第五章实验结果和体会 20体会22第一章 设计概述1.1使用软件简介a.使用汇编语言或C语言要使用编译器,以便把写好的程序编译为机器码,才能把HEX可执行文件写入单片机内。KEIL uVISION是众多单片机应用开发软件中最优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,甚至ARM,它集编辑,编译,仿真等于一体,它的界面和常用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。KEIL uVision5是uVision4的升级版本,页面有了进一步的优化,使用起来更加的人性化。b.仿真软件Protues Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。迄今为止是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译。c.综合工具Modelsim Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。1.2设计目的及要求a、设计要求(1)设计一个基于单片机和CPLD的数字时钟;(2)根据性能指标,计算元件参数,选好元件,设计电路并画出电路图;对设计电路进行模拟与测试。(3)撰写设计报告。b、技术指标使用单片机和CPLD设计,显示年、月、日、小时、分钟、秒,时间可以调整。第二章 总体设计2.1设计框图按键数码管显示数码管驱动 时钟芯片DS12c887复位电路主控STC89C52晶振电路2.2设计框图概述a.晶振电路:12MHZ晶振和两个22PF的电容,产生标准脉冲信号。b.复位电路:利用它把电路恢复到起始状态。c.时钟芯片:本设计采用高精度时钟芯片DS12C887,自带晶体振荡器和锂电池。在没有外部电源的情况下可工作10年。在运行中,单片机从时钟芯片读取当前时间,然后送到数码管显示。d.数码管显示:本设计采用八段共阴极数码管,可以同时显示年月日或者时分秒。e.数码管驱动:选用两个74HC573锁存器,分别控制数码管的段码显示和位码显示。f.按键:采用四个独立按键,分别用来实现调整时间及其它功能。第三章 硬件设计3.1 数字时钟的结构运用protues软件进行仿真,keil软件与其调试显示时分秒显示年月日3.2 数字时钟的功能实现本设计一共使用四个独立按键来实现数字时钟的功能,其中k1是时分秒和年月日切换显示键,若当前显示是时分秒,按下k1,则切换显示到年月日;k2键为修改项选择键,按一下k2修改当前显示的第三位,按两下k2修改当前显示的第二位,按三下k2修改当前显示的第一位;k3和k4分别为增大和减小按键,来对修改项进行操作,只有在k2按下之后才有效。3.3 数字时钟的功能模块设计本设计中需要用到CPLD的有两个74HC573锁存器,下面用Modelsim进行锁存器设计.锁存器代码:module verilog_74hc573(LE1,OE_N1,D1,Q1,LE2,OE_N2,D2,Q2); input LE1,OE_N1,LE2,OE_N2; input 7:0 D1,D2; output 7:0 Q1,Q2; reg 7:0 Q_r1,Q_r2; wire 7:0 D_r1,D_r2; assign D_r1=D1; always(OE_N1,LE1,D1) begin if(OE_N1) begin Q_r1=8hz; end else if(LE1) begin Q_r1=D_r1; end else begin Q_r1=Q_r1; end end assign Q1=Q_r1; assign D_r2=D2; always(OE_N2,LE2,D2) begin if(OE_N2) begin Q_r2=8hz; end else if(LE2) begin Q_r2=D_r2; end else begin Q_r2=Q_r2; end end assign Q2=Q_r2;endmodule测试代码timescale 1ns/1ns; module verilog_74hc573_tb; reg le1,oe_n1; reg 7:0 d1; wire 7:0 q1; initial begin le1=0; oe_n1=0; d1=8b0000_1111; end always begin #5 le1=1; oe_n1=0; #5 d1=8d1111_0000; #5 d1=8d0000_1111; #5 le1=0; oe_n1=0; #5 d1=8d1010_0101; #5 d1=8d0101_1010; #5 oe_n1=1; le1=0; #5 d1=8d1111_1111; #5 oe_n1=1; le1=0; #5 d1=8d1000_0001; #5 d1=8d0001_1110; #5 oe_n1=1; le1=1;#5 d1=8d0011_1100; #5 d1=8d1100_0011; endverilog_74hc573u1( .LE1(le1), .OE_N1(oe_n1), .D1(d1), .Q1(q1); endmodule仿真结果第四章 程序框图和清单4.1程序框图开始 初始化STC89C52从DS12C887中读数据Flag=0?YN显示年月日显示时分秒键盘扫描 键盘扫描K1=1?K1=1?NYYYK2=1?K2=1?NNK2_num=?修改时/年修改分/月修改秒/天123K3=1,增大K4=1,减小4.2程序#include#define uchar unsigned char#define uint unsigned int#define M 1#define N 10sbit sp=P30;sbit dscs=P24;sbit dsas=P25;sbit dsrw=P26;sbit dsds=P27;sbit duan=P20;sbit wei=P21;sbit k1=P34;sbit k2=P35;sbit k3=P36;sbit k4=P37;void delay(uint);void init();void keyscan();void display(uchar,uchar,uchar);void write_ds(uchar,uchar);void set_time();uchar read_ds(uchar);uchar shi,fen,miao,month,day;uchar year,flag,k2_num,i;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;void delay(uint x)uint i,j;for(i=x;i0;i-)for(j=110;j0;j-);void init()flag=0;k2_num=0;write_ds(0x0a,0x20);write_ds(0x0b,0x26);set_time();void display(uchar sh,uchar fe,uchar mia)uchar sg,ss,fg,fs,mg,ms;sg=sh%10;ss=sh/10;fg=fe%10;fs=fe/10;mg=mia%10;ms=mia/10;duan=1;P0=tabless;duan=0;P0=0xfe;wei=1;wei=0;P0=0x00;delay(M);duan=1;P0=tablesg;duan=0;P0=0xfd;wei=1;wei=0;P0=0x00;delay(M);duan=1;P0=table10;duan=0;P0=0xfb;wei=1;wei=0;P0=0x00;delay(M);duan=1;P0=tablefs;duan=0;P0=0xf7;wei=1;wei=0;P0=0x00;delay(M); duan=1;P0=tablefg;duan=0;P0=0xef;wei=1;wei=0;P0=0x00;delay(M);duan=1;P0=table10;duan=0;P0=0xdf;wei=1;wei=0;P0=0x00;delay(M);duan=1;P0=tablems;duan=0;P0=0xbf;wei=1;wei=0;P0=0x00;delay(M);duan=1;P0=tablemg;duan=0;P0=0x7f;wei=1;wei=0;P0=0x00;delay(M);void write_ds(uchar add,uchar date)dsas=1;dsds=1;dsrw=1;dscs=0;P1=add;dsas=0;dsrw=0;P1=date;dsrw=1;dsas=1;dscs=1;uchar read_ds(uchar add)uchar ds_date;dscs=0;dsas=1;dsds=1;dsrw=1;P1=add;dsas=0;dsds=0;P1=0xff;ds_date=P1;dsas=1;dsds=1;dscs=1;return ds_date;void set_time()write_ds(0,0);write_ds(1,0);write_ds(2,0);write_ds(3,0);write_ds(4,12);write_ds(5,0);write_ds(6,0);write_ds(7,1);write_ds(8,1);write_ds(9,14);void keyscan()if(k1=0)uint i;delay(5);if(k1=0)flag+;if(flag=2)flag=0;for(i=N;i0;i-)if(flag=0)display(shi,fen,miao);elsedisplay(year,month,day);while(!k1);if(k2=0)delay(5);if(k2=0)k2_num+;if(k2_num=4)k2_num=0;for(i=N;i0;i-)if(flag=0)display(shi,fen,miao);elsedisplay(year,month,day);while(!k2);if(k2_num!=0)if(flag=0)if(k3=0)delay(5);if(k3=0)switch(k2_num)case 1: write_ds(0,(miao+1); break; case 2: write_ds(2,(fen+1); break; case 3: write_ds(4,(shi+1); break;for(i=N;i0;i-)if(flag=0)display(shi,fen,miao);elsedisplay(year,month,day);while(!k3);if(k4=0)delay(5);if(k4=0)switch(k2_num)case 1: write_ds(0,(miao-1); break; case 2: write_ds(2,(fen-1); break; case 3: write_ds(4,(shi-1); break;for(i=N;i0;i-)if(flag=0)display(shi,fen,miao);elsedisplay(year,month,day);while(!k4);if(flag=1)if(k3=0)delay(5);if(k3=0)switch(k2_num)case 1: write_ds(7,(day+1); break; case 2: write_ds(8,(month+1); break; case 3: write_ds(9,(year+1); break;for(i=N;i0;i-)if(flag=0)display(shi,fen,miao);elsedisplay(year,month,day);while(!k3);if(k4=0)delay(5);if(k4=0)switch(k2_num)case 1: write_ds(7,(day-1); break; case 2: write_ds(8,(month-1); break; case 3: write_ds(9,(year-1); break;for(i=N;i0;i-)if(flag=0)display(shi,fen,miao);elsedisplay(year,month,day);while(!k4);void main()init();while(1)keyscan();year=read_ds(9);month=read_ds(8);day=read_ds(7);shi=read_ds(4);fen=read_ds(2);miao=read_ds(0);if(flag=0)display(shi,fen,miao);elsedisplay(year,month,day);4.3清单Bill Of Materials For 数字钟 Design Title:数字钟Author:Revision:Design Created:20131222Design Last Modified:201417Total Parts In Design:112ResistorsQuantity:ReferencesValueOrder Code2R1, R25003CapacitorsQuantity:ReferencesValueOrder C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论