以AT89C51单片机为核心,制作一个LCD显示的智能电子钟

合集下载

以AT89C51单片机为核心,制作一个LCD显示的智能电子钟

以AT89C51单片机为核心,制作一个LCD显示的智能电子钟

第6章智能电子钟的设计6.1 功能要求1. 设计要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。

(2) 闰年自动判别。

(3) 五路定时输出,可任意关断(最大可到16路)。

(4) 时间、月、日交替显示。

(5) 自定任意时刻自动开/关屏。

(6) 计时精度:误差≤1秒/月(具有微调设置)。

(7) 键盘采用动态扫描方式查询。

所有的查询、设置功能均由功能键K1、K2完成。

2. 工作原理本设计采用市场上流行的时钟芯片DS1302进行制作。

DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。

实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。

DS1302时钟芯片的主要功能特性:(1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。

(2) 31B的8位暂存数据存储RAM。

(3) 串行I/O口方式使得引脚数量最少。

(4) DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需3根线。

(5) 宽范围工作电压2.0-5.5V。

(6) 工作电流为2.0A时,小于300nA。

(7) 功耗很低,保持数据和时钟信息时功率小于1mW。

6.2 方案论证6.3 系统硬件电路的设计……6.4 系统程序的设计#include<reg51.h>#include<lcd.h>#include<ds1302.h>#define uchar unsigned char #define uint unsigned intsbit key1=P3^0;//设置键sbit key2=P3^3;//调节键加sbit key3=P3^6;//设置键减uchar second,minute,hour;uchar day,week,month,year;uchar pos_flag=0;uchar keyflag=0;//按键标志位//函数声明uchar read1302(uchar add); //读地址、数据void write1302(uchar add,uchar date); //写入地址、数据void write_com_date(uchar add,uchar date);void init_lcd();void init_ds1302();void delay(uchar time);void Disp_1602(uchar x,uchar y,uchar *p);void keyscan();void settime();void settime(){write1302(0x8e,0x00); //关闭写保护write1302(0x80,second/10*16+second%10); //秒write1302(0x82,minute/10*16+minute%10); //分write1302(0x84,hour/10*16+hour%10); //时write1302(0x86,day/10*16+day%10); //日write1302(0x88,month/10*16+month%10); //月write1302(0x8a,week/10*16+week%10); //星期write1302(0x8c,year/10*16+year%10); //年write1302(0x8e,0x80);}void display(){second=read1302(0x81);write_com_date(0xca,0x30+second%10); write_com_date(0xc9,0x30+second/10);minute=read1302(0x83);write_com_date(0xc7,0x30+minute%10); write_com_date(0xc6,0x30+minute/10);hour=read1302(0x85);write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10);day=read1302(0x87);write_com_date(0x8a,0x30+day%10);write_com_date(0x89,0x30+day/10);week=read1302(0x8b);write_com_date(0xcd,0x30+week%10);month=read1302(0x89);write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10);year=read1302(0x8d);write_com_date(0x84,0x30+year%10);write_com_date(0x83,0x30+year/10);}void keyscan() //修改调整时间日期{if(key1==0){delay(10);if(key1==0){pos_flag++;while(!key1);keyflag=1;switch(pos_flag){case 1:write_com(0x80+4); //年write_com(0x0f); //光标闪烁break;case 2:write_com(0x80+7); //月break;case 3:write_com(0x80+10); //日break;case 4:write_com(0x80+0x40+0x0d); //星期break;case 5:write_com(0x80+0x40+4); //时钟break;case 6:write_com(0x80+0x40+7); //分钟break;case 7:write_com(0x80+0x40+10); //秒钟break;default:break;}if(pos_flag==8) //pos_flag=8则退出调整{pos_flag=0;keyflag=0; //按键标识清零delay(5);settime();write_com(0x0c); // 关光标}}}if(key2==0) //调节加键,按下(低电平)就加 {delay(15);if(key2==0){while(!key2);switch(pos_flag){case 1:year++;if(year==99)year=0;write_com_date(0x84,0x30+year%10);write_com_date(0x83,0x30+year/10);break;case 2:month++;if(month==13)month=1;write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10);break;case 3:day++;if((year%4==0)&&(month==2)) //闰年二月 29天{if(day==30)day=1;}if((year%4!=0)&&(month==2)) //平年二月 28天{if(day==29)day=1;}if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //大月31天{if(day==32)day=1;}if(month==4||month==6||month==9||month==11) //小月30天{if(day==31)day=1;}write_com_date(0x8a,0x30+day%10);write_com_date(0x89,0x30+day/10);break;case 4:week++;if(week==8)week=1;write_com_date(0xcd,0x30+week);break;case 5:hour++;if(hour==24)write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10);break;case 6:minute++;if(minute==60)minute=0;write_com_date(0xc7,0x30+minute%10);write_com_date(0xc6,0x30+minute/10);break;case 7:second++;if(second==60)second=0;write_com_date(0xca,0x30+second%10);write_com_date(0xc9,0x30+second/10);break;default:break;}}}if(key3==0){delay(15);if(key3==0){while(!key3);switch(pos_flag){case 1:year--;if(year==0)write_com_date(0x84,0x30+year%10);write_com_date(0x83,0x30+year/10);break;case 2:month--;if(month==0)month=12;write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10);break;case 3:day--;if((year%4==0)&&(month==2)) //闰年二月 29天{if(day==0)day=29;}if((year%4!=0)&&(month==2)) //平年二月 28天{if(day==0)day=28;}if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //大月31天{if(day==0)day=31;}if(month==4||month==6||month==9||month==11) //小月30天{if(day==0)day=30;}write_com_date(0x8a,0x30+day%10);write_com_date(0x89,0x30+day/10);break;case 4:week--;if(week==0)week=7;write_com_date(0xcd,0x30+week);break;case 5:hour--;if(hour==0)hour=24;write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10);break;case 6:minute--;if(minute==0)minute=59;write_com_date(0xc7,0x30+minute%10);write_com_date(0xc6,0x30+minute/10);break;case 7:second--;if(second==0)second=59;write_com_date(0xca,0x30+second%10);write_com_date(0xc9,0x30+second/10);break;default:break;}}}}void main(){init_lcd();delay(2);init_ds1302();delay(2);Disp_1602(1,0,"20 - - week") ; Disp_1602(5,1,": :") ;while(1){if(keyflag==0){display();}keyscan();}}#ifndef _lcd_h_#define _lcd_h_#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2^0;sbit lcdrw=P2^1;sbit lcden=P2^2;void delay(uchar ms){uchar i;for(;ms>0;ms--)for(i=110;i>0;i--);}void write_com(uchar com) //写指令{lcden=0;lcdrs=0;lcdrw=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;}void write_data(uchar date) //写数据{lcden=0;lcdrs=1;lcdrw=0;P0=date;delay(1);lcden=1;delay(1);lcden=0;}void write_com_date(uchar add,uchar date) {write_com(add);delay(1);write_data(date);}void Disp_1602(uchar x,uchar y,uchar *p) {while(*p){if(y==0) x|=0x80;else x|=0xc0;write_com(x);delay(5);write_data(*p);x++;p++;}}void init_lcd(){delay(15);write_com(0x38);delay(15);write_com(0x38);delay(5);write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}#endif#ifndef _ds1302_h_#define _ds1302_h_#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit sclk=P1^1;sbit io=P1^0;sbit rst=P1^2;sbit ACC_7=ACC^7;void write1302(uchar add,uchar date) //写入地址、数据{uchar i;rst=0;sclk=0;rst=1;for(i=0;i<8;i++){sclk=0;io=add&0x01;add>>=1;sclk=1;}for(i=0;i<8;i++){sclk=0;io=date&0x01;date>>=1;sclk=1;}rst=0;}uchar read1302(uchar add) //读地址、数据{uchar i,dat1,dat2;rst=0;sclk=0;rst=1;for(i=0;i<8;i++){sclk=0;io=add&0x01;add>>=1;sclk=1;}for(i=0;i<8;i++){ACC_7=io;sclk=1;ACC>>=1;sclk=0;}rst=0;sclk=1;dat1=ACC;dat2=dat1/16;dat1=dat1%16;dat1=dat2*10+dat1;return dat1;}void init_ds1302(){if(((read1302(0x81))&0x0f)==1){write1302(0x8e,0x00); //关闭写保护}}#endif……6.5调试及性能分析6.5.1 调试与测试……6.5.2 性能分析。

基于AT89C51单片机的电子时钟课程设计

基于AT89C51单片机的电子时钟课程设计

基于AT89C51单片机的电子时钟课程设计一.设计任务与要求1. 该课程设计是利用MCS-51单片机的定时/计数器T0、中断系统、以及外围的按键和LED显示器等部件,设计一个单片机电子时钟。

设计的电子时钟通过两片4位数码管显示,并能通过按键实现时,分的设置,秒的清零和暂停、启动的控制。

2. 让同学掌握PRETUSS软件,进行程序设计并调试,并在程序烧录的cpu 后,在面包板中实现实物连接,实现电子钟的功能。

二、元器件清单及简介1.四位共阳LED数码管当数码管正面向上时,其引脚按逆时针方向从1—>12,对应的引脚为6->3->2->12为公共位选端2.元器件清单三、设计原理分析1.总体设计流程图2.子程序显示本程序运用定时器/计数器T0中断实现时间,并用两个4位数码管,从右到左依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。

数码管显示的信息用8个内存单元存放,这8个内存单元称为显示缓冲区,其中秒个位和秒十位、分个位和分十位、时个位和时十位分别由秒数据、分数据和小时数据分拆得到,数码管显示采用软件译码动态显示。

在内存中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出所显示的信息的字段码,从P0口输出,同时在P2口将对应的位选码输出选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。

3.按键功能实现按键处理设置为:如没有按键,则时钟正常走时。

当按下k0按键时,时钟停止,进入时间调整状态;按K1可K2按键可对小时进行加1或减1操作;继续按K0键后可对分进行加1或减1操作;按K3键可将秒位进行清零;第三次按K0后,时钟在当前状态下重新开始计时运行。

按键功能的实现,是通过对P1.0, P1.1, P1.2, P1.7脚的电位判断进行程序跳转。

其接法如下图所示:按键接法图4. 数码管接线图如上图所示为数码管的接法,为了保护LED数码管,在P0口接数据端提供低电压,接上拉电阻;P2口提供位选信号为高电压,增加驱动电阻,以提高灌流大小,使LED达到额定电流工作状态。

AT89C51单片机电子时钟的设计

AT89C51单片机电子时钟的设计

AT89C51单片机电子时钟的设计1.硬件设计首先,我们需要选择合适的外设硬件进行设计。

以下是一些常见的硬件组件:-AT89C51单片机-蜂鸣器-DS1302时钟模块-按键开关和对应的电阻液晶模块的连接方式如下:-VSS->GND-VDD->VCC-V0->电位器-RS->P0.7-R/W->P0.6-E->P0.5-DB0-DB7->P2.0-P2.7蜂鸣器的连接方式如下:-正极->P3.0-负极->GNDDS1302时钟模块的连接方式如下:-VCC->VCC-GND->GND-CE->P1.7-IO->P1.6-SCLK->P1.5按键开关的连接方式如下:-第一个按键->P3.1-第二个按键->P3.2-第三个按键->P3.32.软件设计在软件设计方面,我们将使用C语言编程来编写程序。

首先,我们需要定义和初始化必要的变量,例如小时、分钟和秒钟等计时变量。

然后,我们需要编写一个初始化函数来配置单片机的各种外设和寄存器。

在这个函数中,我们需要设置计时器/计数器、I/O口和中断等。

接下来,我们需要编写一个定时器中断函数,来更新计时变量并实现计时功能。

我们可以使用定时器中断来定期更新秒钟,并在需要时更新小时和分钟。

在主循环中,我们需要编写代码来控制液晶模块、蜂鸣器和按键开关等外设。

通过液晶模块,我们可以实现显示时间的功能。

通过蜂鸣器,我们可以实现头每秒发出一次滴答声的功能。

通过按键开关,我们可以实现设置时间的功能。

3.程序实现以下是AT89C51单片机电子时钟的程序框架:```c#include <reg51.h>#include <intrins.h>//定义和初始化计时变量unsigned char second = 0;unsigned char minute = 0;unsigned char hour = 0;//初始化函数void ini//配置计时器/计数器,设置定时器中断//配置I/O口和中断等//...//定时器中断函数//更新计时变量//...//主函数void mai//初始化init(;//主循环while (1)//控制液晶模块//控制蜂鸣器//控制按键开关//...}```在具体的代码实现中,我们需要根据液晶模块、蜂鸣器和按键开关等外设的具体规格和功能来编写相应的代码。

LCD显示的定时闹钟设计方案

LCD显示的定时闹钟设计方案

LCD显示的定时闹钟设计方案1.设计要求使用AT89C51单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD 时钟,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。

定时闹钟的基本功能如下:显示格式为“时时:分分”。

由LED闪动来做秒计数表示。

一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。

程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“ 00:00”,按下操作键K1〜K4动作如下:(1)K1 —设置现在的时间。

(2)K2 —显示闹钟设置的时间。

(3)K3 —设置闹铃的时间。

⑷K4 —闹铃ON/OFF勺状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。

设置当前时间或闹铃时间如下。

(1)K1 —时调整。

(2)K2 —分调整。

(3)K3 —设置完成。

(4)K4 —闹铃时间到时,发出一阵声响,按下本键可以停止声响。

本项目的难点在于4 个按键每个都具有两个功能,以最终实现菜单化的输入功能。

采用通过逐层嵌套的循环扫描,实现嵌套式的键盘输入。

2.设计方案2.1 原理本LCD定时闹钟,是以单片机及外围接口电路为核心硬件,辅以其他外围硬件电路,用汇编语言设计的程序来实现的。

根据C51单片机的外围接口特点扩展相应的硬件电路,然后根据单片机的指令设计出数字钟相应的软件,再利用软件执行一定的程序来实现数字钟的功能。

由于采用集成芯片性的单片机来制作电子钟,这样设计制作简单而且功能多、精确度高,也可方便扩充其他功能,实现也十分简单。

本设计是利用AT89C51单片机为主控芯片,由LCD晶振、电阻、电容、发光二极管、开关、喇叭等元件组成硬件电路,通过编写软件程序来实现和控制的数字定时闹钟2.2系统总框图2.3原理及工作过程说明(1)定时闹钟的基本功能如下:(a)启动仿真软件,使用LCD液晶显示器来显示现在的时间。

(b)程序执行之后显示“ 00:00”并且LED闪烁,表示开始已经计时。

昆明学院单片机实训基于AT89C51单片机,制作一个LED显示的智能电子钟。

昆明学院单片机实训基于AT89C51单片机,制作一个LED显示的智能电子钟。

《单片机原理及应用》课程设计报告课题名称L E D电子时钟学院自动控制与机械工程学院专业电气工程及其自动化班级2013级2班学号姓名时间2015年7月3日目录一、设计目的及要求 (3)1、设计题目: (3)2、设计任务: (3)3、设计要求: (3)二、系统设计 (3)三、硬件设计: (4)1、单片机最小系统——AT89C51 (4)2、 LED数码管显示模块 (4)3、晶振模块: (5)4、按键模块: (5)四、软件设计: (6)1、Protues软件的介绍: (6)2、程序设计流程图 (7)3、软件仿真结果 (8)五、程序设计 (10)六、设计总结 (10)一、设计目的及要求1、设计题目:LED显示的电子钟2、设计任务:基于AT89C51单片机,制作一个LED显示的智能电子钟。

3、设计要求:(1)、用6个7段LED数码管作为显示设备,设计时钟功能。

(2)、显示格式,日期:YY MM DD,时间:HH MM SS.(3)、可以分别设计年、月、日,时、分、秒。

在复位后的日期应该为:12 01 01,时间为:00 00 00。

(4)、秒钟复位功能,当秒位键按下后,秒的那位回到00 。

(5)、键盘按键个数应该万为己确定。

(6)、@时间、月、日自行交替显示,或者按键切换显示。

二、系统设计设计中采用AT89C51芯片及LED显示器,一些独立式按键构成一个简单的数字电子钟。

设计中是采用单片机的内部定时器进行定时,程序框图如图2.1所示:图2.1系统框图整个电子钟的工作原理是:在正常的供电状态下,首先利用单片机定时,到了相应的时间由单片机将所需要显示的数据送到LED显示器的输入口,当有键按下时则进入相应的按键显示和调整状态,进行按键调整。

三、硬件设计:硬件设计是指应用系统的电路设计,包括单片机芯片、控制电路、存储器、I/O 接口等等。

硬件设计时,应考虑留有充分余量,电路设计力求无误,因为在系统调试中不易修改硬件结构。

电子时钟基于AT89c51单片机设计电路图及程序

电子时钟基于AT89c51单片机设计电路图及程序

电子时钟基于AT89c51单片机的设计电子时钟原理图开机显示仿真图: 当按下仿真键时电子时钟开机页面显示第一行显示JD12102Class--16,第二行显示动态TINE:12:00:04。

电子时钟调时间仿真图:当按下K1为1次时,光标直接跳到电子时钟的秒,可以按下K2进行调节。

当按下K1为2次时,光标直接跳到电子时钟的分,可以按下K2进行调节。

当按下K1为3次时,光标直接跳到电子时钟的时,可以按下K2进行调节。

当按下K1为4次时,光标直接跳完,电子时钟可以进行正常计时。

电子时钟闹钟调节仿真:当按下K3为1次时,直接跳到闹钟显示界面00:00:00,按下K2可以对闹钟的秒进行调节。

当按下K3为2次时,可以调到分,按下K2可以对闹钟的分进行调节。

当按下K3为3次时,可以调到时,按下K2可以对闹钟的时进行调节。

当按下K3为4次时,直接跳到计时界面,对闹钟进行到计时,时间到可以发出滴滴声。

#include<reg51.h>#define uchar unsigned char //预定义一下#define uint unsigned intuchar table[]="JD12102Class--21"; //显示内容sbit lcden=P3^4; //寄存器EN片选引脚sbit lcdrs=P3^5; //寄存器RS选择引脚sbit beep=P3^6; //接蜂鸣器extern void key1();extern void key2();extern void key3();uchar num,hour=12,minite,second,ahour,aminite,asecond,a,F_k1,F_k2,F_k3; //定义变量void delay(uint z) //延时{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;P0=com; //送出指令,写指令时序delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){lcdrs=1;P0=date; //送出数据,写指令程序delay(5);lcden=1;delay(5);lcden=0;}void write_add(uchar add,uchar date){uchar aa,bb;aa=date/10;bb=date%10;write_com(0x80+add);write_data(0x30+aa);write_data(0x30+bb);}void init() //初始化{lcden=0;write_com(0x38); //设置16*2显示,5*7点阵write_com(0x0c); //开显示,不显示光标write_com(0x06); //地址加1,写入数据是光标右移1位write_com(0x01); //清屏write_com(0x80); //起点为第一行第一个字符开始}void display(uchar h,uchar m,uchar s) //显示设计程序{{write_com(0x80+0x16);}{write_com(0xC0+0x00);write_data('T');write_data('I');write_data('M');write_data('E');write_data(':');write_data(0x30+(h/10));write_data(0x30+(h%10));write_data(':');write_data(0x30+(m/10));write_data(0x30+(m%10));write_data(':');write_data(0x30+(s/10));write_data(0x30+(s%10));write_data(' ');write_data(' ');write_data(' ');} }void main(){init();TMOD=0X01; //设置T0定时方式1 TH0=(65535-50000)/256; //设置初值TL0=(65535-50000)%256;EA=1; //开总中断TR0=1; //启动T0ET0=1;for(num=0;num<16;num++) //依次读出数据{write_data(table[num]);}while(1){key1();key2();key3();if(ahour==hour&&aminite==minite&&second<10) //时间到闹钟响{beep=~beep;}if(F_k1==0&F_k3==0) //K1和K3按下次数为零就直接显示时分秒display(hour,minite,second);}}void timer0() interrupt 1 //T0中断函数{TH0=(65535-50000)/256; //装载计数器初值TL0=(65535-50000)%256;a++;if(a==20){ //进位设置60秒进1分,60分进1时,24时进0时a=0;second++;if(second==60){second=0;minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}}#include <reg51.h> //调时间程序#define uchar unsigned char#define uint unsigned intsbit k1=P1^0; //定义3个变量sbit k2=P1^1;sbit k3=P1^2;extern uchar F_k1,F_k3,second,minite,hour,ahour,aminite,asecond; //预定义变量extern void write_com(uchar com);extern void write_add(uchar add,uchar date);extern void display(uchar h,uchar m,uchar s);void delay_key(int i){while(i--);}void key1(){if(k1==0) //按下K1零次时,直接计时与开机显示{delay_key(100);if(k1==0){TR0=0;while(!k1);F_k1++;if(F_k1==4){F_k1=0;write_com(0x0c);TR0=1;}}}if(F_k1==1|F_k3==1){write_com(0xC0+0x0c);write_com(0x0f);}if(F_k1==2|F_k3==2)write_com(0xC0+0x09);if(F_k1==3|F_k3==3)write_com(0xC0+0x06);}void key2(){if(k2==0){delay_key(100);while(!k2);if(F_k1==1) //按下K1一次时设置闹钟的秒{second++;if(second==60)second=0;write_add(0x4b,second);}if(F_k1==2) //按下K3两次时设置闹钟的分{minite++;if(minite==60)minite=0;write_add(0x48,minite);}if(F_k1==3) // 按下K1三次时设置闹钟的时{hour++;if(hour==24)hour=0;write_add(0x45,hour);}if(F_k3==1) //按下K3一次时设置闹钟的秒{asecond++;if(asecond==60)asecond=0;write_add(0x4b,asecond);}if(F_k3==2) //按下K3两次时设置闹钟的分{aminite++;if(aminite==60)aminite=0;write_add(0x48,aminite);}if(F_k3==3) //按下K3三次时设置闹钟的时{ahour++;if(ahour==24)ahour=0;write_add(0x45,ahour);}}}void key3(){if(k3==0){delay_key(100);if(k3==0){while(!k3);F_k3++;if(F_k3==4) //K3等于四次时直接跳入闹钟显示{F_k3=0;write_com(0x0c);}if(F_k3==1)display(ahour,aminite,asecond);}}}。

基于AT89C51单片机电子时钟的设计

基于AT89C51单片机电子时钟的设计

基于AT89C51单片机电子时钟的设计摘要单片机是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。

近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入而51 单片机是各单片机中最为典型和最有代表性的一种。

由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,本文介绍单片机AT89C51结合74LS373设计时钟定时控制器实现的方案。

74LS373为三态输出的八组缓冲器。

本系统将单片机AT89C51内部时钟读出并通过七段数码管(LED)显示出来,通过按键设定的时间来改变系统的闹钟时间,单片机依据设定的时间来响铃,从而实现了系统的智能化。

关键词: AT89C51 电子时钟 74LS373AbstractMCU is a CP U、RAM、ROM、timing、co unting and mu ltip le interfaces in o ne microco ntro ller. In recent years, w ith the field o f co mp uter penetratio n in the co mmun ity and the develop ment o f large-scale integrated circuits, single-chip app licatio ns is stead ily mo ving toward dep th and 51 single-chip is the most typ ical and most representative o ne. Because o f its stro n g functio ns, small size, lo w po wer co nsump tio n, cheap, reliab le and easy to use and so o n, it is particularly suited to co ntro l systems and, mo re widely used in auto matic contro l, intelligent instruments, meters, data acq uisitio n, military p rod ucts, as well as ho useho ld app liances and o ther fields, This article describ es the design o f single-chip micro co mp uter AT89C51 co mb inatio n 74LS373 clock timing o f the p ro gram co ntro ller. 74LS373 tri-state o utp ut fo r the eight sets o f buffers . AT89C51 single-chip microco mp uter o f the system will read o ut the internal clock and thro ugh the LED d isp lay,thro ugh the b utto n to set thealarm clo ck to change the system time, single-chip b ased o n the time to set alarm clock p rocessing, thus realizing the intelligent system.Key words: AT89C51 MC U; Electro nic clock; 74LS373目录摘要 0Abstract 0目录 (1)第一章单片机概述 (2)1.1单片机的定义 (2)1.2单片机的特点 (2)1.3单片机的应用领域 (3)第二章MCS-51单片机简介 (5)2.1 MCS-51单片机结构及引脚说明 (5)2.2中央处理器(CPU)的结构 (7)2.3 AT89C51单片机的存储器 (9)第三章LED数码管及74LS373简介 (13)3.1 数码管的分类 (13)3.2 数码管的驱动方式 (13)3.3 数码管应用 (14)3.4 数码管使用的电流与电压 (14)3.5 74LS373简介 (14)第四章电子钟功能介绍 (15)4.1 系统功能介绍 (15)4.2 软件设计流程 (15)4.3 电子钟程序清单 (17)第五章电子钟软件实现仿真 (18)5.1 单片机模拟调试软件Keil (18)5.2 Proteus软件简介 (21)5.3 电子时钟仿真 (22)5.4 整机仿真及调试 (24)附录 (25)第一章单片机概述1.1单片机的定义单片机是指一个集成在一块芯片上的完整计算机系统。

基于AT89C51单片机的电子钟设计

基于AT89C51单片机的电子钟设计

目录一、内容提要 (2)二、设计的基本步骤及方案 (2)三、硬件电路设计及描述 (4)四、软件设计程序框图 (6)五、硬件的调试过程 (13)六、课程设计体会 (14)七、参考资料 (15)附汇编语言一、内容提要1、设计任务利用AT89C51单片机制作,基于这种单片机自主创作一个LED显示的智能电子钟。

分析,综合考虑系统的主要功能,我们经过查阅资料、接口的设计、程序的设计、安装调试等环节。

完成一个基于MCS51系列的单片机,设计多种资源的掌握和应用,并具有综合能力的小应用系列的设计,同时学习并使用相关的仪器设备、软件进行编写和调试程序。

2、设计要求1)用六个七段LED数码管作为显示设备,设计时钟功能。

