经典单片机多功能音乐闹钟课程设计报告

时间:2024.3.31

计算机控制技术

题目:单片机电子钟设计

       学    院  电子信息工程学院

       学科门类       工  学     

       专    业 电气工程及其自动化

       学    号     1208441107  

       姓    名       范明明      

     

              20##年12月29日

数字钟的简介

单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面, 其调试过程一般分为软件调试、硬件测试、系统调试3个过程。如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。

数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便[4]。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。

电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。而且向着精确、低功耗、多功能发展。基于单片机设计的数字钟精确度较高, 因为在程序的执行过程中, 任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。另外,程序较为简洁,具有可靠性和较好的可读性。如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。

数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟, 也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。这些方法都各有特点, 其中,利用单片机实现的电子钟具有编程灵活, 便于功能扩充, 精确度高等特点[5]

  整体设计思路

这部分主要介绍工作安排和整体设计的思想。工作过程规划如下:

图2.1 整体设计思路

1. 设计的任务与要求

电子钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。电子钟从原理上讲是一种典型的数字电路,

因此,我们此次设计电子钟就是为了了解单片机的工作原理,从而学会制作电子钟。而且通过电子钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。通过它可以进一步学习与掌握单片机原理与使用方法。1.1设计指标

1. 时间以12小时为一个周期;

2. 显示时、分、秒;

3. 具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;

4. 计时过程具有报警功能,

1.2 设计要求

1. 画出电路原理图(或仿真电路图);

2. 元器件及参数选择;

3. 编写设计报告  写出设计的全过程,附上有关资料和图纸,有心得体会。

2.1 AT89C51单片机[8]

该单片机功能强大,不仅能满足设计的需要,也可以在设计要求的基础上进行一些扩展。

单片机的结构如下:

图3.1.1 单片机引脚图

在使用时VCC接电源电压,GND接地。P0,P1,P2,P3可作为输入或输出端口,RST是复位输入,接复位电路。XTAL1和XTAL2接复位电路。这些可以在硬件设计部分体现出来。

2.2数码管:

图3.3.1 数码管

使用共阴极数码管时将6个数码管按相同功能连接起来,3与8相连,当选通端所接管脚为低电平时该数码管选通。

单片机的P2口作为选通端,连接各数码管的3、8引脚轮流显示,连接时要加7407和上拉电阻。

单片机的P1口作为功能段,通高电平的引脚会使相应段亮起,同样的也要与7407和电阻连接使用。

2.3 74HC573

            

74HC573功能表

 

3.1 分块设计

这部分介绍各模块电路的设计方法和成果,主要分为:输入部分、输出部分、复位和晶振电路。

3.2 输入部分

在电子钟的输入部分,设置相应的置数功能,通过外部设备的输入,如按键,实现时间的修改[10-11]。除此之外,调整闹铃、定时、日期时也需要按键进行输入。在选用输入端口时,将P3引脚与按键相连进行输入[12]。设计的输入部分如下:

3.3 输出部分(显示电路)

该部分电路图如下所示:

4.2.3 晶振与复位电路:

4.1 程序思路

结合电路,程序的总体思路是[17]

1、点复位键后,进行时间显示,从0时0分0秒开始。

2、按下按键1时,进行调时,此时按下4调整时,按下5调整分,若2秒钟未按键,则不再等待,恢复走时,持续按键时大约0.3秒步进1,下同。

3、按下2键时进行闹铃调整,用4、5键分别调时和分,此时只有前四位进行显示,即闹铃功能精确到分,2秒钟无按键则返回时间显示,时间到达闹铃所定时间时P0.7输出高电平,蜂鸣器响,按下按键2或3时蜂鸣器停止。

4、按3键时进行定时的设定,同样,分别通过4、5调整分和秒,若两秒未按键则不进行定时,设定之后再次按下3键则进行倒计时,倒计时时间未到时若按下1键则进行时间显示;若倒计时时间到则P0.7为高电平,蜂鸣器响。定时的最大值为59分59秒。

