基于51单片机数字电子时钟带程序完美实现

合集下载

基于51单片机的数码管时钟(带闹钟调时秒表)

基于51单片机的数码管时钟(带闹钟调时秒表)

基于51单片机的数码管时钟(带闹钟调时秒表)/**************************************************************** ************ ** *********************************************************** ** * * ** * * ** * 基于51单片机的数码管时钟程序* ** ** * * ** * * *********************************************************** ** ** ************************************************************ ****************/#include<stdio.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6; //申明u1锁存器的锁存端sbit wela=P2^7; //申明u2锁存器的锁存端sbit key1=P3^0; //功能键sbit key2=P3^1;//增大键sbit key3=P3^2;//减小键sbit key4=P3^3;//秒表查看键sbit beep=P2^3;//蜂鸣端uchar num,num1,num2,numm;uchar numf,num,nums,num;uchar s,s1,f,f1,m,m1;uchar ns,ns1,nf,nf1;uchar numns,numnf;uchar dingshi;void display(uchar m,uchar m1,ucharf,uchar f1,uchar s,uchar s1);void display1(uchar nf,uchar nf1,uchar ns,uchar ns1);void key();void key1();void alram();void di();void delayms(xms);void T0_time() interrupt 1;void miaobiao();uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x77,0x7c,0x39,0x5e,0x79,0x71};/*********************************************************主函数void main()*********************************************************/int main(){TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;EA=1;ET0=1;TR0=1;nums=12;numf=0;num2=0;num=0;while(1){if(dingshi==0){keyscan();display(m,m1,f,f1,s,s1);alarm();}else{miaobiao();keyscan1();display1(nf,nf1,ns,ns1);}}return 0;}/********************************************************* 蜂鸣器函数di()*********************************************************/ void di(){beep=0;delayms(100);beep=1;}/********************************************************** 按键调时函数key()**********************************************************/ void keyscan(){if(key1==0){delayms(10);display(m,m1,f,f1,s,s1);}}}/********************************************** 按键设定闹钟函数keyscan1();***********************************************/ void keyscan1(){if(key1==0){delayms(10);if(key1==0){ numns++;if(numns==24);numns=0;while(!key1);di();display1(nf,nf1,ns,ns1);}}if(key2==0){delayms(10);if(key2==0){ numnf++;if(numnf==24);numnf=0;while(!key2);di();display1(nf,nf1,ns,ns1);}}if(key3==0){delayms(10);if(key3==0){dingshi=0;while(!key1);di();display1(nf,nf1,ns,ns1);}}}/********************************************************* 闹钟函数alram()*********************************************************/ void alram(){if((nums==numns)&&(numnf==numf))beep=0;}/*********************************************************秒表函数miaobiao()*********************************************************/ void miaobiao(){if(key4==0){delayms(100);if(key4==0){while(!key4);di();displaym(uchar m,uchar m1);}}}/********************************************************* 正常显示函数display()*********************************************************/ void display(uchar m,uchar m1,ucharf,uchar f1,uchar s,uchar s1){dula=1;P0=table[m1]//秒位第1位dula=0;PO=0xff;// 送入位选信号前关闭所有显示,防止打开位选锁存时wela=1;P0=0xef;wela=0;delayms(10);dula=1;P0=table[m]; //秒第2位dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delayms(100)dula=1;P0=table[f1]; //分第1位dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delayms(100)dula=1;P0=table[f]; //分第2位dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delayms(10)dula=1;P0=table[s1]; //时第1位dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delayms(100)dula=1;P0=table[s]; //时第2位dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(10)}/********************************************************** ***调时闹钟显示函数display1()*********************************************************** **/void display1(uchar nf,uchar nf1,uchar ns,uchar ns1){nf1=numnf/10;nf=numnf%10;ns1=nums/10;ns=nums%10;dula=1;P0=table[nf1];//分第1位dula=0;P0=0xff;wela=1;P0=0xfb;//待改参数wela=0;delayms(10);dula=1;P0=table[nf];//分第2位dula=0;P0=0xff;wela=1;P0=0xf7;//待改参数wela=0;delayms(10);P0=table[ns1];//时第1位dula=0;P0=0xff;wela=1;P0=0xfe;//待改参数wela=0;delayms(10);dula=1;P0=table[ns];//时第2位dula=0;P0=0xfd;wela=1;P0=0xff;//待改参数wela=0;delayms(10);}/********************************************************** ***秒表显示函数displaym()*********************************************************** **/void displaym(uchar m,uchar m1){dula=1;P0=table[m1];//秒位第一位P0=0xff;wela=1;P0=0Xbf;wela=0;delayms(10);dula=1;P0=table[m];dula=0;P0=0xff;wela=1;P0=0X7f;wela=0;delayms(10);}/**************************************************** 中断服务函数void T0_time() interrupt 1****************************************************/ void T0_time() interrupt 1{TH0=(65536-45872)/256; //46080TL0=(65536-45872)%256;num2++;if(num2==20){num++;num2=0;m=num%10;m1=num/10;f=numf%10;f1=numf/10;s=nums%10;s1=nums/10;if(num==59){num=0;numf++;if(numf==59){numf=0;nums++;}if(nums==24)nums=0;}}}/*************************************************** 延时函数delayms()***************************************************/ void delayms(xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--); }。

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

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

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

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

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

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

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