2)显示的格式应该为:日期、时间同时都能看到,并且表示的格式为:日期:YY MM DD, 时间:HH MM SS。

3)还要分别设计年、月、日、时、分、秒,在复位后的日期应该为:12 01 01,时间为:00 00 00 。

4) 秒钟复位功能,秒复位键按下后,秒回到00。

5)键盘按键个数应该万为己确定。

6)@时间、月、日自行交替显示,或按键切换显示。

7)12小时和24小时切换功能。

8)* 实现闹钟功能。

二、设计的基本方案及步骤1、主控制器1)单片机的选择与外围电路:AT89C51作为温度测试系统的核心器件。

该器件是INTEL公司生产的MCS-51系列单片机的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS-51的CMOS产品。

不仅结合了HMOS的高速和高密度技术及HMOS的低功耗特征,而且继承和扩展了MCS-48单片机的体系结构和指令系统。

单片机小系统的电路图如图所示。

AT89C51:AT89C51单片机的主要特征:1)与MCS-51兼容,4K字节可编程闪烁存储器;2)灵活的在线系统编程,掉电标识和快速编程特性;3)寿命为1000次写/擦周期,数据保留时间可10年以上;4)全静态工作模式:0HZ~33HZ;5)三级程序存储器锁定;128×8位内部RAM,32位可编I/O线;6)16位定时器/计数器,5个中断源,4个8位并行的I/O接口,1个全双工I/O 接口。

