文档库 最新最全的文档下载
当前位置:文档库 › 51单片机,DS1302时钟,1602显示,可调时钟

51单片机,DS1302时钟,1602显示,可调时钟

51单片机,DS1302时钟,1602显示,可调时钟
51单片机,DS1302时钟,1602显示,可调时钟

基于proteus的51单片机仿真实例八十一、实时时钟芯片DS1302应用实例

1、DS1302引脚排列:如下图

引脚说明:

1)Vcc1:后备电源,VCC2:主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。2)X1、X2:振荡源,外接32.768kHz 晶振。

3)RST:复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。

4)I/O为串行数据输入输出端(双向)。

5)SCLK为时钟输入端。

2、DS1302的控制字节

DS1302 的控制字如下图所示。

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

3、数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见数据手册。

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

下面是其C程序(独家转售):

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCDIO P2

sbit rs=P3^0;

sbit rd=P3^1;

sbit lcden=P3^2;

sbit acc0=ACC^0; //移位时的第0位

sbit acc7=ACC^7; //移位时用的第7位

uchar second,minute,hour,day,month,year,week,count=0; uchar ReadValue,num,time;

uchar code table[]={" 2010-11-29 MON"};

uchar code table1[]={" 15:45:00 "};

uchar code table2[]= "THUFRISATSUNMONTUEWES";

sbit DATA=P0^1;

sbit RST=P0^2;

sbit SCLK=P0^0;

sbit menu=P3^5; //菜单

sbit add=P3^6; //加一

sbit dec=P3^7; //减一

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void delay1(uint z)

{

for(;z>0;z--);

}