关键词:电子钟 AT89C52 硬件设计软件设计目录一、数字电子钟设计任务、功能要求说明及方案介绍 (4)1.1 设计课题设计任务 (4)1.2 设计课题的功能要求说明 (4)1.3 设计课的设计总体方案介绍及工作原理说明 (4)二、设计课题的硬件系统的设计 (5)2.1硬件系统各模块功能简要介绍 (5)2.1.1 AT89C52简介 (5)2.1.2 按键电路 (6)三、设计课题的软件系统的设计 (6)3.1 使用单片机资源的情况 (6)3.2 软件系统个模块功能简要介绍 (7)3.3 软件系统程序流程框图 (7)3.4 软件系统程序清单 (7)四、设计课题的设计结论、仿真结果、误差分析 (9)4.1 设计结论及使用说明 (9)4.2 仿真结果 (10)结束语 (12)参考文献 (12)附录 (13)附录A:程序清单 (13)一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

基于51单片机的多功能电子钟设计

基于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单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。

DIY基于51单片机的旋转LED数字电子钟

DIY基于51单片机的旋转LED数字电子钟

标签:DIY基于51单片机的旋转LED数字电子钟(红外线遥控调时)在网上看到不少老外做的各种旋转LED显示屏,非常COOL,我也动手用洞洞板试做了一个类似的显示屏,结果感觉还不错。

于是再接再励继续努力,将作品进一步改进,完善后制成如今这个样子。

由于刚学51单片机,加上制作电路板软件也是从零开始,的确花了我不少的时间和精力。

不过也就是在这艰难的独立制作中,真正学到了不少实在的东西。

本项目的关键是如何解决高速旋转的电路板如何供电,如何调时的问题。

我采用电机电刷的原理,将旋转轴钻空,通过一只插头将电源的从反面引到前面的电路板上,而这个旋转的插头又与固定在背板上的两个铜片接触的。

调时的问题有些困难,一是让电路板在旋转前与PC机相接,由电脑传送调时数据,这虽然可行但不方便。

还有就是用遥控方法,但此方案在调试方面有很大的困难。

显示方式上,我采用平衡式的两排LED,这除了在旋转时能较好的保持平衡外,主要能利用两边交替显示方式,比单排要快一倍。

本装置不仅是一个时钟,它还可以动态显示汉字及图案,这就看如何发挥了。

其具体制作过程如下:一。

旋转电机的制作从制作成本与方便考虑,选用旧电脑用的大软驱上的直流无刷电机,只是对局部进行改造。

就是这种古董软驱软驱上的直流无刷电机拆开后的电机仔细拆开直流电机,将带圆盘的铝轴从中开孔,让它刚好能插入一个插头。

将旋转轴加工成这样装配好以后按拆开时的顺序,反序将轴安装直流电机上。

电机装配完成后用两片铜片做的电刷电刷装好后的侧面图将电路板上较突出的元件改焊在反面,电机的电源接法。

从电路板标注的符号看,“+”为电源正,“G”为电源负,“C”与“M”端分别与电源正相连匀可使电机运转将一张旧唱片按电机座的位置开孔,而定位用的挡光板应根据电路板上感光组件的位置确定。

二。

电路板的制作本制作品用51单片机控制,具体电原理图如下:用Protel 99设计制作了电路板。

最后得到完成的作品。

遥控器用的是松下车载机的,只用了其中的六个键。

基于51单片机电子时钟程序

基于51单片机电子时钟程序

// 本程序实现功能:显示小时和分钟,并以最后一位的小数点闪烁一次表示一秒。

按下INT0键后显示日期。