基于AT89C51单片机定时闹钟设计

基于AT89C51单片机定时闹钟设计

塔里木大学信息工程学院《单片机原理与外围电路》课程论文题目:单片机定时闹钟设计:海热古丽·依马木学号:5011110115班级:电脑15-1班摘要:本设计是单片机定时闹钟系统,不仅能实现系统要求的功能,而且还有附加功能,即还能设定和修改当前所显示的时间。

本次设计的定时闹钟在硬件方面就采用了AT89C51芯片,用6位LED数码管来进行显示。

LED用P0口进行驱动,采用的是动态扫描显示,能够比较准确显示时时—分分—秒秒。

通过S1、S2、S3、和S4四个功能按键可以实现对时间的修改和定时,定时时间到喇叭可以发出报警声。

在软件方面采用汇编语言编程。

整个定时闹钟系统能完成时间的显示,调时和定时闹钟、复位等功能,并经过系统仿真后得到了正确的结果。

关键词:单片机、AT89C51、定时闹钟、仿真Abstract:T his design is a single-chip timing alarm system, can not only realize the function of system requirements, and there are additional functions, which can set up and modify the display time. Timing alarm clock this design adopts the AT89C51 chip on the hardware side, with 6 LED digital tube to display. LED P0 export driven, by using dynamic scanning display, can accurately display always -sub -seconds seconds. Through the S1, S2, S3, and S4 four function keys can be achieved on the time changes and timing, timing to the horn can send out alarm sound. Using assembly language programming in the software. The timing clock system has functions of time display, timing and timing alarm clock, reset and other functions, and the system simulation to obtain correct results.Keywords: single chip microcomputer, AT89C51, alarm clock, simulatio目录1绪论 (2)课题背景及研究意义 (2)国内外现状 (2)课题的设计目的 (2)课题的主要任务 (2)课题的主要功能 (2)2系统概述 (3)方案论证 (3)系统设计原理 (3)3系统硬件设计 (4)单片机AT89C51简介 (4)数码管显示电路 (6)时钟电路 (7)喇叭:SPEAKER (8)4系统软件设计 (8)系统软件设计说明 (8)4.2 程序调试 (8)4.3 程序流程图 (9)仿真步骤 (10)仿真结果 (10)结论 (12)参考文献 (13)附录A 系统整体电路 (14)附录B 全部程序清单 (14)附录C:PCB图和3D图 (23)1绪论课题背景及研究意义进入信息时代,电脑的影子无处不在,带有像单片机一类嵌入式处理器的小型智能化电子产品,已经成为家用电器的主流,市场需求前景广阔,因此,掌握小型单片机应用系统设计方法,已成为当今电子应用工程师所必备的技能,定时闹钟具备小型单片机应用系统的一切要素,其结构简单、成本低廉、走时精确、设置方便,所以智能化方面有广泛的用途。

