当前位置:文档之家› 51单片机时钟显示+温度显示

51单片机时钟显示+温度显示

51单片机时钟显示+温度显示
51单片机时钟显示+温度显示

南华大学

计算机技术综合课程

设计报告

学院:湘南学院

题目:单片机LCD时钟显示和温度测量学生姓名:

专业班级:

指导老师:

教研室主任:

2012年6月29日

一、概述:

本次设计的LCD时钟显示和温度测量系统是由中央控制器、温度检测器、时钟系统、显示器及键盘部分组成。控制器采用单片机STC89C51RC,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶1602作为显示器,用蜂鸣器构成闹铃模块。单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器1602显示;键盘是用来调整时间的。

二、方案设计及方案论证

1. 时钟显示和温度测量的总体设计思路

按照系统的设计功能要求,本时钟显示和温度测量系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整及显示。获得时钟显示和温度测量数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。

2.时钟显示和温度测量系统方案论证

2.1时钟系统方案选择

方案1:通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;

方案2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。

虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。综上所述,选择方案2。

本次设计采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。它采用主电源和备用电源双电源供电。它的工作电压范围2.0~5.5V,在2.2V时,小于300nA。它内部含有31个字节的静态RAM,可提供用户访问。

DS1302可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求。内部的寄存器为我们调时,闹钟定时提供了寄存空间。备用用电源也实现了当系统断电后,时钟仍然可以保持。而且它是串行接口,与单片机通信所需要的接口少。

2.2 显示系统的方案比较

方案1:用数码管或LED显示。

方案2:用液晶1602显示。

方案3:用液晶12864显示。

时钟和温度的显示可以用数码管或LED,而且价格便宜。但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用12864显示略想复杂,用1602液晶显示可以完全满足本次设计的数据显示要求。

2.3 温度系统方案选择

方案1:用热敏电阻等测温元件测出电压,再转换成对应的温度。需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。

方案2:用DS18B20直接测温。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

经比较,我们选择方案2。

温度实现只能通过外部的温度传感器来实现。经上网查阅,DS18b20体积小,只有3只脚,电路接法简单。精度为0.5°C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。

2.4 键盘控制方案选择

方案1:购买集成键盘,采用矩阵形式连接。

方案2:购买单个复位开关做成键盘。

虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。单片机的IO口对于我们的设计绰绰有余。通常我们选用价格便宜单个复位开关做成键盘。

3.时钟显示和温度测量系统总体设计

初步确定设计系统由单片机主控模块、时钟模块、测温模块、闹铃模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如下图所示。

图1:电路系统框图 三、硬件电路单元设计 1、单片机最小系统设计

1.1复位电路:

复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。如下图所示:

图2:复位电路

1.2 晶振电路

晶振电路选取条件:晶振12M ,电容20pF 到30pF ,本电路选取20pF 。晶振电路原理如下图:

主 控 器 件STC89C51

DS18B20 温度采集系统

DS1320 时间采集系统

1602 显示系统

蜂鸣器 闹铃系统

键盘 控制系统

图3:晶振电路

2、时钟系统设计

DS1302时钟电路晶振选用3.2678KHZ,原理图如下:

图4:基于ds1302时钟系统设计电路

3、温度系统设计

DS18B20温度传感DQ端接单片机P1.3口,电路原理图如下:

图5:基于DS18b20温度系统设计电路

4、液晶显示系统设计

1602液晶显示电路由1K电阻和10K的精密电阻组成,控制端接P1.0、P1.1、P1.2口,数据端接P2口,电路图如下:

图6:液晶1602显示电路

把15脚的10K电阻改成1K电阻

5、蜂鸣器系统设计

蜂鸣器闹铃电路由蜂鸣器跟1K限流电阻组成,电路图如下:

图7:蜂鸣器电路

6、电源模块

本系统采用USB供电,用发光二极管显示通电状况,电源电源电路如下:

图8:电源电路

7、时间调节模块

本系统采用3个按键调节时间。S1是菜单键,选择要调节的位;S2按一下表示加一;S3按一下表示减一。电路如下:

图9:时钟调节电路