并在所设定的时间蜂铃器响5次以此为闹钟;// 第二:按下INT1键后,可对时间,日期,闹钟进行设置,再次按下INT1推出设置//// 显示说明:前两位显示小时和月份,后两位显示分钟和日期//#include <reg52.h>/*==========================================宏定义uchar和uint===========================================*/#define uchar unsigned char#define uint unsigned intsbit alarm=P1^4;/*==============================================变量的定义==============================================*/int year=2010;/*初始年份为2010年*/uchar alarm_hour=0,alarm_min=0; /*初始闹钟时间为00:00*/uchar qian=0,bai=0,shi=0,ge=0,key_flag=0,Key=0,num=0,Flag=0; /*定义输出函数变量和按键号*/uchar x,dis_flag=0; /*显示变换标志位*/uchar Key_control=0; /*按键被按下的标志位*/uchar mounth=7,day=25; /*初始日期设为7月25号*/uchar hour=0,t=0,min=0,sec=0,ring=0;/*初始时间为00:00:00*//*=============================================子函数的定义=============================================*/void Init(); /*此函数用于初始化所有需要使用的中断*/void delay(uint z); /*用于数码管显示*/uchar Key_num(void); /*此函数为确定按下的按键输出编号*/void Led_display();void display(uchar cc, uchar dd); /*显示时间的函数,中间的点表示:*/void display_nian(uchar cc, uchar dd); /*显示年份的显示函数,即没有中间的点*/void display_date(uchar cc, uchar dd); /*显示日期的函数,即四个小数点全亮*/void display_alarm(uchar cc, uchar dd); /*显示闹钟的函数,第二个和第四个点*/void Leap_Nonleap(int aa); /*判断是闰年还是平年,并将二月的最大天数赋给Mounth_array[1]*/void Judge_Setting(uchar Key_set); /*所得出的按键号进行对应的设置*//*==========================================所使用数组的定义============================================*/uchar Mounth_array[12]={31,29,31,30,31,30,31,31,30,31,30,31}; /*每个月的最大天数数组*/uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,/*数码管显示编码*/};uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/*百位及其小数点的段码*//*==============================================主函数部分==============================================*/void main(){Init();while(1){Leap_Nonleap(year); /*进入大循环后首先对年份进行判断*/while(Key_control)/*当P3.3被按下后Key_control=1进入函数进行设置,直到第二次Key_control=0推出循环*/{Flag=Key_num(); /*将按键函数里面是否有按键被按下的标志位赋给Flag*/if(Flag) /*当有按键被按下时,进入设置函数*/{Judge_Setting(num); /*将num值传入函数,并进行设置*/}Led_display(); /*保证在设置的循环时有显示*/}Led_display();/*循环式动态显示*/}}/*===========================================系统初始化函数=============================================*/void Init() /*初始化系统,启动计时器0,1,外部中断0,1*/{TMOD=0x01; /*将计时器0定位工作方式1,将计时器1定为工作方式2*/TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;TR0=1;// ET1=1;// TR1=1;IE0=1;EX0=1; /*使用外部中断0和1,分别作为显示变换,设置的前戏*/IT0=1;/*为下降沿突发*/IE1=1;EX1=1;IT1=1;/*为下降沿突发*/EA=1;}void Display_flag() interrupt 0 /*使用外部中断0,进行显示时间和日期的转换P3.2口切换显示*/{dis_flag++;if(dis_flag==4) /*当dis_flag=0时,输出时间,当dis_flag=1时,输出日期,当dis_flag=2时,输出闹钟*/dis_flag=0; /*当dis_flag=3时,输出年份。

基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电⼦闹钟设计报告(附原理图、PCB图、程序)成都信息⼯程学院第五届嵌⼊式创新技术⼤赛基于MCS51的智能电⼦闹钟设计报告姓名学院班级实物图⽬录1.电⼦时钟的设计原理和⽅法 (1)1.1设计原理 (1)1.2 硬件电路的设计 (1)1.2.1 STC89C51RC简介 (1)1.2.2 键盘电路的设计 (2)1.2.3蜂鸣器驱动电路 (3)1.2.4 数码管驱动电路 (3)1.2.5 电源电路 (4)1.3软件部分的设计 (4)1.3.1主程序部分的设计 (4)1.3.2中断计时器及时间进位 (5)1.3.3 闹钟⼦函数 (7)1.3.4 按键扫描 (8)1.3.5 时钟闹钟设置 (9)1.3.6 显⽰数字函数 (10)1.3.7 显⽰界⾯函数 (10)1.3.8 闹钟记录及读取 (11)2.硬件调试 (13)附录A:电路原理图 (15)附录B:电路PCB图 (16)附录C:源程序 (17)1.电⼦时钟的设计原理和⽅法1.1设计原理系统框图1.2硬件电路的设计1.2.1 STC89C51RC简介STC89C52R CSTC89C51RC是⼀种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory )的低电压、⾼性能CMOS8位微型处理器,即单⽚机芯⽚。

单⽚机的可擦除只读存储器可以反复擦除1000次,内部FLASH 擦写次数为100000次以上。

该芯⽚使⽤⾼密度⾮易失存储制造技术,与⼯业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU 和闪烁存储器集成在单个芯⽚中,使得STC89C51RC 成为了⼀种性价⽐极⾼的微型处理器芯⽚,在许多电路设计中都得到了应⽤。

STC89C51RC 单⽚机特点:⼯作电压:5.5V-3.4V ⼯作频率:0-40MHz ⽤户应⽤程序空间:8K ⽚上集成128*8RAMISP (在系统可编程)/IAP (在应⽤可编程),⽆需专⽤编程器/仿真器可通过串⼝(P3.0/P3.1)直接下载⽤户程序EEPROM 功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使⽤外部中断4路通⽤异步串⾏⼝(UART ),还可⽤定时器软件实现多个UART ⼯作温度范围:0-75℃引脚说明:VCC:供电电压 GND :接地P0:P0是⼀个8位漏级开路双向I/O ⼝,低8位地址复⽤总线端⼝。