在程序设计时,尽量改进算法,算法的改进可以使相对误差减小[12],或者可以使占用空间减小[14]。另外,分块的设计思想要贯穿始终,整个程序较为繁杂,某些程序段会反复用到,因此采取的方法是写出多个程序段,通过跳转指令进行调用。

4.2程序设计步骤

在程序设计过程中,我遇到了很多困难,这部分也是让我学到很多东西的地方。

首先,我学习了定时器的相关知识,计数器的使用是很重要的组成部分[15],在这个设计中选择计数器T0。T0的工作方式有:

方式1:16位计数器,常用

方式2:自动重装初值的8位定时/计数器

方式3:T0相当于两个独立的8位定时/计数器

此程序采用方式1,方式1的定时时间t为t=(216-M)*12/fosc。其中M为定时器初值,fosc为12MHz,若M为0则t=65536*12/2*106=65.536ms。因此可取50ms为计时单位[16],初值M应为50*10-3*106=216-M。M=15536=11110010110000=3CB0。即定时器初值为TH0=03CH,TL0=0B0H。定时器中断20次为一秒,这部分在中

断程序中用到。

其次,我参看了文献中的设计思路,做到胸有成竹后再进行具体的程序书写工作。认真学习了教科书中关于汇编语言编程的问题,熟悉了汇编语言的编程方法和语法习惯。

第三步就是进行具体的程序编写工作。

4.3程序的主要模块

4.3.1延迟程序

在动态扫描时,必然用到延迟程序,这里使用延迟1ms的程序,此程序需要

4.3.2 中断服务子程序:

中断服务程序中,总体思路是:由于初值是3CB0H,所以装满定时器需要50ms的时间,从而20次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。包括日期显示的功能也是如此。另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。再显示走时部分。

流程框图如下:

 

参考文献:

[1] 丁向荣,贾平.单片机应用系统与开发技术.清华大学出版社,2009

[2] 第二版.51系列单片机设计实例.北京航空航天大学出版社(81—89页 数码管时钟电路的设计).

[3] 黄庆华,张永格.单片机开发与实例.电子工业出版社(127-162页 数字式电子时钟的设计)

[4] 李叶紫,王喜斌,胡辉,孙东辉.MCS_51单片机应用教程.清华大学出版社.

[5]张毅刚,彭喜元,彭宇.单片机原理及应用第二版.高等教育出版社


第二篇:课程设计名称:多功能音乐闹钟


课程设计名称:多功能音乐闹钟 小组成员:亓帅,潘跃龙,任少卿,沈荣宗

一. 课程设计目的。

1. 巩固对单片机课程的认识,学习数字时钟的多样化显示。

2. 通过本次设计加深对单片机课程应用的理解。

3. 锻炼自己自学以及独立解决问题的能力。

4. 通过此次软硬件结合使用,锻炼实践能力和理论结合实际的能力。

5. 锻炼团队分工能力以及协调能力。

二. 用途与功能。

本作品可以显示和设置二十小时制的时分秒显示,可以设置和查看星期,内设七个周闹钟(周日到周六)和一个日闹钟,另外内设八首不同的好听铃声,可以根据个人喜好设置每个闹钟的响铃铃声,同时周闹钟可以设置每周都闹或隔一周闹一次,日闹钟可以设置每天都闹或隔一天闹一次,功能强大且实用,特别适合以星期为生活周期的学生或上班族使用。

三. 硬件设计思想和电原理图。

本次设计以ATmega16单片机实验板为基础设计平台,通过编程实现时钟显示以及闹钟的各种功能,通过外部按键操作实现在七段数码管上的显示。

课程设计名称多功能音乐闹钟

(由于我组实验板的c端口出现故障,临时改用了b端口,请谅解)

四.硬件单元的使用

按键介绍:

短按k1键进行时间校准(设置)和星期显示或设置,同时最后一位有闪烁效果,再按k1则依次闪烁要设置的位,直到最高位闪烁时继续再按一次k1键退出设置,要设置的位有闪烁效果,每秒闪两次,进行时间设置时仍会显示时间的时分位,但秒位不显示,原先显示秒位的两个数码管显示星期,0代表星期天,1代表星期一,以此类推。

1. 长按k2键进入闹钟设置状态(本作品内设八个闹钟),同时显示闹钟的响铃时间、响铃方式和闹钟编号。这种状态下六个数码管的高四位显示闹钟响铃的时分。最低位显示闹钟编号,0到6为周闹钟对应周日到周六。倒数第二位显示响铃的方式,0为该闹钟关,1为每周(日)都响,2为隔一周(日)响一次且忽略本周(日),3为隔一周(日)响一次且本周(日)响。注意在此闹钟设置状态下不影响时钟走针。

2. 闹钟设置状态下,短按k1键则最后一位有闪烁效果,再按k1则

依次闪烁要设置的位,直到最高位闪烁时继续再按一次k1键则无位闪烁但不退出闹钟设置状态,要设置的位有闪烁效果,每秒闪两次。

3. 在闹钟设置状态下同时无位闪烁时,短按k2键,选择该闹钟的铃声,此时会有相应的铃声响起,本作品共内设8个不同铃声。

4. 在任何情况下,有某个位闪烁时短按k2键,进行该位的数字大小的调节。

5. 在时钟走时且无位闪烁时,短按k2无效,长按k1等同于短按k1。

6. 闹铃响后,按下任意按键铃声停止。

7. 闹铃响后,若置之不理,则铃声每隔一分钟响一次。

五.软件功能及测试。

产品所用程序:

/*******************************************************

File name ; demo_11_4.c

Chip type ; ATmega16

Program type ; Application

Clock frequency ; 1.000 000 MHz

Memory model ; Small

External SPAM size ; 0

Data stack size ; 256

/*******************************************************

File name ; demo_11_4.c

Chip type ; ATmega16

Program type ; Application

Clock frequency ; 1.000 000 MHz

Memory model ; Small

External SPAM size ; 0

Data stack size ; 256

********************************************************/

#include <iom16v.h>

#include <macros.h>