基于at89c51的电子时钟设计

基于at89c51的电子时钟设计

课程设计2:设计一个数字时钟。

要求如下:1.利用51开发板上LED数码管,LED灯,按键等设备,设计一个电子时钟。

2.电子钟使用4位数码管显示小时(24小时制)和分钟,秒可以使用LED灯或其他形式表现。

3.具有设置时钟功能,设置时间时,时间停止计时。

需要设置的位置数码管处于闪烁状态,如你想设置小时的数值时,显示小时的数码管需要处于闪烁状态,而显示分钟的数码管不可以处于闪烁状态,应处于正常显示状态。

4.按键可以选择独立键盘或矩阵键盘。

5.其他扩展功能(选做,能力强的可以做):如闹钟,时制切换等。

一.key.c#include "reg52.h"#include "key.h"extern unsigned char min_flag ;//标志位,控制分数码管闪烁extern unsigned char hour_flag ;//标志位,控制时数码管闪烁extern unsigned char shi ;extern unsigned char fen ;unsigned char key_flag = 0;//标志位,有按键被按下unsigned char key_con = 0;//控制位,控制按键(K1)被按下/*独立按键P12连接到51单片机P1端口k1对应的端口为P1.3k2对应的端口为P1.2k3对应的端口为P1.1k4对应的端口为P1.0*/code unsigned char arr[]={0xf7,0xfb,0xfd,0xfe};unsigned char read_key(unsigned char key){unsigned char i;for(i=0;i<8;i++){if(!(key & 1)){return i+1;}key>>=1; //key = key >> 1 ;}return 0;}void key_scan2(void){unsigned char temp;//键盘扫描temp = key4_scan();if(temp){if(!key_flag){if(temp==4)//K1被按下{key_con++;if(key_con==1) //第一次按下调整小时的数值{hour_flag=1;min_flag =0;}else if(key_con==2) //第二次按下调整分的数值{hour_flag=0;min_flag =1;}else //第三次按下取消调整{hour_flag=0;min_flag =0;key_con = 0;}}if(temp == 3) //增加数值{if(hour_flag){shi++;if(shi>23){shi = 0;}}else if(min_flag){fen++;if(fen>59){fen = 0;}}}if(temp == 2) //减少数值{if(hour_flag){shi--;if(shi>250){shi = 23;}}else if(min_flag){fen--;if(fen>250) //非负数,减的时候不会小于0{fen=59;}}}}key_flag = 1;}else{key_flag = 0;}}/*扫描独立键盘,输入参数:无返回值:有键按下时:返回对应的数字没有按键:返回0*/unsigned char key4_scan(void){unsigned char temp;P1 = 0xf;if(P1 != 0xf)//有按键被按下{temp = P1 & 0xf;//1110return read_key(temp);}return 0;}unsigned char sub_key_scan(unsigned char key) {unsigned char temp;P1 = key; //判断第一行temp = P1 >> 4;if(temp != 0xf){return read_key(temp);}return 0;}/*矩阵键盘硬件连接:P13连接到51单片机P1端口P1.0对应P13的1脚P1.1对应P13的2脚P1.2对应P13的3脚……P1.7对应P13的8脚输入参数:无返回值:有键按下时:返回对应的数字没有按键:返回0*/unsigned char key16_scan(void){unsigned char temp;unsigned char i=0;P1 = 0xf0;if(P1 != 0xf0)//有按键被按下{for(i=0;i<4;i++)//用函数扫描4行{temp = sub_key_scan(arr[i]);if(temp){return temp+(i*4);}}}return 0;}二.Key.h#ifndef KEY_H#define KEY_Hunsigned char key4_scan(void); unsigned char key16_scan(void);void key_scan2(void);#endif三.Led_reg.c#include "reg52.h"/*P2连接位码,P2.0连接Q4B,P2.1连接Q3B,P2.2连接Q2B,P2.3连接Q1B P0端口连接段码,P0.0连接A,。