(完整word版)基于51单片机多功能电子时钟报告

(完整word版)基于51单片机多功能电子时钟报告

单片机课程设计报告多功能电子数字钟姓名:学号:班级:指导教师:目录一课程设计题目—-—-———--—--—-—--------—-——---—- 3二电路设计--------——-——---—--——---——--————-——--—- 4三程序总体设计思路概述——-------———-——--——5四各模块程序设计及流程图——--—---------——6五程序及程序说明见附录-—-——————-—-—---—-- **六课程设计心得及体会-----————-————--——--—- 11七参考资料—-—-—---—--———-———--————-—-----—----—-—12一题目及要求本次单片机课程设计在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口。

基于51单片机,电子显示时钟带闹钟、整点报时、日期、星期

基于51单片机,电子显示时钟带闹钟、整点报时、日期、星期
void xianshishuzu()
{ StrTab[1]=second/10; //秒十位
StrTab[0]=second%10; //秒个位
StrTab[2]=10; //间隔符-
StrTab[4]=minute/10; //分十位
StrTab[3]=minute%10; //分个位
StrTab[5]=10; //间隔符-
void display(uchar w[32])
{ unsigned int i,j,c=0;
if(a==0)//正常时间显示
{ for(i=0;i<8;i++) //依次将数组w中八个数取出,并显示
{ P2=weikong_code[i]; //位选
j=w[i]; //取出要显示的数码
P0=tab[j]; //取出段选编码
if(month==13)
{month=1; year++;
if(year==10000)
year=0;}}
week++;//星期走
if(week==8)
week=1;
data1();
week1();
while(second==err);
}
}
/**********************键盘扫描子程序*************************/
{if(dБайду номын сангаасy==30); //闰年29天
{day=1; month++;
if(month==13)
{month=1; year++;
if(year==10000)
year=0;}}}

基于C51单片机的数字时钟课程设计(C语言带闹钟)

基于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单片机的数字钟设计

基于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口相连接。

51单片机数码管电子时钟C程序

51单片机数码管电子时钟C程序

//**单片机stc89c52,8位共阴数码管 12M晶振**////*******P0位选,P2段选*******//#include "reg52.h"#define uchar unsigned char#define uint unsigned intuchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x40,0xff};uchar n;uchar hh,mm,ss;uchar nhh,nmm,nss;uint year;uchar day,mon,week;uchar hhs,hhg,mms,mmg,sss,ssg;uchar days,dayg,mons,mong;uchar nhhs,nhhg,nmms,nmmg,nsss,nssg;uchar set1=1,set2=1;sbit dula=P3^3;sbit fm=P3^2;sbit k1=P3^4;sbit k2=P3^5;sbit k3=P3^6;sbit k4=P3^7;uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年void jishi();void baoshi();void alarm();void set_time();void set_alarm();void set_mdw();void key_change();void key_set();void delay(int m) //延时程序,延时m*0.5ms{uint i;uint j;for (i=0;i<m;i++){for(j=0;j<500;j++){}}}void timer0() interrupt 1 {TMOD=0x01;TH0=0x3c;TL0=0xb1;n++;jishi();}main(){TMOD=0x01;TH0=0x3c;TL0=0xb1;TR0=1;EA=1;ET0=1;hh=12;mm=00;ss=00;nhh=7;nmm=30;nss=0;year=2012;mon=01;day=01;week=7; while(1){hhs=hh/10%10;//时分秒hhg=hh%10;mms=mm/10%10;mmg=mm%10;sss=ss/10%10;ssg=ss%10;nhhs=nhh/10%10;//闹钟nhhg=nhh%10;nmms=nmm/10%10;nmmg=nmm%10;nsss=nss/10%10;nssg=nss%10;days=day/10%10;//月日dayg=day%10;mons=mon/10%10;mong=mon%10;key_change(); //k1按键扫描key_set(); //k2按键扫描set_time(); //设置时间set_mdw(); //设置月日星期set_alarm(); //设置闹钟if(set1==1) //正常走时显示{dula=1;P2=tab[hhs];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[hhg]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10];dula=0;P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[mms];dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff; //分十位dula=1;P2=tab[mmg];dula=0;P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-"dula=1;P2=tab[sss]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[ssg]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}if(set1==2) //设置时间{dula=1;P2=tab[hhs];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[hhg]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10];dula=0;P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-"dula=1;P2=tab[mms];dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff; //分十位dula=1;P2=tab[mmg];dula=0;P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-"dula=1;P2=tab[sss]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[ssg]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}if(set1==3) //正常显示月日-星期{dula=1;P2=tab[mons];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[mong]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10]; dula=0; P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[days]; dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff;//分十位dula=1;P2=tab[dayg]; dula=0; P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10];dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-" dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[week]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}if(set1==4) //设置月日-星期{dula=1;P2=tab[mons];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[mong]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10]; dula=0; P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[days]; dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff;//分十位dula=1;P2=tab[dayg]; dula=0; P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10];dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-" dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[week]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}if(set1==5) //正常显示定时{dula=1;P2=tab[nhhs];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[nhhg]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10];dula=0;P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[nmms];dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff; //分十位dula=1;P2=tab[nmmg];dula=0;P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-"dula=1;P2=tab[nsss]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[nssg]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}if(set1==6) //设置闹钟定时{dula=1;P2=tab[nhhs];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[nhhg]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10];dula=0;P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[nmms];dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff; //分十位dula=1;P2=tab[nmmg];dula=0;P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-"dula=1;P2=tab[nsss]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[nssg]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}baoshi(); //整点报时alarm(); //闹钟}}void jishi() //计时函数{if(n==20){n=0;ss++;if(ss==60){ss=0;mm++;if(mm==60){mm=0;hh++;if(hh==24){hh=0;day++;week++;if(week==8){week=0;}if(year%4==0&&year%100!=0||year%400==0) //闰年{if(day==table1[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}else //非闰年{if(day==table2[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}}}}}}uchar incone(uchar n) //加1函数{ if(k3==0){delay(20);if(k3==0){n++;while(!k3);}}return(n);}uchar decone(uchar m) //减1函数{ if(k4==0){delay(20);if(k4==0){m--;while(!k4);if(m<0){m=0;}}}return(m);}void key_change() //k1按键扫描{ if(k1==0){delay(20);if(k1==0){set1++;while(!k1);if(set1==7){set1=1;}}}}void key_set() //k2按键扫描{ if(k2==0){delay(20);if(k2==0){set2++;while(!k2);if(set2==4){set2=1;}}}}void baoshi() //整点报时函数{ if(mm==00&&ss==00){fm=0;}if(ss==1){fm=1;}}void alarm() //闹钟函数{uchar x;if(nhh==0){goto end;}if(hh==nhh&&mm==nmm&&ss==nss) { for(x=0;x<6;x++){fm=0;delay(30); fm=1;delay(20); fm=0;delay(30); fm=1;delay(20); fm=0;delay(30); fm=1;delay(20); fm=0;delay(30); fm=1;delay(180);}}end:;}void set_time() //设置时间函数{ if(set1==2){if(set2==1){hh=incone(hh);if(hh==24){hh=0;}if(hh==-1){hh=23;}hh=decone(hh);}if(set2==2){mm=incone(mm); if(mm==60) {mm=0;}if(mm==-1) {mm=59;}mm=decone(mm); }if(set2==3) {ss=incone(ss); if(ss==60) {ss=0;}if(ss==-1) {ss=59;}ss=decone(ss); }}}void set_mdw() //设置月日星期函数{ if(set1==4){if(set2==1){mon=incone(mon);if(mon==13){mon=1;}mon=decone(mon);if(mon==0){mon=12;}}if(set2==2){day=incone(day);if(day==32){day=1;}day=decone(day); if(day==0){day=31;}}if(set2==3){week=incone(week); if(week==8) {week=1;}week=decone(week); if(week==0) {week=7;}}}}void set_alarm() //设置闹钟函数{ if(set1==6){if(set2==1){nhh=incone(nhh);if(nhh==24){nhh=0;}if(nhh==-1){nhh=23;}nhh=decone(nhh);}if(set2==2){nmm=incone(nmm);if(nmm==60){nmm=0;}nmm=decone(nmm); if(nmm==-1) {nmm=59;}}if(set2==3){nss=incone(nss); if(nss==60) {nss=0;}nss=decone(nss); if(nss==-1) {nss=59;}}}}。

用51单片机在12864液晶上实现 电子钟.

用51单片机在12864液晶上实现  电子钟.

#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intchar second=0;char minite=0;char hour=0;int n=0;bit s2=0;bit s3=0;bit s4=0;bit s5=0;//bit s6=0;/*共阳数码管字型码*//*0,1,2,3,4,5,6,7,8,9,p.,灭*/char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xbf}; /*P点显示代码序号*/char data find_code[]={0,0,12,0,0,12,0,0};/********************************************************///函数名:void Delay1ms(uint count)//功能:延时时间为1ms//输入参数:count,1ms计数//说明:总共延时时间为1ms乘以count,crystal=12Mhz/********************************************************//* 延迟函数*/void Delay1ms(uint count){uint j;while(count--!=0){for(j=0;j<80;j++);}}/************************************************************************//*显示函数*//************************************************************************/ void disp(){char i,j=0xfe;char k;for(i=0;i<8;i++){P2=j;k=find_code[i];P0=dis_code[k];Delay1ms(1);j=_crol_(j,1);}P0=0xff;}/************************************************************************* 函数原型:keychuli();* 功能:处理与键盘相连的P1口的内容,作为键值。

基于51单片机的数字钟设计与制作

基于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单片机汇编语言的数字钟课程设计报告(含有闹钟万年历)

单片微型计算机课程设计报告多功能电子数字钟姓 名 许伟敏学 号 060301021124班 级 电气二班指导教师 林卫2009-06-25目录一:概述 (1)二:设计基本原理简介 (2)三:设计要求及说明 (3)四:整体设计方案 (4)系统硬件电路设计 4系统软件总流程设计 5模块划分及分析 6五:单模块流程设计 (8)各模块设计概述、流程图 8模块源程序集合及注释 13六:单模块软件测试 (23)七:系统检测调试 (24)硬件电路调试软件部分烧写调试八:系统优化及拓展 (26)九:心得体会 (28)单片微型计算机课程设计 基于汇编语言的电子数字钟 概述课程设计流程图↑一、概述课程设计题目:电子数字钟应用知识简介:● 51单片机单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。

51系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51系列单片机的发展又进入了一个新的阶段。

在今后很长一段时间内51系列单片机仍将占据嵌入式系统产品的中低端市场。

● 汇编语言汇编语言是一种面向机器的计算机低级编程语言,通常是为特定的计算机或系列计算机专门设计的。

汇编语言保持了机器语言的优点,具有直接和简捷的特点,其代码具有效率高实时性强等优点。

但是对于复杂的运算或大型程序,用汇编语言编写将非常耗时。

汇编语言可以与高级语言配合使用,应用十分广泛。

● ISPISP (In-System Programming )在系统可编程,是当今流行的单片机编程模式,指电路板上的空白元器件可以编程写入最终用户代码,而不需要从电路板上取下元器件。

已经编程的器件也可以用ISP 方式擦除或再编程。

本次课程设计便使用ISP 方式,直接将编写好的程序下载到连接好的单片机中进行调试。

(完整版)基于51单片机的电子时钟设计与实现毕业设计

(完整版)基于51单片机的电子时钟设计与实现毕业设计

摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。

电子时钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。

电子时钟的精度、稳定度远远超过老式机械钟。

在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz 的晶振产生振荡脉冲,定时器计数。

在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。

电子时钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。

关键词:单片机;AT89S51ABSTRACTSince the 1970 s chip since the advent, with its high cost performance and attention by people and attention, it is widely used and fast development. SCM small volume, light weight, strong anti-jamming capability, environmental demand is not high, low cost, high reliability, flexibility is good, development more easy. Because of the above features, in our country, the microcontroller is widely used in industrial automation control, automatic detection, intelligent instrument and apparatus, household appliances, power electronics, mechanical and electrical equipment, and other aspects, and 51 SCM is the most typical chip and most representative one. The graduation design through to its study, application to AT89S51 chips as the core, with the necessary circuit, design of a simple electronic clock, it by 4.5 V dc power supply, through the electronic tube can show time, adjust the time, thus to learning, the design, the development of software and hardware in the ability.Electronic Clock is a electronic circuit implementation of the "when", "sub", "seconds" The figures show the timing device. Electronic clock precision, stability, far more than the old mechanical clock. In this design, we use LED electronic display hours, minutes, seconds, to 24-hour time mode, according to electronic control theory to dynamic display to display, use the 12MHz crystal oscillation pulse, the timer count. In this design, the circuit has a display time of the this function, you can also realize the time adjustment. Electronic clock is its compact, low cost, travel time and high precision, easy to use, features and more, easy integration and loved by the general consumer, so widely used.Key words:Single-chip microcomputer ; AT89S51独创声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。

基于51单片机的电子钟C语言程序

基于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; //注意点。

基于51单片机数字电子时钟带程序完美实现

基于51单片机数字电子时钟带程序完美实现

目录摘要 (1)前言 (2)概论................................................................................................................ 错误!未定义书签。

第一章.. (3)1.1概述 (3)1.2单片机的发展历程 (3)1.3时钟的特性 (3)2 系统原理与硬件设计 (4)2.1硬件选择 (4)2.2单片机的构成 (4)2.3AT89C52单片机的引脚说明 (5)2.4LED简介 (6)第三章软件设计 (9)3.1框架图 (9)4 调试过程及数据分析 (22)4.1硬件调试 (22)4.2K EI L调试 (22)4.3开发板调试 (23)结论 (24)摘要本次设计采用AT89c52内部定时器、中断等功能,和外部数码管,驱动器等构成。

电子时钟电路采用24小时制记时方式,时间用6位数码管动态显示。

使用5V电源供电,并且在按键的作用下可以进入省电(不显示LED 数码管)和正常显示两种状态。

关键词:数码管、AT89c52The design of the adjustable digital clock base on AT89S52AbstractThis paper introduced the design of the adjustable digital clock based on AT89S52, the specific process of how the system hardware and software achieved were detailed description through the design of adjustable digital clock. The modular design and production, which consisted of MCU module, clock module and the associated control module, were mainly recounted;As well as hardware designing,software design use the same method, consists suspension module,time adjust module, and that use the C language to achieve because of its simple and strong negotiability. In this design the functions of time run and change, functions of the year, month and day display have been achieved.Key words :AT89S52 microcontroller;前言一块单片机芯片就是一台计算机,由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。

基于51单片机的数字钟

基于51单片机的数字钟

1 摘要系统由8051、led数码管、按键、电源等部分组成,能实现时间记录和调整功能。

上电后,系统自动进入时间显示状态。

显示电路中,利用三个两位数码显示管分别显示时间的时、分、秒。

时间调节通过两个按键S1和S2实现,其中S1控制调节时、分,S2用于数值加一得操作,调节结束后,按S1退出进入正常计时状态。

2 设计项目内容与要求设计基于单片机的时钟显示器。

3 硬件电路原理分析3.1 上拉电阻图1 上拉电阻上拉电阻就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用,是对器件注入电流。

P0口作为I/O口输出的时候时,输出低电平为0,输出高电平为高组态(并非5V,相当于悬空状态)。

也就是说P0 口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。

原理图如图1所示。

3.2 控制电路图2 控制电路图2显示为控制电路,具有设置时间的功能,只能调节时和分。

图中S1按键:按一下分显示数码管开始闪动,按两下时显示数码管开始闪动,按三下则恢复正常时钟状态。

S2按键,当时或分显示数码管闪动时,每按一下,时或分数值加一。

3.3显示电路图3为显示电路原理图。

通过3个两位LED数码管组成的显示电路,从上至下分别显示时、分、秒。

4 功能分析4.1显示时间通过3个两位晶体管准确显示时、分、秒。

为了完整清晰地显示时间,需要分别显示时、分、秒,且时的显示范围为0-23,分0-59,秒0-59,即均需要使用两位的晶体管。

所以使用三个两位晶体管,分别显示时、分、秒4.2 设置时间通过按键电路实现对时间的调整和设置。

为了达到能够分别设置时和分的功能,需使用两个按键,其一确定设置的对象,另一个完成设置功能。

如图3所示。

图3 显示电路5 流程图根据功能分析,做系统流程图如图4所示。

图4 流程图6 电路原理图系统电路原理图见附件一。

其中有1个6位共阴极数码管7SEG-MPX6-Cc-RED,AT89C51,2个按键开关BUTTON,6个5K 欧电阻RES,VCC电源,7 仿真图系统仿真仿真图见附件一。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录摘要 (1)前言 (2)概论............................................................................................................. 错误!未定义书签。

第一章.. (3)1.1概述 (3)1.2单片机的发展历程 (3)1.3时钟的特性 (3)2 系统原理与硬件设计 (4)2.1硬件选择 (4)2.2单片机的构成 (4)2.3AT89C52单片机的引脚说明 (5)2.4LED简介 (6)第三章软件设计 (9)3.1框架图 (9)4 调试过程及数据分析 (22)4.1硬件调试 (22)4.2K EI L调试 (22)4.3开发板调试 (23)结论 (24)摘要本次设计采用AT89c52内部定时器、中断等功能,和外部数码管,驱动器等构成。

电子时钟电路采用24小时制记时方式,时间用6位数码管动态显示。

使用5V电源供电,并且在按键的作用下可以进入省电(不显示LED 数码管)和正常显示两种状态。

关键词:数码管、AT89c52The design of the adjustable digital clock base on AT89S52AbstractThis paper introduced the design of the adjustable digital clock based on AT89S52, the specific process of how the system hardware and software achieved were detailed description through the design of adjustable digital clock. The modular design and production, which consisted of MCU module, clock module and the associated control module, were mainly recounted;As well as hardware designing,software design use the same method, consists suspension module,time adjust module, and that use the C language to achieve because of its simple and strong negotiability. In this design the functions of time run and change, functions of the year, month and day display have been achieved.Key words :AT89S52 microcontroller;前言一块单片机芯片就是一台计算机,由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。

除此之外还广泛应用办公自动化领域、商业营销领域、汽车及通信系统、计算机外部设备等各领域中,并且单片机已成为计算机发展和应用的一个重要方面。

由此可见掌握单片机的使用方法和利用单片机解决实际问题具有重要的意义。

本次设计根据AT89c51单片机系统扩展的基本原理和方法、常用总线标准和典型接口电路的应用,结合本次设计的题目要求进行系统扩展,通过单片机驱动时、分、秒显示,最后通过74LS04驱动LED动态显示的方式完成设计任务,设计论文中附有电路图、程序清单、各数据存储单元的所在地址和输入输出口对应表。

因水平有限,难免有疏落不足之处,恳请老师和同学能给予批评指正。

第一章1.1概述随着电子技术的迅速发展,特别是随着大规模集成电路产生而出现的微型计算机,给人类生活带来了极大的方便。

走入家庭,从洗衣机、微波炉到音响、汽车,到处都可以见到单片机应用的踪影。

如果说微型计算机技术的出现使现代科学研究得到了质的飞跃,那么也可以毫不夸张的说:“单片机技术的出现则是给现代工业测控领域带来了一次新的工业革命”。

目前,单片机以其可靠性高和智能性等特点被广泛应用到工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等领域中,并已经进入家庭,因此,单片机技术的开发和应用水平已经逐步成为一个国家自动化发展水平的标志之一。

1.2 单片机的发展历程单片机是微型计算机的一个重要分支,也是一种非常活跃和颇具生命力的机种,特别适用于工业控制领域。

1971年微处理器研制成功不久,就出现了单片机,但最早的单片机是1位的,处理能力有限。

单片机的发展共分四个阶段:第一阶段是初级阶段,功能非常简单;第二阶段是低性能阶段, 16位定时器/计数器,片内ROM、RAM容量加大,直到现在仍被广泛应用,是目前应用数量较多的单片机。

、32位单片机推出阶段,以满足不同的用户需要。

纵观单片机几十年的发展历程,单片机的今后发展方向将向多功能、高性能、高速度、低功耗、低价格、外围电路内装化以及内存储器容量增加和FLASH存储器化方向发1.3 时钟的特性省电(关闭显示)功能(2)以24h(小时)计时方式(3)白来整点报时,晚上22点后不报时(4)用六位LED数码管显示时、分、秒(5)使用按键开关可实现时分调整、秒表功能转换(6)使用按键开关可实现时分调整、时钟功能转换等功能。

这里用到中断,50ms的产生一次。

然后累加到20次,秒表就加1.。

每60秒分值加1。

每60分时加1,每24小时日加1….第2章系统原理与硬件设计2.1 硬件选择(2)单片机的选择选用AT89c52单片机,并配备12MHz晶振,复位电路采用上电复位。

(3)显示电路选择采用软件译码动态显示,P3.0-P3.3作数码管的位选口。

P1.0-P1.6作数码管的段选口。

考虑直接用单片机I/O口作位选时驱动功率不够,(4)电源选择采用直流5V电源供电。

(5)选择器的选择 74ls04。

(6)CTC89c52单片机是一种低功耗,高性能的片内含有4KB可编程/擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的8位COMS微控制器,使用高密度,非易失存储技术制造,并且与AT89C52引脚和指令系统完全兼容。

芯片上的FLASH允许在线编程或采用通用的非易失存储编程器对存储器重复编程。

2.2 单片机的构成AT89c51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件,AT89C52单片机单片机内包含下列几个部件:(1)一个8位CPU;(2)一个片内振荡器及时钟电路;(3)4K字节ROM程序存储器;(4)256字节RAM数据存储器;(5)两个16位定时器/计数器;(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;(7)32条可编程的I/O线(四个8位并行I/O端口);(8)一个可编程全双工串行口;(9)具有五个中断源、两个优先级嵌套中断结构。

其内部机构框图如图2.2所示:图2.2 MCS-51单片机内部机构框图2.3 AT89c52单片机的引脚说明AT89c52单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)和电源地( 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图2.4(a)(b)所示(a) (b)图2.4 AT89c52单片机逻辑图与引脚图AT89C52单片机的内部硬件结构中除了程序存储器由FLASH取代了87C51单片机的EPROM外,其余部分完全相同,其管脚说明如下:(1)VCC:供电电压(2)GND:接地(3)时钟电路XTAL1(19脚)——芯片内部振荡电路(单级反相放大器)输入端。

XTAL2(18脚)——芯片内部振荡电路(单级反相放大器)输出端。

(4)控制信号RST(9脚)复位信号:时钟电路工作后,在此引脚上将出现两个机器周期的高电平,芯片内部进行初始复位,P0口~P3口输出高电平,将初值07H写入堆栈指针。

ALE(30脚)地址锁存信号:当访问外部存储器时,P0口输出的低8位地址由ALE输出的控制信号锁存到片外地址锁存器,P0口输出地址低8位后,又能与片外存储器之间传送信息。

另外,ALE可驱动4个TTL门。

PSEN(29脚)片外程序存储器读选通:PSEN低电平有效,PSEN作为程序存储器的读信号,输出负脉冲,将相应的存储单元的指令读出并送到P0口,PSEN可驱动8个TTL门。

EA/Vpp(30脚):当EA为高电平且PC值小于0FFFH时,CPU执行内部程序存储器程序;当EA为低电平时,CPU仅执行外部程序存储器程序。

2.4LED简介LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

图2.7(a)是共阴和共阳极数码管的内部电路图,它们的发光原理是一样的,只是它们的电源极性不同而已。

将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。

以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。

当然,LED的电流通常较小,一般均需在回路中接上限流电阻。

假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。

而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。

其它数字的显示原理与此类同。

LED的7段数码管利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。

在这次的设计中采用的均是共阴极的LED显示,当I/O口输出为高电平的时候,对应段就被点亮。

LED数码管的结构图如图2.7(b)所示。

(a)(b)图2.7 LED分类结构图和结构图这次设计的显示部分采用AT89c51单片机动态扫描完成,在多数的应用场合中,我们并不希望使用多I/O端口的单片机,原则上是使用尽量少引脚的器件。

在没有富余端口的情况下,应通过优化设计程序和扩展电路达到预期的目的。

动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。

相关文档
最新文档