四、软件调试

1、程序流程图如下:

图10:程序流程图2、程序见附录

五、硬件调试

1、原理图如下:

2、PCB图如下:

图12:PCB图

其中红色部分为跳线;

3、实物测试

板子制作完成后上电测试发现电源灯没有显示,用万用表测量之后发现精密

电阻接线错误,导致VCC与GND直接连通。修正之后发现电源指示灯还是没有亮,测量USB两端电压为-4.88V,卸掉USB口,插上排针用杜邦线连接单片机的VCC和GND之后,电源灯能够点亮,液晶能够驱动,但是亮度不够。测量液晶两端的电压发现只有2.5V,用导线将液晶背光的VCC直接接上电源VCC 后,液晶亮度正常。将程序下载之后经过几次调试和修改,最终实现了想要达到的效果。

六、总结与体会

在开始本次课程设计前花费了十多天的时间认真学习了单片机,通过书本和视频的学习,对单片机有了进一步的掌握并学会C51编程的一些方法。这对于完成本次课程设计提供了很大的帮助。

从这次的课程设计中,我真真正正的意识到,在写程序时,逻辑思维要清晰,要有耐心。同时要巧妙的利用C语言的可移植性,这对写程序有很大的帮助。

参考文献:

1.郭天祥单片机学习板配套资料

2.《51单片机C语言教程》郭天祥主编电子工业出版社

3.《C语言程序设计》尹业安,白燕主编国防科技大学出版社

4.《单片机原理与应用及C51程序设计》谢维成杨加国主编清华大学出版社

程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCDIO P2

sbit DQ=P1^3;//ds18b20与单片机连接口

sbit rs=P1^0;

sbit rd=P1^1;

sbit lcden=P1^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;

uint tvalue;//温度值

uchar tflag;

uchar code table[]={" 2012-06-29 FIR"};

uchar code table1[]={" 08:45:00 000.0C"};

uchar code table2[]= "FRISATSUNMONTUEWESTUR";

uchar data disdata[5];

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) //lcd写命令指令:RS=L,RW=L, D0~D7=指令码,E=高脉冲

{

rs=0;

rd=0;

lcden=0;

P2=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_date(uchar date) //lcd写数据指令:RS=H,RW=L, D0~D7=数据,E=高脉冲

{

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); //显示模式设置,默认为0x38,不用变。

write_com(0x0c); //显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪

write_com(0x06); //设置光标状态默认0x06,为读一个字符光标加1.

write_com(0x01); //显示清屏,将上次的内容清除,默认为0x01.

write_com(0x80); //设置初始化数据指针,是在读指令的操作里进行的delay(5);

write_com(0x80); //初始化显示时间(table table1中的内容)

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

{

write_date(table[num]);

delay(5);

}

write_com(0x80+0x40);

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

{

write_date(table1[num]);

delay(5);

}

}

void Write1302(uchar dat) //写8bit数据

{

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) //向cmd相应地址中写入一个字节的数据

{

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

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

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

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

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

Write1302(dat); //写数据

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

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

}

uchar Read1302(void) //读8bit数据

{

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) //从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,((8/10)<<4|(8%10))); //根据写小时寄存器命令字,写入小时的初始值

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

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

WriteSet1302(0x8c,((12/10)<<4|(12%10))); // 根据写年寄存器命令字,写入年的初始值

WriteSet1302(0x8a,((1/10)<<4|(1%10))); // 根据写星期寄存器命令字,写入星期的初始值

}

void DisplaySecond(uchar x) //显示秒

{

uchar i,j;

i=x/10;

j=x%10;

write_com(0xc7);

write_date(0x30+i);

write_date(0x30+j);

}

void DisplayMinute(uchar x) //显示分{

uchar i,j;

i=x/10;

j=x%10;

write_com(0xc4);

write_date(0x30+i);

write_date(0x30+j);

}

void DisplayHour(uchar x) //显示小时

{

uchar i,j;

i=x/10;

j=x%10;

write_com(0xc1);

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); //从DS1302读取时间秒

ReadValue = ReadSet1302(0x83);

minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取时间分

ReadValue = ReadSet1302(0x85);

hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取时间小时

ReadValue = ReadSet1302(0x87);

day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取日期日

ReadValue = ReadSet1302(0x89);

month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取日期月

ReadValue = ReadSet1302(0x8d);

year=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //从DS1302读取日期年

ReadValue=ReadSet1302(0x8b);

week=ReadValue&0x07; //从DS1302读星期

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) //刷新时间(将改变的时间显示到LCD上)

{

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;

DisplaySecond(newval);

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;

DisplayMinute(newval);

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); //月光标

{

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)

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 ;状态字入栈保护

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

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

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

基于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单片机的电子时钟设计源程序

#include unsigned char DispBuf[6]; //时间显示缓冲区 unsigned char Disdate[6]; //日期显示缓冲区 unsigned char DisSec[6]; //秒表缓冲区 struct //设定时间结构体 { unsigned char Hour; unsigned char Min; unsigned char Sec; }Time; struct //设定日期结构体 { unsigned char Year; unsigned char Month; unsigned char Days; }Date; struct //设定毫秒结构体 { unsigned char Minite; unsigned char Second; unsigned char MilliSec; }Millisecond; unsigned char point=0; unsigned char point1=0; unsigned char point2=0; unsigned char Daymount; unsigned char Daymount1; unsigned char T0_Int_Times=0; //中断次数计数变量 unsigned char Flash_flag=0; //闪烁标志,每半秒闪烁 unsigned char Flash_flag1=0; //闪烁标志,每半秒闪烁 unsigned char DisPlay_Back=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char DisPlay_Back1=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char i,j; unsigned char SetMillisecond; //启动秒表 code unsigned char LEDCode[]={0x01,0xd7,0x22,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80}; //数码管显示代码 code unsigned char ErrorLEDCode[]={0x01,0xe7,0x12,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80};//绘制错误图纸的数码管显示代码 void DisPlayBuf(); void ChangeToDispCode(); void ChangeToDispCode1(); void changedate(); // 调日期 void displaydate(); // 显示日期 void makedays(); //确定每个月的日期 void runSec();

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引脚结

51单片机的电子时钟设计

基于51单片机的电子时钟设计 摘要:本文介绍了基于51单片机的电子时钟的设计,从硬件和软件两个方面给出了具体实现过程。该时钟的设计采用功能分块的思想方法,将硬件电路划分为开关电路,显示驱动电路和数码管电路等若干独立模块,而软件的实现则由闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等组成。文中给出了各个模块的电路图,并用Proteus的ISIS软件对电子时钟系统的各个功能进行了仿真,并给出了相应的仿真结果图像。 关键词:单片机;电子时钟;键盘控制 Electronic Clock Design Based on 51 Single-chip *** Shandong Institute of Business and Technology , 264005 Abstract:This paper introduces the electronic clock design based on 51 single-chip microcomputer, and it provides us specific implementation process from aspects of hardware and software. This clock is designed by the method of function blocks. In hardware, it’s circuit is divided into switch block, display drive block and digital control block. However, the software consist of the program of alarm clock, time display, date display, stopwatch display, time adjust, timing adjustment, the alarm clock adjustment, time delay and so on. Circuit diagrams of each module is also given and the corresponding simulation image of this clock produced by software of Proteus is also showed in this paper. Key words:single chip microcomputer; electronic clock;Keyboard control 一,引言 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,

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();

基于51单片机的数字时钟设计_毕业设计