const unsigned char led_7[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

const unsigned char position[6] = {0xC1,0xC2,0xC4,0xC8,0xD0,0xE0};

const unsigned int t[16] = {0,1912,1730,1518,1433,1276,1136,1012,956,865,759,716,638,568,506,470};

const unsigned char d[16] = {0,52,58,66,70,78,88,99,105,116,132,140,157,176,198,209};

const unsigned char Max_note[8]={84,86,64,88,90,100,78,102};

const unsigned char music[8][102]={{5,2,4,2,5,2,10,6,10,2,11,2,10,2,9,2,7,2,8,10,8,2,7,2,8,2,12,6,12,2,11,2,10,2,9,2,10,2,10,10,5,2,4,2,5,2,10,6,10,2,11,2,10,2,9,2,7,2,8,2,9,2,10,2,14,2,13,6,10,2,12,2,11,2,10,2,11,2,10,6,9,2,8,14},

{12,2,12,2,10,2,9,2,10,2,6,4,9,2,10,2,12,2,10,2,9,10,12,2,12,2,10,2,9,2,10,2,5,4,9,2,10,2,12,2,9,2,8,10,8,2,9,2,10,2,12,2,13,2,12,2,10,2,12,2,10,2,10,2,9,2,9,10,8,2,9,2,8,2,9,4,8,2,9,4,10,4,12,2,10,10},

{2,4,2,4,3,4,3,6,2,2,3,4,5,2,6,4,5,6,1,4,2,4,3,4,6,4,5,4,3,2,5,14,5,2,6,2,8,8,6,4,5,4,3,4,5,2,3,6,1,2,2,2,3,6,1,2,1,4,3,4,2,2,2,4},

{3,4,5,4,8,12,8,4,7,8,6,4,5,4,6,4,8,4,3,4,2,4,1,8,1,4,1,4,1,4,8,8,6,4,5,4,3,4,2,4,1,4,2,24,3,4,5,4,8,12,8,4,7,8,6,4,5,4,6,4,8,4,3,4,2,4,1,8,1,4,1,4,1,4,8,8,6,4,5,4,3,4,2,4,1,4,1,24},

{8,4,7,4,8,12,9,4,10,4,9,4,8,4,7,4,8,12,8,4,8,4,5,4,5,4,1,4,6,12,6,4,5,4,1,4,1,4,3,4,2,12,4,4,4,4,5,4,8,4,7,4,8,12,9,4,10,4,9,4,8,4,7,4,8,12,8,4,8,4,5,4,5,4,1,4,6,12,6,4,5,4,5,4,8,4,7,4,8,24},

{5,4,12,4,11,4,10,8,10,4,11,2,10,10,10,4,11,4,10,4,11,4,10,4,9,2,8,6,8,4,10,4,12,4,13,8,13,4,13,2,12,6,9,4,9,4,11,2,10,22,8,4,10,4,12,4,13,8,13,4,13,2,12,2,12,4,9,4,9,4,11,4,10,4,11,4,10,4,9,2,8,10,9,4,10,4,6,8,6,4,8,4,8,4,7,4,7,8,8,24},

{12,4,12,4,11,4,10,4,9,12,9,4,9,4,10,4,11,4,10,12,8,4,8,8,9,8,10,8,9,8,8,8,7,4,6,4,5,12,12,4,12,4,11,4,10,4,9,8,9,4,9,4,10,4,11,4,10,12,8,4,8,8,9,4,10,4,11,8,10,8,9,8,8,4,7,4,8,24},

{5,2,8,2,8,2,8,3,9,1,10,2,8,4,6,2,8,2,8,2,8,3,8,1,6,2,5,4,5,2,8,2,8,2,8,3,9,1,10,2,8,4,8,2,9,2,9,2,9,1,8,1,9,1,10,1,9,6,5,2,8,2,8,2,8,3,9,1,10,2,8,4,8,2,6,2,8,2,8,2,9,2,8,6,5,2,8,2,8,2,8,4,12,2,11,2,10,2,8,2,8,8}};

unsigned char note_n;

unsigned int int_n;

int play_on;

int clock_style=0,lazy_style=0,ci=0,cci;

unsigned char week_clock[8]={0,1,2,3,4,5,6,7},time[3],time_clock[8][3] =

{{10,0,7},{11,5,7},{12,10,7},{13,15,7},{14,20,7},{15,25,7},{16,30,7},{17,35,7}};

unsigned char dis_buff[6];

unsigned char time_counter,key_stime_counter;

unsigned char clock_state = 6,return_time;

int point_on=0,set_on=0,time_1s_ok=0,key_stime_ok=0; int week;

void display(void)

{

}

//Timer 0 比较匹配中断服务,2ms定时

#pragma interrupt_handler timer0_comp_isr:iv_TIMER0_COMP void timer0_comp_isr(void)

{

display(); if (++key_stime_counter >= 5) { key_stime_counter = 0; static unsigned char posit = 0; PORTB = 0xFF; PORTA = led_7[dis_buff[posit]]; if(set_on && (posit == clock_state)) PORTA = 0xFF; if(point_on && (posit == 2 || posit == 4)) PORTA &= 0x7F; PORTB = position[posit]; if(++posit >= 6) posit = 0;

}

} key_stime_ok = 1; if(!(++time_counter % 25)) set_on = !set_on; if(time_counter >= 100) { } time_counter = 0; time_1s_ok = 1;

//T/C1 比较匹配A中断服务

#pragma interrupt_handler timer1_compa_isr:iv_TIMER1_COMPA void timer1_compa_isr(void)

{

if(!play_on) { } else note_n = 0; int_n = 1; play_on = 1;

{

if(--int_n == 0)

{

TCCR1B = 0x08;

if (note_n < Max_note[cci]) {

OCR1A = t[music[cci][note_n]]; int_n = d[music[cci][note_n]]; note_n++;

int_n = int_n * music[cci][note_n]; note_n++;

TCCR1B = 0x09;

}

else

play_on = 0;

}

}

}

void time_to_disbuffer(unsigned char *time) 示缓冲区函数

{

unsigned char i,j=0; //时钟时间送显

for(i=0;i<=2;i++)

{

dis_buff[j++] = time[i] % 10; dis_buff[j++] = time[i] / 10; }

}

void ctime_to_disbuffer(unsigned int ci) 缓冲区函数

{

unsigned char i,j=0;

for(i=0;i<=2;i++)

{

dis_buff[j++] = time_clock[ci][i] % 10; dis_buff[j++] = time_clock[ci][i] / 10; }

}

void wtime_to_disbuffer(unsigned int week) 冲区函数

{

unsigned char j=0;

dis_buff[j++] = week % 10; //闹钟时间送显示 //星期送显示缓

dis_buff[j++] = week / 10;

}

#define key_input PINB

#define key_mask 0b11000000

#define key_no 0

#define key_k1 1

#define key_k2 2

#define key_state_0 0

#define key_state_1 1

#define key_state_2 2

unsigned char read_key(void)

{

static unsigned char key_state = 0,key_old; unsigned char key_press,key_return = key_no; static int press_time=0;

key_press = key_input & key_mask; 电平

switch(key_state) //读按键I/O

{ case key_state_0: //按键初始态 if(key_press != key_mask) { key_old = key_press; //记录原电平 key_state = key_state_1; //键被按下,状态转换到键确认态

} break; case key_state_1: //按键确认态 if(key_press == key_old) //与原电平比较(消抖处理)

{ if(key_press == 0b01000000) key_return = key_k1; else if(key_press == 0b10000000) key_return = key_k2; key_state = key_state_2; //状态转换到键释放态 TCCR1B = 0x08; //响铃关 } else key_state = key_state_0; //按键已抬起,转换到按键初note_n = 0; lazy_style=0; //懒人响铃关

始态 态 } } return key_return; } else { if((key_press==0b10000000)&&(++press_time>=100)) { press_time=0; if(++clock_style>1) clock_style=0; } } break; break; case key_state_2: if(key_press == key_mask) { press_time=0; key_state = key_state_0; //按键已释放,转换到按键初始

void main(void) { unsigned char key_temp,i;

DDRA = 0xFF; //LED段码输出 PORTB = 0x00;

DDRB = 0x3F; DDRD = 0x20;

//T/C0初始化

OCR0 = 0xF9; 0xF9(249),(249+1)/(125kHz) = 2ms

TCCR0 = 0x0A; (1MHz/8 = 125 kHz),CTC模式 //T/C1初始化 TCCR1A = 0x40; TCCR1B = 0x08;

TIMSK = 0x12; 中断,使能T/C0比较匹配中断

time[2] = 6; time[1] =58; time[0] = 55; 为23:58:55 星期天

//LED位控输出 //PD5音乐播放输出 //OCR0 =

//内部时钟,8分频

//使能T/C1比较匹配A

week=0; //设时间初始值

SEI(); //使能全局中断

if(++time[1] >= 60) { time[1] = 0; if(++time[2] >= 24) { time[2] = 0; if(++week>=7) week=0; } { time[0] = 0; while(1) { if(time_1s_ok) //1s到 { time_1s_ok = 0; point_on = !point_on; //秒闪烁标志 if(++time[0] >= 60) //秒加1,以下为时间调 if(lazy_style) TCCR1B = 0x09; //1min到 懒人模式响

}

if((time[2]==time_clock[week][2])&&(time[1]==time_clock[week][1])&&(time_clock[week][0]!=week))

{ if((time_clock[week][0])==(10+week)) { ci=week_clock[week];TCCR1B = 0x09;lazy_style=1; } else { if((time_clock[week][0]+=10)>(30+week)) { time_clock[week][0]=20+week; cci=week_clock[week];TCCR1B = 0x09;lazy_style=1; } } } //周闹钟时间到响铃 同时懒人模式启动

if((time[2]==time_clock[7][2])&&(time[1]==time_clock[7][1])&&(time_clock[7][0]!=7))

{

if((time_clock[7][0])==(17))

{

cci=week_clock[week];TCCR1B = 0x09;lazy_style=1; }

else

{

if((time_clock[7][0]+=10)>(37))

{

time_clock[7][0]=27;

cci=week_clock[7];TCCR1B = 0x09;lazy_style=1; }

}

} //日闹钟时间到响铃 同时懒人模式启动

}

if((++return_time >=20) && ((clock_state

6)||(clock_style==1))) {clock_state = 6;clock_style=0;}

if(clock_style == 1) ctime_to_disbuffer(ci);

else

{if(clock_state!=0)time_to_disbuffer(time);}

} !=

if(key_stime_ok) //10ms到,键处理

if(clock_style) //判断是否处于闹钟设置状态 { if(key_temp) //确认有键按下 { return_time = 0; if(key_temp == key_k1) { if(++clock_state >= 7) clock_state = 0; if(clock_state == 0) { } ctime_to_disbuffer(ci); { key_stime_ok = 0; key_temp = read_key(); //调用按键接口程

} if(clock_state == 6) { } ctime_to_disbuffer(ci); if((clock_state == 0) && (key_temp == key_k2)) { if(++ci>=8) ci=0; ctime_to_disbuffer(ci); } if((clock_state == 1) && (key_temp == key_k2)) { if((time_clock[ci][0]+=10)>(30+ci)) time_clock[ci][0]=ci;

ctime_to_disbuffer(ci); } if((clock_state==6) && (key_temp == key_k2)) { if((++week_clock[ci])>=8) week_clock[ci]=0; cci=week_clock[ci];TCCR1B = 0x09;lazy_style=1; }

if((clock_state<6) && (clock_state>1) && (key_temp == key_k2)) //K2键按下

{ if(clock_state % 2) time_clock[ci][clock_state / 2] += 10;

else { if((time_clock[ci][clock_state / 2] % 10) == 9) time_clock[ci][clock_state / 2] -= 9; else time_clock[ci][clock_state / 2] += 1; } if(time_clock[ci][0] >= 60) time_clock[ci][0] -= 60; //以下为设置时间调整

if(time_clock[ci][1] >= 60) time_clock[ci][1] -= 60; if(time_clock[ci][2] >= 24) time_clock[ci][2] -= 10; ctime_to_disbuffer(ci); //设置时间送显示缓存

} } }

