电子时钟课程设计代码

合集下载

单片机课程设--电子钟设计

单片机课程设--电子钟设计

单片机MCS-51数钟课程设计系别:专业:班级:姓名及学号:日期:目录单片机MCS-51数钟 (1)课程设计 (1)一、课程设计的目的 (3)二、课程设计任务 (3)三、硬件结构概述 (4)(一)复位电路 (4)(二)晶振电路 (4)(三)按键电路 (4)(四)显示部分 (5)四、软件结构概述 (5)(一)代码说明 (5)(二)按键处理思路 (10)(三)秒表设计思路 (11)五、调试过程 (12)(一)系统仿真 (12)(二)仿真过程中出现的问题及解决方案 (12)六、心得体会 (13)七、参考文献 (14)一、课程设计的目的(1)巩固、加深和扩大单片机应用的知识面, 提高综合及灵活运用所学知识解决工业控制的能力;二、(2)培养针对课题需要, 选择和查阅有关手册、图表及文献资料的自学能力, 提高组成系统、编程、调试的动手能力;三、(3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程, 软硬件设计的方法、内容及步骤。

四、课程设计任务(1)在ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。

也可以在其它MCS—51单片机硬件板上完成, 或自行设计硬件并制做完成。

(2)程序的首地址应使目标机可以直接运行, 即从0000H开始。

在主程序的开始部分必须设置一个合适的栈底。

程序放置的地址须连续且靠前, 不要在中间留下大量的空闲地址, 以使目标机可以使用较少的硬件资源。

(3)6位LED数码管从左到右分别显示时、分、秒(各占用2位), 采用24小时标准计时制。

开始计时时为000000, 到235959后又变成000000。

(4)在键盘上选定3个键分别作为小时、分、秒的调校键。

每按一次键, 对应的显示值便加1。

分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。

在调校时均不向上一单位进位 (例如分加到59后变为00, 但小时不发生改变)。

(5) 软件设计必须使用MCS-51片内定时器, 采用定时中断结构, 不得使用软件延时法。

8086数字电子钟的设计 附程序代码

8086数字电子钟的设计 附程序代码

附件3课程设计(综合实验)报告( 2011 -- 2012 年度第 1 学期)名称:硬件课程与实践题目:8086数字电子钟的设计院系:班级:学号:学生姓名:指导教师:设计周数:2周成绩:日期:2011年09月01日一、课程设计的目的与要求1. 综合运用学过的相关软、硬件知识,利用伟福LAB6000实验设备,设计具有实用功能的电子钟,实现电子时钟的准确运行、校时等功能。

2.熟悉伟福LAB6000的功能,掌握数码管设计和键盘设计的要领及相关技术,能够利用实验设备实现电子钟系统的设计。

3.提高自己的硬件设计分析能力,同时培养软硬结合的系统设计思维,从而提高设计系统的可行性和准确性。

二、课程设计正文A.设计题目:8086数字电子钟的设计:1.设计并完成LED七段数码管数字钟电路。

2.数字钟显示格式为:HH:MM:SS。

3.具有通过键盘能够调整时、分、秒及设置闹铃的功能。

4.具有暂停时间及复位功能。

B.设计方案本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在中断服务程序中对秒计数得到分和小时值并判断闹铃是否到时。

编写键盘扫描和LED显示程序完成设置时间、定闹铃及数码管显示功能。

C.硬件原理1.七段数码管显示和键盘扫描显示图1.1七段数码管图1.2伟福实验台六位LED的电路图及寻址空间实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。

实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。

电子时钟工具的程序设计及代码示例

电子时钟工具的程序设计及代码示例

电子时钟工具的程序设计及代码示例为满足现代生活的需求,电子时钟成为人们生活中的常见工具。

除了具备实时显示时间的功能外,电子时钟还可以根据用户需求进行各种定制,如显示日期、倒计时、闹钟等功能。

本文将探讨电子时钟的程序设计方法,并提供一个简单的代码示例。

一、程序设计方法在进行电子时钟的程序设计前,我们需要确定以下几个关键因素:1. 使用的编程语言:根据实际情况选择合适的编程语言,如C++、Java、Python等。

2. GUI框架:确定使用什么图形界面框架,如Qt、Tkinter等。

3. 实时更新:确定时间的实时更新方式,可以利用计时器、循环等方式进行时间更新。

4. 用户交互:考虑用户是否需要与电子时钟进行交互,如设置闹钟、选择日期等。

二、代码示例以下是一个基于Python和Tkinter的电子时钟代码示例,代码注释中详细说明了每个函数的功能和实现方法:```pythonimport tkinter as tkfrom datetime import datetimedef update_time():# 获取当前时间current_time = datetime.now().strftime("%H:%M:%S")# 更新时间标签time_label.config(text=current_time)# 每隔1秒更新一次时间time_label.after(1000, update_time)# 创建窗口window = ()window.title("电子时钟")# 创建时间标签time_label = bel(window, font=("Arial", 100), bg="white") time_label.pack(pady=50)# 更新时间update_time()# 运行窗口主循环window.mainloop()```以上代码创建了一个简单的窗口,使用标签实时显示当前时间。

电子时钟程序代码

电子时钟程序代码

电子时钟程序代码预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制(一)计时模块1. 秒计数是由一个六十进制的计数器构成,生成元器件如下Clk:驱动秒计时器的时钟信号Clr:校准时间时清零的输入端En:使能端Sec0[3..0]sec1[3..0]:秒的高位显示,低位显示Co:进位输出端,作为分的clk输入代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport (clk,clr,en:in std_logic;sec0,sec1:out std_logic_vector(3 downto 0);co:outstd_logic);end second;architecture sec of second isSIGNAL cnt1,cnt0:std_logic_vector(3 downto0);beginprocess(clk)beginif(clr='0')thencnt0<="0000";cnt1<="0000";elsif(clk'eventand clk='1')thenif(en='1')thenifcnt1="0101" and cnt0="1000" thenco<='1';cnt0<="1001";elsifcnt0<"1001" thencnt0<=(cnt0+1);elsecnt0<="0000";ifcnt1<"0101"thencnt1<=cnt1+1;elsecnt1<="0000";co<='0';endif;endif;endif;endif;sec1<=cnt1;sec0<=cnt0;endprocess;end sec;2.分计数是由六十进制的计数器构成,生成元器件如下Clk:设置分输入和秒进位的或输入En:使能输入Min1[3..0] min0[3..0]:分的高位显示,低位显示Co:向时的进位输出代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute isport (clk,en:in std_logic;min1,min0:out std_logic_vector(3 downto 0);co:outstd_logic);end minute;architecture min of minute isSIGNAL cnt1,cnt0:std_logic_vector(3 downto0);beginprocess(clk)beginif(clk'eventand clk='1')thenifen='1' thenifcnt1="0101" and cnt0="1001" thenco<='1';cnt0<="0000";cnt1<="0000";elsifcnt0<"1001" thencnt0<=(cnt0+1);elsecnt0<="0000";cnt1<=cnt1+1;co<='0';endif;endif;endif;min1<=cnt1;min0<=cnt0;endprocess;end min;3.时计数是由二十四进制的计数器构成,生成元器件如下Clk:设置时间输入和分进位输入的或en:使能端h1[3..0] h0[3..0]:时的高位显示和低位显示代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(clk,en:in std_logic;h1,h0:out std_logic_vector(3 downto 0));end hour;architecture beha of hour issignal cnt1,cnt0:std_logic_vector(3 downto0);beginprocess(clk)beginif(clk'event and clk='1') thenif en='1' thenif cnt1="0010" andcnt0="0011" thencnt1<="0000";cnt0<="0000";elsif cnt0<"1001" thencnt0<=cnt0+1;elsecnt0<="0000";cnt1<=cnt1+1;end if;end if;end if;h1<=cnt1;h0<=cnt0; end process; end beha;。

电子钟单片机课程设计报告(含源码)

电子钟单片机课程设计报告(含源码)

一、总设计思路电子时钟是我们日常生活中最常见的一种钟表,由于它结构简单、功耗低、时间精度比较准、等优点,使得广泛应用,在未来肯定有很大的市场。

这次课程设计我的目的就是尝试着做一个电子时钟。

1、系统功能显示时间、声音提示、调整时间、设置闹钟的功能。

2、功能硬件实现方案时间显示:时间的显示我选用的是六位七段数码管,由于数码管控制简单,而且显示效果好,所以选用它。

由于静态显示方式比较占资源,而且电路比较复杂,所以我们选择了动态显示方式,电路简单,效果挺好。

时间调整和闹钟设置:是通过外部两个按键触发单片机中断进而控制时间的调整。

其中一个按键是模式选择按键通过触发外部中断0来选择功能,功能主要是选择要调时、调分、调秒、闹钟调时、闹钟调分、闹钟调秒六种模式。

第二个按键通过触发外部中断1来在相应的模式下对时间的大小做调整。

声音提示:通过利用蜂鸣器来作为发生装置,有整点提示功能和闹铃功能。

时间发生:利用单片机自带定时器0做定时,通过软件控制来产生时、分、秒。

3、功能软件实现方案由于单片机C语言已经全面普及,它的程序容易理解、简单易写、可移植性好,所以我们选择用单片机C语言来写。

4、开发环境操作系统:window 7旗舰版64位程序编辑编译软件:KEIL μVision V4.60.6.10仿真软件;Proteus V ersion 7.85.、总设计原理框图STC89C52RC6位七段数码管显示时、分、秒蜂鸣器发声装置时钟复位电路按键调时模块一、硬件设计定时和程序执行及控制模块:我们选择的是宏晶科技生产的STC89C52RC芯片,它在很多硬件资源上比8051提升了不少,所以在后期我们可以做更多扩展和维护。

时间显示模块::采用六个七段带小数点的共阴极数码管。

声音提示模块:采用简单蜂鸣器做声音提示。

调时模块:通过两个简单按键来触发中断调时。

时钟复位模块:采用11.0592MHz的晶振,提供单片机工作频率。

二、设计原理图三、芯片解说STC89C52:是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。

电子课程设计电子钟程序代码

电子课程设计电子钟程序代码

该程序可以实现手动定时计数,也可以在3X4键盘上定时计数,还可以实现复位、重启定时操作,完全可以满足课程设计的要求。

;初始化***************************************Hour equ 20hMinute equ 21hSecond equ 22hK1 EQU P1.0K2 EQU P1.1K3 EQU P1.2ORG 0000hLJMP MAINORG 000bhLJMP IN0;主程序入口************************************MAIN: mov p1,#0ffhmov sp ,#67hmov dptr,#0ff23h ;写控制口mov A, #81hmovx @dptr, Amov Hour, #0mov Minute, #0mov Second, #0MOV TH0,#2CHMOV TL0,#12H ;定时50msMOV P2,#0FFHMOV 7EH,#00H ;6个显缓单元,MOV 7DH,#00HMOV 7CH,#00HMOV 7BH,#00HMOV 7AH,#00HMOV 79H,#00HMOV R0,#59HMOV A,#7EH ;0111 1110BMOVX @R0,ALCALL LCK0LCALL PTDS0MOV R7,#100mov IE, #82h ;EA=1, ET0 = 1setb TR0 ;定时器0计数;用拨动开关进行调时*****************************MLoop: JNB K3,LP0LCALL DEL1JNB K3,MLoop LP5: JNB K1,LP1LCALL DEL1JNB K1,MLoopLP2: JB K1,LP2LCALL DEL1JB K1,LP2INC MinuteMOV A,MinuteCJNE A,#3ch,LP11LP11: JC LP1MOV Minute, #00HLP1: ACALL DISplayJNB K2,MLoopLCALL DEL1JNB K2,LP1LP6: JB K2,LP6LCALL DEL1JB K2,LP6MOV A,#00HMOV DPTR,#0FF20HMOVX @DPTR,AINC HOURMOV A,HOURCJNE A,#18h,LP81LP81: JC LP0MOV HOUR,#00HLP8 : ACALL DISplayMOV DPTR,#0FF20HMOV A,#0FFHMOVX @DPTR,ALJMP MLoopLP0: ACALL DISplayLJMP MLoop;中断服务子程序*************************************IN0: push PSWpush ACCMOV TH0,#2CHMOV TL0,#12HCLR TR0DJNZ R7, Exit1MOV R7,#100inc Secondmov a,Secondcjne a,#60,Exit1mov Second, #0inc Minutemov a,Minutecjne a,#60,Exit1mov Minute,#0inc Hourmov a,Hourcjne a,#24,Exit1mov Hour, #0Exit1: SETB TR0pop ACCpop PSWreti;字形码********************************************* LEDBuf equ 60h ; 显示缓冲LEDMAP: ; 八段管显示码db 0c0h,0f9h,0a4h,0b0h,99h,92h,82hdb 0f8h, 80h, 90h;延时200us子程序************************************ del1: mov r5,#10del: mov r6,#10del6: djnz r6,del6djnz r5,delret;六段数码管显示子程序******************************* DisplayLED:mov r3,#0fehmov r0,#LEDBuf+1 ;r0为显示缓冲区loop: mov dptr, #0ff20h ;a口mov a,r3movx @dptr, amov a,@r0mov dptr,#0ff21h ;b口movx @dptr,aacall del1inc r0mov a,r3jnb acc.5,ld1rl amov r3,asjmp loopld1: ret;查表子程序***************************************** ToLED: mov dptr, #LEDMap ;显示程序movc a,@a+dptrret;秒、分、时送以61H为首的显缓单元********************* DISplay:mov a,Secondmov b,#10div abcall ToLEDmov LEDBuf+2,amov a,bcall ToLEDmov LEDBuf+1,amov a,Minutemov b,#10div abcall ToLEDmov LEDBuf+4,amov a,bcall ToLEDmov LEDBuf+3,amov a,Hourmov b,#10div abcall ToLEDmov LEDBuf+6,a mov a,bcall ToLEDmov LEDBuf+5, a call DisplayLED RETX3: MOV R4,AMOV R0,#59HMOVX A,@R0MOV R1,AMOV A,R4MOV @R1,ACLR APOP DPHPOP DPLMOVC A,@A+DPTRINC DPTRCJNE A,01H,X30CLR AMOVC A,@A+DPTRX31: MOVX @R0,AINC DPTRPUSH DPLPUSH DPHRETX30: DEC R1MOV A,R1SJMP X31X2: MOV R6,#50HX0: ACALL XLEJNB ACC.5,XX0DJNZ R6,X0MOV R6,#20HMOV R0,#59HMOVX A,@R0MOV R0,AMOV A,@R0MOV R7,AMOV A,#10HMOV @R0,AX1: ACALL XLEJNB ACC.5,XX1DJNZ R6,X1MOV A,R7MOV @R0,ASJMP X2XX1: MOV R6,AMOV A,R7MOV @R0,AMOV A,R6XX0: RETXLE: ACALL DISACALL KEYMOV R4,AMOV R1,#48HMOVX A,@R1MOV R2,AINC R1MOVX A,@R1MOV R3,AMOV A,R4XRL A,R3MOV R3,04HMOV R4,02HJZ X10MOV R2,#88HMOV R4,#88HX10: DEC R4MOV A,R4XRL A,#82HJZ X11MOV A,R4XRL A,#0EHJZ X11MOV A,R4ORL A,R4JZ X12MOV R4,#20HDEC R2SJMP X13X12: MOV R4,#0FH x11: MOV R2,04H MOV R4,03HX13: MOV R1,#48HMOV A,R2MOVX @R1,AINC R1MOV A,R3MOVX @R1,AMOV A,R4RETLS3: DB 07H,04H,08H,05H,09H,06H,0AH DB 0BH,01H,00H,02H,0FH,03H,0EHDB 0CH,0DHDIS: PUSH DPHPUSH DPLSETB RS1MOV R0,#7EHMOV R2,#20HMOV R3,#00HMOV DPTR,#LS0LS2: MOV A,@R0MOVC A,@A+DPTRMOV R1,#21HMOVX @R1,AMOV A,R2CPL ADEC R1MOVX @R1,ACPL ADEC R0LS1: DJNZ R3,LS1CLR CRRC AMOV R2,AJNZ LS2INC R1MOV A,#0FFHMOVX @R1,ACLR RS1POP DPLPOP DPHRETLS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,88H,83H,0C6HDB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH KEY: SETB RS1MOV R2,#0FEHMOV R0,#00HL1: MOV A,R2MOV R1,#20HMOVX @R1,ARL AMOV R2,AMOV R1,#22HMOVX A,@R1CPL AANL A,#0FHJNZ L0INC R0DJNZ R3,L1MOVX A,@R1JB ACC.4,XP33MOV A,#20HSJMP XP3XP33: MOV A,#20H XP3: CLR RS1RETL0: CPL AJB ACC.0,XP0MOV A,#00HSJMP LPPXP0: JB ACC.1,XP1 MOV A,#08HSJMP LPPXP1: JB ACC.2,XP2 MOV A,#10HSJMP LPPXP2: JB ACC.3,XP33 MOV A,#18HLPP: ADD A,R0CLR RS1CJNE A,#10H,LX0 LX0: JNC XP35MOV DPTR,#LS3MOVC A,@A+DPTR XP35: RETLCK0: LCALL X2JNC LCK1LCALL X3SJMP LCK0LCK1: CJNE A,#16H,LCK0 MOV A,7AHSWAP AORL A,79HMOV 22H,ACJNE A,#60H,LCK2 LCK2: JNC EXITMOV A,7CHSWAP AORL A,7BHMOV 21H,ACJNE A,#60H,CLK3 CLK3: JNC EXITMOV A,7EHSWAP AORL A,7DHMOV 20H,ACJNE A,#24H,CLK4 CLK4: JNC EXITRETEXIT: AJMP LCK0 PTDS0: MOV R0,#79HMOV A,22HACALL PTDSMOV A,21HACALL PTDSMOV A,20HACALL PTDSRETPTDS: MOV R1,ALCALL PTDS1MOV A,R1SWAP APTDS1: ANL A,#0FHMOV @R0,AINC R0RETEND。

电子时钟设计代码

电子时钟设计代码

#include<reg51.h>#define uint unsigned int //宏定义,将unsigned int 用uint代替,下同#define uchar unsigned charsbit S1=P1^0;sbit S2=P1^1;sbit S3=P1^2;sbit S4=P1^3;char second;char minute;char hour;uchar T_time;//计数变量int a=0;uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9 void delay(uint k){uint i;for(i=0;i<k;i++);}void keyscan();void Displaysecond(uchar);void Displayminute(uchar);void Displayhour(uchar);void main(){TMOD=0x01; //定时器/计数器T0的工作方式1EA=1; //总中断允许ET0=1; //计时器T0中断允许位TR0=1; //开始计数TH0=(65536-46083)/256;TL0=(65536-46083)%256;minute=0;second=0;hour=0;T_time=0;while(1){keyscan();Displaysecond(second);delay(100);Displayminute(minute);delay(100);Displayhour(hour);delay(100);}}void Displaysecond(uchar s){P2=0xbf; //"秒十位"位选端P0=tab[s/10]; //刚开始显示数字0 delay(100); //延时一段时间P0=0x00; //消隐P2=0x7f; //"秒个位"位选端P0=tab[s%10]; //显示段码delay(100); //延时一段时间P0=0x00; //消隐}void Displayminute(uchar m){P2=0xf7; //"分十位"位选端P0=tab[m/10]; //刚开始显示数字0 delay(100); //延时一段时间P0=0x00; //消隐P2=0xef; //"分个位"位选端P0=tab[m%10]; //显示段码delay(100); //延时一段时间P0=0x00; //消隐P2=0xdf; //分隔符位选端P0=0x40; //显示分隔符delay(100); //延时一段时间P0=0x00; //消隐}void Displayhour(uchar h){P2=0xfe; //"小时十位位选端" P0=tab[h/10]; //显示段码1delay(100);P0=0x00; //消隐P2=0xfd; //小时个位位选端P0=tab[(h)%10]; //显示段码2 delay(100);P0=0x00;//消隐P2=0xfb;P0=0x40;delay(100);P0=0x00;//消隐}void keyscan(){if(S1==0) //S1的功能是秒加1{delay(100);if(S1==0){if(a==0){second++;if(second>=60){minute++;if(minute>=60){minute=0;hour++;if(hour>=24){hour=0;}}second=0;}}if(a==1){minute++;if(minute>=60){hour++;if(hour>=24)hour=0;minute=0;}}if(a==2){hour++;if(hour>=24)hour=0;}while(!S1){Displaysecond(second);delay(100);Displayminute(minute);delay(100);Displayhour(hour);delay(100);}}}if(S2==0) //S2的功能是秒减1 {delay(100);if(S2==0){if(a==0){second--;if(second<=-1){minute--;if(minute<=-1){hour--;if(hour<=-1)hour=23;minute=59;}second=59;}}if(a==1){minute--;if(minute<=-1){minute=59;hour--;if(hour<=-1)hour=23;}}if(a==2){hour--;if(hour<=-1)hour=23;}while(!S2){Displaysecond(second);delay(100);Displayminute(minute);delay(100);Displayhour(hour);delay(100);}}}if(S3==0) //S3的功能是清零{delay(100);if(S3==0){a++;if(a==3)a=0;while(!S3){Displaysecond(second);delay(100);Displayminute(minute);delay(100);Displayhour(hour);delay(100);}}}if(S4==0) //S4的功能是启动或停止计数{while(!S4){Displaysecond(second);delay(100);Displayminute(minute);delay(100);Displayhour(hour);delay(100);}TR0=~TR0;}}void Time0() interrupt 1{T_time++;if(T_time==20){T_time=0;second++;}if(second==60){second=0;minute++;}if(minute==60){minute=0;hour++;}if(hour==24){hour=0;}TH0=(65536-50000)/256;TL0=(65536-50000)%256;}。

电子时钟课程设计代码

电子时钟课程设计代码

电子时钟课程设计代码一、课程目标知识目标:1. 学生理解电子时钟的基本原理,掌握电子时钟的组成和功能。

2. 学生掌握电子时钟编程的基本语法和结构,能够运用所学知识编写电子时钟程序。

3. 学生了解电子时钟在实际应用中的优点和局限性。

技能目标:1. 学生能够运用编程软件,编写并调试简单的电子时钟程序。

2. 学生通过实际操作,培养动手能力和问题解决能力。

3. 学生能够运用所学知识,对电子时钟程序进行优化和改进。

情感态度价值观目标:1. 学生培养对电子时钟编程的兴趣,激发学习编程的热情。

2. 学生在团队协作中,培养沟通能力和合作精神。

3. 学生认识到科技发展对日常生活的影响,增强对科技创新的认同感。

课程性质:本课程为信息技术课程,旨在通过电子时钟编程,让学生掌握编程基础知识和技能,培养实际操作能力。

学生特点:六年级学生具备一定的逻辑思维能力和动手操作能力,对新鲜事物充满好奇心。

教学要求:注重理论与实践相结合,以学生为主体,教师引导,培养学生的编程兴趣和实际操作能力。

通过本课程的学习,使学生能够达到上述课程目标,并在实际操作中不断提高。

二、教学内容1. 电子时钟基础知识:- 电子时钟的组成与功能- 电子时钟的原理及分类2. 编程环境与工具:- 编程软件的安装与使用- 电子时钟编程的基本操作3. 编程语法与结构:- 变量、常量的定义与使用- 选择语句、循环语句的应用- 函数的定义与调用4. 电子时钟程序设计:- 设计电子时钟界面- 编写电子时钟程序代码- 调试与优化电子时钟程序5. 实践与拓展:- 电子时钟程序的实际操作- 电子时钟功能的拓展与改进- 课堂讨论与分享教学内容依据课程目标,结合课本章节进行组织。

具体教学安排如下:第一课时:电子时钟基础知识,介绍电子时钟的组成、功能及原理。

第二课时:编程环境与工具,学习编程软件的使用,熟悉电子时钟编程的基本操作。

第三课时:编程语法与结构,学习变量、常量、选择语句、循环语句等基本语法。

电子时钟课程设计(含代码)[优秀]

电子时钟课程设计(含代码)[优秀]

电子时钟设计一、课程设计目的和意义掌握8255、8259、8253芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8088微处理器完成了电子钟的小系统的独立设计.同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰.二、开发环境及设备1、设计环境PC机一台、windows 98系统、实验箱、导线若干.2、设计所用设备8253定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送IRQ2.8255并口:用做接口芯片,和控制键相连.8259中断控制器:用于产生中断.LED:四个LED用于显示分:秒值.KK1或KK2键与K7键,用于控制设置.三、设计思想与原理1、设计思想在本系统设计的电子时钟以8088微处理器作为CPU,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟和控制键电路,8259做中断控制器产生中断.在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号.8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号.即每隔20米s,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化.其中8259只需初始化ICW1,其功能是向8259表明IRx输入是电瓶触发方式还是上升沿触发方式,是单片8259还是多片8259.8259接收到信号后,产生中断信号送CPU处理.2、设计原理利用实验台上提供的定时器8253和扩展板上提供的8259以及控制键和数码显示电路,设计一个电子时钟,由8253中断定时,控制键控制电子时钟的启停及初始值的预置.电子时钟的显示格式米米:SS由左到右分别为分、秒,最大记时59:59超过这个时间分秒位都清零从00:00重新开始.基本工作原理:每百分之一秒对百分之一秒寄存器的内容加一,并依次对秒、分寄存器的内容加一,四个数码管动态显示分、秒的当前值.三、设计所用芯片结构1、8259A芯片的内部结构及引脚中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片.它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片中.因此无需附加任何电路,只需对8259A编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定.在米D微机系统中,8259芯片工作于单片方式.8259引脚图如图3.3,各引脚功能如下.D7~D0——八条双向数据线;WR(低电平有效)——写输入信号;RD(低电平有效)——读输入信号;CS(低电平有效)——片选输入信号;A0——地址信号;INT——中断请求信号;INTA(低电平有效)——中断响应信号;CAS0~CAS2——级联信号,形成一条专用8259A总线,以便多片8259A的级联;SP/EN——从编程/允许级联.在缓冲方式中,可用做输图3.1 8259A引脚图出信号以控制总线缓冲器的接收和发送.在非缓冲方式中,作为输入信号用于表示主片还是从片;IR0~IR7——外部中断请求输入线.要求输入的中断请求信号是由低电平到高电平的上升沿(并保持高电平到CPU 响应时为止)或者是高电平. 8259中断矢量地址与中断信号之间的关系如表3.1所示:中断序号 0 1 2 3 4 5 6 7 功能调用 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 矢量地址 20H~ 23H24H ~ 27H 28H ~ 2BH 2CH ~ 2FH 30H ~ 33H34H ~ 37H38H ~ 3BH 3CH ~ 3FH 说明时钟键盘可用可用串行口 可用可用可用2、8255芯片的内部结构及引脚8255可编程外围接口芯片是Intel 公司生产的通用并行I/O 接口芯片,它具有A 、B 、C 三个并行接口,用+5V 单电源供电,能在以下三种工作方式下工作: 方式0—基本输入/输出方式 方式1—选通输入/输出方式 方式2—双向选通输入/输出方式 8255引脚图如图3.2示,各引脚功能如下. D7~D0——与CPU 侧连接的八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0、A1——片内寄存器选择输入信号; PA7~PA0——A 口外设双向数据线; PB7~PB0——B 口外设双向数据线; PC7~PC0——C 口外设双向数据线; RESET ——复位输入信号表3.1 8259A 中断矢量表图3.2 8255引脚图2、8255端口地址 信号线寄存器 编址 IOY3A 口60H B 口 61H C 口 62H 控制寄存器63H3、8253芯片的内部结构及引脚8253可编程定时/计数器是Intel 公司生产的通用外围芯片之一,有3个独立的十六位计数器,技术频率范围为0~2米HZ,它所有的技术方式和操作方式都通过编程控制. 8253的功能用途是: (1) 延时中断 (2) 可编程频率发生器 (3) 事件计数器 (4) 二进倍频器 (5) 实时时钟 (6) 数字单稳 (7)复杂的电机控制器8253有六种工作方式: (1) 方式0:计数结束中断 (2) 方式1:可编程频率发生器 (3) 方式2:频率发生器 (4) 方式3:方波频率发生器 (5)方式4:软件触发的选通信号(6)方式5:硬件触发的选通信号8253引脚图如图3.3示,各引脚功能如下.表3.2 8255端口地址表图3.3 8253引脚图D7~D0——八条双向数据线;WR(低电平有效)——写输入信号;RD(低电平有效)——读输入信号;CS(低电平有效)——片选输入信号;A0、A1——片内寄存器地址输入信号;CLK——计数输入,用于输入定时基准脉冲或计数脉冲;OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲波形; GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步.2、8253端口地址表3.3 8253端口地址表四、具体模块设计1、概述本系统设计的电子钟以8088微处理器作为CPU,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断.在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号.8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号.即每隔20米s,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化.程序由以下模块组成:系统共有5个功能模块,分别为,主控模块,显示模块,定时模块,中断模块,小键盘模块.系统框图如下:2、主程序模块主控模块是系的核心模块,对8253、8255A进行初始化,设置中断向量,扫描键盘根据按键值作相应的处理.主要由软件实现.它的主要功能是调用其它模块对系统工作进行协调,它的主要功能是读控制模块输入值并执行要做的工作,如果是由KK1或KK2的信号,则将进行中断处理,并调用显示模块显示.如果控制模块输出的K7的信号,则将进入对时状态.3、控制模块控制模块送入主控模块的子功能模块.由软件和硬件实现,硬件上由控制键和8255互连,将键值由8255送入主控模块.软件上使用行扫描法获得键值并送回主控模块.4、显示模块显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位.硬件上由六个LED构成,软件上由扫描显示的方法实现.实现代码如下:DISPLAY PROC NEAR 米OV CX,77FFH LED52: CALL DISUP LOOP LED52DISUP: PUSH CX米OV DI,OFFSET 米IN1米OV CL,01DISUP1: 米OV AL,0米OV DX,PORTBITOUT DX,AL米OV AL,[DI]米OV BX,OFFSET LEDXLAT米OV DX,PORTSEGOUT DX,AL米OV AL,CL米OV DX,PORTBITOUT DX,AL米OV BX,35H DELAY1: DEC BXJNZ DELAY1厘米P CL,20HJZ DISUP2INC DISHL CL,1J米P DISUP1 DISUP2: POP CXRET DISPLAY ENDP5、定时模块定时模块是为8259提供中断请求信号的.由一片8253实现,选用定时器0号,工作在方式3,由于时钟应该1秒走动一次,所以输出值应为1S,其输出信号可作为8259的中断请求信号.6、中断处理模块中断模块实现动态显示的,硬件为一片8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果.代码:START: 米ov al,14h out 76h,al米ov al,3dhOUT 74H,AL米OV AL,1FH OUT 80H,AL米OV AL,18H OUT 81H,AL米OV AL,03H OUT 81H,AL米OV AL,80H OUT 0D6H,AL米OV AL,7FH OUT 81H,AL 米OV AX,0000H米OV CX,AX米OV BL,ALIR7: OUT 00D0H,CL OUT 00D2H,CH OUT 00D4H,BL INC CL厘米P CL,3CH JGE P1CALL IR7P1:米OV CL,AL INC CH厘米P CH,3CH JGE P2CALL IR7P2:米OV CH,AHINC BL厘米P BL,18H JGE P3CALL IR7米OV BL,AL CALL IR7 CODE ENDSEND START五、心得体会本次课程设计做的是电子时钟设计,本以为设计思路清楚,设计会简单,可是经过两周的时间,发现选择了一个相对比较难的题目,最终也没有将其完全设计出来,比较遗憾.这个题目有几个难处,一,是汇编语言与微机原理的相结合部分比较难,导致部分代码不能正确写出:二,对实验箱了解不充分,设计起来对具体端口不理解.三,本次设计的大多数题目都能在网上找到可以借鉴的程序,而我们的虽然找到了,但是遇到了相当不擅长的端口问题,暴漏了平常学习的缺漏.四,总结,中断,计数,以及端口等的知识在学习中没有能够很好的学习,遇到具体细节问题时,解决不了.两组成员一起讨论,仍然没有很好的解决,不过确实对微机原理的相关知识很有收获.本次设计的收获:对8259、8255、8253有了进一步的了解,对中断处理有了更深的理解,很好的复习了微机原理,同时对端口有了初步的理解.通过课程设计更加体会到了团队作战的长处,大家一起受益颇多,取长补短,最主要的是认识到了自己的不足,需要进一步学习所含知识,尤其是端口,更需要勤加练习汇编语言与微机原理的结合,课程设计受益颇多.参考书目:1、戴梅萼,史嘉权编著.微型计算机技术及应用(第三版). 北京:清华大学出版社,20032、李顺增,吴国东,赵河明等.微机原理及接口技术.北京:机械工业出版社,20063、杨立新.微型计算机原理和应用[米].北京:科学技术文献出版社,1986.114、眭碧霞.微型计算机原理与组成[米].人民邮电出版社,2003.8。

基于单片机C语言电子时钟完整版(闹钟,整点报时)

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.Key words Electronic clock;;AT89S52;Hardware Design;Software Design目录1设计课题任务、功能要求说明及方案介绍 (1)1.1设计课题任务 (1)1.2功能要求说明 (1)1.3设计总体方案介绍及原理说明 (1)2设计课题硬件系统的设计 (2)2.1设计课题硬件系统各模块功能简要介绍 (2)2.2设计课题电路原理图、PCB图、元器件布局图 (2)2.3设计课题元器件清单 (5)3设计课题软件系统的设计 (6)3.1设计课题使用单片机资源的情况 (6)3.2设计课题软件系统各模块功能简要介绍 (6)3.3设计课题软件系统程序流程框图 (6)3.4设计课题软件系统程序清单 (10)4设计结论、仿真结果、误差分析、教学建议 (21)4.1设计课题的设计结论及使用说明 (21)4.2设计课题的仿真结果 (21)4.3设计课题的误差分析 (22)4.4设计体会 (22)4.5教学建议 (22)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。

单片机课程设计电子钟(电子时钟)

单片机课程设计电子钟(电子时钟)
2、基本要求:
LED数码管显示器显示当前时间;四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0 为60分,每按一次分加1;D键用于调秒, 范围0-59,0为60秒,每按一次秒加1;
3、设计方案:
(1)、基于单片机并行口的设计
见图4-4所示
4.1.5显示子程序流程框图
见图4-5所示
4.1.6加一子程序流程框图
见图4-6所示
4.2电子钟总体程序清单
ORG0000H
AJMPMAIN
ORG000BH
LJMPINTT0
ORG0030H
MAIN: MOVSP,#60H;确立堆栈区
MOVPSW,#00H;
MOVR0,#20H;RAM区首地址
1.2总体方案介绍
1.2.1计时方案
利用AT89S52单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。
1.2.2键盘/显示方案
此电子钟严格按照要求设计,最终达到预期的效果,能够正确显示“P”点以及时分秒的计时,算是一次比较成功的设计了。
关键词:电子钟,单片机,汇编
第1章电子钟功能及总体方案的介绍
1.1电子钟功能介绍
1.1.1基本功能要求
可调整运行的电子钟具有三种工作状态:“P.”状态、运行状态、调整状态。
(1)、“P.”状态,依靠上电或按复位键进入,在此状态下,按B、C、D键均无效,按A键有效,进入运行状态;
TIME: SETBEA

完整51单片机多功能电子钟程序代码

完整51单片机多功能电子钟程序代码

完整51单片机多功能电子钟程序代码#include "regx52.h"#define uint8 unsigned charcode uint8 LED[] = {0xc0, 0xf9, 0xa4, 0xb0,0x99, 0x92, 0x82, 0xf8,0x80, 0x90, 0x88, 0x83,0xc6, 0xa1, 0x86, 0x8e}; unsigned char riqi[8]; static uint8 keyReleas;uint8 disptmp;uint8 pos;uint8 buffer[8];code uint8 BIT[8] = {0xfe, 0xfd, 0xfb, 0xf7,0xef, 0xdf, 0xbf, 0x7f}; uint8 flag2ms;uint8 t2msCnt;uint8 halfSecCnt;uint8 IsTimerRun;uint8 mode;void GlobalvarInit();void T0Init();void TimeRun();unsigned char KeyScan();void Command();void Command();void T0IntSvr() interrupt 1 using 1{TL0 = (65536-2000)%256;TH0 = (65536-2000)/256;switch(mode){case 0:disptmp=LED[buffer[pos]]; switch(pos){case 2:case 4:case 6:disptmp&=~(1<<7); break;}break;case 1:disptmp=LED[riqi[pos]]; switch(pos){case 2:case 4:disptmp&=~(1<<7); break;}break;}P2 = 0xff;P0 = disptmp;P2 = BIT[pos];pos++;if(pos>7)pos = 0;flag2ms = 1;}void main(){GlobalvarInit();T0Init();EA = 1;while(1){TimeRun();Command();}}void TimeRun(){if(IsTimerRun == 0) return; if(flag2ms != 1) return; flag2ms = 0;t2msCnt++;if(t2msCnt < 250) return; t2msCnt = 0; halfSecCnt++;if(halfSecCnt < 2) return; halfSecCnt = 0;buffer[0]++;if(buffer[0] < 10) return; buffer[0] = 0;buffer[1]++;if(buffer[1] < 6) return; buffer[1] = 0;buffer[2]++;if(buffer[2] < 10) return;buffer[2] = 0;buffer[3]++;if(buffer[3] < 6) return;buffer[3] = 0;buffer[4]++;switch(buffer[5]){case 0:case 1:if(buffer[4] < 10) return; buffer[4] = 0;break; case 2: if(buffer[4] < 4) return; buffer[4] = 0;break; }buffer[5]++;if(buffer[5] < 3) return;buffer[5] = 0;riqi[0]++;switch(riqi[1]){case 0:if( riqi[0] < 10) return; riqi[0] = 1;break; case 1: case 2:if( riqi[0] < 10) return; riqi[0] = 0;break; case 3:if( riqi[0] < 2) return; riqi[0] = 0;break;}riqi[1]++;if(riqi[1]<4) return;riqi[1]=0;riqi[2]++;switch(riqi[3]){case 0:if( riqi[2] < 10) return; riqi[2] = 1;break;case 1:if( riqi[2] < 3) return; riqi[2] = 0;break; }riqi[3]++;if(riqi[3]<1) return;riqi[3]=0;riqi[4]++;if(riqi[4]<10) return;riqi[4]=0;riqi[5]++;if(riqi[5]<10) return;riqi[5]=0;riqi[6]++;if(riqi[6]<10) return;riqi[6]=0;riqi[7]++;if(riqi[7]<10) return;riqi[7]=0;}void T0Init(){TMOD = TMOD & 0xf0 | 0x01;// 2msTL0 = (65536-2000)%256;TH0 = (65536-2000)/256;ET0 = 1;TR0 = 1;}// 全局变量初始化void GlobalvarInit(){uint8 i;for (i = 0; i < 8; i++){buffer[i] = 0;}pos = 1;flag2ms = 0;t2msCnt = 0; IsTimerRun = 1;mode = 0;riqi[0]= 0;riqi[1]= 2;riqi[2]=6;riqi[3]=0;riqi[4]=3;riqi[5]=1;riqi[6]=0;riqi[7]=2;}unsigned char KeyScan() { unsigned char key;P3 = 0x0f;if ((P3 & 0x0f) == 0x0f) {return 0;}P3 = 0x7f;key = P3;key = key & 0x0f;if(key != 0x0f){return (key | 0x70);}P3 = 0xbf;key = P3;key = key & 0x0f;if(key != 0x0f){return (key | 0xb0);}P3 = 0xdf;key = P3;key = key & 0x0f;if(key != 0x0f){return (key | 0xd0);}P3 = 0xef;key = P3;key = key & 0x0f;if(key != 0x0f){return (key | 0xe0);}return 0;}static uint8 keyRelease = 1; void Key_bd(){buffer[7] = 0x0b; buffer[6] = 0x0d; }void Key_be() {switch(mode) {case 0:mode = 1; break;case 1:mode = 0; break;}}void Key_0x77() {if(buffer[4]>3) {buffer[5]++;if(buffer[5]>1) buffer[5]=0;}else{buffer[5]++;if(buffer[5]>2) buffer[5]=0;}}void Key_0x7b(){switch(buffer[5]){case 0:case 1:buffer[4]++;if(buffer[4]>9)buffer[4]=0; break;case 2:buffer[4]++;if(buffer[4]>3)buffer[4]=0;break; }}void Key_0xee(){switch(riqi[1]){case 0: riqi[0]++;if(riqi[0]>9) riqi[0]=1;break;case 1:case 2:riqi[0]++;if(riqi[0]>9) riqi[0]=0;break;case 3:riqi[0]++;if(riqi[0]>1)riqi[0]=0;break;}}void Key_0xeb() {switch(riqi[3]){case 0:riqi[2]++;if(riqi[2]>9) riqi[2]=1; break;case 1:riqi[2]++;if(riqi[2]>2) riqi[2]=0; break;}}void Key_0xed() {if(riqi[0]<=1){riqi[1]++;if(riqi[1]>3)riqi[1]=0;}if(riqi[0]>1){riqi[1]++;if(riqi[1]>2)riqi[1]=0;}}void Key_0xe7(){if(riqi[2]>2)riqi[3]=0;else{riqi[3]++;if(riqi[3]>1)riqi[3]=0;}}void Command(){uint8 key;key = KeyScan();if (key == 0){keyRelease = 1;return;}if(keyRelease == 0)return;keyRelease = 0;switch(key){case 0xbe: Key_be(); break; // Key_8 case 0xbd: Key_bd(); break; // Key_9 case 0xbb: IsTimerRun = 1; break;// Key_A case 0xb7: IsTimerRun = 0; break;// Key_Bcase 0x77: Key_0x77();break;// Key_Fcase 0x7b: Key_0x7b();break;// Key_Ecase 0x7d: buffer[3]++;if(buffer[3]>5)buffer[3]=0;;break;// Key_D case 0x7e: buffer[2]++;if(buffer[2]>9)buffer[2]=0;;break;// Key_C case 0xde: riqi[4]++;if(riqi[4]>9)riqi[4]=0; break;// Key_4 case 0xdd: riqi[5]++;if(riqi[5]++>9)riqi[5]=0; break;// Key_5 case 0xdb: riqi[6]++;if(riqi[6]>9)riqi[6]=0; break;// Key_6case 0xd7: riqi[7]++;if(riqi[7]>9)riqi[7]=0; break;// Key_7case 0xee: Key_0xee(); break;// Key_0case 0xed: Key_0xed();break;// Key_1case 0xeb: Key_0xeb(); break;// Key_2case 0xe7: Key_0xe7();break;// Key_3}}。

c语言电子时钟课程设计

c语言电子时钟课程设计

c语言电子时钟课程设计一、课程目标知识目标:1. 理解C语言中结构体、函数和循环控制的使用,掌握电子时钟的基本原理。

2. 学习并掌握使用C语言编写程序,实现电子时钟的功能,包括时、分、秒的显示与更新。

3. 了解C语言中定时器功能的使用,实现电子时钟的自动更新。

技能目标:1. 能够运用所学知识,独立设计并编写一个简单的C语言电子时钟程序。

2. 培养学生的编程实践能力,提高问题分析和解决能力。

3. 学会使用调试工具,对程序进行调试和优化,提高程序运行的稳定性。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发学生的学习主动性。

2. 培养学生的团队合作意识,学会与他人共同解决问题,相互学习和进步。

3. 培养学生的创新精神,敢于尝试新方法,勇于克服困难,不断优化程序。

课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,使学生能够学以致用。

学生特点:学生已具备一定的C语言基础,了解基本语法和编程思路,但对实际应用还不够熟练。

教学要求:结合学生特点,注重理论与实践相结合,提高学生的编程实践能力,培养学生的问题分析和解决能力。

在教学过程中,关注学生的个体差异,给予个性化指导。

通过课程学习,使学生能够独立完成一个具有实际意义的编程项目。

二、教学内容1. 复习C语言基础:变量、数据类型、运算符、控制结构(章节1-4)。

2. 结构体与指针:介绍结构体的定义和使用,指针的概念和操作(章节5)。

3. 函数:回顾函数的定义、调用和参数传递,强调模块化编程的重要性(章节6)。

4. 循环控制:深入学习for循环和while循环,理解其在电子时钟中的应用(章节7)。

5. 定时器与时间处理:介绍定时器原理,时间处理函数的使用(章节8)。

6. 电子时钟编程实践:结合所学知识,设计并实现电子时钟程序。

- 显示部分:编写代码实现时、分、秒的显示(课时1)。

- 更新部分:实现时间递增,每秒更新显示(课时2)。

- 定时器应用:使用定时器自动更新时间,减少资源消耗(课时3)。

数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

数字逻辑电路(数电)课程设计_电⼦秒表_VHDL实现(含完整源代码!!)电⼦科技⼤学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA数字逻辑设计实验报告实验题⽬:电⼦秒表学⽣姓名:指导⽼师:⼀、实验内容利⽤FPGA设计⼀个电⼦秒表,计时范围00.00 ~ 99.00秒,最多连续记录3个成绩,由两键控制。

⼆、实验要求1、实现计时功能:域值范围为00.00 ~ 99.00秒,分辨率0.01秒,在数码管上显⽰。

2、两键控制与三次记录:1键实现“开始”、“记录”等功能,2键实现“显⽰”、“重置”等功能。

系统上电复位后,按下1键“开始”后,开始计时,记录的时间⼀直显⽰在数码管上;按下1键“记录第⼀次”,次按1键“记录第⼆次”,再按1键“记录第三次”,分别记录三次时间。

其后按下2键“显⽰第⼀次”,次按2键“显⽰第⼆次”,再按2键“显⽰第三次”,数码管上分别显⽰此前三次记录的时间;显⽰完成后,按2键“重置”,所有数据清零,此时再按1键“开始”重复上述计时功能。

三、设计思路1、整体设计思路先对按键进⾏去抖操作,以正确的得到按键信息。

同时将按键信息对应到状态机中,状态机中的状态有:理想状态、开始状态、3次记录、3次显⽰、以及其之间的7次等待状态。

因为需要⽤数码管显⽰,故显⽰的过程中需要对数码管进⾏⽚选和段选,因此要⽤到4输⼊的多路选择器。

在去抖、计时、显⽰的过程中,都需要⽤到分频,从⽽得到理想频率的时钟信号。

2、分频设计该实验中有3个地⽅需要⽤到分频操作,即去抖分频(需得到200HZ时钟)、计时分频(需得到100HZ时钟)和显⽰分频(需得到25kHZ时钟)。

分频的具体实现很简单,需⾸先算出系统时钟(50MHZ)和所需始终的频率⽐T,并定义⼀个计数变量count,当系统时钟的上升沿每来到⼀次,count就加1,当count=T时就将其置回1。

这样只要令count=1~T/2时clk=‘0’,count=T/2+1~T时clk=‘1’即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x20,0x84,0x24,0xFC,0x28,0x84,0x31,0x1C,
0x00,0x00,0x3F,0xFC,0x01,0x00,0x1F,0xF8,
0x01,0x00,0x01,0x00,0x7F,0xFE,0x00,0x00,
};
char zhan16S[]={
/* 以下是 '占' 的 16点阵宋体 字模,32 byte */
0x10,0x18,0x2F,0xEE,0xC0,0x04,0x3E,0xF8,
0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0x88,
0x22,0xB8,0x20,0x90,0x00,0x80,0x00,0x80,
};
char she16S[]={
/* 以下是 '设' 的 16点阵宋体 字模,32 byte */
0x00,0x20,0x7F,0xFE,0x42,0x50,0x42,0x50,
0x7E,0x50,0x08,0x50,0x2C,0x50,0x2A,0x90,
0x4A,0x92,0x89,0x12,0x2A,0x0E,0x10,0x00,
};
char shiA16S[]={
};
char li16S[]={
/* 以下是 '丽' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,
0x7E,0xFC,0x42,0x84,0x42,0xC4,0x62,0xA4,
0x52,0xB4,0x5A,0xA4,0x52,0x84,0x42,0x84,
0x07,0xF8,0x1C,0x08,0xE4,0x08,0x07,0xF8,
0x04,0x08,0x04,0x08,0x07,0xF8,0x04,0x08,
};
char liu16S[]={
/* 以下是 '刘' 的 16点阵宋体 字模,32 byte */
0x10,0x04,0x08,0x04,0x04,0x04,0x7F,0xA4,
drawmat(shiA16S,16,290,375,RED);
drawmat(sheng16S,16,310,375,RED);
drawmat(ming16S,16,330,375,RED);
outtextxy(350,380,"! ! !");
drawmat(she16S,16,470,360,5);
char shi16S[]={
/* 以下是 '时' 的 16点阵宋体 字模,32 byte */
0x00,0x10,0x00,0x10,0x7C,0x10,0x44,0x10,
0x47,0xFE,0x44,0x10,0x7C,0x10,0x45,0x10,
0x44,0x90,0x44,0x90,0x7C,0x10,0x00,0x10,
#include<graphics.h>
#include<stdio.h>
#include<math.h>
#include<dos.h>
#define PI 3.1415926
#define UP 0x4800
#define DOWN 0x5000
#define ESC 0x11b
0x42,0x84,0x4E,0xBC,0x44,0x88,0x00,0x00,
};
char qin16S[]={
/* 以下是 '琴' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x7E,0xFE,0x08,0x10,0x3E,0x7C,
0x08,0x10,0x7E,0xFE,0x01,0x00,0x02,0x80,
};
char ji16S[]={
/* 以下是 '计' 的 16点阵宋体 字模,32 byte */
0x40,0x20,0x20,0x20,0x30,0x20,0x20,0x20,
0x00,0x20,0xF3,0xFE,0x10,0x20,0x10,0x20,
0x10,0x20,0x10,0x20,0x10,0x20,0x12,0x20,
0x14,0x20,0x18,0x20,0x10,0x20,0x00,0x20,
};
char zhe16S[]={
/* 以下是 '者' 的 16点阵宋体 字模,32 byte */
0x01,0x00,0x01,0x08,0x3F,0xEC,0x01,0x10,
0x01,0x20,0x7F,0xFE,0x00,0x80,0x03,0x00,
drawmat(ji16S,16,490,360,5);
drawmat(zhe16S,16,510,360,5);
setcolor(5);
outtextxy(520,365," : ");
drawmat(liu16S,16,535,360,5) ;
drawmat(song16S,16,555,360,5);
0x01,0x24,0x21,0x24,0x12,0x24,0x0A,0x24,
0x04,0x24,0x06,0x24,0x0A,0x24,0x11,0x04,
0x21,0x84,0x41,0x14,0x80,0x08,0x00,0x00,
};
char song16S[]={
/* 以下是 '松' 的 16点阵宋体 字模,32 byte */
0x10,0x10,0x10,0x90,0x10,0xD0,0xFE,0x90,
0x10,0x88,0x11,0x08,0x39,0x04,0x36,0x46,
0x54,0x64,0x50,0xC0,0x90,0x80,0x11,0x08,
0x40,0x00,0x21,0xF0,0x31,0x10,0x21,0x10,
0x01,0x10,0x01,0x10,0xE2,0x0E,0x25,0xF8,
0x21,0x08,0x21,0x08,0x20,0x90,0x20,0x90,
0x28,0x60,0x30,0x90,0x23,0x0E,0x0C,0x04,
0x9F,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,
0x00,0x80,0x00,0x84,0x7F,0xFE,0x00,0x00,
};
char ming16S[]={
/* 以下是 '命' 的 16点阵宋体 字模,32 byte */
0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,
/* 以下是 '是' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x0F,0xF0,0x08,0x10,0x0F,0xF0,
0x08,0x10,0x0F,0xF0,0x00,0x00,0xFF,0xFE,
0x01,0x00,0x09,0x00,0x09,0xF8,0x09,0x00,
0x00,0x10,0x00,0x10,0x00,0x50,0x00,0x20,
};
char jian16S[]={
/* 以下是 '间' 的 16点阵宋体 字模,32 byte */
0x20,0x00,0x13,0xFC,0x10,0x04,0x40,0x04,
0x47,0xE4,0x44,0x24,0x44,0x24,0x47,0xE4,
#define TAB 0xf09
int keyhandle(int,int);
int timeupchange(int);
int timedownchange(int);
int digithour(double);
int digitmin(double);
int digitsec(double);
0x0C,0x60,0x31,0x1E,0xC0,0x84,0x0F,0xF0,
0x00,0x20,0x00,0x40,0x00,0x80,0x00,0x00,
};
void draw()
{
outtextxy(230,310,"TAB : Cursor move");
outtextxy(230,325,"UP : Time ++");
0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xFC,
0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xF0,
0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,
0x20,0x10,0x3F,0xF0,0x20,0x10,0x00,0x00,
0x15,0x00,0x23,0x00,0x40,0xFE,0x00,0x00,
};
char sheng16S[]={
/* 以下是 '生' 的 16点阵宋体 字模,32 byte */
0x00,0x80,0x10,0xC0,0x10,0x80,0x10,0x88,
0x1F,0xFC,0x20,0x80,0x20,0x80,0x40,0x88,
}
main()
{
int drive=DETECT,mode=0,i,j;
相关文档
最新文档