基于51单片机的数字时钟设计 目录 摘要 (1) Abstract (2) 第一章绪论 (3) 1.1 数字时钟设计的背景 (3) 第二章AT89C51单片机简介 (3) 2.1 单片机介绍 (3) 2.2 单片机的应用特点 (4) 2.3 单片机的应用领域 (4) 2.4 单片机的中断与定时系统 (4) 2.4.1 MCS-51单片机中断系统 (4) 2.4.2 MCS-51 单片机的定时器/计数器 (6) 2.4.3 MCS-51定时器/计数器的四种工作方式 (6) 2.5 AT89C51引脚功能介绍 (7) 第三章设计方案 (8) 3.1 主程序 (8) 3.2 数码管显示模块 (9) 3.3 定时器计数器T0中断服务程序 (9) 3.4按键处理模块 (10) 第四章硬件电路设计 (10) 4.1 复位电路 (10) 4.2 时钟电路 (11) 4.3 按键电路 (12) 4.4 数码管显示电路 (13) 4.5 电源电路设计 (13) 第五章软件设计与程序代码 (14) 5.1 软件选择与介绍 (14) 5.1.1 软件介绍 (14) 5.1.2 Proteus7.8的特点 (15) 5.2 软件仿真电路全图 (15) 5.3 源程序代码 (16) 第六章结论 (20) 参考文献 (21) 致谢 (22)

摘要 近几年,单片机在各个领域得到广泛的应用。从工业到人们的日常生活,大部分的科技产品都是通过单片机来控制。在它问世之前,自动控制设备得不到广泛的应用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。在第一台微处理器成功研制不久,第一个单片机就问世了。因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。 本设计利用Atmel公司的AT89C52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用C语言进行软件编程,并用Proteus软件进行演示、验证。主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机80C51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机的数字电子时钟。它的计时周期为24小时,显满刻度为“23时59分59秒”,且配有4个独立键盘,可以灵活地调节时间和日期,并具有一定的扩展性。 关键词:单片机,数字时钟,动态显示,LED数码管显示,独立按键

51单片机数码管时钟程序

本人初学51,编写简单时钟程序。仅供参考学习 #include #define uint unsigned int #define uchar unsigned char Uchar code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1 }; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0xef}; void delay(uint); unsigned long i,num,t=1; void main() { TMOD=0X01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1; while(1) { num=i/20;//i为秒位 if(i==1728000)//一天大概是这个秒吧,,,应该是,呵呵。就是世间到24时就归零。 i=0; //也可用下面这个部分来代替上面的。 /*if(i==20) { i=0; num++; if(num==5184000) num=0; }*/ //num=9; P2=7;//P2口为数码管控制端,我的是38译码器控制,就直接对其赋值来控制时,分,秒的显示; P0=table[i%100%10]; delay(t); P2=6; P0=table[i%100/10]; delay(t); P0=table_d[(num%60)%10]; P2=5; delay(t); P0=table[(num%60)/10]; P2=4;

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

第一部分设计任务和要求 1.1 单片机课程设计内容 利用STC89C51单片机和LCD1602电子显示屏实现电子时钟,可由按键进行调时和12/24小时切换。 1.2 单片机课程设计要求 1.能实现年、月、日、星期、时、分、秒的显示; 2.能实现调时功能; 3.能实现12/24小时制切换; 4.能实现8:00—22:00整点报时功能。 1.3 系统运行流程 程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,在判断是否有按键按下。若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。若没到则循环执行。计时中断服务程序完成秒的计时及向分钟、小时的进位和星期、年、月、日的进位。调时闪烁中断服务程序用于被调单元的闪烁显示。调时程序用于调整分钟、小时、星期、日、月、年,主要由主函数组成通过对相关子程序的调用,如图所示。实现了对时间的设置和修改、LCD显示数值等主要功能。相关的调整是靠对功能键的判断来实现的。 第二部分设计方案 2.1 总体设计方案说明 1.程序设计及调试 根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。 2.硬件焊接及调试 根据仿真电路图完成电路板的焊接,并进行软、硬件的调试,只到达到预期目的。

3.后期处理 对设计过程进行总结,完成设计报告。 2.2 单片机系统方框图 2.2 单片机系统流程图 主流程图键盘扫描流程图

时钟流程图 第三部分主要器件及简介 3.1 主要器件 1. STC89C51单片机; 2.LCD1602液晶显示屏; 3.2 主要器件简介 1.STC89C51单片机简介 STC89C51是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率 为80MHz,片内含8K Bytes的可反复擦写1000次的 Flash只读程序存储器,器件兼容标准MCS-51指令系 统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。 2.LCD1602液晶显示屏简介

51单片机时钟程序