else //时间设置 { if(key_temp) //确认有键按下 { return_time = 0; if(key_temp == key_k1) { if(clock_state==0) clock_state++; if(++clock_state >= 7) clock_state = 0; if(clock_state == 0) { } if((clock_state==0)&&(key_temp == key_k2)) {if(++week>=7) week=0;wtime_to_disbuffer(week);} else { if((clock_state < 6)&&(clock_state > 1)&&(key_temp == } if(clock_state == 6) { } time_to_disbuffer(time); wtime_to_disbuffer(week);

key_k2)) //K2键按下

{ if(clock_state % 2) time[clock_state / 2] += 10; else { if((time[clock_state / 2] % 10) == 9) time[clock_state / 2] -= 9; else time[clock_state / 2] += 1; } if(time[0] >= 60) time[0] -= 60; //以下为设置时间调整

if(time[1] >= 60) time[1] -= 60; if(time[2] >= 24) time[2] -= 10; time_to_disbuffer(time); //设置时间送显示缓存

} } } } } }

}(本程序大部分为自主开发)

经测试,各功能均按预想成功实现。

六.课程设计使用全部资源。

ATmega16单片机,六个七段数码管,独立按键K1,K2,导线若干。

七.成员分工及工作情况。

1. 亓帅负责程序编写