基于单片机的lcd电子时钟设计

基于单片机的lcd电子时钟设计

基于单片机的lcd电子时钟设计随着科技的发展,电子产品逐渐成为人们生活中必不可少的部分。

其中,电子时钟是人们生活中经常使用的一种电子产品。

电子时钟通过精准的电子元件来测量时间,比传统时钟计时更为准确、实用。

在这篇文档中,我将介绍一种基于单片机的LCD电子时钟设计。

一、设计原理该电子时钟的核心是单片机AT89C51,其运行频率为12MHz。

另外,该时钟使用4位7段LCD显示器来显示时间。

由于该LCD显示器需要保持常电流状态,因此电子时钟配备了LM324运算放大器,用于调整电流并实现显示。

当单片机初始化时,它会将当前的时间读取到内部存储器中,至此时钟启动。

单片机读取内部存储器将获取到各种时间信息,包括秒、分、时、日、月和年。

接下来,单片机通过CPU时钟中断,每秒钟更新一次时间,同时在LCD显示区域更新时间数据。

二、硬件设计该电子时钟需要一些硬件设备才能正常运行。

我们需要以下电子设备:1. 单片机AT89C512. 4位7段LCD3. 若干电容4. 数量不定的电阻5. LM324运算放大器6. 晶体7. LED灯通过以上硬件部件的搭配,我们可以实现一个完整的电子时钟设备。