void write_com(uchar com) {

rs=0;

rd=0;

lcden=0;

P2=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_date(uchar date) {

rs=1;

rd=0;

lcden=0;

P2=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init()

{

uchar num;

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

delay(5);

write_com(0x80);

for(num=0;num<15;num++)

{

write_date(table[num]);

delay(5);

}

write_com(0x80+0x40);

for(num=0;num<10;num++)

{

write_date(table1[num]);

delay(5);

}

}

void Write1302(uchar dat)

{

uchar i;

SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备

delay1(2); //稍微等待,使硬件做好准备

for(i=0;i<8;i++) //连续写8个二进制位数据

{

DATA=dat&0x01; //取出dat的第0位数据写入1302

delay(2); //稍微等待,使硬件做好准备

SCLK=1; //上升沿写入数据

delay1(2); //稍微等待,使硬件做好准备

SCLK=0; //重新拉低SCLK,形成脉冲

dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位 }

}

void WriteSet1302(uchar Cmd,uchar dat)

{

RST=0; //禁止数据传递

SCLK=0; //确保写数居前SCLK被拉低

RST=1; //启动数据传输

delay1(2); //稍微等待,使硬件做好准备

Write1302(Cmd); //写入命令字

Write1302(dat); //写数据

SCLK=1; //将时钟电平置于已知状态

RST=0; //禁止数据传递

}

uchar Read1302(void)

{

uchar i,dat;

delay(2); //稍微等待,使硬件做好准备

for(i=0;i<8;i++) //连续读8个二进制位数据

{

dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位 if(DATA==1) //如果读出的数据是1

dat|=0x80; //将1取出,写在dat的最高位

SCLK=1; //将SCLK置于高电平,为下降沿读出

delay1(2); //稍微等待

SCLK=0; //拉低SCLK,形成脉冲下降沿

delay1(2); //稍微等待

}

return dat; //将读出的数据返回

}

uchar ReadSet1302(uchar Cmd)

{

uchar dat;

RST=0; //拉低RST

SCLK=0; //确保写数居前SCLK被拉低

RST=1; //启动数据传输

Write1302(Cmd); //写入命令字

dat=Read1302(); //读出数据

SCLK=1; //将时钟电平置于已知状态

RST=0; //禁止数据传递

return dat; //将读出的数据返回

}

void Init_DS1302(void)

{

WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令

WriteSet1302(0x80,((0/10)<<4|(0%10))); //根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,((45/10)<<4|(45%10))); //根据写分寄存器命令字,写入分的初始值

WriteSet1302(0x84,((15/10)<<4|(15%10))); //根据写小时寄存器命令字,写入小时的初始值

WriteSet1302(0x86,((29/10)<<4|(29%10))); //根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,((11/10)<<4|(11%10))); //根据写月寄存器命令字,写入月的初始值 WriteSet1302(0x8c,((10/10)<<4|(10%10))); //nian

WriteSet1302(0x8a,((4/10)<<4|(4%10))); }

void DisplaySecond(uchar x)

{

uchar i,j;

i=x/10;

j=x%10;

write_com(0xc8);

write_date(0x30+i);

write_date(0x30+j);

}

void DisplayMinute(uchar x)

{

uchar i,j;

i=x/10;

j=x%10;

write_com(0xc5);

write_date(0x30+i);

write_date(0x30+j);

}

void DisplayHour(uchar x)

{

uchar i,j;

i=x/10;

j=x%10;

write_com(0xc2);

write_date(0x30+i);

write_date(0x30+j); }

void DisplayDay(uchar x) {

uchar i,j;

i=x/10;

j=x%10;

write_com(0x89);

write_date(0x30+i);

write_date(0x30+j); }

void DisplayMonth(uchar x) {

uchar i,j;

i=x/10;

j=x%10;

write_com(0x86);

write_date(0x30+i);

write_date(0x30+j);

}

void DisplayYear(uchar x)

{

uchar i,j;

i=x/10;

j=x%10;

write_com(0x83);

write_date(0x30+i);

write_date(0x30+j);

}

void DisplayWeek(uchar x)

{ uchar i;

x=x*3;

write_com(0x8c);

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

{

write_date(table2[x]);

x++;

}

}

void read_date(void)

{

ReadValue = ReadSet1302(0x81);

second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = ReadSet1302(0x83);

minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = ReadSet1302(0x85);

hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = ReadSet1302(0x87);

day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = ReadSet1302(0x89);

month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = ReadSet1302(0x8d);

year=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue=ReadSet1302(0x8b); //读星期

week=ReadValue&0x07;

DisplaySecond(second);

DisplayMinute(minute);

DisplayHour(hour);

DisplayDay(day);

DisplayMonth(month);

DisplayYear(year);

DisplayWeek(week);

}

void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num)

{

newval=ReadSet1302(newaddr); //读取当前时间

newval=((newval&0x70)>>4)*10+(newval&0x0f); //将bcd码转换成十进制

if(flag) //判断是加一还是减一

{

newval++;

switch(s1num)

{ case 1: if(newval>99) newval=0;

DisplayYear(newval);

break;

case 2: if(newval>12) newval=1;

DisplayMonth(newval);

break;

case 3: if(newval>31) newval=1;

DisplayDay(newval);

break;

case 4: if(newval>6) newval=0;

DisplayWeek(newval);

break;

case 5: if(newval>23) newval=0;

DisplayHour(newval);

break;

case 6: if(newval>59) newval=0;

DisplayMinute(newval);

break;

case 7: if(newval>59) newval=0;

break;

default:break;

}

}

else

{

newval--;

switch(s1num)

{ case 1: if(newval==0) newval=99;

DisplayYear(newval);

break;

case 2: if(newval==0) newval=12;

DisplayMonth(newval);

break;

case 3: if(newval==0) newval=31;

DisplayDay(newval);

break;

case 4: if(newval<0) newval=6;

DisplayWeek(newval);

break;

case 5: if(newval<0) newval=23;

DisplayHour(newval);

break;

case 6: if(newval<0) newval=59;

break;

case 7: if(newval<0) newval=59;

DisplaySecond(newval);

break;

default:break;

}

}

WriteSet1302((newaddr-1),((newval/10)<<4)|(newval%10)); //将新数据写入寄存器

}

//键盘扫描程序

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

void key_scan(void)

{ uchar miao,s1num=0;

if(menu==0)

{

delay(5);

if(menu==0)

{

while(!menu);

s1num++;

while(1)

{

if(menu==0)

{

delay(5);

if(menu==0)

{

while(!menu);

s1num++;

}

}

rd=0;

miao=ReadSet1302(0x81);

second=miao;

WriteSet1302(0x80,miao|0x80);

write_com(0x0f);//光标闪射

if(s1num==1)

{ year=ReadSet1302(0x8d);

write_com(0x80+4); //年光标

if(add==0)

{

delay(3);

if(add==0)

{ while(!add);

turn_val(year,1,0x8d,1);

}

}

if(dec==0)

{

delay(3);

if(dec==0)

{ while(!dec);

turn_val(year,0,0x8d,1);

}

}

}

if(s1num==2)

{

month=ReadSet1302(0x89);

write_com(0x80+7); //月光标

if(add==0)

{

delay(3);

if(add==0)

{ while(!add);

turn_val(month,1,0x89,2);

}

}

if(dec==0)

{

delay(3);

if(dec==0)

{ while(!dec);

turn_val(month,0,0x89,2);

}

}

}

if(s1num==3)

{ day=ReadSet1302(0x87);

write_com(0x80+10);//日光标

if(add==0)

{

delay(3);

if(add==0)

{ while(!add);

turn_val(day,1,0x87,3);

}

}

if(dec==0)

{

delay(3);

if(dec==0)

{ while(!dec);

turn_val(day,0,0x87,3); //写入日寄存器

}

}

}

if(s1num==4)

{ week=ReadSet1302(0x8b);

write_com(0x80+14); //星期光标

if(add==0)

{

delay(3);

if(add==0)

{ while(!add);

turn_val(week,1,0x8b,4);

}

}

if(dec==0)

{

delay(3);

if(dec==0)

{ while(!dec);

turn_val(week,0,0x8b,4);

}

}

}

if(s1num==5)

{ hour=ReadSet1302(0x85);

write_com(0x80+0x40+3); //时光标

if(add==0)

{

delay(3);

if(add==0)

{ while(!add);

turn_val(hour,1,0x85,5);

}

}

if(dec==0)

{

delay(3);

if(dec==0)

{ while(!dec);

turn_val(hour,0,0x85,5);

}

}

}

if(s1num==6)//调时间分

{ minute=ReadSet1302(0x83);

write_com(0x80+0x40+6);

基于DS1302的数码管显示数字钟

单片机原理课程设计 课题名称:基于DS1302的数码管显示数字钟 专业班级:电子信息工程 学生学号: 学生姓名: 指导教师: 设计时间:2010年6月21日--2010年6月25日

目录 摘要........................................................................................................................................................................ 1 设计任务和要求............................................................................................................................................ 2 方案论证........................................................................................................................................................ 3 系统硬件设计................................................................................................................................................ 3.1 系统总原理图 ................................................................................................................................ 3.2 元器件清单...................................................................................................................................... 3.3 PCB板图....................................................................................................................................... 3.4 Proteus仿真图 ............................................................................................................................... 3.5 分电路图及原理说明................................................................................................................... 3.5.1 主控部分(单片机MCS-51).............................................................................. 3.5.2 计时部分(实时时钟芯片DS1302).................................................................. 3.5.3 显示部分(共阳极数码管)................................................................................ 3.5.4 调时部分(按键)................................................................................................ 4系统软件设计................................................................................................................................................ 4.1 程序流程图..................................................................................................................................... 4.2 程序源代码........................................................................................................................................ 5心得体会........................................................................................................................................................ 6参考文献........................................................................................................................................................ 7结束语............................................................................................................................................................

单片机时钟电路的设计

单片机时钟电路的设计 单片机内部虽有振荡电路,但要形成时钟必须在外总附加电路。 MCS-51单片机的时钟产生方法有如下两种。 1内部时钟方式 利用芯片内部的振荡电路,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路便产生自激振荡,用示波器可以观察到XTAL2输出时的时钟信号。 最常用的内部时钟方式是采用外接晶体(在频率稳定性要求不高而希望尽可能廉价时,可选用陶瓷谐振器)和电容组成的并联谐振回路,HMOS型和CHMOS型单片机和并联,谐振回路及参数相同。 振荡晶体可在1. 2MHz~12MHz之间。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,CX1和CX2可在20p~100pF间取值,但在60PF~70PF时振荡器有较高的频率稳定性。 在设计PCB板时,晶体或陶瓷谐振器和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保护振荡电路稳定可靠的工作。为了提高温度稳定性,采用NPO电容。2外部时钟方式 外部时钟方式是利用外部振荡信号源直接接入XRAL1或XTAL2。由于HMOS和CHMOS单片机内部时钟进入的引脚不同(CHMOS型单片同由XTAL1进入,HMOS 型单片机由XTAL2进入),其外部振荡信号源的接入方法也不同。HMOS型单片机的外部振荡信号接至XTAL2,而内部的反相放大器的输入端XTAL1应接地。由于XTAL2端的逻辑电平不是TTL的,故建议外接一个上拉电阻。而XTAL2不可以接地。 在CMOS电路中,因内部时钟引入端取自反相放大器的输入端(即与非门的输入端),故采用外部振荡信号源时接线方式与HNOS型有所不同,外部信号接至XTAL1,而XTAL2不可以接地。外部振荡信号通过去一个2分频的触发器而成为一个时钟信号。故对外部信号的占空比没什么要求,但高电平持续时间和低电平持续时间应大于20ns.

简单51单片机数字时钟设计

题目:简单51单片机数字时钟设计 院系: 物理与电气工程学院 专业:自动化专业 班级:10级自动化 姓名:苏吉振 学号:2 老师:李艾华

引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。 单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 数字钟是采用数字电路实现对时,分,秒数字显示的计时装置,广泛用于个 人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。

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

摘要 电子时钟主要是利用了电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。对当前的电子时钟开发手段进行了比较和分析,最终确定了采用单片机技术实现的电子时钟。本次课题介绍了以AT89C51单片机为主控芯片的可调式电子时钟,功耗小,能在3V的低压工作。时钟芯片采用美国DALLAS公司提供的具有涓细电流低功耗的DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。显示部分采用LCD1602液晶显示,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,与普通数码管相比功耗较小,硬件连接简单,较直观。软件使用高级C语言编程,具有灵活的可移植性,同时该时钟具有按键可调的功能,能够对日期时间调整。本设计说明书首先介绍的是总体方案设计,接着是硬件设计,本部分详细的介绍了各模块的工作原理及相互的连接,再接着介绍了软件设计部分,最后是仿真调试。经仿真验证,该设计能满足所有的功能。 关键词:可调式;AT89C51;DS1302;C语言

ABSTRACT Electronic clock basically is to use the electronic technology will clock electronic, digital, has the clock accurate, small volume, friendly interface, can be expanded performance is strong and other characteristics, are widely used in life and work. On the current development of the electronic clock means were compared and analyzed, finally determined by single chip microcomputer technology to the electronic clock. This subject introduces the AT89C51 as the controller chip adjustable electronic clock, power consumption is small, can be in 3 V of low-pressure work. The clock chip adopt American DALLAS company has Juan fine current DS1302 of low power consumption. It can be to year, month, day, Sunday, when, minutes and seconds for the time, also has a leap year compensation and other functions, and the DS1302 long service life and small error. Show LCD1602 part adopts LCD display, LCD screen shows powerful, can show a large text, graphics, show diversity, clearly visible, compared with common digital tube power consumption is small, hardware connect a simple, more intuitive. Senior software use the C programming language, has the flexible portability, and the clock is the key adjustable function to adjust to a time and date. The design manual introduced is first overall design, then the hardware design. This part describes in detail the modules and working principle of the mutual connection, then introduces the design of the software in part, and finally the simulation test. The simulation results, this design can meet all functions. Keywords: adjustable;AT89C51;DS1302;C language

基于51系列单片机及DS1302时钟芯片的电子时钟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世纪末,电子技术获得了飞速的发展。在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化程度,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂容易使人忘记当前的时间。然而遇到重大事情的时候,一旦忘记时间,就会给自己或他人造成很大麻烦。平时我们要求上班准时,约会或召开会议必然要提及时间;火车要准点到达,航班要准点起飞;工业生产中,很多环节都需要用时间来确定工序替换时刻。所以说能随时准确的知道时间并利用时间,是我们生活和工作中必不可少的[1]。 电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装臵,广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。

基于51单片机的实时时钟设计报告

课程设计(论文)任务书 信息工程学院信息工程专业(2)班 一、课程设计(论文)题目嵌入式课程设计 二、课程设计(论文)工作自 2014 年 6 月 9 日起至2014年 6月15日止。 三、课程设计(论文) 地点: 5-402 单片机实验室 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握单片机各功能模块的基本工作原理; (2)培养学生单片机应用系统的设计能力; (3)使学生能够较熟练地使用proteus工具完成单片机系统仿真。 (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)基本要求: (1)分析所设计系统中各功能模块的工作原理; (2)选用合适的器件(芯片); (3)提出系统的设计方案(要有系统电路原理图); (4)对所设计系统进行调试。 2)创新要求: 在基本要求达到后,可进行创新设计,如改善单片机应用系统的性能。 3)课程设计论文编写要求 (1)要按照书稿的规格打印撰写论文。 (2)论文包括目录(自动生成)、摘要、正文、小结、参考文献、附录等。 (3)论文装订按学校的统一要求完成。 4)答辩与评分标准: (1)完成原理分析:20分; (2)完成设计过程:30分; (3)完成调试:20分; (4)回答问题:20分; (5)格式规范性(10分)。

5)参考文献: (1)张齐.《单片机原理与嵌入式系统设计》电子工业出版社 (2)周润景.《PROTUES入门实用教程》机械工业出版社 (3)任向民.《微机接口技术实用教程》清华大学出版社 (4)https://www.wendangku.net/doc/c18954812.html,/view/a5a9ceebf8c75fbfc77db2be.html 6)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 系统设计与调试 4 实验室 撰写论文2图书馆、实验室 学生签名: 2014 年6 月9日 课程设计(论文)评审意见 (1)完成原理分析(20分):优()、良()、中()、一般()、差(); (2)设计分析(30分):优()、良()、中()、一般()、差(); (3)完成调试(20分):优()、良()、中()、一般()、差(); (4)回答问题(20分):优()、良()、中()、一般()、差(); (5)格式规范性(10分):优()、良()、中()、一般()、差(); 评阅人:职称: 2014 年6 月15 日

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

目录 0 前言 (1) 1 总体方案设计 (2) 2 硬件电路设计 (2) 3 软件设计 (5) 4 调试分析及说明 (7) 5 结论 (9) 参考文献 (9) 课设体会 (10) 附录1 电路原理 (12) 附录2 程序清单 (13)

电子时钟的设计 许山沈阳航空航天大学自动化学院 摘要:传统的数字电子时钟采用了较多的分立元器件,不仅占用了很大的空间而且利用率也比很低,随着系统设计复杂度的不断提高,用传统时钟系统设计方法很难满足设计需求。 单片机是集CPU、RAM、ROM、定时器/计数器和多种接口于一体的微控制器。它体积小、成本低、功能强,广泛应用于智能产品和工业自动化上。而51系列的单片机是各单片机中最为典型和最有代表性的一种。,本次设计提出了系统总体设计方案,并设计了各部分硬件模块和软件流程,在用C语言设计了具体软件程序后,将各个模块完全编译通过过后,结果证明了该设计系统的可行性。该设计给出了以AT89C2051为核心,利用单片机的运算和控制功能,并采用系统化LED显示模块实时显示数字的设计方案,适当地解决了实际生产和日常生活中对计时高精确度的要求,因此该设计在现代社会中具有广泛的应用性。 关键字:AT89C2051,C语言程序,电子钟。 0前言 利用51单片机开发电子时钟,实现时间显示、调整和闹铃功能。具体要求如下: (1)按以上要求制定设计方案,并绘制出系统工作框图; (2)按要求设计部分外围电路,并与单片机仿真器、单片机实验箱、电源等正确可靠的连接,给出电路原理图; (3)用仿真器及单片机实验箱进行程序设计与调试;

(4)利用键盘输入调整秒、分和小时时刻,数码管显示时间; (5)实现闹钟功能,在设定的时间给出声音提示。 1总体方案设计 该电子时钟由89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。闹钟和时钟的时分秒的调节是由一个按键控制,而另外一个按键控制时钟和闹钟的时间的调节。 图1 系统结构框图 该电子时钟由STC89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ,使用的定时器/计数器工作方式0,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时。没有按键按键按下时,时钟正常运行,当按下调节时钟按键K1,就会关闭时钟,当按下闹钟按键K3时时钟就会进入设置时间界面,但是时钟不会停止工作,按K2键,,就可以对时钟和闹钟要设置的时间进行调整。 2硬件电路设计

51单片机DS1302日历时钟程序

51 单片机ds1302 时钟芯片 #define uint unsigned int #define uchar unsigned char sbit lcdrs = P1^0; sbit lcdrw = P1^1; sbit lcden = P1^2; sbit key0 = P2^0;//功能键,选择时分秒 sbit key1 = P2^1;//加1键 sbit key2 = P2^2;//减1键 sbit key4 = P2^4; sbit clk_1302 = P1^5; //1302芯片位定义sbit io_1302 = P1^6; sbit rst_1302 = P1^7; uchar bdata dat; sbit dat0 = dat^0; sbit dat7 = dat^7; uchar key0_count;//按键0被按的次数(0~3) uchar flag; char hour,minute,second; uchar table_date[] = "2009-4-12 Mon"; uchar table_time[] = "00:00:00"; /****** 函数申明********/ void write_cmd_1602(uchar cmd); void write_data_1602(uchar dat); void write_add(uchar add,uchar dat); void init1602(); void delay(uint z); uchar reverse(uchar c); void keyscan(); void init(); void RTC_initial (); void wr_1302(uchar wr_data); uchar rd_1302(void); uchar uc_R1302(uchar ucAddr); void v_W1302(uchar ucAddr, uchar ucDa); 主程序 #include

AT89C51单片机时钟电路

工程设计 AT89C51单片机时钟电路 工程设计 目录 任务书 摘要 前言 说明书 第一章电路原理分析 1-1 显示原理 1-2 数码管结构及代码显示 1-3 键盘及读数原理 1-4 连击功能的实现 第二章程序设计思想和相关指令介绍 2-1 数据与代码转换 2-2 计时功能的实现与中断服务程序 2-3 时间控制功能与比较指令 2-4 时钟误差的分析 附录A 电路图 附录B 存储单元地址表 附录C 输入输出口功能分配表 附录D 定时中断程序流程图 附录F 调时功能流程图 附录G 程序清单 摘要

单片计算机即单片微型计算机。(Single-Chip Microcomputer ),是集 CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51 单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 前言 本文通过用对一个能实现定时,时钟,日历显示功能的时间系统的设计学习,详细介绍了51 单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理、从而达到学习,了解单片机相关指令在各方面的应用。系统由AT89C51、LED 数码管、按键、二极管等部分构成,能实现时钟日历的功能:能进行时、分、秒的显示。也具有日历计算、显示和时钟,日历的校准、定时时间的设定,实现三路开关定时输出等功能。文章后附有电路图,程序清单,各数据存储单元的所在地址,输入输出口对应表。以供读者参考。因作者本人也是个初学者,水平有限,难免有疏落不足之处,敬请老师和同学能给与批评正。 说明书 系统由AT89C51、LED 数码管、按键、发光二极管等部分构成,能实现时间的调整、定时时间的设定,输出等功能。系统的功能选择由SB0、SB1、SB2、SB3、SB4 完成。其中SB0为时间校对,定时器调整功能键,按SB 0 进入调整状态。SB1 为功能切换键。第一轮按动SB1 依次进入一路、二路、三路定时时间设臵提示程序,按SB3 进入各路定时调整状态。定时时间到,二极管发亮。到了关断时间后灭掉。如果不进入继续按SB1 键,依次进入时间?年?位校对、?月?位校对、?日?位校对、?时?位校对、?分?位校对、?秒?位校对状态。不管是进入那种状态,按动SB2 皆可以使被调整位进行不进位增量加1 变化。各预臵量设臵完成后,系统将所有的设臵存入RAM 中,按SB1 退出调整状态。上电后,系统自动进入计时状态,起始于? 00?时? 00?分。SB4 为年月日显示转换键,可使原来显示时分秒转换显示年月日。 二、电路原理分析 1. 显示原理 电原理图见附图1。由6 个共阴极的数码管组成时、分、秒的显示。P0 口的8 条数据线P0.0 至P0.7 分别与两个CD4511 译码的ABCD 口相接,P2 口的P2.0 至P2.2 分别通过电阻R10 至R13 与VT1 至VT3 的基极相连接。这样通过P0 口送出一个存储单元的高位、低位BCD显示代码,通过P2 口送出扫描选通代码轮流点亮LED1 至LED6,就会将要显示的数据在数码管中显示出来。从P0 口输出的代码是BCD 码,从P2 口输出的就是位选码。 2. 数码管结构及代码显示

51单片机简易可调的数码管电子钟程序

#include sbit KEY1=P3^0; sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit LED=P1^2; code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9 unsigned char StrTab[8]; //定义缓冲区 unsigned char minute=30,hour=12,second; //定义并且初始化值12:30:00 void delay(unsigned int cnt)//延时函数 { while(--cnt); } void Displaypro(void) { StrTab[0]=tab[hour/10]; //显示正常时间 StrTab[1]=tab[hour%10]; StrTab[2]=0xBF; StrTab[3]=tab[minute/10]; StrTab[4]=tab[minute%10]; StrTab[5]=0xBF; StrTab[6]=tab[second/10]; StrTab[7]=tab[second%10]; } main()//主函数 { TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时 TH0=0xd8; TL0=0xf0; ET0=1; TR0=1; TMOD |=0x10; //定时器1用于动态扫描 TH1=0xF8; TL1=0xf0; ET1=1; TR1=1; EA =1; Displaypro();

电子时钟设计(DS1302)基于51单片机

安康学院单片机课程设计报告书 课题名称:电子时钟的设计(DS1302) 姓名: 学号: 院系:电子与信息工程系 专业:电子信息工程 指导教师: 时间:2012年6月

课程设计项目成绩评定表设计项目成绩评定表

课程设计报告书目录 设计报告书目录 一、设计目的 (1) 二、设计思路 (1) 三、设计过程 (1) 3.1系统设计结构图 (1) 3.2 MCU微控制器电路 (2) 3.3 LCD液晶显示电路 (4) 3.4 实时时钟电路 (5) 3.5 复位电路 (5) 3.6 晶振电路 (6) 四、系统调试与结果 (6) 五、主要元器件与设备 (6) 六、课程设计体会 (7) 七、参考文献 (7)

一、设计目的 1、掌握电子时钟的基本工作方式。 2、进一步熟悉DS1302芯片的特性。 3、通过使用各基本指令,进一步熟练掌握单片机的编程和程序调试。 二、设计思路 利用AT89C52的特点及DS1302的特点,设计一种基于DS1302单片机控制,再利用数码管显示的数字钟。本系统硬件利用AT89S52作为CPU进行总体控制,通过DS1302时钟芯片获取准确详细的时间(年、月、日、周、日、时、分、秒准确时间),对时钟信号进行控制,同时利用液晶显示芯片LCD1602对时间进行准确显示年、月、日、周、日、时、分、秒。 三、设计过程 3.1系统设计结构图 图1系统设计结构图

图2 系统软件流程图 根据系统设计的要求和设计思路,确定该系统的系统设计结构图。如图1所示。硬件电路主要由MCU微处理控制器单元、DS1302时钟电路、储存器、复位电路、晶振电路、数码管显示模块构成。 3.2MCU微控制器电路 AT89S52作为系统的核心控制元件,只有它能正常工作后才能使其它的元件进入正常工作状态。因此,下面对AT89S52进行必要的说明,AT89S52的管脚如图3所示。

51单片机作的电子钟程序及电路图

51单片机作的电子钟程序在很多地方已经有了介绍,对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分,计算部分,时钟调整部分构成。 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。 开始程序定义了秒,十秒,分,十分,小时,十小时,共6位的寄存器,分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。

以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 中断入口程序 ;; (仅供参考) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ORG 0000H ;程序执行开始地址 LJMP START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回 ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTTO执行 ORG 0013H ;外中断1中断程序入口

RETI ;外中断1中断返回 ORG 001BH ;定时器T1中断程序入口 LJMP INTT1 ;跳至INTT1执行 ORG 0023H ;串行中断程序入口地址 RETI ;串行中断程序返回 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 主程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; START: MOV R0,#70H ;清70H-7AH共11个内存单元MOV R7,#0BH ;clr P3.7 ; CLEARDISP: MOV @R0,#00H ; INC R0 ; DJNZ R7,CLEARDISP ; MOV 20H,#00H ;清20H(标志用) MOV 7AH,#0AH ;放入"熄灭符"数据 MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值 MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器 MOV R4,#14H ;1秒定时用初值(50M S×20)START1: LCALL DISPLAY ;调用显示子程序 JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序SJMP START1 ;P3.7口为1时跳回START1 SETMM1: LJMP SETMM ;转到时间调整程序SETMM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1秒计时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;T0中断服务程序 INTT0: PUSH ACC ;累加器入栈保护 PUSH PSW ;状态字入栈保护

推荐-基于AT89S51单片机的扩展时钟系统设计 精品

基于AT89S51单片机的扩展时钟系统设计 摘要:随着人类科技文明的发展,人们对于时钟的要求在不断地提高,时钟已不仅仅被看成一种来显示时间的工具。在很多实际应用中它还需要能够实现更多其他的功能。时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向。本文正式基于这种方向,以AT89S51单片机为核心,结合新型时钟芯片DS12887,并利用液晶LCD1602显示数字时钟。 关键字:AT89S51单片机;时钟芯片DS12887;液晶LCD1602 Abstract:With the development of the technological society,requirements for clock is constantly improving,the clock has not only been seen as a time to show tools.It also needs to be able to achieve more in many practical applications.Digital clock, multi-functional modern clock production has bee the dominant design direction.In this paper, formally based on this direction,AT89S51 microcontroller as the core,bined with the new clock chip DS12887,And LCD1602 LCD display digital clock。 Key words:AT89S51 microcontroller;Time clock DS12887;LCD1602 1 引言

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

电子时钟实验报告 全部代码在文档末尾:51单片机,LCD1602液晶显示屏平台下编程实现,可直接编译运行 目录: 一,实验目的 (1) 二,实验要求 (2) 三,实验基本原理 (2) 四,实验设计分析 (2) 五,实验要求实现 (3) A.电路设计 (3) 1. 整体设计 (3) 2. 分块设计 (4) 2.1 输入部分 (4) 2.2 输出部分 (5) 2.3 晶振与复位电路 (5) B.程序设计 (6) B.1 程序总体设计 (6) B.2 程序主要模块 (6) 五.实验总结及感想 (8) 一,实验目的 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以电子钟是以其小巧,价格低廉,走时精度高,使用方便,

功能多,便于集成化而受广大消费的喜爱,得到了广泛的使用。 1. 学习8051定时器时间计时处理、按键扫描及LCD液晶显示的设计方法。 2. 设计任务及要求利用实验平台上LCD1602液晶显示屏,设计带有闹铃功能的数字时钟 二,实验要求 A.基本要求: 1. 在LCD1602液晶显示屏上显示当前日期,时间。 2. 利用按键可对时间及闹玲进行设置,并可显示设置闹玲的时间。闹玲时间到蜂鸣器发出 声响,一分钟后闹铃停止。 B.扩展部分: 1.日历功能(能对年,月,日,星期进行显示,分辨平年,闰年以及各月天数,并调整)实现年月日时分秒的调整,星期准确的随着日期改变而改变进行显示。 2.定时功能(设定一段时间长度,定时到后,闹铃提示) C.可扩展部分: 1.闹铃重响功能(闹铃被停止后,以停止时刻开始,一段时间后闹铃重响,且重响时间的间隔可调) 2.可进行备忘录提示,按照年月日,可在设定的某年某月进行闹铃提示。 三,实验基本原理 利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20,每中断一次中断计数初值加1,当减到20时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了,是否一天到了,是否一个月到了,是否一年到了。 将时间在LCD液晶屏上显示,降低了程序的编写难度。LCD的固定显示特性是我们省去了数码管的动态扫描显示。 四,实验设计分析 针对要实现的功能,采用AT89S52单片机进行设计,AT89S52 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结

基于单片机DS1302的时钟万年历(带闹钟)

#include #define uchar unsigned char #define uint unsigned int sbit lcdws=P2^1; //1602管脚定义 sbit lcden=P2^0; sbit lcdrs=P2^2; sbit key1=P2^3; //闹钟设置键 sbit key2=P2^4; sbit key3=P1^5;//功能键定义 sbit key4=P1^6;//增大键定义 sbit key5=P1^7;//减小键定义 uchar shi,fen,miao,ashi,afen,amiao,year,month,day,week; uchar s1num=0,s1num2=0,temp; bit flag; float f_temp; uint i,d; uchar code table2[]={0x20,0x20,0x2e,0x20,0xdf,0x43}; uchar code table[]="20 - - "; uchar code table1[]=" : : "; sbit ds=P1^0;//ds18b20信号线 sbit beep=P1^4; //蜂鸣器管脚定义 sbit ACC_7 = ACC^7; //位寻址寄存器定义 sbit SCLK = P1^2; // DS1302时钟信号sbit DIO= P1^1; // DS1302数据信号sbit CE = P1^3; //地址、数据发送子程序 //void delay2(uint ms) // { // uchar t; // while(ms--); for(t=0;t<120;t++); //} // void playmusic() // { // uint i2=0,j2,k2; // while(jiepai[i2]!=0||song[i2]!=0) // { // for(j2=0;j2

相关文档
相关文档 最新文档