51单片机时钟程序 #include #define uint unsigned int #define uchar unsigned char uchar code duan[]= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,}; uchar code we[]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,}; uint z; void display(uchar miao,uchar fen,uchar xiaoshi); uchar t=0,miao,fen,xiaoshi,shi1,ge1,shi2,ge2,shi,ge,a; void delay(uint z) { uint x,y; for(x=80;x>0;x--) for(y=z;y>0;y--); } void InitTimer0() { TMOD=0x01; TH0=0x3C; TL0=0x0B0; EA=1; ET0=1; TR0=1; } void Timer0Interrupt() interrupt 1 { TH0=0x3C;

TL0=0x0B0; t++; } void main() { InitTimer0(); miao=0; fen=10; xiaoshi=21; while(1) { if(t==20) { t=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; xiaoshi++; if(xiaoshi==24)

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序 时间:2012-09-10 13:52:26 来源:作者: /* 8位数码管显示时间格式05—50—00 标示05点50分00秒 S1 用于小时加1操作 S2 用于小时减1操作 S3 用于分钟加1操作 S4 用于分钟减1操作 */ #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[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9 unsigned char StrTab[8]; //定义缓冲区 unsigned char minute=19,hour=23,second; //定义并初始化为12:30:00 void delay(unsigned intt) { while(--cnt); } /******************************************************************/ /* 显示处理函数 */ /******************************************************************/ void Displaypro(void) { StrTab[0]=tab[hour/10]; //显示小时 StrTab[1]=tab[hour%10]; StrTab[2]=0x40; //显示"-" StrTab[3]=tab[minute/10]; //显示分钟 StrTab[4]=tab[minute%10]; StrTab[5]=0x40; //显示"-" StrTab[6]=tab[second/10]; //显示秒 StrTab[7]=tab[second%10]; } main()

单片机C51时钟的设计报告

单片机课程设计报告 设计名称:单片机电子时钟的设计 班级:电信08级1班 学号: : 指导教师:

一课程设计的目的 单片计算机即单片微型计算机。(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 二、课程设计的具体要求: 该课程设计是利用MCS-51单片机部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY (自己计算)。形成定时时间为50ms。用片RAM的7BH单元对50ms计数,计20次产生秒计数器78H单元加1,秒计数器加到60则分计数器79H单元加1,分计数器加到60则时计数器7AH单元加1,时计数器加到24则时计数器清0。然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。在处理过程中加上了按键判断程序,能对按键处理 三.MCS-51单片机系统简介 40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。 ⒈电源: ⑴VCC - 芯片电源,接+5V; ⑵VSS - 接地端; 注:用万用表测试单片机引脚电压一般为0v或者5v,这是标准的TTL电平。但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这是万用表的响应速度没这么快而已,在某一个瞬间单片机引脚电压仍保持在0v或者5v。 ⒉时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 ⒊控制线:控制线共有4根, ⑴ALE/PROG:地址锁存允许/片EPROM编程脉冲 ①ALE功能:用来锁存P0口送出的低8位地址 ②PROG功能:片有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 ⑵PSEN:外ROM读选通信号。 ⑶RST/VPD:复位/备用电源。 ①RST(Reset)功能:复位信号输入端。 ②VPD功能:在Vcc掉电情况下,接备用电源。 ⑷EA/Vpp:外ROM选择/片EPROM编程电源。 ①EA功能:外ROM选择端。 ②Vpp功能:片有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 ⒋I/O线 80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。 P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线) 四、MCS-51单片机部定时器/计数器、中断系统简介 定时/计数器是单片机中重要的功能模块之一,在检测,控制和智能仪器等设备中经常用它来定时。MCS-51系列中51子系列有2个16位的可编程定时/计数器:T0和T1;每个定时计数器既可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,通过编程设定来实现。T0有4种工作方式,T1有3种工作方

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

#include #define uint unsigned int #define uchar unsigned char sbit KEY1=P3^0; //切换键 sbit KEY3=P3^1; //minute ,hour调整加1定义 sbit KEY2=P3^7; //minute ,hour调整减1定义 sbit bear=P3^4; //闹铃 uchar a=0; //时间显示和闹钟时间显示切换 code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xc8,0x8e,0xff,0x21}; //段码控制 char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar StrTab[32]; char minute=01,hour=13,second=00; // 正常时钟秒,分,时定义 char minute1=12,hour1=24; // 闹钟时钟秒,分,时定义 uint year=2014; char month=12,day=10; //日期年,月,日定义 char week=3,v=1; //星期 char err=3;//误差用很重要、、、、!! //P0口流水灯 char pp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7e,0x7d,0x7b,0x77,0x6f,0x5f,0x3f, 0x3e,0x3d,0x3b,0x37,0x2f,0x1f, 0x1e,0x1d,0x1b,0x17,0x0f, 0x0e,0x0d,0x0b,0x07, 0x06,0x05,0x03, 0x02,0x01, 0x00 }; char w=0; uchar flag=0; //切换标志 uint count=0; //定时器计数,定时50ms,count满20,秒加1 /********************** 延时子程序*****************************/ void delay(uint z) { uint x,y; for(x=0;x

单片机电子时钟设计(内含源程序和电路图仿真地址)

课程名称:单片机课程设计 设计题目:电子时钟设计 院系:电气工程系 专业:电子信息工程 年级:***** 姓名:* * * 指导教师:* * * 西南交通大学峨眉校区 2012年6月15日

课程设计任务书 专业电子信息工程姓名*** 学号******** 开题日期:2012 年3 月1 日完成日期:2012年6月15 日题目电子时钟设计 一、设计的目的 单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 二、设计的内容及要求 ●在数码管通过一个控制键转换来显示相应的时间和日期; ●能通过多个控制键用来实现时间和日期的调节; ●熟练运用应用keil软件实现单片机电子时钟系统的程序设计,用Proteus 的ISIS软件实现仿真。 三、指导教师评语 四、成绩 指导教师(签章) 年月日

摘要 单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计主要设计了一个基于AT89C51单片机的电子时钟。在数码管通过一个控制键转换来显示相应的时间和日期。并通过多个控制键用来实现时间和日期的调节。应用keil软件实现单片机电子时钟系统的程序设计,用Proteus的ISIS软件实现仿真。该方法仿真效果真实、准确,节省了硬件资源。 关键字:单片机时钟键盘控制 (电路图仿真地址:https://www.doczj.com/doc/9e3707518.html,/file/e70jgofp) 一、电子时钟 1.1电子时钟简介 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。 1.2 电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间和日期,减小了误差,这种表具有时、分、秒显示时间的功能和年月日显示日期的功能,还可以进行校对,片选的灵活性好。

AT89C51单片机电子时钟设计

AT89C51单片机电子时钟设计 学院: 专业: 学号: 学生:

目录 1 电子时钟 (4) 1.1 电子时钟简介 (4) 1.2 电子时钟的基本特点 (4) 1.3 电子时钟的原理 (4) 2 单片机识的相关知识 (4) 2.1单片机简介 (4) 2.2 单片机的特点 (5) 2.3 AT89C51单片机介绍 (5) 3 设计方案的选择 (7) 3.1计时方案 (7) 3.2 显示方案 (7) 3.3 数码管显示工作原理 (8) 3.4 键盘电路设计 (9) 3.5 主控模块AT89C51 (9) 4 系统软件设计 (9) 附录 (12)

摘要:单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次设计通过对它的学习、应用,以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 关键词:单片机;电子时钟;AT89C51

1 电子时钟 1.1 电子时钟简介 本设计采用AT89C51单片机,以汇编语言为程序设计的基础,设计一个用六位数码管显示时、分、秒的时钟。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零,从而达到计时的功能,是人民日常生活不可缺少的工具。 1.2 电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。 1.3 电子时钟的原理 该电子时钟由AT89C51,键盘,八段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。 2 单片机识的相关知识 2.1单片机简介 单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

基于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 数码管)和正常显示两种状态。 关键词:数码管、AT89c52 The design of the adjustable digital clock base on AT89S52 Abstract This 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;

相关主题
文本预览
相关文档 最新文档