简易电子钟的设计与实现.docx
- 格式:docx
- 大小:537.19 KB
- 文档页数:19
实验六、简易电子时钟设计一、实验内容:(1)、任务:设计一个简易电子时钟,实现分、秒计时功能。
(2)、要求:控制实验板上液晶输出分、秒数值,在软件环境下编写源文件,用软件器件实现。
二、实验源程序顶层主程序:module lcdshizhong(clk,rstn,LCD_COM0_sig,LCD_COM1_sig,LCD_COM2_sig,LCD_COM3_sig,LCD_5_sig,LCD_6_sig,LCD_7_sig,LCD_8_sig,LCD_9_sig,LCD_10_sig,LCD_11_sig,LCD_12_sig);input clk;input rstn;output LCD_COM0_sig;output LCD_COM1_sig;output LCD_COM2_sig;output LCD_COM3_sig;output LCD_5_sig;output LCD_6_sig;output LCD_7_sig;output LCD_8_sig;output LCD_9_sig;output LCD_10_sig;output LCD_11_sig;output LCD_12_sig;wire [3:0] minute_h;wire [3:0] minute_l;wire [3:0] second_h;wire [3:0] second_l;clock clock_inst(.clkk(clk),.rstn(rstn),.minute_h(minute_h),.minute_l(minute_l),.second_h(second_h),.second_l(second_l));LCD LCD_inst(.clk(clk),.rstn(rstn),.LCDDP1(1'b0),.LCDDP2(1'b0),.LCDDP3(1'b0),.LCDCol(1'b1),.LCD1(minute_h),.LCD2(minute_l),.LCD3(second_h),.LCD4(second_l),// .LCD1(4'b0001),// .LCD2(4'b0010),// .LCD3(4'b0011),// .LCD4(4'b0100),.LCD_COM0_sig(LCD_COM0_sig),.LCD_COM1_sig(LCD_COM1_sig),.LCD_COM2_sig(LCD_COM2_sig),.LCD_COM3_sig(LCD_COM3_sig),.LCD_5_sig(LCD_5_sig),.LCD_6_sig(LCD_6_sig),.LCD_7_sig(LCD_7_sig),.LCD_8_sig(LCD_8_sig),.LCD_9_sig(LCD_9_sig),.LCD_10_sig(LCD_10_sig),.LCD_11_sig(LCD_11_sig),.LCD_12_sig(LCD_12_sig));endmoduleendmodule调用子程序:1、时钟模块module clock(clkk,rstn,minute_h,minute_l,second_h,second_l);input clkk;//input clk;input rstn;output [3:0] minute_h; //分钟的高位output [3:0] minute_l; //分钟的低位output [3:0] second_h; //秒钟的高位output [3:0] second_l; //秒钟的低位reg [3:0] minute_h;reg [3:0] minute_l;reg [3:0] second_h;reg [3:0] second_l;reg second_l_flag; //秒钟低位的进位标志reg second_h_flag; //秒钟高位的进位标志reg minute_l_flag; //分钟低位的进位标志// reg minute_h_flag; //分钟高位的进位标志reg clk1;//reg clkk;reg [22:0] count;always@(posedge clkk)beginif(count == 23'b10110111000110110000000)begincount <= 0;clk1 <= ~clk1;endelsecount <= count + 1'b1;end//end/*//实验时选为2hz的时钟频率always @(posedge clk or negedge rstn)beginif(!rstn)clk1 <= 1'b0;elseclk1 <= ~clk1;end*///秒钟的低位always @(posedge clk1 o r negedge rstn)if(!rstn)beginsecond_l <= 4'b0000;second_l_flag <= 1'b0;endelsebeginif(second_l==4'b1001)beginsecond_l <= 4'b0000; //second_l + 1'b1;second_l_flag <= 1'b1;endelsebegin//if(second_l < 4'b1000)// beginsecond_l <= second_l + 1'b1;second_l_flag <= 1'b0;// end//else// begin// second_l <= 4'b0000;// second_l_flag <= 1'b0;endend//秒钟的高位always @(posedge second_l_flag or negedge rstn)if(!rstn)beginsecond_h <= 4'b0000;second_h_flag <= 1'b0;endelsebeginif(second_h==4'b0101)beginsecond_h <= 4'b0000;//second_h + 1'b1;second_h_flag <= 1'b1;endelsebegin//if(second_h < 4'b0100)// beginsecond_h <= second_h + 1'b1;second_h_flag <= 1'b0;// end//else// begin// second_h <= 4'b0000;// second_h_flag <= 1'b0;endend//分钟的低位always @(posedge second_h_flag or negedge rstn)if(!rstn)beginminute_l <= 4'b0000;minute_l_flag <= 1'b0;endelsebeginif(minute_l==4'b1001)beginminute_l <= 4'b0000;//minute_l + 1'b1;minute_l_flag <= 1'b1;endelsebegin//if(minute_l < 4'b1000)//beginminute_l <= minute_l + 1'b1;minute_l_flag <= 1'b0;//end//else//begin// minute_l <= 4'b0000;//minute_l_flag <= 1'b0;endend//分钟的高位always @(posedge minute_l_flag or negedge rstn)if(!rstn)beginminute_h <= 4'b0000;// minute_h_flag <= 1'b0;endelsebeginif(minute_h==4'b0101)beginminute_h <= 4'b0000;//minute_h + 1'b1; // minute_h_flag <= 1'b1;endelsebegin//if(minute_h < 4'b0100)//beginminute_h <= minute_h + 1'b1;// minute_h_flag <= 1'b0;//end//else//begin// minute_h <= 4'b0000;//minute_h_flag <= 1'b0;endendendmodule2、4-7译码模块,module seg4_7(clk,rst_n,data_in,seg_out);input clk;input rst_n;input [3:0] data_in;output [7:0] seg_out;reg [7:0] seg_out;always@(posedge clk or negedge rst_n)beginif(rst_n==1'b0) beginseg_out <= 8'b11111111;endelse begincase(data_in[3:0])4'b0000: seg_out <= 8'b11000000;//04'b0001: seg_out <= 8'b11111001;//14'b0010: seg_out <= 8'b10100100;//24'b0011: seg_out <= 8'b10110000;//34'b0100: seg_out <= 8'b10011001;//44'b0101: seg_out <= 8'b10010010;//54'b0110: seg_out <= 8'b10000010;//64'b0111: seg_out <= 8'b11111000;//74'b1000: seg_out <= 8'b10000000;//84'b1001: seg_out <= 8'b10010000;//94'b1010: seg_out <= 8'b10001000;//A4'b1011: seg_out <= 8'b10000011;//b4'b1100: seg_out <= 8'b11000110;//C4'b1101: seg_out <= 8'b10100001;//d4'b1110: seg_out <= 8'b10000110;//E4'b1111: seg_out <= 8'b10001110;//Fdefault: seg_out <= 8'b11111111;//全灭endcaseendendendmodule3、 // --将内部输入的4字节数码管电平信号处理,得到4+8bit电平输出module LCD4Digit(input LCDFrameclk,input LCDPWMclk,input rstn,input LCDDP1,input LCDDP2,input LCDDP3,input LCDCol,input [7:0] LCD1,input [7:0] LCD2,input [7:0] LCD3,input [7:0] LCD4,output LCD_COM0_sig,output LCD_COM1_sig,output LCD_COM2_sig,output LCD_COM3_sig,output LCD_5_sig,output LCD_6_sig,output LCD_7_sig,output LCD_8_sig,output LCD_9_sig,output LCD_10_sig,output LCD_11_sig,output LCD_12_sig);wire [1:0] LCD_COM0enc;wire [1:0] LCD_COM1enc;wire [1:0] LCD_COM2enc;wire [1:0] LCD_COM3enc;wire [1:0] LCD_5enc;wire [1:0] LCD_6enc;wire [1:0] LCD_7enc;wire [1:0] LCD_8enc;wire [1:0] LCD_9enc;wire [1:0] LCD_10enc;wire [1:0] LCD_11enc;wire [1:0] LCD_12enc;// LCD Com signals 处理共阳极公共引脚电平LCDEncoding4to1com LCD_COM0enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDcom({1'b1, 1'b0, 1'b0,1'b0}), .LCDcomEncoded(LCD_COM0enc));PWM LCD_COM0_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_COM0enc), .PWMV oltage(LCD_ COM0_sig));LCDEncoding4to1com LCD_COM1enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDcom({1'b0, 1'b1, 1'b0,1'b0}), .LCDcomEncoded(LCD_COM1enc));PWM LCD_COM1_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_COM1enc), .PWMV oltage(LCD_ COM1_sig));LCDEncoding4to1com LCD_COM2enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDcom({1'b0, 1'b0, 1'b1,1'b0}), .LCDcomEncoded(LCD_COM2enc));PWM LCD_COM2_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_COM2enc), .PWMV oltage(LCD_ COM2_sig));LCDEncoding4to1com LCD_COM3enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDcom({1'b0, 1'b0, 1'b0,1'b1}), .LCDcomEncoded(LCD_COM3enc));PWM LCD_COM3_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_COM3enc), .PWMV oltage(LCD_ COM3_sig));// LCD Segment Signals 处理数码管电平LCDEncoding4to1 LCD_5enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({!LCD1[3], !LCD1[4], !LCD1[6 ], !LCD1[5]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_5enc));PWM LCD_5_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_5enc), .PWMV oltage(LCD_5_sig) );LCDEncoding4to1 LCD_6enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({LCDDP1, !LCD1[2], !LCD1[1 ], !LCD1[0]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_6enc));PWM LCD_6_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_6enc), .PWMV oltage(LCD_6_sig) );LCDEncoding4to1 LCD_7enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({!LCD2[3], !LCD2[4], !LCD2[6 ], !LCD2[5]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_7enc));PWM LCD_7_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_7enc), .PWMV oltage(LCD_7_sig) );LCDEncoding4to1 LCD_8enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({LCDDP2, !LCD2[2], !LCD2[1 ], !LCD2[0]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_8enc));PWM LCD_8_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_8enc), .PWMV oltage(LCD_8_sig) );LCDEncoding4to1 LCD_9enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({!LCD3[3], !LCD3[4], !LCD3[6 ], !LCD3[5]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_9enc));PWM LCD_9_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_9enc), .PWMV oltage(LCD_9_sig) );LCDEncoding4to1 LCD_10enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({LCDDP3, !LCD3[2], !LCD3[1 ], !LCD3[0]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_10enc));PWM LCD_10_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_10enc), .PWMV oltage(LCD_10_s ig));LCDEncoding4to1 LCD_11enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({!LCD4[3], !LCD4[4], !LCD4[6 ], !LCD4[5]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_11enc));PWM LCD_11_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_11enc), .PWMV oltage(LCD_11_s ig));LCDEncoding4to1 LCD_12enc_inst(.clk(LCDFrameclk), .rstn(rstn), .LCDSegments({LCDCol, !LCD4[2], !LCD4[1], !LCD4[0]}), .LCDcom(LCDcom), .LCDSegEncoded(LCD_12enc));PWM LCD_12_inst(.clk(LCDPWMclk), .rstn(rstn), .V oltage(LCD_12enc), .PWMV oltage(LCD_12_s ig));endmodule4、公共引脚电平编码模块module LCDEncoding4to1com(clk, rstn, LCDcom, LCDcomEncoded);input clk, rstn;input [3:0] LCDcom;output [1:0] LCDcomEncoded; // {Full Drive, Pull Up, Pull Down}reg [1:0] LCDcomEncoded;reg [2:0] state;parameter seg1a=0, seg1b=1, seg2a=2, seg2b=3, seg3a=4, seg3b=5, seg4a=6, seg4b=7 ;always @(state)begincase (state)seg1a:beginLCDcomEncoded = LCDcom[3] ? 2'b00 : 2'b10; // (0V or 2V) endseg1b:beginLCDcomEncoded = LCDcom[3] ? 2'b11 : 2'b01; // (3V or 1V) endseg2a:beginLCDcomEncoded = LCDcom[2] ? 2'b00 : 2'b10; // (0V or 2V) endseg2b:beginLCDcomEncoded = LCDcom[2] ? 2'b11 : 2'b01; // (3V or 1V) endseg3a:beginLCDcomEncoded = LCDcom[1] ? 2'b00 : 2'b10; // (0V or 2V) endseg3b:beginLCDcomEncoded = LCDcom[1] ? 2'b11 : 2'b01; // (3V or 1V) endseg4a:beginLCDcomEncoded = LCDcom[0] ? 2'b00 : 2'b10; // (0V or 2V) endseg4b:beginLCDcomEncoded = LCDcom[0] ? 2'b11 : 2'b01; // (3V or 1V) enddefault:beginLCDcomEncoded = 21'b00;endendcaseendalways @(posedge clk or negedge rstn)beginif (rstn == 0)beginstate = seg1a;endelsebegincase (state)seg1a:state = seg1b;seg1b:state = seg2a;seg2a:state = seg2b;seg2b:state = seg3a;seg3a:state = seg3b;seg3b:state = seg4a;seg4a:state = seg4b;seg4b:state = seg1a;endcaseendendendmodule5、脉冲电压转换模块module PWM(clk, rstn, V oltage, PWMV oltage);input clk, rstn;input [1:0] V oltage;output PWMV oltage;reg PWMV oltage;reg [2:0] state;parameter PWM0=0, PWM1=1, PWM2=2 ;always @(state)begincase (state)PWM0:beginif (V oltage == 2'b00)PWMV oltage = 1'b0;else if (V oltage == 2'b11)PWMV oltage = 1'b1;else if (V oltage == 2'b01)PWMV oltage = 1'b1;else if (V oltage == 2'b10)PWMV oltage = 1'b1;endPWM1:beginif (V oltage == 2'b00)PWMV oltage = 1'b0;else if (V oltage == 2'b11)PWMV oltage = 1'b1;else if (V oltage == 2'b01)PWMV oltage = 1'b0;else if (V oltage == 2'b10)PWMV oltage = 1'b1;endPWM2:beginif (V oltage == 2'b00)PWMV oltage = 1'b0;else if (V oltage == 2'b11)PWMV oltage = 1'b1;else if (V oltage == 2'b01)PWMV oltage = 1'b0;else if (V oltage == 2'b10)PWMV oltage = 1'b0;enddefault:beginPWMV oltage = 1'b0;endendcaseendalways @(posedge clk or negedge rstn) beginif (rstn == 0)beginstate = PWM0;endelsebegincase (state)PWM0:state = PWM1;PWM1:state = PWM2;PWM2:state = PWM0;endcaseendendendmodule6、 LCD电平编码module LCDEncoding4to1(clk, rstn, LCDSegments, LCDcom, LCDSegEncoded);input clk, rstn;input [3:0] LCDSegments;output LCDcom; // Just used for simulationoutput [1:0] LCDSegEncoded;reg LCDcom;reg [1:0] LCDSegEncoded;reg [2:0] state;parameter seg1a=0, seg1b=1, seg2a=2, seg2b=3, seg3a=4, seg3b=5, seg4a=6, seg4b=7 ;always @(state)begincase (state)seg1a:beginLCDcom = 1'b0;LCDSegEncoded = LCDSegments[3] ? 2'b11 : 2'b01; // (3V or 1V)endseg1b:beginLCDcom = 1'b1;LCDSegEncoded = LCDSegments[3] ? 2'b00 : 2'b10; // (0V or 2V)endseg2a:beginLCDcom = 1'b0;LCDSegEncoded = LCDSegments[2] ? 2'b11 : 2'b01; // (3V or 1V)endseg2b:beginLCDcom = 1'b1;LCDSegEncoded = LCDSegments[2] ? 2'b00 : 2'b10; // (0V or 2V)endseg3a:beginLCDcom = 1'b0;LCDSegEncoded = LCDSegments[1] ? 2'b11 : 2'b01; // (3V or 1V)endseg3b:beginLCDcom = 1'b1;LCDSegEncoded = LCDSegments[1] ? 2'b00 : 2'b10; // (0V or 2V)endseg4a:beginLCDcom = 1'b0;LCDSegEncoded = LCDSegments[0] ? 2'b11 : 2'b01; // (3V or 1V)endseg4b:beginLCDcom = 1'b1;LCDSegEncoded = LCDSegments[0] ? 2'b00 : 2'b10; // (0V or 2V)enddefault:beginLCDSegEncoded = 2'b00;endendcaseendalways @(posedge clk or negedge rstn)beginif (rstn == 0)beginstate = seg1a;endelsebegincase (state)seg1a:state = seg1b;seg1b:state = seg2a;seg2a:state = seg2b;seg2b:state = seg3a;seg3a:state = seg3b;seg3b:state = seg4a;seg4a:state = seg4b;seg4b:state = seg1a;endcaseendendendmodule三、程序设计思想及原理:本次实验在液晶显示的基础上增加了一个秒分模块,设计秒分模块就是用时钟驱动计数器实现,比如秒针的低位从0变到9时就会给秒针的高位进一位。
简易电子钟的设计与实现电子钟是一种普遍使用的计时设备,它便利性与实用性使其成为家庭、学校、办公室等各个场所的重要组成部分。
本文将介绍一种简易电子钟的设计和实现,希望读者在本文的指导下,能够自己动手制作一款属于自己的电子钟。
1. 硬件选购制作电子钟需要一些硬件设备,在硬件选购时,需要考虑以下因素:- 显示器件:显示器件如LED点阵和数码管是电子钟的重要组成部分,我们可以选择4位LED数码管或者128*64 OLED显示屏。
- 控制器:控制器有多种选择,我们可以使用Arduino单片机或者STM32单片机,这两个均为常用的开发板,容易上手,支持多种编程语言。
- 时间模块:时间模块用于获取当前时间,我们可以选择DS1302时钟模块或者DS3231高精度时钟模块。
- 其他器件:红外遥控模块,蜂鸣器等辅助器件,可以根据需要选择。
2. 硬件连接在确定所需器件后,首先需要对这些器件进行连接,连接方式如下:- 数码管:数码管有四根引脚,分别代表数码管的4位数码,分别对应数字0~9,连接数码管需要了解其引脚定义,我们可以根据不同原理图实现引脚连接。
- 控制器:控制器和显示器连接,通过控制器的输入输出端口和显示器的输入输出端口相连。
- 时间模块:时间模块通过IIC通讯协议与控制器相连。
- 其他器件:按照器件对应原理图进行连接。
3. 程序设计电子钟的最重要的部分是程序设计,通过编写程序,实现获取时间并在数码管或者显示屏上显示当前时间的功能。
电子钟的程序设计分为两个部分:硬件驱动和逻辑控制。
硬件驱动:硬件驱动是基础部分,用于控制指定端口的输入输出和基本的口蹦,例如我们需要实现时间的获取和进行控制,我们需要实现对时间模块进行操作的函数,例如读取时间,设置时间等功能。
逻辑控制:逻辑控制是电子钟的核心部分,它把硬件驱动和显示控制进行了结合,实现了时间的获取和显示。
逻辑控制程序主要包括以下几个部分:- 时间获取:获取时间模块的信息。
简易电子钟的制作硬件设计序言单片机具有体积小、可靠性高、功能强、灵活方便等许多优点,故可以广泛应用于各个领域包括家庭生活必需品,对各行各业的产品更新换代起到了重要的推动作用。
而此次设计的简易电子钟就是一个很典型的例子电子钟在生活中非常有用,尤其是多路定时功能。
市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂。
不便于制作。
用单片机配合计时软件,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。
在本文中主要对软件进行阐述。
首先根据硬件的设计方案确定软件方案,然后对硬件作简要介绍后设计出总的流程图,其次根据总的流程图画出各部分的子流程图然后写出程序,再次对调试中所出现的问题进行分析并解决,最后对本次的设计结果进行分析,提出优点和不足之处,然后总结。
第1章绪论1.1电子钟的概述电子钟在生活中非常有用,尤其是多路定时功能。
市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂。
不便于制作。
用单片机配合计时软件,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。
1.2 数字钟的系统分析单片机的使用主要表现在以下三个方面:1、数字钟的结构简单,并且具备最小单片机系统的基本构成。
2、数字钟电路中使用了单片机系统中最为常用的输入输出设备:按键开关和数码管。
3、数字钟程序可以反映单片机系统中定时器和中断的用法。
单片机系统中的定时和中断是单片机最重要的资源,也是应用最为广泛的功能。
数字钟程序主要就是利用定时器和中断实现计时和显示功能。
按要求,本次的毕业设计要求完成的内容包括:1、时钟精度:±30秒/天。
2、可进行时、分、秒的调整。
3、采用六位数字显示。
4、具有报时功能。
添加的功能:数字钟闹铃功能。
上面所提到的技术指标的意义,主要包含了:1、定时器的使用:本设计中通过实现24小时时钟和秒表,充分说明了单片机定时器使用方法。
555式简易电子钟电路的设计方案简介本文档介绍了一种基于555集成电路的简易电子钟的设计方案。
利用该电路设计,我们可以制作出一个具备小时、分钟和秒钟显示功能的电子钟。
设计要点- 使用555定时器集成电路,该集成电路具备稳定的工作特性和可靠的性能。
- 使用数码时钟显示模块,该模块可以将输入的数据转换为数字显示。
- 利用七段数码管来显示小时、分钟和秒钟。
- 引入实时时钟(RTC)模块,用于提供准确的时间信息。
硬件设计1. 使用555定时器作为主要的时钟源。
通过连接合适的电容和电阻,调整555电路的工作频率以匹配我们所需的计时精度。
2. 连接数码时钟显示模块到555电路的输出引脚,以便将计时结果转换为数字显示。
3. 连接七段数码管到数码时钟显示模块的输出引脚,以实现小时、分钟和秒钟的显示功能。
4. 添加实时时钟(RTC)模块,连接到555电路以提供准确的时间信息。
软件设计1. 确保555电路正确工作并通过合适的电容和电阻值产生所需的时钟频率。
2. 使用适当的编程语言编写软件代码,将时间信息从RTC模块传输到数码时钟显示模块。
3. 根据时钟精度要求,实时更新数码时钟显示模块的输出数据。
4. 在七段数码管上显示小时、分钟和秒钟。
调试和测试1. 确保555电路和RTC模块正常工作并提供准确的时间信息。
2. 对数码时钟显示模块进行测试,确保它能正确地将时间信息转换为数字显示。
3. 确保七段数码管能正确显示小时、分钟和秒钟。
4. 对整个电子钟进行综合测试,确保各个组件的协同工作。
结论通过本文档所提供的555式简易电子钟电路的设计方案,我们可以制作出一个具备小时、分钟和秒钟显示功能的电子钟。
该设计方案综合了硬件和软件的设计,实现了稳定的时钟工作和准确的时间信息显示。
通过适当的调试和测试,我们可以确保电子钟的可靠性和性能。
专业课程设计基于单片机的简易电子钟设计专业课设说明:本次专业课程设计通过对本专业知识的学习、应用,以STC89C51单片机为核心,辅以必要的电路,设计了一个简易的电子时钟,它由5V直流电源供电,通过数码管能够准确显示时间,调整时间。
数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。
在这次设计中,我们采用LED数码管显示时、分、秒,以24 小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。
在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。
本次课设由本人(傅锦城136712117)孙龙龙(136712116)黄宗旭(136712107)为一组共同完成。
本人负责搜集简易时钟的设计和制作原理以及所用电路元件的参数资料和使用方法等相关资料。
并且负责电路的焊接工作。
孙龙龙负责单片机程序的编写。
黄宗旭负责电路原理图的绘制和模拟。
1. 系统基本设计思路此设计是在数码管上显示时、分和秒,电路包括:键盘、单片机及显示驱动电路。
各部分说明:(1)键盘用于校正、调节数码管上显示的时间。
(2)单片机通过输出各种电脉冲信号开驱动控制各部分正常工作。
(3)单片机发送的信号经过显示电路通过译码最终在数码管上显示出来。
(4)按键还可以切换12小时制和24小时制,并有指示灯。
系统工作过程:时间的主要处理过程是在CPU中完成的。
CPU会随时对时间进行读取数据的操作。
在读取了相应的寄存器的值后,CPU将读取的值进行处理,再通过I/O口把数据显示在数码管上。
2. 单元电路方案根据设计要求,本系统主要由控制器模块、显示驱动模块和输入模块构成。
2.1 控制器模块采用51系列作为系统控制器单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制。
由于其功耗低、体积较小、技术成熟和成本低等优点,在各个领域应用广泛。
而且抗干扰性能好。
2.2 计时模块本方案完全用软件实现数字时钟。
设计制作简易数字钟一、设计要求1、设计一振荡源,用于产生1Hz的脉冲信号;2、能完成从00时00分00秒到23时59分59秒走时,并实时显示时、分、秒;3、具有手动校时、校分、校秒功能。
发挥部分:具有正点报时功能。
要求在59分58秒开始报时,持续5秒钟。
二、总体设计方案1、方案选择数字钟实际上是由一个对标准频率(1HZ)进行计数的计数电路为主要部分构成的。
由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ 时间信号必须做到准确稳定。
通常使用石英晶体振荡器电路来构成数字钟的标准时间基准信号。
数字钟的组成框图如下图所示。
数字钟计时周期是24,因此必须设置24 计数器,秒、分、时由七段数码管显示。
为使数字钟走时与标准时间一致,校时电路是必不可少的。
设计中采用状态机控制校时,通过切换开关用秒脉冲或手动按键产生脉冲先后对“时” “分” “秒”计数器进行校时操作。
2、数字钟的构成(1)数字钟的构成:振荡器、分频器、计数器、译码器、LED数码管显示器等几部分。
附加功能的实现还需采用T’触发器及与门和或门及蜂鸣器组成报时电路。
(2)数字钟的时、分、秒实际上就是由一个24 进制计数器(00-23),两个60 进制计数器(00-59)级联构成。
设计数字钟实际上就是计数器的级联。
(3)芯片选型:由于24进制、60进制计数器均由集成计数器级联构成,且都包含有基本的十进制计数器,从设计简便考虑,芯片选择十进制计数器74LS390。
3、元器件列表:型号74LS00、74LS04、74LS08、74LS21、74LS32、74LS47、74LS74、74LS86、74LS390、CD4068、CD4060、CD4511。
晶体管8050、510欧姆电阻、LED、轻触开关、自锁开关、蜂鸣器、10p电容、晶振32768、10M电阻。
三、系统工作原理1、主计数部分原理图图1主计数部分原理图如图所示,用两个十进制计数器74LS390组成60进制计数器和24进制计数器,分别用于对分、秒和时的计数。
简易电子时钟设计报告1. 引言电子时钟是一种用数字形式显示时间的时钟,广泛应用于日常生活中。
本文将介绍一种简易的电子时钟设计方案,包括硬件设计和软件实现。
该电子时钟采用数字LED显示屏,并通过开发板上的微控制器控制时间的显示。
2. 硬件设计2.1 硬件组成该电子时钟的主要硬件组成包括:- 数字LED显示屏:用于显示时钟的小时和分钟数。
该显示屏采用共阳极的数码管,每个数字有7个段可以点亮。
- 微控制器:使用STM32F103C8T6微控制器,具备足够的输入输出和处理能力。
- 调节按钮:用于调节时钟的小时和分钟数。
2.2 电路设计数字LED显示屏的每个段通过一个继电器和一个可控硅管来控制。
继电器通过微控制器的输出口来控制,可控硅管则通过脉宽调制(PWM)来控制。
微控制器通过GPIO口读取调节按钮的状态,根据按钮的操作来调整时钟的小时和分钟数。
同时,微控制器通过定时器中断来实现时钟的运行和显示。
电路设计如下图所示:3. 软件实现3.1 开发环境本设计使用Keil MDK开发环境进行软件的编写和调试。
Keil MDK 是一款常用的嵌入式开发工具,提供了强大的代码编辑、编译和仿真功能。
3.2 时钟控制软件中定义了一个结构体`Time`,包含了小时数和分钟数的变量。
通过定时器中断,每隔一秒钟将时钟的秒数加一,并根据秒数的变化更新时钟的小时和分钟数。
具体实现如下:cstruct Time {int hour;int minute;int second;void TIM2_IRQHandler(void) {if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); time.second++;if (time.second >= 60) {time.second = 0;time.minute++;}if (time.minute >= 60) {time.minute = 0;time.hour++;}if (time.hour >= 24) {time.hour = 0;}}3.3 数字显示根据时钟的小时和分钟数,将数字转换成BCD码,然后通过GPIO 口控制数字LED显示屏的每个段点亮或熄灭。
电子数字钟的设计与制作
设计和制作电子数字钟的步骤如下:
1. 确定需求:确定所要设计的电子数字钟的功能要求,如显示时间、日期、闹钟功能等。
2. 选取器件:选取合适的微控制器、显示屏、时钟芯片、按键等器件。
微控制器需要具备足够的处理能力和接口,以便于控制显示屏和处理输入信号。
3. 硬件设计:根据选取的器件,设计电路图和PCB布局。
包
括时钟电路、显示电路、按键电路、电源供电电路等。
4. 软件开发:编写嵌入式软件程序,实现时钟的各种功能。
包括处理时间的计算与显示、闹钟功能的设置与触发、用户界面的交互等。
5. 制作电路板:利用电子设计软件将电路图转化为PCB文件,并进行打样加工,制作出电路板。
6. 组装调试:根据设计好的布局,将所选取的器件焊接到电路板上。
完成后进行电路的检查、组装和连线等工作。
7. 软件烧录:通过编程器将软件程序烧录到微控制器中。
8. 调试测试:进行电源接入,对时钟的各个功能进行测试调试,确保其正常运行。
9. 外壳设计与制作:设计合适的外壳以保护电子数字钟,可以采用3D打印、注塑等方式制作外壳。
10. 最终装配与测试:将完整的电子数字钟进行装配,并进行
最后的测试以确保其功能正常。
简易电子钟设计范文电子钟是一种通过电子技术实现时间显示的设备。
它通常由一个数字显示屏,一个控制电路和一个电源组成。
其主要功能是显示小时、分钟和秒钟等时间信息,可以准确地显示时间,并可以根据需要设置闹铃功能。
设计一款简易电子钟可以使用Arduino等开发板或单片机来实现。
首先,我们需要选择一块合适的数字显示屏。
常见的数字显示屏有数码管和液晶显示屏两种类型,它们的显示原理和控制方式有所不同。
如果选择数码管作为显示屏,可以考虑使用常见的7段数码管,它由八个LED灯组成,可以显示0-9的数字以及一些字母和特殊符号。
数码管的控制方式是通过控制每个LED灯的亮灭来实现显示,可以使用数字输出口来控制。
Arduino的数字输出口可以输出高电平(5V)和低电平(0V),通过控制输出口的电平,就能够控制数码管的亮灭。
如果选择液晶显示屏作为显示器,可以选择字符型液晶显示屏或者图形型液晶显示屏。
字符型液晶显示屏通常可以显示一些字符或者数字,它的控制方式是通过并行或者串行接口来控制,可以使用开发板的GPIO口来实现。
图形型液晶显示屏可以显示更多的信息,它的控制方式是通过SPI接口或者I2C接口来控制,这需要相应的驱动库或者芯片来实现。
无论选择数码管还是液晶显示屏,我们都需要编写程序来控制显示。
程序的核心是一个循环,其中使用时钟模块来获取当前的时间,并使用相应的控制方式将时间信息显示在显示屏上。
如果需要设置闹铃功能,可以在循环中判断当前时间和设置的时间是否相等,如果相等则触发闹铃。
设计一个简易电子钟的完整步骤如下:1. 选择适合的开发板或者单片机,例如Arduino。
2.选择合适的显示屏,例如7段数码管或者液晶显示屏。
3.连接显示屏到开发板,根据显示屏的类型选择合适的引脚连接方式。
4.编写代码来控制显示屏显示时间信息。
5.添加时钟模块,用来获取当前的时间信息。
6.根据需要添加闹铃功能。
7.测试电子钟的功能和性能,不断优化改进。
难度等级:A简单
题目编号:013
简易电子时钟
一、功能介绍
该作品只利用单片机的最小系统板、一块时钟芯片和一块1602的液晶实现年、月、日、时、分、秒的显示及设定,最好有闹钟的功能。
二、设计要求
1.时间显示误差小于3s
2.能够设置时间及具有闹钟报警功能。
三、参考方案设计
1.原理框图见图1。
图1 红外线检测部分电路图
2.制作思路
(1)本作品可以有两种方案,一是直接用单片机的定时器;二是用一块时钟芯片实现时钟的控制;
(2)本作品主要分为两大部分来调试,一是时钟芯片的调试,二是显示器的调试;
(3)该作品集趣味性、实用性于一体,能很好的激发同学们的兴趣;
3.设计注意的地方
图2 PCF8563时钟芯片的原理图。
简易电子钟的设计与仿真一、设计要求和电路原理1.1 设计要求1)可以准确地显示北京时间。
2)时间显示选择24小时模式。
3)选用AT89C52单片机,将编写的程序下载到该单片机中,并能使数码管显示。
4)采用Keil C51编译,Proteus软件进行仿真。
1.2 设计原理与思路利用单片机的定时与中断系统功能实现电子钟的计数和调时。
采用AT89C52定时中断方式实现24小时制时钟精确的计时。
通过外部的12M(11.0529M)Hz 晶振产生稳定的谐振,在AT89C52的内部定时器电路实现定时,当定时器溢出时产生中断,累计定时器的定时时间达一秒时,数码管的秒显示加1,判断数码管的秒显示达60时,秒显示自动清零,分显示加1,判断分显示达60时,分显示自动清零,时显示加1,判断时显示达24时,时显示自动清零。
从而实现00:00:00—23:59:59 之间的任意时刻显示。
为了使时钟能够灵活的对时间进行调整、校对,通过增加外部的按键实现简单的复位、时调整、分调整的功能。
形成一个具有复位和校时功能的简易电子时钟。
二、电子时钟设计方案2.1电子钟设计的基本方法2.1.1电子钟实现计时的方法利用MCS-51系列单片机的可编程定时/计数器、中断系统来实现时钟计时。
(1) 计数初值计算:把定时器T0设为工作方式2,产生0.25ms定时中断,计数溢出4000次即得时钟计时最小单位秒,而4000次计数可用软件方法实现。
假设使用T/C0,方式2,0.25ms定时,fosc=12MHz。
则初值a满足(256-a)×1/12MHz×12μs =250μsa=6 (6H)TH0=#6H; TL0=#6H(2) 采用中断方式进行溢出次数累计,计满4000次为秒计时(1秒);(3) 从秒到分和从分到时的计时是通过累加和数值比较实现。
2.1.2 电子钟的时间显示电子钟的时钟时间在8位数码管上进行显示,时、分、秒的显示值可以在单片机的内部RAM设置三个缓冲单元,30H、31H、32H分别存储时、分、秒的值。
显示如下表:表2.1 电子钟的时、分、秒显示2.1.3 电子钟的时间调整电子钟设置3个按键通过程序控制来完成电子钟的时间调整。
A键复位;按下A键,时钟显示初始值12 00 00B键调整分;快速按下A键,分显示加1,当分显示为59,加1变成00 C键调整时;快速按下B键,时显示加1,当时显示为23,加1变成002.2 芯片以及元件2.2.1 AT89C52简介AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的,是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Fl ash只读程序存储器和256 bytes的随机存取数据存储器(RAM),有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线。
主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。
RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。
P0~P3 为可编程通用I/O 脚,其功能用途由软件定义。
下面对相关的引脚作介绍:➢VCC:+5V电源。
➢VSS:接地。
➢P0口:P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
➢P1 口:P1口是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
➢P2 口:P2口是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。
对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash 编程或校验时,P2亦接收高位地址和一些控制信号。
➢P3 口:P3口是一组带有内部上拉电阻的8 位双向I/O 口。
P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。
对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。
P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能。
P3 口还接收一些用于Fl ash 闪速存储器编程和程序校验的控制信号。
➢RST:复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
➢XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。
➢XTAL2:振荡器反相放大器的输出端。
AT89C52芯片的引脚图和芯片图如下:图2.1 AT89C52引脚图和芯片图2.2.2 八位动态显示数码管1) 数码管动态显示接口图图2.2 数码管的动态显示接口图图2.3 数码管实物图2)数码管的动态显示驱动数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
2.3 电子钟模块化电路2.3.1电子钟的硬件设备模块电子钟的总体硬件模块电路有:晶振、手动复位、数码管显、和时间调整和单片机接口电路,如图2.4所示。
下面分别介绍个模块的设计。
图2.4 电子钟硬件模块2.3.2 时钟电路模块图2.5所示为时钟电路原理图,在AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
图2.5 时钟电路2.3.3 复位电路模块单片机复位的条件是:必须使RST/VPD 或RST引(9)加上持续两个机器周期(即24个振荡周期)的高电平。
例如,若时钟频率为12 MHz,每机器周期为1μs,则只需2μs以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
单片机常见的复位如图所示,这是一个微分型电路。
电路为上电复位电路,它是利用电容充电来实现的。
在接电瞬间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。
只要保证RST为高电平的时间大于两个机器周期,便能正常复位(由电容的通电时间计算得到,复位电阻的阻值在10—30pF)。
该电路除具有上电复位功能外,若要复位,只需按图中的RST键,此时电源VCC经电阻R1、R2分压,在RST端产生一个复位高电平。
图2.6 复位电路2.3.4 数码管显示电路模块系统采用动态显示方式,单片机AT89C52的P0口控制LED数码管的段选线,P2口控制数码管的位选线。
动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。
下图为共阴极8位数码管动态显示。
图2.7 数码管显示电路2.3.5 按键电路模块下图为按键模块电路原理图,A为复位键,B为时钟调控键,C为分钟调控键。
A、B、和C三个按键一路有上拉电阻连接高电平,另一路接入单片机的控制引脚P1.0,、P1.1、P1.2。
按钮断开时,控制引脚P1.0,、P1.1、P1.2均为高电平,当按下某一个按键时,控制引脚变为低电平,由程序控制其相应的作用。
图2.8 按键电路2.3.6 电子时钟系统的设计原理图结合所有的模块设计,综合得出电子钟系统的总体设计原理图如图2.9所示。
图2.9 电子钟原理图2.3.7 相关引脚和元件a)AT89C52单片机用到的引脚:P0口:用于控制数码管的段选P2口:用于控制数码管的位选P1口:P1口的P1.0,、P1.1、P1.2脚分别控制时钟的复位、分调整、时调整。
XTAL1、XTAL2:接晶振的脉冲输入RST:复位电路b)其他的元件和相关作用电阻R1—R11:上拉电阻,保护电路,起限流的作用电阻R12:复位电路的充电电阻8个8段数码管:1、2显示时,4、5显示分,7、8显示秒,3、6不显示。
电容C1、C2:晶振的微电容,单片机的脉冲周期产生晶振:12M,与电容构成晶振电路材料清单见附录1三、电子时钟的Protues仿真3.1 Protues软件概述Protues软件是英国Labcenter electronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,是目前最好的仿真单片机及外围器件的工具,是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
Protues软件具有其它EDA工具软件(例:multisim)的功能。
这些功能是:(1)原理布图(2)PCB自动或人工布线(3)SPICE电路仿真(4)互动的电路仿真,用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。