三、软件设计在开发电子时钟硬件之后,我们需要写一些软件来控制它的运行。

在本例中,我们使用C语言编写时钟控制程序。

基本的程序控制框架如下:1. 初始化单片机,设置相关校准参数2. 读取系统时间,并将其存储到内部存储器中3. 每秒钟更新时间信息4. 对时钟时间进行格式化,以便在LCD显示屏幕上显示5. 在LCD显示区域显示格式化数据6. 不断循环执行上述步骤以上步骤需要编写正确的代码才能正常工作。

在编写C程序时,需要注意单片机的内部存储器、寄存器、I/O端口等的使用,同时还需要考虑程序执行速度、指令优化以及机器资源分配等各个方面。

四、总结在本文中我们介绍了基于单片机的LCD电子时钟的设计,并分别阐述了其硬件和软件设计的基本原理。

作为一种基于电子、精准、实用的时间计算设备,电子时钟在现代社会中得到了广泛应用。

基于AT89C51单片机的电子时钟设计_毕业设计

基于AT89C51单片机的电子时钟设计_毕业设计

基于AT89C51单片机的电子时钟设计摘要:本文介绍了AT89C51单片机控制162液晶显示屏的工作原理以及设计方法,利用ds1302芯片和162液晶屏以51单片机为主控芯片设计一个时钟电路,分为硬件设计与软件设计两个部分。

硬件设计主要是单片机、液晶和ds1302的接口设计;软件设计的主要部分是:单片机的端口初始化以及ds1302初始化,液晶显示屏的初始化,单片机驱动液晶屏的显示。

关键词:AT89C51单片机;162液晶显示屏;ds1302;LCD1 引言液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧等许多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

本文中详细介绍了基于AT89C51单片机控制下的162液晶屏显示设计,此设计基于da1302的时钟电路方便实用,电路设计简单。

2 硬件介绍2.1、AT89C51简介AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

基于AT89C51单片机的定时闹钟设计

基于AT89C51单片机的定时闹钟设计

学号: 班级: 姓名:基于89C51单片机的电子闹钟设计一、设计要求(1)设计并实现一个具有计时功能的电子时钟系统,电子表的时间精确到秒,并可以显示年、月、日、时、分、秒。

(2)利用液晶显示器显示定时器的日期和时间。

(3)使用键盘进行设置时间和设置闹钟。

(4)定时时间到通过蜂鸣器报警和发光二极管闪烁通知,并持续60s 。

二、硬件设计(1)系统设计框图(2)选择硬件设备单片机:选择AT89C51;液晶显示器:具有16字符显示功能的1601 键盘:选择4行*4列的矩阵键盘 LED :选择红色的发光二极管 E 2PROM :X2545基本元件:蜂鸣器,电容,晶体振荡器 ,电阻,开关 电源:使用+5v 直流稳压源 基本模块的构成①时钟信号发生单元如右图2 利用晶振和电容以及单片机内部 电路,构成晶体并联振荡器,产 生12MHz 的时钟频率 ②复位电路如右图3利用一个简单的电容和按键实现*SI SO SCK CSR/S R/W E 单片机 89C51液晶显示蜂鸣器LED E 2PROM X2545 512*8bit键盘P2口P1口图1定时器系统框图数码管显示统P0口P3.0P3.6、P3.7基本模块图2时钟信号发生单元实现对系统的复位功能由此基本模块可以实现最小的单片机系统(3)电子时钟硬件原理图图4硬件电路原理电路(4)主要器件的原理①液晶显示原理液晶显示器种类繁多,按输出样式分为,图案式,数码式,点阵式。

本设计方案利用的是点阵式液晶显示器,而液晶驱动方式又和数码管驱动截然不同,虽然比数码管需要更小的工作电压,但是其结构所需要的扫描方式较数码管来说,是比较复杂的,而且输入输出数据速度慢,市场上是常用点阵式液晶驱动器的,常用的有1601、1602……,“16”代表显示字符共有几列,“01”、“02”代表输出字符共有几行。

下面是驱动1601的驱动方法。

驱动1601的一个很重要的方面就是液晶显示器的初始化,主要是利用控制、数据复用总线来输入指令,进行初始化。

基于单片机控制的智能定时闹钟方案设计书(含完整程序仿真图)

基于单片机控制的智能定时闹钟方案设计书(含完整程序仿真图)

本设计是定时闹钟的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。

电子钟设计可采用数字电路实现,也可以采用单片机来完成。

数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。

若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。

若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。

片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。

另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。

AT89C51单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进—步可以扩充控制电器的启停。

设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。

采用四个开关来控制定时闹钟的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。

课设准备中我根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真实验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。

设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声音,持续一分钟。

显示采用的六位数码管电路,如果亮度感觉不够,可以通过提升电阻来调节,控制程序中延迟时间的长短,可以获得不同的效果。

基于单片机实现的LCD定时电子闹钟课程设计

基于单片机实现的LCD定时电子闹钟课程设计

摘要本设计是采用单片机技术的电子定时闹钟,近年来集成电路技术的出现和应用,是推动了人类文明的突飞猛进。

基于集成电路技术的单片机产品更是方便了人们的生活和工作,目前以单片机技术的应用为核心的产品种类非常丰富。

应用我们所学过的知识和查阅相关资料,我制作了这个单片机技术为基础的LCD 可校时可定时电子闹钟,这是一个简单的实用的单片机电子设计产品。

本“LCD定时电子闹钟’设计采用AT89C51为主控芯片。

在充分理解了设计的要求后,准确的定位了设计的目的,然后构思了总体的方案。

在选择和合适的硬件完成了电路的设计后,又进行了软件的设计和调试。

本系统的硬件组成以及工作原理都有详细的图文说明,所应用的软件技术和各个模块设计的功能及工作过程也有详细的介绍,最后的部分则详细描述了了软件仿真及调试过程。

本电子钟设计是以单片机技术为核心,采用了中小规模集成度的单片机制作的功能较为完善的电子闹钟。

硬件设计应用了成熟的数字钟电路的基本设计方法以,并详细介绍了系统的工作原理。

硬件电路中使用了除AT89C51外,另外还有LCD、晶振、电阻、电容、发光二极管、开关、喇叭等元件。

在硬件电路的基础上,软件设计按照系统设计功能的要求,运用所学的汇编语言,实现的功能包括‘时时-分分-秒秒’显示、设定和修改定时时间的小时和分钟、校正时钟时间的小时、分钟和秒、定时时间到能发出一分钟的报警声。

最后应用‘伟福’及‘Proteus’等软件将硬件电路和软件系统链接在一起对各个部分及整体进行仿真并调试构成了整个完整的电子闹钟的设计。

最后通过反复的实际仿真和测试表明,该系统能够实现所有要求的功能包括:(1)能显示‘时时-分分-秒秒’。

(2)能够设定定时时间、修改定时时间及时钟。

(3)定时时间到蜂鸣器能发出铃声,另外还在此基础上实现了其他的附加功能比如万年历。