2. 任少卿,潘跃龙负责硬件连接及性能测试

3. 沈荣宗负责设计论文,总结报告,开题报告及演讲PPT的制作。 完成情况:基本按要求完成,状况良好。

更多相关推荐:
《单片机课程设计》报告

机械与车辆学院单片机课程设计报告20xx20xx学年第一学期课程设计题目水塔水位控制系统姓名学号班级指导老师职称时间成绩单片机课程设计考查评分表2目录一课程设计性质和目的4二课程设计的内容及要求41硬件设计42...

单片机课程设计报告

物理与机电学院课程设计报告课程名称:单片机课程设计系部:物理与机电工程学院专业班级:07级电子信息工程(1)班完成时间:20XX年5月24日~28日报告成绩:【摘要】单片机自1976年由Intel公司推出MCS…

51单片机课程设计报告。

成绩单片机原理及应用课程设计课程名ltlt单片机原理及应用gtgt学部专业学号姓名指导教师日期20xx年06月一设计任务与要求1任务制作并调试51单片机学习板2要求1了解并能识别学习板上的各种元器件会读元器件标...

流水灯单片机课程设计报告

井冈山大学机电工程学院单片机课程设计报告课程名称单片机设计题目流水灯姓名覃家应陈东阳专业生物医学工程班级10级医工本一班学号100615062指导教师王佑湖20xx年11月10日目录1引言211设计任务212设...

