第一篇:嵌入式电子闹钟时钟课程设计
#include
sbit rs=P2^5;//液晶位定义 sbit lcden=P2^7;sbit s1=P2^0;//时间功能切换按键 sbit s2=P2^1;//按键加 sbit s3=P2^3;//按键减
sbit s4=P2^4;//闹钟功能切换键 sbit rst=P1^5;//ds1302引脚定义 sbit io=P1^6;sbit sclk=P1^7;sbit beep=P3^0;//蜂鸣器
uchar num,count,shi,fen,miao,s1num,s2num, year,month,day,week,flag,flag1,year1,month1, day1,week1,shi1,fen1,miao1,year2,month2, day2,week2,shi2,fen2,miao2,year5,month5, day5,week5,shi5,fen5,miao5,wk,ashi,afen;//参数定义
uchar code table[]=“20--”;//液晶固定显示 uchar code table1[]=“ : : 00:00”;/* uchar time_dat[7]={12,1,6,6,12,59,59};//年周月日时分秒 uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};*/ void write_com(uchar com);//液晶写指令函数 void write_data(uchar date);//液晶写数据函数
void write_ds1302(uchar add,uchar dat);//ds1302芯片写指令函数 void set_rtc();//ds1302时间设置函数 void time_pros();//ds1302进制转换函数 void read_rtc();//ds1302读时间函数 void alarm();//闹钟函数
void delay(uint z)//延时函数 { uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void init()//初始化 { lcden=0;flag=0;flag1=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);//液晶固定显示,第一行 for(num=0;num<14;num++){ write_data(table[num]);delay(5);}
write_com(0x80+0x40);//液晶显示第二行 for(num=0;num<20;num++){ write_data(table1[num]);delay(5);} }
void write_com(uchar com)//1602液晶写指令 { rs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}
void write_data(uchar date)//1602液晶写写数据 { rs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}
void write_sfm(uchar add,uchar date)//时分秒 { uchar shi3,ge;shi3=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi3);write_data(0x30+ge);}
void write_nyr(uchar ad,uchar date)//年月日 { uchar shi4,ge2;shi4=date/10;ge2=date%10;write_com(0x80+ad);write_data(0x30+shi4);write_data(0x30+ge2);}
void write_week(uchar wk)//星期按西方星期设置{ write_com(0x80+11);switch(wk){ case 1: write_data('S');delay(5);write_data('U');delay(5);write_data('N');break;
case 2: write_data('M');delay(5);write_data('O');delay(5);write_data('N');break;
case 3: write_data('T');
星期天为第一天 delay(5);write_data('U');delay(5);write_data('E');break;
case 4: write_data('W');delay(5);write_data('E');delay(5);write_data('D');break;
case 5: write_data('T');delay(5);write_data('H');delay(5);write_data('U');break;
case 6: write_data('F');delay(5);write_data('R');delay(5);write_data('T');break;
case 7: write_data('S');delay(5);write_data('A');delay(5);write_data('T');break;
} }
void keyscan()//{ if(s1==0){ delay(5);
按键函数 if(s1==0){ write_com(0x0f);s1num++;//记录按键次数 flag=1;flag1=1;while(!s1);
switch(s1num)//光标闪烁点定位 { case 1:write_com(0x80+0x40+6);//秒 break;
case 2:write_com(0x80+0x40+3);//分 break;
case 3:write_com(0x80+0x40+0);//时 break;
case 4:write_com(0x80+11);//星期 break;case 5:write_com(0x80+8);//日 break;
case 6:write_com(0x80+5);//月 break;
case 7:write_com(0x80+2);//年 break;
case 8:s1num=0;write_com(0x0c);//设置开显示光标不显示 关闭时间设置
set_rtc();flag=0;break;}
} }
if(s1num!=0)//按键加减 { if(s2==0)//加按键函数 { delay(10);if(s2==0){
while(!s2);switch(s1num)//根据功能键相应次数做出调节 { case 1: miao++;//秒加 if(miao==60)miao=0;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen++;// if(fen==60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi++;// if(shi==24)shi=0;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week++;// if(week==8)week=1;write_week(week);write_com(0x80+11);break;
case 5: day++;// if(day==32)day=1;write_nyr(8,day);write_com(0x80+8);break;
case 6: month++;//分加 时加 星期加日加 月加
if(month==13)month=1;write_nyr(5,month);write_com(0x80+5);break;
case 7: year++;//年加 if(year==100)year=0;write_nyr(2,year);write_com(0x80+2);break;
}
}
}
if(s3==0)//减按键函数同上 { delay(10);if(s3==0){ while(!s3);switch(s1num)//根据功能键相应次数做出调节 { case 1: miao--;if(miao==-1)miao=59;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen--;if(fen==-1)fen=59;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi--;if(shi==-1)shi=23;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week--;if(week==-1)week=7;write_week(week);write_com(0x80+11);break;
case 5: day--;if(day==-1)day=31;write_nyr(8,day);write_com(0x80+8);break;
case 6: month--;if(month==-1)month=12;write_nyr(5,month);write_com(0x80+5);break;
case 7: year--;if(year==-1)year=99;write_nyr(2,year);write_com(0x80+2);break;
}
} }
}
if(s4==0)// { delay(5);
闹钟按键 if(s4==0){ write_com(0x0f);//光标闪烁 s2num++;//记录按键次数 flag=1;while(!s4);switch(s2num)//光标闪烁点定位 { case 1:write_com(0x80+0x40+13);//分 break;
case 2:write_com(0x80+0x40+10);//时 break;
case 3:write_com(0x0c);//关闭闹钟设置 flag=0;s2num=0;break;
}
} }
if(s2num!=0)//闹钟设置 { if(s2==0)//闹钟加 { delay(10);if(s2==0){ while(!s2);switch(s2num)//根据功能键相应次数做出调节 { case 1: afen++;if(afen==60)afen=0;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi++;if(ashi==24)ashi=0;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
if(s3==0)//闹钟减 { delay(10);if(s3==0){ while(!s3);switch(s2num)//根据功能键相应次数做出调节 { case 1: afen--;if(afen==-1)afen=59;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi--;if(ashi==-1)ashi=23;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
} }
void wirte_ds1302_byte(uchar dat)//ds1302字节写 { uchar i;for(i=0;i<8;i++){ sclk=0;io=dat&0x01;dat=dat>>1;sclk=1;} }
void write_ds1302(uchar add,uchar dat)//ds1302写函数 { rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);wirte_ds1302_byte(dat);rst=0;io=1;sclk=1;}
uchar read_ds1302(uchar add)//ds1302{ uchar i,value;rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);for(i=0;i<8;i++){ value=value>>1;sclk=0;if(io){ value=value|0x80;} sclk=1;} rst=0;_nop_();// 空操作 sclk=0;_nop_();
读函数 sclk=1;io=1;return value;}
void set_rtc()//ds1302时间设置 { write_ds1302(0x8e,0x00);//关写保护
year1=year/10;//转换为十六进制 year=year%10;year=year+year1*16;write_ds1302(0x8c,year);
week1=week/10;week=week%10;week=week+week1*16;write_ds1302(0x8a,week);
month1=month/10;month=month%10;month=month+month1*16;write_ds1302(0x88,month);
day1=day/10;day=day%10;day=day+day1*16;write_ds1302(0x86,day);
shi1=shi/10;shi=shi%10;shi=shi+shi1*16;write_ds1302(0x84,shi);
fen1=fen/10;fen=fen%10;fen=fen+fen1*16;write_ds1302(0x82,fen);
miao1=miao/10;miao=miao%10;miao=miao+miao1*16;write_ds1302(0x80,miao);
write_ds1302(0x8e,0x80);//开写保护 flag1=0;}
void read_rtc()//从ds1302中读时间 { year2=read_ds1302(0x8d);week2=read_ds1302(0x8b);month2=read_ds1302(0x89);day2=read_ds1302(0x87);shi2=read_ds1302(0x85);fen2=read_ds1302(0x83);miao2=read_ds1302(0x81);}
void time_pros()//进制 {
year5=year2/16;year2=year2%16;year2=year2+year5*10;
month5=month2/16;month2=month2%16;month2=month2+month5*10;
day5=day2/16;day2=day2%16;day2=day2+day5*10;
shi5=shi2/16;shi2=shi2%16;shi2=shi2+shi5*10;
fen5=fen2/16;fen2=fen2%16;fen2=fen2+fen5*10;
miao5=miao2/16;miao2=miao2%16;miao2=miao2+miao5*10;
从ds1302中读出的时间转换为十
}
void display()//显示函数 { write_sfm(6,miao2);write_com(0x80+0x40+6);
write_sfm(3,fen2);write_com(0x80+0x40+3);
write_sfm(0,shi2);write_com(0x80+0x40+0);
write_week(week2);write_com(0x80+11);
write_nyr(8,day2);write_com(0x80+8);
write_nyr(5,month2);write_com(0x80+5);
write_nyr(2,year2);write_com(0x80+2);
if((ashi==shi2)&&(afen==fen2)){ alarm();} }
void alarm()// 闹钟 { beep=0;delay(1000);beep=1;} void main()//主函数 { init();//初始化 while(1){ keyscan();//按键函数
if(flag==0){ keyscan();read_rtc();time_pros();display();}
} }
第二篇:EDA课程设计 数字时钟(闹钟)
课 程 设 计 说 明 书
题目: 闹钟
学院(系): 年级专业: 学 号: 学生姓名: 指导教师: 教师职称:
共 16 页
第 1 页
目 录
第1章 摘要…………………………………………………………………………………1 第2章 设计方案……………………………………………………………………………
2.1 VHDL简介…………………………………………………………………………… 2.2 设计思路…………………………………………………………………………… 第3章 模块介绍…………………………………………………………………………… 第4章 Verilog HDL设计源程序………………………………………………………… 第5章 波形仿真图………………………………………………………………………… 第6章 管脚锁定及硬件连线……………………………………………………………… 心得体会 ……………………………………………………………………………………17 参考文献 ……………………………………………………………………………………18
共 16 页
第 2 页
第一章 摘要
在当今社会,数字电路产品的应用在我们的实际生活中显得越来越重要,与我们的生活联系愈加紧密,例如计算机、仪表、电子钟等等,使我们的生活工作较以前的方式更加方便、完善,带来了很多的益处。
在此次EDA课程,我的设计课题是闹钟,使用VHDL语言进行编程完成。报告书主要由设计方案、模块介绍、设计源程序、仿真波形图和管脚锁定及硬件连线四部分组成。设计方案主要介绍了我对于设计课题的大致设计思路,之后各个部分将会详细介绍设计组成及程序。
共 16 页
第 3 页
第二章 设计方案 §2.1 VHDL简介
数字电路主要是基于两个信号(我们可以简单的说是有电压和无电压),用数字信号完成对数字量进行算术运算和逻辑运算的电路我们称之为数字电路,它具有逻辑运算和逻辑处理等功能,数字电路可分为组合逻辑电路和时序逻辑电路。
EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
利用EDA技术进行电子系统的设计,具有以下几个特点:① 用软件的方式设计硬件;② 用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③ 设计过程中可用有关软件进行各种仿真;④ 系统可现场编程,在线升级;⑤ 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。
EDA技术伴随着计算机、集成电路、电子系统设计的发展,经历了计算机辅助设计(Computer Assist Design,简称CAD)、计算机辅助工程设计(Computer Assist Engineering Design,简称CAE)和电子设计自动化(Electronic Design Automation,简称EDA)三个发展阶段。
常用的硬件描述语言有VHDL、Verilog、ABEL。
EDA技术是随着集成电路和计算机技术的飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。它是为解决自动控制系统设计而提出的,从70年代经历了计算机辅助设计(CAD),计算机辅助工程(CAE),电子系统设计自动化(ESDA)3个阶段。前两个阶段的EDA产品都只是个别或部分的解决了电子产品设计中的工程问题;第三代EDA工具根据工程设计中的瓶
共 16 页
第 4 页
颈和矛盾对设计数据库实现了统一管理,并提出了并行设计环境概念,提供了独立于工艺和厂家的系统级的设计工具。EDA关键技术之一就是采用硬件描述语言对硬件电路进行描述,且具有系统级仿真和综合能力。目前应用比较广泛的硬件描述语言就是Verilog HDL。Verilog HDL简介
Verilog HDL是目前大规模集成电路设计中最具代表性、使用最广泛的硬件描述语言之一。具有如下特点:
(1)能够在不同的抽象层次上,如系统级、行为级、RTL级、门级和开关级,对设计系统进行精确而简练的描述。
(2)能够在每个抽象层次的描述上对设计进行仿真验证,及时发现及时发现可能存在的错误,缩短设计周期,并保存整个设计过程的正确性。
(3)由于代码描述与工艺过程实现无关,便于设计标准化,提高设计的可重用性。如国有C语言的编程基础经验,只需很短的时间就能学会和掌握Verilog HDL,因此,Verilog HDL可以作为学习HDL设计方法的入门和基础。
§2.2 设计思路
一、设计要求
1、设计简易的一分钟闹钟;
2、可手动输入定时时间(0~59s),如30s;
3、两个动态数码管上跟踪显示时间的变化:如30,29,28……到了指定时间蜂鸣器发出5s的提示音;
4、采用2个动态数码管显示时间;
5、用蜂鸣器发出提示音;
6、拨码开关设置定时时间。
二、设计思路
根据上述的设计要求,整个系统大致包括如下几个组成部分:它包括以下几个组成
共 16 页
第 5 页
部分:1)显示屏,由2个七段动态数码管组成,用于显示当前设置的闹钟时间并进行跟踪显示;2)6个拨码开关,用于输入闹钟时间;3)复位键,确定新的闹钟时间设置,或显示已设置的闹钟时间;4)蜂鸣器,在当前时钟时间与闹钟时间相同时,发出报警声。
共 16 页
第 6 页
第三章 模块介绍
一、计时模块
此模块共有6个拨码开关作为输入信号,当开关无输入时,都处于低电平状态,D5、D4、D3、D2、D1和D0是并行数据输入端,CRN是异步复位输入端,LDN是预置控制输入端。当开关有输入时,会产生一个六位的二进制输出信号num,此信号表示动作的开关序号,它是作为动态显示模块的输入信号。
二、数码显示模块
这个模块有两个输入信号和两个输出信号。其中一个是信号输入模块的输出num作为输入,另外一个是时钟输入端,作为扫描数码管的频率信号,采用1024HZ的中高频信号。输出信号为SS0、SS1、SS2,是动态数码管的片选段。
三、报警模块
报警模块共有两个输入信号ET和CLK1,一个输出信号COUT。当从信号输入模块检测到有开关输入时,ET信号已置1,CLK上升沿到来时,程序将COUT置1,蜂鸣器发出时间为10s的报警信号,时间到达后,跳出循环,蜂鸣器停止报警。
四、顶层模块
顶层模块的作用是将各个模块组合到一起,从而实现最终的功能。其输入即为各个模块的输入,一个时钟信号,还有6个拨码开关的输入,其输出为数码管显示和报警器。
共 16 页
第 7 页
第四章Verilog HDL设计源程序
一、计时模块
module counter(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,Q,OC);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN;output[5:0] Q;output OC;reg OC;reg[5:0] Q;reg[5:0] Q_TEMP;reg[3:0] NUM;always@(posedge CLK or negedge CRN)begin
if(~CRN)Q_TEMP=6'b000000;else if(~LDN)begin Q_TEMP={D5,D4,D3,D2,D1,D0};NUM=4'b0000;end else if(Q_TEMP<6'b111100&&Q_TEMP>6'b000000)begin if(NUM<4'b1000&&NUM>=4'b0000)NUM=NUM+1;else NUM=4'b0001;if(NUM==4'b1000)Q_TEMP=Q_TEMP-1;end
共 16 页
第 8 页
else Q_TEMP=6'b000000;end always begin
if(Q_TEMP==6'b000000&&LDN)OC=1'b1;else OC=1'b0;Q=Q_TEMP;end endmodule
二、数码显示模块
module showtime(A,Q,CLKM,SS0,SS1,SS2);input[5:0] A;input CLKM;output[6:0] Q;output SS0,SS1,SS2;reg[6:0] Q;reg SS0,SS1,SS2;reg M;reg[5:0] B;reg[5:0] C;always@(posedge CLKM)begin M=M+1;end always begin
共 16 页
第 9 页
if(A<='b001001)begin B=A;C=0;end else if(A>'b001001&&A<='b10011)begin B=A-10;C=1;end else if(A>'b10011&&A<='b11101)begin B=A-20;C=2;end else if(A>'b11101&&A<='b100111)begin B=A-30;C=3;end else if(A>'b100111&&A<='b110001)begin B=A-40;C=4;end else if(A>'b110001&&A<='b111011)
共 16 页
第 10 页
begin B=A-50;C=5;end else if(A=='b111100)begin B=0;C=6;end if(M=='b1)begin SS0=1;SS1=0;SS2=0;case(B)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;'b000111:Q='b0000111;'b001000:Q='b1111111;'b001001:Q='b1101111;default:Q='b0111111;endcase end
共 16 页
第 11 页
else if(M=='b0)begin SS0=0;SS1=0;SS2=0;case(C)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;default:Q='b0111111;endcase end end endmodule
三、报警模块
module speaker(CLK1,ET,COUT);input CLK1,ET;output COUT;reg COUT;reg[5:0] TEMP;always@(posedge CLK1)begin
if(~ET)TEMP=6'b000000;else if(TEMP<6'b101001&&TEMP>=6'b000000)TEMP=TEMP+1;
共 16 页
第 12 页
else TEMP=6'b101001;end always begin if(TEMP<6'b101001&&TEMP!=6'b000000)COUT=1'b1;else COUT=1'b0;end endmodule
四、顶层模块 module timer(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,COUT,LED,SS0,SS1,SS2,CLKM);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,CLKM;output[6:0] LED;output COUT,SS0,SS1,SS2;wire X6;wire[5:0] X;counter u1(.LDN(LDN),.D5(D5),.D4(D4),.D3(D3),.D2(D2),.D1(D1),.D0(D0),.CLK(CLK),.CRN(CRN),.Q(X[5:0]),.OC(X6));showtime u2(.A(X[5:0]),.Q(LED[6:0]),.CLKM(CLKM),.SS0(SS0),.SS1(SS1),.SS2(SS2));speaker u3(.CLK1(CLK1),.ET(X6),.COUT(COUT));endmodule
共 16 页
第 13 页
第五章 波形仿真图
一、计时模块波形仿真图
二、报警模块波形仿真图
三、顶层模块波形仿真图
共 16 页
第 14 页
第六章 管脚锁定及硬件连线
一、管脚锁定
CLK>chip=timer;Input Pin=75 CLKM>chip=timer:Input Pin=83 CLK1> chip=timer;Input Pin=85 COUT> chip=timer;Output Pin=38 CRN> chip=timer;Input Pin=39 DO> chip=timer;Input Pin=53 D1> chip=timer;Input Pin=47 D2> chip=timer;Input Pin=46 D3> chip=timer;Input Pin=45 D4> chip=timer;Input Pin=44 D5> chip=timer;Input Pin=41 LDN> chip=timer;Input Pin=40 LED0> chip=timer;Output Pin=173 LED1> chip=timer;Output Pin=174 LED2> chip=timer;Output Pin=175 LED3> chip=timer;Output Pin=176 LED4> chip=timer;Output Pin=177 LED5> chip=timer;Output Pin=179 LED6> chip=timer;Output Pin=187 SSO> chip=timer;Output Pin=191 SS1> chip=timer;Output Pin=192 SS2> chip=timer;Output Pin=193 引线说明:拨码开关使用数字开关组A,需外接引线。
共 16 页
第 15 页
心得体会
通过这次设计,初步对EDA有一个了解。
出于没有学习过这门课程,所以再课程设计开始时对于EDA就是一无所知。课程设计之初是做了一个简单的培训,关于软件和硬件的设计,算是入门训练吧。通过前两天的课程讲解,我对其有了初步的了解。之后就开始按照指导书中的例题就行练习,仿真,有进一步的掌握后就开始了自己的课程设计。由于我C++程序设计知识不扎实,所以导致这次软件设计困难重重,也让我明白了在这个领域知识的串联是非常普遍的,学好学扎实是我们必须要做到的要求。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力。在设计的过程中,可以说得是困难重重,但这毕竟第一次做,同时在设计的过程中发现了自己的不足之处。
在此还需要感谢郑兆兆老师和吕宏诗老师耐心的指导与帮助,使课设能够更加顺利的完成。
共 16 页
第 16 页
参考文献
1、阎石主编.《数字电子技术基础》(第五版).高等教等育出版社.2006.5,168-175页 ;
2、李国丽、朱维勇、何剑春主编 《EDA与数字系统设计》(第2版).机械工业出版社.2009.3,105-146页
共 16 页
第 17 页
第三篇:课程设计数字电子闹钟
数 字 闹 钟 的 设 计
数字闹钟的设计与制作
一、设计任务与要求
设计并制作一个带有可定时起闹的数字钟
1.有“时”、“分”十进制显示,“秒”使用发光二极管闪烁表示
2.以24小时为一个计时周期
3.走时过程中能按预设的定时时间(精确到小时)启动闹钟,以发光二极管闪烁表示,启闹时间为3s~10s
二、实验仪器及主要器件
5V电源
1台 面包板
1块 74LS163
6片 74LS00
5片 74LS138
2片 CD4511
4片 LM555
1片 74LS123
1片 LED共阴极显示器
4片 电阻
若干 电容
3个 导线
15米
三、设计原理方案
系统构成
1、标准时间源
l)标准时间源即秒信号发生器)可采用LM555构成多谐振荡器,调整电阻可改变频率,使之产生1Hz的脉冲信号(即T=1S)
LM555管脚排列及电路
T=0.7(RA+2RB)C
T=1S,C=220uF
计算得RA+2RB≈6.5K
取RA=1.5K,RB=2.4K
2.计时部分:时计数单元一般为24进制计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
模60计数器采用异步方式
如秒计数器:分成个位和十位,个位模十,十位模六。个位从0000计数到1001,利用置数端将个位从0000重新开始计数,同时将1001信号作为一个CP脉冲信号传给十位,让十位开始从0000开始计数。以此规律开始计数,直到十位计数到5,个位计数到9时,通过十位的置数端将十位清零,重新开始计数,并将此信号作为一个CP脉冲信号传给分计数器。
模24计数器电路
模24计数器采用同步方式, 使用两片74LS163芯片,cp脉冲均由分计数器提供.第一片制成模10计数器,将1001信号提取出来后给与清零端。第二片芯片制成模为3的计数器,原数据ABCD给予0000信号.将第一片芯片的0011信号与第二片芯片的0010信号提取出来给与第一片芯片的置数端与第二片芯片的清零端,上升沿过来之后,两片芯片同时清零
3、定时起闹部分
l)正点起闹,不要求分)使用2片74LS138,分别选出小时的十位和个位)小时十位为0~2,3-8译码器只使用前2个输入端,小时个位为0~9,3-8译码器只有3个输入端,会丢失几个时间点:8点、9点、18点、19点。)还应控制起闹时间的长短,用74LS123构成单稳态触发器
起闹部分框图
控制起闹时间长短:T=0.28RC(1+0.7k/R)采用2片74LS138,将控制十位的3-8译码器的A2端作为控制个位3-8译码器的最高位,这样就可以满足小时个位为0-9。控制十位的3-8译码器的A1,A0一起控制十位从0-2变化。
4、完整的闹钟电路图(ewb设计图)
电路安装要求
1.布局合理
2.导线横平竖直,且不要从集成块上跳线
3.导线紧贴面包板,连接可靠
4.交叉线尽可能少
调试方法:
(1)采用逐级调试的方法
1.确保秒信号正常
2.调试秒计数器
3.调试分计数器,可将秒信号作为分计数器的CP脉冲
4.调试小时计数器,可将秒信号作为小时计数器的CP脉冲
5.调试闹钟电路
(2)将秒信号发生电路中的电容换成比较小的电容,这样使得分信号的脉冲周期比较短
五、设计和调试过程中出现的问题及解决方法
1)将秒信号接入示波器,与标准信号对比,出现误差,但在允许范围之内。
2)插上电源后发现秒信号和分信号的信号紊乱,分信号和秒信号同步计数。于是我们对秒的模六十进行单脉冲及示波器的检测,在检查秒信号个位(模十计数器)时发现,14脚信号正确,而13,12,11脚信号紊乱。后进行接线检查,发现有线是虚接,再修改后,13脚信号恢复正常,而12,11脚依旧紊乱。因查不出原因,而后对分信号进行检查。由于分秒计数器所采用的模六十一致,而分信号正常,故排除模六十计数器设计有误。将分信号的器件替换控制秒信号的器件,秒信号依旧有误,故排出器件问题。最后进行检测面包板状况,出现了让人崩溃的状况,面包板上控制秒信号个位的163芯片2脚所在的一纵列5个孔全部与地相连。我们不得不改变布局,进行避让。修改后,分秒模六十计数器正常。
3)刚接通电源时,小时计数器十位显示7,后给予清零信号后显示恢复正常。将秒脉冲接到小时计数器的个位CP端,在进位时发现23:00时不能同时清零。对模二十四的设计进行分析发现采用的清零端为异步,后经过改造改成同步清零,清零正常。
4)在检测CD4511驱动电路的过程中发现数码管不能正常显示的状况,经检验发现主要是由于接触不良的问题,其中包括线的接触不良和芯片的接触不良,在实验过程中,数码管有几段二极管时隐时现,有时会消失。用5V电源对数码管进行检测,一端接地,另一端接触每一段二极管,发现二极管能正常显示的,在检测过程中发现有几根线有时能接通,有时不能接通,把接触不好的线重新接过后发现能正常显示了。其次是由于芯片接触不良的问题,当检查到线路完全正确,并且确保导线没有问题时,我们推测器件有问题,其解决方法为把CD4511的芯片拔出,根据面包板孔的的状况重新调整其引脚,使其正对于孔,再用力均匀地将芯片插入面包板中,此后发现能正常显示。
5)在检查分信号到小时信号的进位是否正常时发现有时显示正常,有时显示不稳定。一时找不到问题,经过讨论发现CP脉冲重叠造成显示不稳定。
6)在制作起闹部分电路的过程中,发现闹钟能完成基本功能,但无法在8,9,18,19点起闹。通过分析和设计,我们采用卡诺图化简将输入信号接到功能脚的方法,到达在特殊时间起闹的目的。
至此,数字闹钟的调试全部结束并达到要求。
六、心得体会
本次数字钟设计要求我们将理论付诸实践,在实践中进一步巩固理论知识,最终当我们看到自己设计好的数字闹钟时,我们激动万分。
首先,我们从没有将以前学的各种知识整合到一起,所以这种有点综合性的课设就要求我们在熟悉每个工作部分的同时,能把他们有机的结合起来。
第二,在模六十和模二十四的计数器的设计中,要求我们对各个芯片的各引脚的功能很熟悉。在这个过程中,我们进一步的熟悉的每个器件的用途和功能,尤其是4511和74LS123,这两种芯片之前我们都没有接触过。
第三,我们在设计的过程中使用了EWB软件,由于电路复杂,交叉线较多,所以就要求我们在连接过程中细心的完成接线,并巧妙的布局使得面包板上的线不交叉。
第四,当我们连接好线路以后,在调试的过程中我们借助于示波器,借助于低频信号发生器的单脉冲,一步步的排查错误,在此过程中更深一步的熟悉的了解了示波器和低频信号发生器的使用方法。
第五,在整个课设中要求我们有良好的心理状态,尤其是面对连线复杂的面包板。我们必须冷静分析问题,解决问题。
第六,本次课设是一个团体的活动,我们在这次课设中体会了团队精神。
最后,感谢老师给我们一次实践动手的机会,让我们得到了提升。我期待今后能有更多的机会参与这些课题的制作!
第四篇:微机原理课程设计电子闹钟
电子钟设计
1任务要求
1.1显示位置:屏幕中央.1.2日期显示格式“时:分:秒.1.312/24时制可调.1.4在显示屏上显示提示语“CURRENT TIME IS:”和当前时间.2工作原理
1时钟起始时间的设置
先调用DOS操作系统模块9,在显示屏上显示提示语“TIME SYSTEM IS:”,输入时制12或24后,显示“CURRENT TIME IS:”,再调用DOS操作系统模块10,提示要输入时钟的起始时间,输入时间的格式是“时:分:秒”。输入的时间以字符串形式存放在已定义的存储器缓存区内,继而调用TRAN1转换子程序和MUL10乘10子程序,将存放在存储器缓存区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放在寄存器CH、DH、DL中。
2延时程序
调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。
3时间显示
调用DOS操作系统模块9,可用来显示存储器内字符串。由于显示的字符必须为ASCII码,因为要调用TRAN2转换子程序将寄存器CH、DH、DL内压缩BCD码字符串转换成ASCII字符串,字符串最后以字符“$”结束,并按时、分、秒的顺序送存储器缓冲区内。调用DOS操作系统模块9,(DS:DX)应指向字符串首址。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下CTRL和BREAK二键。
4程序堆图 5程序清单
DATA SEGMENT BUFFER DB 10;设置输入字符串用缓冲区 DB ? DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$' CT DB 'CURRENT TIME IS:$' PM DB 'PM $' AM DB 'AM $' KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR DB ? DAT ENDS STA SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?)TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H;设置1CH中断
MOV AL,1CH
INT 21H
;段地址放入ES,偏移地址放入BX
MOV KEEPIP,BX
;保偏移地址存
MOV KEEPCS,ES
;保存段地址
PUSH DS
MOV DX,OFFSET TIME
MOV AX,SEG TIME
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
MOV DX,OFFSET TS
;DOS功能模块,显示字符串
MOV AH,9
INT 21H
MOV AH,1
;DOS功能模块,从键盘输入字符
INT 21H
MOV AH,1
INT 21H
MOV SR,AL
MOV DL,0AH
;”换行“
MOV AH,2
INT 21H
MOV DL,0DH
;”回车“
MOV AH,2
INT 21H
MOV DX,OFFSET CT
;DOS功能模块,显示字符串,提示从键盘输入
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,10
;DOS功能模块,从键盘输入字符串到缓冲区
INT 21H
MOV BX,OFFSET BUFFER+2
CALL TRAN1
;将输入的ASCII码转换为BCD码
INC BX
INC BX
CALL TRAN1
INC BX
INC BX
CALL TRAN1
MOV BX,OFFSET BUFFER+2
MOV AL,[BX]
CALL MUL10
;将BCD码转换为压缩的BCD码
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DL,AL AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI
POP CX
MOV AL,DL
ADD AL,1
;”秒“加1
DAA
MOV DL,AL
CMP AL,60H
;”秒“与60比较
JNE DISPY
;小于60S,转显示程序
MOV DL,0
;等于60S, ”秒“值为0,”分“+1
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
;”分“于60比较
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
MOV AL, SR
CMP AL,32H
JNE NEXT
JMP DISPY NEXT: MOV AL,CH
MOV HOUR,CH
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: CALL IOCLR
CALL IOSET1
CALL STAR
CALL IOSET2
CALL STAR
CALL IOSET
MOV BX,OFFSET BUFFER
MOV AL,SR
CMP AL,32H
JNE NEXT2
CALL AD12
MOV AL,HOUR
JMP NEXT1 NEXT2: MOV AL,CH
;”时“值转换成ASCII码
NEXT1: CALL TRAN2
;将压缩BCD码转换成ASCII码
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
;”分“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
;”秒“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,'$'
;显示字符串结束码
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET BUFFER
MOV AH,9
;DOS功能模块,显示字符串
INT 21H
POP DX
POP CX
POP BX
JMP AGAIN
CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
RET START ENDP MUL10 PROC
;将BCD码转换为压缩的BCD码
ADD AL,AL
DAA
MOV CL,AL
ADD AL,AL
DAA
ADD AL,AL
DAA
ADD AL,CL
DAA
MOV CL,AL
INC BX
MOV AL,[BX]
ADD AL,CL
RET MUL10 ENDP TRAN1 PROC
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
RET TRAN1 ENDP TRAN2 PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET TRAN2 ENDP IOCLR PROC
PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV AX,0600H
MOV BH,02
SUB CX,CX
MOV DX,184FH
INT 10H
;ASCII码转换成BCD码
;将压缩BCD码转换成ASCII码;调用BIOS,清除全屏幕
POP AX
POP BX
POP DX
POP CX
RET IOCLR ENDP TIME
PROC
DEC CX
IRET TIME
ENDP
PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H
调用BIOS,设置屏幕光标在中央
;POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR
6设计时遇到的问题及解决方法
在课程设计中遇到的最大的困难是如何利用软、硬件配合的方式产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好.于是我又重新翻阅了我们的学习课本,也就是电子工业出版社的《微机原理与接口技术(基于16位机)》,重点研究了第9章《中断》,通过对这一章的学习,我终于对中断有了详细的认识,在设计程序时也容易了很多。
设中断服务程序入口地址为TIME,则相应的程序如下:
„„
KEEPIP DW 0
;设置内存缓冲区,用于暂存 KEEPCS DW 0
;DOS的中断矢量
„„
;在主程序的初始化部分,先取出DOS的中断矢量并加以保存,然后装入需要的中断矢量
MOV AH,35H
;取出DOS的中断矢量,并送ES:BX
MOV AL,1CH
INT 21H
MOV KEEPIP,BX
;保存DOS的中断矢量
MOV KEEPCS,ES
PUSH DS;保护DS
MOV DX,OFFSET TIME
;将中断矢量取代
MOV AX,SEG TIME
;DOS的中断矢量
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
;恢复DS „„
AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI „„
TIME
PROC
DEC CX
IRET TIME
ENDP „„
;在程序结尾处,用以下程序恢复DOS的中断矢量 CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI 7新增功能及实现方法
7.112时制时显示AM或PM
„„
AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP „„
7.2绿色显示时间
„„
IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP „„
7.3在数字上下方各显示一行个数同小时数的”=“ „„
IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP „„ 8心得体会
这是我第一次用汇编语言来设计一个小程序,历时一周终于完成,其间有不少感触。首先就是借鉴.鲁迅先生曾说过要”拿来“,对,在这次课程设计中,就要”拿来"不少子程序,比如将ASCII码转换成BCD码,将BCD码转换成压缩BCD码,将压缩BCD码转换成ASCII码等,这些子程序的设计是固定的,因此可以直接从指导资料中调用,至于设置光标的子程序,只需要修改几个参数就可以,这大大方便了我的设计,为我节省了很多的时间。还有就是指导老师提供的资料很重要.这次课程设计的大部分程序,都可以在李老师提供的资料中找到,这对我的程序设计很有帮助,从这些资料中,我可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能,可以说,如果没有李老师提供的源程序,我将面临很大的困难。文章引用自:
第五篇:数电电子时钟课程设计
专业课程设计报告
题目:数字电子钟课程设计
系
别
电气工程系
专业班级
电气班
学生姓名
指导教师
提交日期
2011年X月X日
一、设计目的3
二、设计要求和设计指标
三、设计内容
3.1方案设计与选择
3.2原理设计和功能描述
3.2.1数字计时器的设计思想
3.2.2数字电子钟总体框架图
3.3单元电路的设计
3.3.1数字电子钟原理效果图
3.3.2晶体振荡器电路
3.3.3分频器电路
3.3.4时间计数器电路
3.3.5数码管
3.3.6扬声器
3.4元器件清单
3.4.1数字电子钟仿真
四、本设计改进建议
五、感想
六、主要参考文献
附录
一、设计目的数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。
二、设计要求和设计指标
1、设计一个能显示时、分、秒的数字钟,显示时间从00:00:00到23:59:592、设计的电路包括产生时基信号,时、分、秒的计时电路,显示电路。
3、扩展功能:能实现校时、教分、教秒;整点报时。
三、设计内容
3.1方案设计与选择
数字电子技术的复杂性和灵活性决定了数字电子钟的设计方案有多种,如下是我总结的部分方案。
方案一:
脉冲信号源的选择。用555定时器制作的多谐振荡器,信号发生器,脉冲芯片等方式都可以作为脉冲信号源,在此我选择的是多谐振荡器,主要考虑的是它的易于制作和很好的稳定性。
方案二:
时分秒计数器的选择。时分秒计数器的选择同样有多种,74160N和74161N都是不错的选择,74LS160和
74LS161,74LS190和74LS191等等也都可以,考虑到其简单易用和作为课本上重点内容在此我们选择的是74160N。
方案三:
译码显示器的选择。DCD_HEX或7448加上SEVEN_SEG_COM_K等也是多种方案,这里我选择的是DCD_HEX。
3.2原理设计和功能描述
3.2.1数字计时器的设计思想
要想构成数字钟,首先应选择一个脉冲源——能自动地产生稳定的标准时间脉冲信号。而脉冲源产生的脉冲信号地频率较高,因此,需要进行分频,使得高频脉冲信号变成适合于计时的低频脉冲信号,即“秒脉冲信号”(频率为1Hz)。经过分频器输出的秒脉冲信号到计数器中进行计数。由于计时的规律是:60秒=1分,60分=1小时,24小时=1天,就需要分别设计60进制,24进制计数器,并发出驱动信号。各计数器输出信号经译码器、驱动器到数字显示器,是“时”、“分”、“秒”得以数字显示出来。
3.2.2数字电子钟总体框架图
图2-2
3.3单元电路的设计
3.3.1数字电子钟原理效果图
图2-3-1
3.3.2晶体振荡器电路
晶体振荡器是电子钟的核心,晶体振荡器设计的质量直接影响了整个电的好坏。这里我用555定时器制作了一个多谐振荡器。
其中R1=57.72
kΩ,R1=115.4
kΩ,C=100nF,Cf=10nF,f=1/0.7(Rw+2R)C=1/[0.7(57.72+2*115.4)*103*100*10-9]≈50Hz。
其产生的频率为50Hz,然后经过整形、分频获得1Hz的秒脉冲。如图:
图2-3-2
3.3.3分频器电路
分频器是由两个74160N组成的50进制计数器。则输出端的频率则是将原来的50Hz分成1Hz的频率输出,实现分频效果。
图2-3-3
3.3.4时间计数器电路
时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器、时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,时个位和时十位计数器为24进制计数器,其原理图如下:
图2-3-4
3.3.5数码管
数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管DCD_HEX,其已内含译码器功能,所以不用再另加译码器。
图2-3-5
3.3.6扬声器
该扬声器的额定频率为200Hz,额定电压为3V,额定电流为0.05A。
图2-3-6
3.4元器件清单
元件名称
数量(个)
DCD_HEX
74160N
555_VIRTUAL
4049BT_5V
74LS00D
57.72kΩ电阻
115.4kΩ电阻
5V直流电源
BUZZER
100nF电容
10nF电容
导线
若干
表2-4
3.4.1数字电子钟仿真
下图为仿真结果,仿真开始时,多谐振荡器产生50Hz的正弦脉冲信号,然后经过分频器后其输出的频率变为1Hz。计数器接收到脉冲信号后开始计数,计数结果显示在数码管上。当分秒计数器达到59分59秒,然后再来一个脉冲信号时扬声器开始发声,也就是整点报时。下面为其中的一张仿真图。
图3-1
四、本设计改进建议
1、应选用石英晶体振荡器,为了简化电路分频选用CD4040。
2、本设计校时电路是将各个位上的使能端引出接一个单刀双掷开关,一端(1端)接低位的进位信号,另一端(2端)接校时电路。校正某位上的时间时,可以将相应位的开关接到2端,通过拨动校时电路就能实现校时功能。
3、没有校时电路。
五、感想
(1)
布局设计:要先根据主体电路图和扩展电路图想象各个元件的分布位置,哪块电路板该放哪些元件,如何最大限度利用电路板的空间,怎么样才能使走线明朗、简洁。
(2)
布线工艺:一开始看到电线像蜘蛛网一样,密密麻麻的,非常难看懂和检查,后来看了预先设计的线路,而且用各种颜色的导线区分,显得明朗清晰。
(3)
课题核心及使用价值:该课题用一个生活中的实力展示了振荡电路、计数电路、译码电路的作用与衔接过程,揭示了电子钟内部电路图及其各部分的作用。我们通过此课题,结合上学期学习的模拟电子、数字电子技术的理论课知识,可以系统地学习电子设计与测试的流程、方法、原理,为我们以后设计更加专业、复杂的集成电路打下雄厚的基础。
六、主要参考文献
[1]
清华大学电子学教研组编,童诗白、华成英主编:《
模拟电子技术基础
》
[
M
]
.(第四版).北京:高等教育出版社,2006.5(2009重印)
[2]华中工学院电子学教研室编,康华光主编:《电子
基础——数字部分》
[M]
.(第四版).北京:高等教育出版社,1988年
[3]
清华大学电子学教研组编,阎
石主编:《
数学电子技术基础
》
[M]
.(第五版).北京:高等教育出版社,2006.5(2008年重印)
[4]辽宁工程技术大学电工与电子技术实验中心组编,马玉芳、朴忠学、张国军主编:《
电子技术实验指导书
》,2010.3
[5]朱清慧、张凤蕊、翟天蒿、王志奎编著:《
Proteus教程——电子线路设计、制版与仿真
》
[M]
.北京:清华大学教育出版社,2008.9
[6]熊幸明主编:《电子电工技能训练》
[M].北京:电子工业出版社,2005年
华nan理工大学guang州学院
附录