当然这个系统仍然是属于比较简单的单片机应用系统,要设计功能更强的更复杂的系统还需要我进一步的学习。

毕业设计(论文)-基于at89c51单片机的数字闹钟设计(电路图+源程序)[管理资料]

毕业设计(论文)-基于at89c51单片机的数字闹钟设计(电路图+源程序)[管理资料]

摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

本次做的数字闹钟以89C51单片机作为控制核心,使用串行时钟芯片PCF8563实现时间的显示设置和闹钟功能。

为了方便驱动其它电路,通过总线驱动器74LS245增加单片机的驱动能力。

将数据及地址等信号通过40线的总线引出,便于将来对此单片机系统作进一步的扩展。

作为一款多功能数字闹钟它除具有括时钟显示、闹钟功能外,还有具有秒表、温度测量、电压测量等功能。

本次设计的难点与重点在于各个模块的设计。

关键词:单片机89C51数字闹钟时钟芯片PCF8563AbstractIn recent years, with computers in the infiltration and the development of large-scale integrated circuits. SCM application is steadily deepening, as it has strong function, small size, low power dissipation, low prices, reliable, easy to use features, it is particularly suited to and control of the system, increasingly widely used in automatic control, intelligent instruments, gauges, data acquisition, military products and household appliances, and other areas, is often microcontroller as a core component to use, In light of specific hardware architecture, and application specific software features object combine to make perfect.The figures do bell on SCM (AT89C51) at the core, Combined with the components, and factoring in the corresponding software, Easy to produce digital clock purposes, as part of the hardware components is a difficult choice, layout and welding.Keywords : Single Chip Microcomputer 89C51 bell PCF8563目录摘要 (I)Abstract ...................................................................................................... I I 第一章引言 (1)第二章方案设计与比较 (2) (2)系统工作原理: (2) (2)温度采集方案 (3)键盘显示方案 (3) (3) (4)闹钟功能方案 (4)电压、频率测量方案 (4)第三章主要元器件介绍与说明 (5)AT89C51单片机工作原理与性能 (5)AT89C51单片机管脚说明 (6)振荡器特性 (8)PCF8563时钟芯片及其应用 (8)PCF8563时钟芯片特性 (9)PCF8563时钟芯片管脚配置与描述 (9)功能描述 (10)报警功能模式 (11)定时器 (11)复位 (11)内部寄存器的功能 (11) (14)第四章系统硬件设计 (14) (14) (15)时钟接口电路设计 (15)液晶显示器(LCD)电路设计 (17)键盘接口电路电路设计 (17)声光报警接口电路设计 (18)温度测量电路设计 (19)交流电特性测量设计 (22) (25) (25)主程序流程图 (25)蜂鸣器闹铃中断服务子程序流程图 (27) (28) (28) (30)结束语 (31)致谢 (32)参考文献 (33)附录一:系统总电路图 (33)附录二:多功能数字闹钟主程序 (35)第一章引言现在是一个知识爆炸的新时代。

基于单片机AT89C51控制的LED点阵屏显示时钟_课程设计报告

基于单片机AT89C51控制的LED点阵屏显示时钟_课程设计报告

基于单⽚机AT89C51控制的LED点阵屏显⽰时钟_课程设计报告毕业论⽂声明本⼈郑重声明:1.此毕业论⽂是本⼈在指导教师指导下独⽴进⾏研究取得的成果。

除了特别加以标注地⽅外,本⽂不包含他⼈或其它机构已经发表或撰写过的研究成果。

对本⽂研究做出重要贡献的个⼈与集体均已在⽂中作了明确标明。

本⼈完全意识到本声明的法律结果由本⼈承担。

2.本⼈完全了解学校、学院有关保留、使⽤学位论⽂的规定,同意学校与学院保留并向国家有关部门或机构送交此论⽂的复印件和电⼦版,允许此⽂被查阅和借阅。

本⼈授权⼤学学院可以将此⽂的全部或部分内容编⼊有关数据库进⾏检索,可以采⽤影印、缩印或扫描等复制⼿段保存和汇编本⽂。

3.若在⼤学学院毕业论⽂审查⼩组复审中,发现本⽂有抄袭,⼀切后果均由本⼈承担,与毕业论⽂指导⽼师⽆关。

4.本⼈所呈交的毕业论⽂,是在指导⽼师的指导下独⽴进⾏研究所取得的成果。

论⽂中凡引⽤他⼈已经发布或未发表的成果、数据、观点等,均已明确注明出处。

论⽂中已经注明引⽤的内容外,不包含任何其他个⼈或集体已经发表或撰写过的研究成果。

对本⽂的研究成果做出重要贡献的个⼈和集体,均已在论⽂中已明确的⽅式标明。

学位论⽂作者(签名):年⽉关于毕业论⽂使⽤授权的声明本⼈在指导⽼师的指导下所完成的论⽂及相关的资料(包括图纸、实验记录、原始数据、实物照⽚、图⽚、录⾳带、设计⼿稿等),知识产权归属华北电⼒⼤学。

本⼈完全了解⼤学有关保存,使⽤毕业论⽂的规定。

同意学校保存或向国家有关部门或机构送交论⽂的纸质版或电⼦版,允许论⽂被查阅或借阅。

本⼈授权⼤学可以将本毕业论⽂的全部或部分内容编⼊有关数据库进⾏检索,可以采⽤任何复制⼿段保存或编汇本毕业论⽂。

如果发表相关成果,⼀定征得指导教师同意,且第⼀署名单位为⼤学。

本⼈毕业后使⽤毕业论⽂或与该论⽂直接相关的学术论⽂或成果时,第⼀署名单位仍然为⼤学。

本⼈完全了解⼤学关于收集、保存、使⽤学位论⽂的规定,同意如下各项内容:按照学校要求提交学位论⽂的印刷本和电⼦版本;学校有权保存学位论⽂的印刷本和电⼦版,并采⽤影印、缩印、扫描、数字化或其它⼿段保存或汇编本学位论⽂;学校有权提供⽬录检索以及提供本学位论⽂全⽂或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论⽂的复印件和电⼦版,允许论⽂被查阅和借阅。

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

第6章智能电子钟的设计6.1 功能要求1. 设计要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。

(2) 闰年自动判别。

(3) 五路定时输出,可任意关断(最大可到16路)。

(4) 时间、月、日交替显示。

(5) 自定任意时刻自动开/关屏。

(6) 计时精度:误差≤1秒/月(具有微调设置)。

(7) 键盘采用动态扫描方式查询。

所有的查询、设置功能均由功能键K1、K2完成。

2. 工作原理本设计采用市场上流行的时钟芯片DS1302进行制作。

DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。

实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。