单片机课程设计报告范例

单片机课程设计示例交通灯控制系统设计一总体设计1设计要求交通灯的任务要求为模拟十字路口的交通灯的亮灭及闪烁基本工作原理根据交通灯的亮灭情况可以分为四种状态利用定时计数器每20秒产生一次中断每产生一次中断后由是否...

51单片机电子时钟课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20xx级电工2班学号20xx401020xx2姓名王贞指导教师邹云峰提交日期20xx...

基于51单片机课程设计报告

课题:基于51单片机的数字温度计设计专业:电气工程及其自动化班级:4学号:***设计日期:20XX/6/3成绩:重庆大学城市科技学院电气学院基于51单片机数字温度计设计报告一、设计目的作用本设计是一款简单实用的…

基于单片机的电子密码锁设计_单片机课程设计报告

单片机密码锁课程设计报告湖南师大本科生课程设计目录1引言12设计要求23硬件电路设计331设计方案的选择332主要元器件简介433硬件系统结构84程序设计135总结15参考文献16附件一电路原理图及作品实物图1...

单片机课程设计数字钟实验报告

单片机课程设计电子钟一实现功能1能够实现准确计时以数字形式显示时分秒的时间2小时以24小时计时形式分秒计时为60进位能够调节时钟时间3闹钟功能一旦走时到该时间能以声或光的形式告警提示4能够实现按键启动与停止功能...

单片机课程设计数字钟报告

单片机课程设计报告基于单片机的数字钟班级姓名学号设计时间单片机课程设计正文一引言现代社会科技飞速发展人们生活节奏加快时间就是金钱时间就是生命时间对人们来说总是那么宝贵工作的忙碌性和繁杂性容易使人忘记当前的时间忘...

单片机课程设计报告

文华学院单片机原理及应用课程设计报告设计题目姓名学号班级指导教师20xx年月日目录一标题二设计内容设计要求三设计思路四工作原理五硬件设计六软件设计含流程图七调试遇到的问题和解决方法八改进意见九收获及体会十源程序...

单片机电子时钟课程设计报告

基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重量轻抗干扰能力强环境要求不高价格低廉可靠性高灵活性好开发较为容易由于具有上述优点...

单片机课程设计报告(45篇)