基于51单片机的数字钟C语言程序设计及protuse仿真
基于51单片机的多功能电子钟设计
基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。
本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。
51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。
本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。
本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。
接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。
将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。
软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。
本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。
通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。
2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。
它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。
51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。
51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。
其存储器分为程序存储器(ROM)和数据存储器(RAM)。
程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。
51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。
51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。
基于51单片机的多功能电子时钟设计报告及其protel仿真电路及效果
单片机课程设计报告多功能电子数字钟姓名:学号:班级:指导教师:目录一课程设计题目-------------------------------- 3 二电路设计--------------------------------------- 4 三程序总体设计思路概述------------------- 5 四各模块程序设计及流程图---------------- 6 五课程设计心得及体会---------------------- 12 六程序、仿真电路效果见附录------------ 41一题目及要求本次单片机课程设计在Proteus软件仿真平台下实现,完成电路设计连接,编程、调试,仿真出实验结果。
具体要如下:用8051单片机设计扩展6位数码管的静态或动态显示电路,再连接几个按键和一个蜂鸣器报警电路,设计出一个多功能电子钟,实现以下功能:(1)走时(能实现时分秒,年月日的计时)(2)显示(分屏切换显示时分秒和年月日,修改时能定位闪烁显示)(3)校时(能用按键修改和校准时钟)(4)定时报警(能定点报时)本次课程设计要求每个学生使用Proteus仿真软件独立设计制作出电路图、完成程序设计和系统仿真调试,验收时能操作演示。
最后验收检查结果,评定成绩分为:(1)完成“走时+显示+秒闪”功能----及格(2)完成“校时修改”功能----中等(3)完成“校时修改位闪”----良好(4)完成“定点报警”功能,且使用资源少----优秀二电路设计(电路设计图见附件电路图)(1)采用89C51型号单片机(2)采用8位共阴数码管(3)因为单片机输出高电平时输出的电流不足以驱动数码管,所以在P0口与8位数码管之间加74LS373来驱动数码管(4)P2口与数码管选择位直接加74LS138译码器(5)蜂鸣器接P3.7口。
因为单片机输出高电平时输出的电流不足以驱动蜂鸣器所以蜂鸣器,所以P3.7口与蜂鸣器直接接反相器再接蜂鸣器的一端,蜂鸣器的另一端接5V电源。
基于51单片机的数字电子钟keil+Proteus7
Proteus7Keil3(8位数码管电子钟程序)其功能:时分秒有点区分;另外加有启动键、暂停键、清零键、调时、分、秒。
#include<reg51.h>unsigned char codetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0~9数码管显示段码tab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; // 0~9数码管显示段码(带小数点)unsigned char dat[]={0,0,0,0,0,0,0,0};unsigned char j,temp;unsigned char hour = 0;unsigned char minute = 0;unsigned char second = 0;unsigned char irp_count =0;sbit k1=P3^0;//启动键sbit k2=P3^1;//暂停键sbit k3=P3^6;//清零键sbit k4=P3^3;//调时键sbit k5=P3^4;//调分键sbit k6=P3^5;//调秒键//****************延时函数******************************* void delay(){unsigned char i;for(i=0;i<20;i++);}//********************按键函数************************** void k(){if(k1==0)//启动键{if(k1==0);{TR0=1;}delay();}//******************暂停**********************else if(k2==0){if(k2==0);{TR0=0;}delay();}//***************清零*************************if(k3==0){delay();if(k3==0){dat[7]=0,dat[6]=0,dat[5]=0,dat[4]=0,dat[3]=0,dat[2]=0,dat[1]=0,dat[0]=0;TR0=0;hour=0;minute=0;second=0;}delay();}//****************调时************************else if(k4==0){while(k4==0);hour++;if(hour>=24){hour=0;}delay();}//****************调分************************else if(k5==0){while(k5==0);minute++;if(minute>=60){minute=0;}delay();}//****************调秒************************else if(k6==0){while(k6==0);second++;if(second>=60){second=0;}delay();}}//************************* 主程序********************** void main(){EA=1; EX0=1;//初值TMOD=0x01;//初值TH0=0x3c; //初值TL0=0xb0; //初值TR0=0; //初值ET0=1; //初值IT0=1; //初值while(1){k();//按键函数temp=0x01;for(j=0;j<8;j++){if(j==2||j==4||j==6)P0=tab1[dat[j]];//个位带点elseP0=tab[dat[j]];//十位不带点P1=~temp;temp=temp<<1;delay();P1=0xff;}}}/*定时计数器0的中断服务子程序*/void timer0(void) interrupt 1 using 1 //50ms中断一次{TH0=0x3c; //晶振:12MHz TL0=0xB0; //晶振:12MHz irp_count++;if (irp_count>=20) //1s{irp_count=0;second++;if (second>=60){second=0;minute++;if (minute>=60){minute=0;hour++;if (hour>=24)hour=0;} //end if(minute>=60)}} //end if(second>=60)dat[7]=hour/10;dat[6]=hour%10;dat[5]=minute/10;dat[4]=minute%10;dat[3]=second/10;dat[2]=second%10;dat[1]=irp_count/10;dat[0]=irp_count%10;//end if (irp_conut>=20) }。
AT8951单片机带闹钟数字时钟 C语言编程
{
delay(10);
//延时去抖
if(K2==0)
//加键按下
{
if(hour<23) hour++;
else hour=0;
}
while(!K2);
//等待按键释放
}
if(K3==0) {
delay(10); if(K3==0) {
if(hour> 0) hour--; else hour=23; } while(!K3); } } break;
}break; case 1:
{ if(S_flag==1) { a[0]=led[hour/10]; a[1]=led[hour%10]; } else {
a[0]=led[11]; a[1]=led[11]; } a[2]=led[10]; a[3]=led[minute/10]; a[4]=led[minute%10]; a[5]=led[10]; a[6]=led[second/10]; a[7]=led[second%10]; }break; case 2: { a[0]=led[hour/10]; a[1]=led[hour%10]; a[2]=led[10]; if(S_flag==1) { a[3]=led[minute/10]; a[4]=led[minute%10]; } else { a[3]=led[11]; a[4]=led[11]; } a[5]=led[10]; a[6]=led[second/10]; a[7]=led[second%10]; }break; case 3: { if(S_flag==1) { a[0]=led[hour1/10]; a[1]=led[hour1%10]; } else { a[0]=led[11]; a[1]=led[11]; } a[2]=led[10]; a[3]=led[minute1/10]; a[4]=led[minute1%10];
基于8051和Proteus的数字时钟 程序的编写和仿真
//显 示 函 数
weilock=1; P0=~(1<<2); weilock=0; dualock=1;
P0=(bb==2)?duacode[mint%10]|0x80:duacode[mint%10]; dualock=0; delay(); weilock=1; P0=~(1<<3); weilock=0; dualock=1; P0=(bb==2)?duacode[mint/10]|0x80:duacode[mint/10]; dualock=0; delay();
本程序功能及特点:通过 8051 芯片及数码管实现数字时钟,并可以通过如下图中的两个按键对 时钟进行调节,其中 “PAUSE”按键的作用是暂停/启动时钟并选择要修改的时间参数“时”,
“分”,“秒”,被选择参数例如下图中从左到右依次为“时,分,秒”,当小时被选中并被修
改 时 会 有 最 下 面 两 点 的 点 亮 以 作 为 提 示 , “ CHANGE”按 键 用 来 对 被 选 中 的 参 数 进 行 修 改 , 只 能
进行加法修改,超过参数的上限会自动归零, 注:本程序仅供本人日后学习参考使用,不足之处请见谅,
#include <reg52.h> sbit dualock=P2^0; sbit weilock=P2^1; unsigned char code duacode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned char aa=0,hour=0,mint=0,sec=0,bb=0,*choose; void display(unsigned char,unsigned char,unsigned char); void delay(); void init(); void main() { init(); while(1)
基于C51单片机的数字时钟课程设计(C语言带闹钟)
单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词:电子钟 AT89C52 硬件设计软件设计目录NO TABLE OF CONTENTS ENTRIES FOUND.一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。
具有时间显示,并有时间设定,时间调整功能。
1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。
1.3 设计课的设计总体方案介绍及工作原理说明本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:图1-1总体设计方案图本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。
键盘采用动态扫描方式。
利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
基于51系列单片机及DS1302时钟芯片的电子时钟-C语言-Proteus仿真-报告
基于单片机的电子时钟姓名:班级:学号:指导教师:完成日期:目录摘要一、引言 (1)二、基于单片机的电子时钟硬件选择分析 (2)2.1主要IC芯片选择 (2)2.1.1微处理器选择 (2)2.1.2 DS1302简介 (4)2.1.3 DS1302引脚说明 (4)2.2电子时钟硬件电路设计 (5)2.2.1时钟电路设计 (6)2.2.2整点报时功能 (7)三、Protel软件画原理图 (8)3.1系统工作流程图 (8)3.2原理图 (9)四、proteus软件仿真及调试 (9)4.1电路板的仿真 (9)4.2软件调试 (9)五、源程序 (10)六、课设心得 (13)七、参考文献 (13)基于单片机电子时钟设计摘要电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。
另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。
本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。
本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。
本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。
该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。
关键词:电子时钟;多功能;AT89C52;时钟日历芯片一、引言时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。
从古代的水漏、十二天干地支,到后来的机械钟表以及当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。
致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。
1.1 多功能电子时钟研究的背景和意义20世纪末,电子技术获得了飞速的发展。
(完整word版)51单片机数字钟
目录1 设计任务与要求 (I)2 设计方案 (1)3 硬件设计 (2)3.1 AT89C51单片机简介 2 3.2单片机型号的选择 (6)3.3数码管显示工作原理 (6)4 软件设计 (7)4.1主程序模块介绍 (7)4.2主程序 (7)5 仿真调试 ......................................... 错误!未定义书签。
5.1K EIL仿真结果.................................. 错误!未定义书签。
5.2仿真结果分析 (13)6 小结 ............................................. 错误!未定义书签。
1 设计任务与要求1. 设计一个基于单片机的电子时钟,并且能够实现时分秒的现实和调节。
2. 设计出硬件电路。
3. 设计出软件编程方法,并写出源代码。
4. 用PROTEUS进行仿真。
5.用汇方式实现目的。
7.系统的各各功能模块要编语言编实现程序设计。
6.利用查表,中断等清楚,有序。
8.程序运行时有友好的用户界面。
2 设计方案本设计主要设计了一个基于AT89C51单片机的电子时钟。
并在数码管上显示相应的时间。
并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。
应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
该设计的硬件部分主要包括89C51多功能接口芯片用于开发电子时钟芯片、LED七段数码显示器用于显示时间、8031集成定时器用于定时、0.125W、8欧姆的扬声器用于定时发声。
软件部分包括主程序、定时计数中断程序、时间调整程序、延时程序四大模块。
通过中断程序进行定时器计数,时间调整程序是当键按下时间小于1秒,关闭显示(省电)进入调节时间状态,延时程序用于时间的延迟。
先设计个秒钟程序,在秒钟程序中先不设计按钮,直接通电运行,使用40H 存放计数值,从00—59,一直循环,把40H中的数值拆分成个位和十位,分别存在30H与31H中,要求动态扫描时,使用21H当标志位,用指令JB控制显示个位与十位,程序中使用中间寄存器R0与R1用于存放拆分后的字型,再传到30H与31H中去,再设计时钟程序。
基于51单片机的数字钟设计与制作
一.基于52单片机制作的数字钟1.设计任务⑴时间显示: 上电后,系统自动进入时钟显示,从00:00:00开始计时,此时可以设定当前时间.⑵时间调整:按下k1,k2,k3键可以顺序设置秒、分、时,并在相应数码管上显示设置值,直至6位设置完毕。
2.系统基本方案选择和论证本时钟的设计具体有两种方法。
一是通过单纯的数字电路来实现;二是使用单片机来控制实现。
本次设计选取了较为简单的单片机控制;而选择这一方法后还要进行各个芯片的选择。
以下是我在这次设计中所用的方案。
2.1 芯片的选择方案一:采用AT89C51芯片,其为高性能CMOS 8位单片机,该芯片内含有4k bytes的可反复擦写的只读程序存储器(PEROM)、128 bytes的随机存取数据存储器(RAM)、 32位可编程I/O口线、2个16位定时/计数器、6个中断源、可编程串行UART通道及低功耗空闲和掉电模式,但是由于AT89C51芯片可擦写的空间不够大,且中断源提供的较小,为防止运行过程中出现不必要的问题,我们不选用AT89C51。
方案二:采用AT89C52芯片,它除了具备AT89C51的所有功能与部件外,其最大的优势就是AT89C52提供了8K字节可擦写Flash闪速存储器空间、8个中断源、及256*8字节内部存储器(RAM),解决了我们对可反复擦写的Flash闪速存储器空间大小与中断源的不够问题的担心。
2.2显示模块选择方案和论证方案一:采用LCD,电路比较简单,且在软件设计上也相对简单,具有低功耗功能。
价格贵。
方案二:采用LED数码管显示,显示较为清楚。
价格便宜。
所以本方案采用LED数码管显示。
2.3 时钟信号的选择方案和论证直接采用单片机定时计数器提供的秒信号,使用程序实现年、月、日、周、时、分、秒计数。
采用此种方案可减少芯片的使用,节约成本,实现的时间误差较小。
2.4 电路设计最终方案决定综上各方案所述,对此次数字时钟的方案选定为: 采用AT89C52作为主控制系统; 并由其定时计数器提供时钟; LED作为显示电路来实现功能。
基于51单片机的数字钟的设计
自动化专业综合设计报告设计题目:基于51单片机的数字钟的设计所在实验室:单片机仿真模拟实验室指导教师:孙红霞学生姓名律迪迪班级文自0921 学号 2撰写时间:2013.3.2 成绩评定:一、设计目的电子钟是一种用数字电路技术实现时、分、秒计时的装置,和机械时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命。
电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大地方便。
本设计主要采用AT89C2051单片机作为主控核心,LED动态扫描显示屏显示。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,另外应有校时功能和闹钟等附加功能。
和机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
AT89C2051是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含2KB的可反复擦写的只读程序存储器(PEROM)和128B的随机数据存储器(RAM),器件采用Atmel 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C2051单片机在电子类产品中有广泛的使用。
AT89C2051单片机电压可选用4-6V电压供电;显示器采用LED数码管来显示,数码管成本低廉,系统不但接口设计简单、便于控制,而且具有很好的人机界面,可以对当前的时间进行调整。
二、设计内容用PROTEUS画出原理图,并完成下列任务:⑴用4只LED数码管输出显示时和分。
⑵可通过按键设置闹钟功能,且停闹无须手工操作。
⑶可通过按键设置分校时。
(4) 写出详细的设计报告。
(5)给出电路的原理图、源程序,仿真实现。
三、设计步骤利用以AT89C2051为核心的芯片来实现多功能的数字钟。
本次设计的多功能数字钟采用按钮方式对时间进行控制设置,采用七段数码管显示当前的时间,且时间以24小时的计时方式,在本次设计中,电路不仅具有显示时间,还可以实现对它们的调整。
基于STC51单片机数字时钟-带闹铃功能-省电模式-整点报时功能proteus仿真
多功能数字时钟设计要求
利用51单片机或者STC单片机设计多功能数字时钟,要求:
1.用单片机控制6位数码管显示时、分、秒,以24小时计时方式运
行;
2.利用单片机片内定时器(如T0)产生1s计时,时钟最大计数值为
23时59分59秒;
3. 时钟有整点提醒功能,短蜂鸣,次数代表整点时间;
4. 时钟可以通过按键进行时间的设置;
5. 可通过按键使系统进入省电状态(数码管不亮,时钟不停)。
6.闹钟功能。
能通过按键实现闹钟/时钟功能之间的转换;可通过按键
设定闹钟时间,在定时闹钟时精确到分,可通过显示器显示闹钟设定时间;可通过按键实现闹钟有效、无效;在闹铃时,可通过按键开关使闹铃停止。
多功能数字时钟操作说明
1.上电初始化程序,时钟时显01时01分00秒
2.按键功能说明:
K1 设置键功能第一次按下时钟设置功能
第二次按下闹铃设置功能
第三次按下回到时钟显示功能
K2 加功能在时钟或闹铃设置状态下进行加操作
K3 减功能/闹铃关闭第一种功能,在时钟或闹铃设置状态下进行加操作
第二种功能,当闹铃响起来,可关闭闹铃K4 时位和分位设置切换切换时位和分位进行加减操作
K5 省电模式切换第一次按下数码管全灭,计时不停止
第二次按下数码管亮起,正常显示时间
K6启动/关闭闹铃功能默认情况下闹铃功能是开启的,按一下K6关闭闹功能,再按一下开启闹铃功能。
程序流程图。
基于51单片机的电子钟C语言程序
基于51单片机的电子钟C语言程序#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/uchar codedispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};/*定义并初始化变量*/uchar seconde=0;uchar minite=0;uchar hour=12;uchar mstcnt=0;sbit P1_0=P1^0; // second 调整定义sbit P1_1=P1^1; //minite调整定义sbit P1_2=P1^2; //hour调整定义/*函数声明*/void delay(uint k ); //延时子程序void delay1(uchar h );void time_pro( ); //时间处理子程序void display( ); //显示子程序void keyscan( ); //键盘扫描子程序/*****************************//*延时子程序*//****************************/void delay1 (uchar h){uchar j;while((h--)!=0){for(j=0;j<125;j++){;}}}void delay (uint k){uint a,b,c;for(c=k;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);}/**************************//*时间处理子程序*//**************************/void time_pro( void){if(seconde==60) //秒钟设为60进制 { seconde=0;minite++;if( minite==60) //分钟设为60进制{ minite=0;hour++;if(hour==24) //时钟设为24进制{hour=0; }}}}/*****************************//* 显示子程序*//*****************************/void display(void){P2=0xfe;P0=dispcode[hour/10]; //显示小时的十位 delay1(4);P2=0xfd;P0=(dispcode[(hour%10)])|0X80; //显示小时的个位 delay1(4);P2=0xfb;P0=dispcode[minite/10]; //显示分的十位 delay1(4);P2=0xf7;P0=(dispcode[minite%10])|0X80; //显示分的个位 delay1(4);P2=0xef;P0=dispcode[seconde/10]; //显示秒的十位delay1(4);P2=0xdf;P0=dispcode[seconde%10]; //显示秒的个位delay1(4);}/*******************************//*键盘扫描子程序*//*******************************/void keyscan (void){if(P1_0==0) //按键1秒的调整{delay(2);if(P1_0==0)//delay(300);{seconde++;if(seconde==60){seconde=0; }}}if(P1_1==0) //按键2分的调整{delay(2);if(P1_1==0)// delay(300);{minite++;if(minite==60){minite=0;}}}if(P1_2==0) //按键3小时的调整{delay(2);if(P1_2==0)//delay(300);{hour++;if(hour==24){hour=0; }}}}void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次{TH0=0x3c;TMOD = 0x11;mstcnt++;if(mstcnt==20){seconde++;mstcnt=0; //注意点。
基于C51单片机的数字时钟课程设计(C语言带闹钟)
单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词:电子钟 AT89C52 硬件设计软件设计目录NO TABLE OF CONTENTS ENTRIES FOUND.一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。
具有时间显示,并有时间设定,时间调整功能。
1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。
1.3 设计课的设计总体方案介绍及工作原理说明本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:图1-1总体设计方案图本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。
键盘采用动态扫描方式。
利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
基于单片机控制的智能定时闹钟方案设计书(含完整程序仿真图)
本设计是定时闹钟的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。
电子钟设计可采用数字电路实现,也可以采用单片机来完成。
数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。
若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。
若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
AT89C51单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进—步可以扩充控制电器的启停。
设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。
采用四个开关来控制定时闹钟的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。
课设准备中我根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真实验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。
设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声音,持续一分钟。
显示采用的六位数码管电路,如果亮度感觉不够,可以通过提升电阻来调节,控制程序中延迟时间的长短,可以获得不同的效果。
基于51单片机的电子时钟设计与制作设计
本课题整体设计方案分为硬件设计和软件设计。
硬件电路设计主要是用单片机和LED显示屏连接组成,另外加入按键,开关,蜂鸣器等;软件编程设计室用C编程,Keil C51调试。
3.1
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
关键词:AT89C52、Keil C51、Proteus
一、
1.1 设计目的
(1)通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。
(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;
(3)提高综合及灵活运用所学知识解决工业控制的能力,培养动手能力和实际应用能力。
1.中央处理器[3]:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
2.数据存储器(RAM)
8052内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。如图1
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
Intel的MCS-52系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
基于51单片机的数字钟设计
基于51单片机的数字钟设计摘要:该电子钟使用12MHZ晶振与单片机AT89C51相连接,通过软件编程的方法实现了以24小时为一个周期同时显示小时,分钟和秒的要求,并在计时过程中具有报时功能,当时间到达整点进行蜂鸣报时。
该电子钟设有三个按键:s1,s2和s3键,使之具备了校时,定时功能。
关键词:电子钟;51系列单片机;A T89C51;晶振数字电子钟设计与制作可采用数字电路实现,也可以采用单片机来完成。
若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。
若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计与制作中采用单片机AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有.4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I /O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
1 硬件电路的设计该电子钟是以单片机AT89C51为核心来完成的,在硬件电路中采用P0口作为6位LED 数码管的驱动接口,这是由于Po口输出驱动电路工作处于开漏状态,它的驱动能力强,故只需外接上拉电阻便可以把LED数码管点亮。
因为共阴的LED数码管它的驱动电流是分开的,在单片机进行动态扫描的时候不会影响彼此的电流,故该电路中的6位LED数码管均用共阴极的数码管。
在6位ELD显示时,为了简化电路,降低成本,6个LED显示器共用一个8位的I/O,6位LED数码管的位选线分别由相应的P2.0~P2.5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即Po口。
在电路中还设有三个按键Sl,S2和S3用来进行定时,选时和调时的选择,他们分别与单片机的P1.2,P1.4,P1.6口相连接。
非常好的资料秒表时钟程序c语言-51单片机-proteus仿真-均包括
电子工程训练实验报告题目:秒表系统的设计和工程实现系班:学号:姓名:大连理工大学电工电子实验中心电子安装实验室一.单片机系统设计方案描述系统设计基本指标:1.实现最大时间长度超过5分钟的正常倒计时2.可以在5分钟范围内自由方面设置秒表的开始时间3.进入最后一分钟时,三声蜂鸣器响提示4.秒表计时到,五声蜂鸣器响,同时小灯亮提示电子工程训练是一个综合性实验。
秒表系统设计总体上分为硬件设计和软件设计两个部分,并要充分考虑它们的匹配设计。
硬件设计特别是引脚的配置要充分考虑软件实现的需要,反过来,软件设计也要建立在硬件的基础上,并且充分利用硬件提供的资源。
硬件电路大体上可分为最小系统板电路、数码管显示电路和按键电路。
最小系统板电路和数码管显示电路在老师指导下很快得以完成。
按键电路为充分考虑以后软件设计的灵活性和可扩展形,采用了排线将引脚引出。
软件设计上,为方便秒表的操作使用,设置了“修改”、“增加”、“移位”和“开始/暂停”四个按键功能。
“修改”键按下,进入修改状态,相应的修改位闪烁,提示按“增加”键修改该位时间参数,操作“移位“按键可以移动修改位。
“开始暂停”则用于秒表的开始运行和暂停运行。
按键处理通常有查询和中断两种方式处理,查询占用较多的单片机运行资源,而且延迟防抖效果较差,容易多次触发,而中断方式消抖则操作更为灵敏。
同时考虑到AT89S52只有两个外部中断,将使用较多的“增加”和“开始/暂停”两个按键处理分配给两个外部中断。
另外两个按键则采用查询方式检测处理。
软件设计整体上利用了“有限状态机”的思想,按键控制状态的转换,并在相应的状态下执行相应的操作。
一共设置了3个状态:state=0(暂停状态),state=1(开始运行状态),state=2(修改状态),它们的相互转化如下:“修改”键按下State=1开始运行状态State=0暂停状态”开始/暂停“键按下State=2修改状态”开始/暂停“键按下“修改”键按下“移位”键和“增加”键修改时间参数,修改数码位闪烁提示秒表计时,自动修改时间参数数码管显示暂停的时间由于本人之前接触过一些仿真软件Proteus 的知识,而本系统设计所需要的单片机、按键、数码管、蜂鸣器等硬件均可在Proteus 得到仿真。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实践教学报告2011-2012 学年第二学期项目名称基于51单片机的数字钟设计所属课程电子产品开发设计与实践教程班级电子10A1姓名赵祥琨学号1006013145指导教师张亚实训时间2012 . 6电子钟摘要本系统以MCS-51单片机为核心,以8位8段数码管显示时间,可以通过键盘设定时间和闹钟时间,并具备整点报时功能。
系统特色:1)使用定时器产生节拍,程序运行采用轮循机制,分时复用CPU 资源,增强系统可靠性。
2)采用采用三个按键设置时钟时间和闹钟时间,使用一个按键关闭闹钟,电路结构简单,使用方便。
关键词:电子钟;C语言;MCS-51;电子ELECTRONIC CLOCKAbstract:The system takes the MCS-51 single chip as the core,display time on 8X7seg,Through the keyboard to set the time and alarm time, and with the whole point timekeeping function.System characteristics:1)Use timer produces beats, running the round-robin mechanism, time division multiplexing CPU resources, improve the reliability of the system.2)Using three key clock set time and alarm time, the use of a button to turn off the alarm, the circuit structure is simple, easy to use.Keywords:…electronic ;C language;electronics目录1、方案设计与论证 (4)1、需求分析 (4)2 程序执行方案 (4)2. 系统框图 (4)2、电路设计 (6)a) 预处理、预定义、变量声明 (7)b) 显示节拍定时器初始化 (9)c) 走时计数定时器初始化 (9)d) 外部中断0 的初始化 (10)e) 软件延时 (11)f) 走时进位计数 (11)g) 显示译码 (12)h) 闹钟设定显示 (14)i) 闹铃 (16)j) 按键扫描译码 (17)k) 主函数 (21)l) 定时器0服务程序 (21)m) 定时器1服务程序 (22)n) 中断0服务程序 (23)4、测试方法与数据 (24)5、结论 (25)1、方案设计与论证1、需求分析时、分、秒正常走时。
时、分、秒在6个数码管上显示。
可调十、分。
可设置闹钟。
整点报时。
2 程序执行方案2.1 子函数顺序结构方案将各个模块放入main()函数顺序执行优点:结构简单,代码量少,层次清晰。
缺点:实时性差,用户体验较差,2.2 中断加顺序方案关键模块采用中断结构,如显示模块,以保证其实时性,对于实时性要求不高的模块采用循环结构嵌套顺序结构。
优点:实时性好,运行稳定,抗干扰性能好缺点:结构复杂综合比较后,选择方案2.2. 系统框图2、电路设计电路采用上电复位方式,设置三个校时按键和一个关闹铃按键,鉴于时钟通常不会人为复位,且主要用软件提高系统稳定性,正常使用不会出现程序崩溃,因此不设置手动复位按键。
P1口通过74HC541缓冲器向数码管发送段码,P2口发送位码,按键“set”接外部中断0,以确保设置选择急事响应并保证正确,加、减按键采用扫描方式接P0.5、P0.6,P3.7接蜂鸣器。
当依次按下set键时,分别对应的设置秒、分、时、闹铃秒、分、时和退出设置7个状态,当超过一定时间没有设置时,自动退出设置状态。
当时间到设定闹铃时间后响铃1分钟,当到59分50秒时,整点报时10秒。
3、软件设计a)预处理、预定义、变量声明#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char#define th0 TH0 = 0x3d;#define tl0 TL0 = 0xff;#define th1 TH1 = 0xec;#define tl1 TL1 = 0x78;sbit P3_0=P3^0;sbit P0_5=P0^5;sbit P0_6=P0^6;sbit P0_7=P0^7;uchar count = 0,shan=0;//count:计时器累加器,shan:设置闪烁标志位uchar ss=0,s=0,dd=0,d=0,hh=0,h=0;uint t_flag=0; //定时器溢出标志位uchar nh=0,nd=1,ns=0; //时分秒和闹钟时分秒uchar flag=0,key1=0,key2=0,key3=0,key4=0;uchar code table[18] = {0x3f, //00x06, //10x5b, //20x4f, //30x66, //40x6d, //50x7d, //60x07, //70x7f, //80x6f, //90x77, //a0x7c, //b0x39, //c0x5e, //d0x79, //e0x71, //f0x40, //-0x00 //消隐};/********下一行的数组可以显示数值外,还可以显示数码管的点*********/ uchar code table_d[17]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1,0xc0};/*********数码管位选***************************/uchar code led[9] = {0xfe,0xFD,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};b)显示节拍定时器初始化/****************显示定时器*********************** 名称 : Time1_Init()* 功能 : 定时器的初始化,12MZ晶振,5ms* 输入 : 无* 输出 : 无*************************************************/void Time1_Init(){TMOD = 0x11;th1tl1EA = 1;ET1 = 1;TR1 = 1;}c)走时计数定时器初始化/**************定时器0初始化************************ 名称 : Time0_Init()* 功能 : 定时器的初始化,12MZ晶振,50ms* 输入 : 无* 输出 : 无****************************************************/void Time0_Init(){TMOD = 0x11;th0tl0EA = 1;ET0 = 1;TR0 = 1;}d)外部中断0 的初始化/************外部中断0 的初始化*********************** * 名称 : Outside_Init()* 功能 : 外部中断0 的初始化* 输入 : 无* 输出 : 无*******************************************************/ void Outside_Init(void){EX0 = 1; //开外部中断0IT0 = 1; //负边沿触发EA = 1; //开总中断}e)软件延时/**************软件延时****************************** 名称 : delay()* 功能 : 延时。
* 输入 : uchar* 输出 : 无****************************************************/void delay(uchar k){int i,j;for(i=0; i<=k; i++)for(j=0; j<=200; j++);}f)走时进位计数/************************走时****************************** 名称 : time()* 功能 : 时分秒各位数字运算。
* 输入 : 无* 输出 : 无************************************************************/ void time(){if(h<=23){if(d<=59){if(s<=59){if(t_flag==1){s++;t_flag=0;}elses=s;}else{s=0;key1=0;d++;}}else{d=0;h++;}}elseh=0;}g)显示译码/***********************显示******************************* * 名称 : display()* 功能 : 将数字转换成相应的段码和位码,有定时器1控制。
* 输入 : 无* 输出 : 无************************************************************/ void display(){ flag++;switch(flag){case 1:P2=led[0];P1=table[s%10];break;case 2:P2=led[1];P1=table[s/10];break;case 3:P2=led[2];P1=table[16];break;case 4:P2=led[3];P1=table[d%10];break;case 5:P2=led[4];P1=table[d/10];break;case 6:P2=led[5];P1=table[16];break;case 7:P2=led[6];P1=table[h%10];break;case 8:P2=led[7];P1=table[h/10];break;default:flag=0;break;}}h)闹钟设定显示/*******************闹钟设定显示*************************** 名称 : ndisplay()* 功能 : 将数字转换成相应的段码和位码,有定时器1控制,区别于时间的是所有位均在下方多一点。