DS1302时钟芯片的主要功能特性:(1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。

(2) 31B的8位暂存数据存储RAM。

(3) 串行I/O口方式使得引脚数量最少。

(4) DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需3根线。

(5) 宽范围工作电压2.0-5.5V。

(6) 工作电流为2.0A时,小于300nA。

(7) 功耗很低,保持数据和时钟信息时功率小于1mW。

6.2 方案论证6.3 系统硬件电路的设计……6.4 系统程序的设计#include<reg51.h>#include<lcd.h>#include<ds1302.h>#define uchar unsigned char #define uint unsigned intsbit key1=P3^0;//设置键sbit key2=P3^3;//调节键加sbit key3=P3^6;//设置键减uchar second,minute,hour;uchar day,week,month,year;uchar pos_flag=0;uchar keyflag=0;//按键标志位//函数声明uchar read1302(uchar add); //读地址、数据void write1302(uchar add,uchar date); //写入地址、数据void write_com_date(uchar add,uchar date);void init_lcd();void init_ds1302();void delay(uchar time);void Disp_1602(uchar x,uchar y,uchar *p);void keyscan();void settime();void settime(){write1302(0x8e,0x00); //关闭写保护 write1302(0x80,second/10*16+second%10); //秒write1302(0x82,minute/10*16+minute%10); //分write1302(0x84,hour/10*16+hour%10); //时write1302(0x86,day/10*16+day%10); //日write1302(0x88,month/10*16+month%10); //月write1302(0x8a,week/10*16+week%10); //星期write1302(0x8c,year/10*16+year%10); //年write1302(0x8e,0x80);}void display(){second=read1302(0x81);write_com_date(0xca,0x30+second%10);write_com_date(0xc9,0x30+second/10);minute=read1302(0x83);write_com_date(0xc7,0x30+minute%10); write_com_date(0xc6,0x30+minute/10);hour=read1302(0x85);write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10);day=read1302(0x87);write_com_date(0x8a,0x30+day%10);write_com_date(0x89,0x30+day/10);week=read1302(0x8b);write_com_date(0xcd,0x30+week%10);month=read1302(0x89);write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10);year=read1302(0x8d);write_com_date(0x84,0x30+year%10);write_com_date(0x83,0x30+year/10);}void keyscan() //修改调整时间日期{if(key1==0){delay(10);if(key1==0){pos_flag++;while(!key1);keyflag=1;switch(pos_flag){case 1:write_com(0x80+4); //年write_com(0x0f); //光标闪烁break;case 2:write_com(0x80+7); //月break;case 3:write_com(0x80+10); //日break;case 4:write_com(0x80+0x40+0x0d); //星期break;case 5:write_com(0x80+0x40+4); //时钟break;case 6:write_com(0x80+0x40+7); //分钟break;case 7:write_com(0x80+0x40+10); //秒钟break;default:break;}if(pos_flag==8) //pos_flag=8则退出调整{pos_flag=0;keyflag=0; //按键标识清零delay(5);settime();write_com(0x0c); // 关光标}}}if(key2==0) //调节加键,按下(低电平)就加{delay(15);if(key2==0){while(!key2);switch(pos_flag){case 1:year++;if(year==99)year=0;write_com_date(0x84,0x30+year%10);write_com_date(0x83,0x30+year/10);break;case 2:month++;if(month==13)month=1;write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10);break;case 3:day++;if((year%4==0)&&(month==2)) //闰年二月29天{if(day==30)day=1;}if((year%4!=0)&&(month==2)) //平年二月28天{if(day==29)day=1;}if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //大月31天{if(day==32)day=1;}if(month==4||month==6||month==9||month==11) //小月30天{if(day==31)day=1;}write_com_date(0x8a,0x30+day%10);write_com_date(0x89,0x30+day/10);break;case 4:week++;if(week==8)week=1;write_com_date(0xcd,0x30+week);break;case 5:hour++;hour=0;write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10);break;case 6:minute++;if(minute==60)minute=0;write_com_date(0xc7,0x30+minute%10);write_com_date(0xc6,0x30+minute/10);break;case 7:second++;if(second==60)second=0;write_com_date(0xca,0x30+second%10);write_com_date(0xc9,0x30+second/10);break;default:break;}}}if(key3==0){delay(15);if(key3==0){while(!key3);switch(pos_flag){case 1:year--;year=99;write_com_date(0x84,0x30+year%10);write_com_date(0x83,0x30+year/10);break;case 2:month--;if(month==0)month=12;write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10);break;case 3:day--;if((year%4==0)&&(month==2)) //闰年二月29天{if(day==0)day=29;}if((year%4!=0)&&(month==2)) //平年二月28天{if(day==0)day=28;}if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //大月31天{if(day==0)day=31;}if(month==4||month==6||month==9||month==11) //小月30天{if(day==0)}write_com_date(0x8a,0x30+day%10);write_com_date(0x89,0x30+day/10);break;case 4:week--;if(week==0)week=7;write_com_date(0xcd,0x30+week);break;case 5:hour--;if(hour==0)hour=24;write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10);break;case 6:minute--;if(minute==0)minute=59;write_com_date(0xc7,0x30+minute%10);write_com_date(0xc6,0x30+minute/10);break;case 7:second--;if(second==0)second=59;write_com_date(0xca,0x30+second%10);write_com_date(0xc9,0x30+second/10);break;default:break;.}}}}void main(){init_lcd();delay(2);init_ds1302();delay(2);Disp_1602(1,0,"20 - - week") ;Disp_1602(5,1,": :") ;while(1){if(keyflag==0){display();}keyscan();}}#ifndef _lcd_h_#define _lcd_h_#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2^0;sbit lcdrw=P2^1;sbit lcden=P2^2;void delay(uchar ms){uchar i;for(;ms>0;ms--)for(i=110;i>0;i--);}void write_com(uchar com) //写指令{lcden=0;lcdrs=0;lcdrw=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;}void write_data(uchar date) //写数据{lcden=0;lcdrs=1;lcdrw=0;delay(1);lcden=1;delay(1);lcden=0;}void write_com_date(uchar add,uchar date) {write_com(add);delay(1);write_data(date);}void Disp_1602(uchar x,uchar y,uchar *p) {while(*p){if(y==0) x|=0x80;else x|=0xc0;write_com(x);delay(5);write_data(*p);x++;p++;}}void init_lcd(){delay(15);write_com(0x38);delay(15);write_com(0x38);write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}#endif#ifndef _ds1302_h_#define _ds1302_h_#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit sclk=P1^1;sbit io=P1^0;sbit rst=P1^2;sbit ACC_7=ACC^7;void write1302(uchar add,uchar date) //写入地址、数据{uchar i;rst=0;sclk=0;rst=1;for(i=0;i<8;i++){sclk=0;io=add&0x01;add>>=1;sclk=1;}for(i=0;i<8;i++){sclk=0;io=date&0x01;date>>=1;sclk=1;}rst=0;}uchar read1302(uchar add) //读地址、数据{uchar i,dat1,dat2;rst=0;sclk=0;rst=1;for(i=0;i<8;i++){sclk=0;io=add&0x01;add>>=1;sclk=1;}for(i=0;i<8;i++){ACC_7=io;sclk=1;ACC>>=1;sclk=0;}rst=0;sclk=1;dat1=ACC;dat2=dat1/16;dat1=dat1%16;dat1=dat2*10+dat1;return dat1;}void init_ds1302(){if(((read1302(0x81))&0x0f)==1){write1302(0x8e,0x00); //关闭写保护 }}#endif……6.5调试及性能分析6.5.1 调试与测试……6.5.2 性能分析。

相关文档
最新文档