电子综合设计(附完整程序版)基于单片机多功能数字时钟

电子综合设计(附完整程序版)基于单片机多功能数字时钟
电子综合设计(附完整程序版)基于单片机多功能数字时钟

多功能数字时钟系统设计

一、概述、设计思路

该设计方案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,辅以闹钟模块,温度采集模块、日期提醒、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天),对闹铃方式和温度调节模块进行了重点设计实现SB0、SB1、SB2、SB3四个键实现时钟正常显示,调时,及闹钟时间设置。本系统设计大部分功能有软件来实现,使电路简单明了,系统稳定性也得大大提高。

二、系统组成和工作原理

1、工作原理:

本设计采用STC89C51单片机作为本次课程设计的控制模块。单片机可把由DS18B20、DS1302、AT24C02中的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。以LCD液晶显示器为显示模块,把单片机传来的的数据显示出来,并且显示多样化,在显示电路中,主要靠按键来实现各种显示要求的选择和切换。

2、总是设计框架图:

图二:系统总体电路图

三、单元电路的设计和分析

整个电子时钟系统电路可分为六大部分:中央处理单元(CPU)、复位电路部分、显示部分、键盘输入部分、温度采集部分。

1、MCS-51单片机

VCC:

89S51 电源正端输入,接+5V。

VSS:

电源地端。

XTAL1:

单芯片系统时钟的反相放大器输入端。

XTAL2:

系统时钟的反相放大器输出端,一般在设计上只

要在XTAL1 和XTAL2 上接上一只石英振荡晶体系

统就可以动作了,此外可以在两引脚和地之间加入一

20PF 的小电容,可以使系统更稳定,避免噪声干扰而

死机。

RESET:

89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。EA/Vpp:

"EA"为英文"External Access"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。

ALE/PROG:

端口3的管脚设置:

P3.0:RXD,串行通信输入。

P3.1:TXD,串行通信输出。

P3.2:INT0,外部中断0输入。

P3.3:INT1,外部中断1输入。

P3.4:T0,计时计数器0输入。

P3.5:T1,计时计数器1输入。

P3.6:WR:外部数据存储器的写入信号。

P3.7:RD,外部数据存储器的读取信号。

2、复位电路

MCS-51单片机的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器和复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。

上电复位:上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST 复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST 引脚的高电平信号必须维持足够长的时间。

电路图如下:

上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

3、时钟电路

时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用的是内部时钟方式。

电路图如下:

MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。

4、显示电路

采用LCD显示,LCD显示具有丰富多样性,灵活性,电路简单、易于控制而且功耗小,

对于信息量多的系统,是比较适合的,LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作室电流仅 2.0mA/5.0V。通过编程实现总动关闭屏幕能够更有效地降低功耗。LCD1602分两行显示,每行可现实多达16个字符,其内部的字符发生器已经存储了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制。

5、按键电路

按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O 端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短和开关的机械特性有关,一般在5-10ms之间。为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。

本文采用的是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。

电路图如下:

P1.0口表示功能移位键,按键选择要调整的时十位、时个位、分十位或分个位。

P1.1口表示数字“+“键,按一下则对应的数字加1。

P1.2口表示数字“-”键,按一下则对应的数字减1。

P1.3口表示时间表的切换,程序默认为日常时间表,当按下该开关,使输入为低电平时,表示当前执行的是测试时间表,并有绿发光二极管显示。再按键,使键抬起,输入维高电平时,表示当前执行的是日常作息时间表,用红发光二级管显示。

6、温度采集部分

此部分选用DS18B20 传感器,主要由四部分组成:64 位ROM、温度传感器、非挥

发的温度报警触发器TH 和TL、配置寄存器。有三个管脚:DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端。

电源有两种接法:1)远端因入;2)寄生电源方式。它是支持“一线总线”接口的温度传感器,测量温度范围为-55°C~+125°C,在-10~+85°C 范围内,可编程为9 位—12 位A/D 转换精度,工作电压在3V—5V 之间。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

###软件设计:

#include

#include

//#include "LCD1602.h"

//#include "DS1302.h"

#define uint unsigned int

#define uchar unsigned char

sbit DS1302_CLK = P1^7; //实时时钟时钟线引脚

sbit DS1302_IO = P1^6; //实时时钟数据线引脚

sbit DS1302_RST = P1^5; //实时时钟复位线引脚

sbit wireless_1 = P3^0;

sbit wireless_2 = P3^1;

sbit wireless_3 = P3^2;

sbit wireless_4 = P3^3;

sbit ACC0 = ACC^0;

sbit ACC7 = ACC^7;

char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数

sbit Set = P2^0; //模式切换键

sbit Up = P2^1; //加法按钮

sbit Down = P2^2; //减法按钮

sbit out = P2^3; //立刻跳出调整模式按钮

sbit DQ = P1^0; //温度传送数据IO口

char done,count,temp,flag,up_flag,down_flag;

uchar temp_value; //温度值

uchar TempBuffer[5],week_value[2];

void show_time(); //液晶显示程序

/***********1602液晶显示部分子程序****************/

//Port Definitions**********************************************************

sbit LcdRs = P2^5;

sbit LcdRw = P2^6;

sbit LcdEn = P2^7;

sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

//内部等待函数************************************************************************** unsigned char LCD_Wait(void)

{

LcdRs=0;

LcdRw=1; _nop_();

LcdEn=1; _nop_();

LcdEn=0;

return DBPort;

}

//向LCD写入命令或数据************************************************************

#define LCD_COMMAND 0 // Command

#define LCD_DATA 1 // Data

#define LCD_CLEAR_SCREEN 0x01 // 清屏

#define LCD_HOMING 0x02 // 光标返回原点

void LCD_Write(bit style, unsigned char input)

{

LcdEn=0;

LcdRs=style;

LcdRw=0; _nop_();

DBPort=input; _nop_();//注意顺序

LcdEn=1; _nop_();//注意顺序

LcdEn=0; _nop_();

LCD_Wait();

}

//设置显示模式************************************************************ #define LCD_SHOW 0x04 //显示开

#define LCD_HIDE 0x00 //显示关

#define LCD_CURSOR 0x02 //显示光标

#define LCD_NO_CURSOR 0x00 //无光标

#define LCD_FLASH 0x01 //光标闪动

#define LCD_NO_FLASH 0x00 //光标不闪动

void LCD_SetDisplay(unsigned char DisplayMode)

{

LCD_Write(LCD_COMMAND, 0x08|DisplayMode);

}

//设置输入模式************************************************************ #define LCD_AC_UP 0x02

#define LCD_AC_DOWN 0x00 // default

#define LCD_MOVE 0x01 // 画面可平移

#define LCD_NO_MOVE 0x00 //default

void LCD_SetInput(unsigned char InputMode)

{

LCD_Write(LCD_COMMAND, 0x04|InputMode);

}

//初始化LCD************************************************************ void LCD_Initial()

{

LcdEn=0;

LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动

}

//液晶字符输入的位置************************

void GotoXY(unsigned char x, unsigned char y)

{

if(y==0)

LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

}

//将字符输出到液晶显示

void Print(unsigned char *str)

{

while(*str!='\0')

{

LCD_Write(LCD_DATA,*str);

str++;

}

}

//////////////////////////////////////////////////////////////////////////////////////////////////

/***********DS1302时钟部分子程序******************/

typedef struct __SYSTEMTIME__

{

unsigned char Second;

unsigned char Minute;

unsigned char Hour;

unsigned char Week;

unsigned char Day;

unsigned char Month;

unsigned char Year;

unsigned char DateString[11];

unsigned char TimeString[9];

}SYSTEMTIME; //定义的时间类型

SYSTEMTIME CurrentTime;

#define AM(X) X

#define PM(X) (X+12) // 转成24小时制

#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE 0x82

#define DS1302_HOUR 0x84

#define DS1302_WEEK 0x8A

#define DS1302_DAY 0x86

#define DS1302_MONTH 0x88

#define DS1302_YEAR 0x8C

void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) {

unsigned char i;

ACC = d;

for(i=8; i>0; i--)

{

DS1302_IO = ACC0; //相当于汇编中的RRC

DS1302_CLK = 1;

DS1302_CLK = 0;

ACC = ACC >> 1;

}

}

unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数)

{

unsigned char i;

for(i=8; i>0; i--)

{

ACC = ACC >>1; //相当于汇编中的RRC

ACC7 = DS1302_IO;

DS1302_CLK = 1;

DS1302_CLK = 0;

}

return(ACC);

}

void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据{

DS1302_RST = 0; // Write1302(0x8e,0x00);

DS1302_CLK = 0;

DS1302_RST = 1;

DS1302InputByte(ucAddr); // 地址,命令

DS1302InputByte(ucDa); // 写1Byte数据

DS1302_CLK = 1;

DS1302_RST = 0;

}

unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据

{

unsigned char ucData;

DS1302_RST = 0;

DS1302_CLK = 0;

DS1302_RST = 1;

DS1302InputByte(ucAddr|0x01); // 地址,命令

ucData = DS1302OutputByte(); // 读1Byte数据

DS1302_CLK = 1;

DS1302_RST = 0;

return(ucData);

}

void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组

{

unsigned char ReadValue;

ReadValue = Read1302(DS1302_SECOND);

Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //高三位取出读出乘⑩

ReadValue = Read1302(DS1302_MINUTE);

Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = Read1302(DS1302_HOUR);

Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = Read1302(DS1302_DAY);

Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = Read1302(DS1302_WEEK);

Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = Read1302(DS1302_MONTH);

Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

ReadValue = Read1302(DS1302_YEAR);

Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

}

void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]

{

if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为2007/07/22

{

Time->DateString[0] = '2';

Time->DateString[1] = '0';

Time->DateString[2] = Time->Year/10 + '0';

Time->DateString[3] = Time->Year%10 + '0';

}

else

{

Time->DateString[0] = ' ';

Time->DateString[1] = ' ';

Time->DateString[2] = ' ';

Time->DateString[3] = ' ';

}

Time->DateString[4] = '/';

if(hide_month<2)

{

Time->DateString[5] = Time->Month/10 + '0';

Time->DateString[6] = Time->Month%10 + '0';

}

else

{

Time->DateString[5] = ' ';

Time->DateString[6] = ' ';

}

Time->DateString[7] = '/';

if(hide_day<2)

{

Time->DateString[8] = Time->Day/10 + '0';

Time->DateString[9] = Time->Day%10 + '0';

}

else

{

Time->DateString[8] = ' ';

Time->DateString[9] = ' ';

}

if(hide_week<2)

{

week_value[0] = Time->Week%10 + '0'; //星期的数据另外放到week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示

}

else

{

week_value[0] = ' ';

}

week_value[1] = '\0';

Time->DateString[10] = '\0'; //字符串末尾加'\0' ,判断结束字符

}

void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组TimeString[];

{

if(hide_hour<2)

{

Time->TimeString[0] = Time->Hour/10 + '0';

Time->TimeString[1] = Time->Hour%10 + '0';

}

else

{

Time->TimeString[0] = ' ';

Time->TimeString[1] = ' ';

}

Time->TimeString[2] = ':';

if(hide_min<2)

{

Time->TimeString[3] = Time->Minute/10 + '0';

Time->TimeString[4] = Time->Minute%10 + '0';

}

else

{

Time->TimeString[3] = ' ';

Time->TimeString[4] = ' ';

}

Time->TimeString[5] = ':';

if(hide_sec<2)

{

Time->TimeString[6] = Time->Second/10 + '0';

Time->TimeString[7] = Time->Second%10 + '0';

}

else

{

Time->TimeString[6] = ' ';

Time->TimeString[7] = ' ';

}

Time->DateString[8] = '\0';

}

void Initial_DS1302(void) //时钟芯片初始化

{

unsigned char Second=Read1302(DS1302_SECOND);

if(Second&0x80) //判断时钟芯片是否关闭

{

Write1302(0x8e,0x00); //写入允许

Write1302(0x8c,0x07); //以下写入初始化时间日期:07/07/25.星期: 3. 时间: 23:59:55 Write1302(0x88,0x07);

Write1302(0x86,0x25);

Write1302(0x8a,0x07);

Write1302(0x84,0x23);

Write1302(0x82,0x59);

Write1302(0x80,0x55);

Write1302(0x8e,0x80); //禁止写入

}

}

//----------------------////////////////////////////////////////////////////////////////////////

/***********ds18b20子程序*************************/

/***********ds18b20延迟子函数(晶振12MHz )*******/

void delay_18B20(unsigned int i)

{

while(i--);

}

/**********ds18b20初始化函数**********************/

void Init_DS18B20(void)

{

unsigned char x=0;

DQ = 1; //DQ复位

delay_18B20(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay_18B20(80); //精确延时大于480us

DQ = 1; //拉高总线

delay_18B20(14);

x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);

}

/***********ds18b20读一个字节**************/

unsigned char ReadOneChar(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(4);

}

return(dat);

}

/*************ds18b20写一个字节****************/

void WriteOneChar(uchar dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;

delay_18B20(5);

DQ = 1;

dat>>=1;

}

}

/**************读取ds18b20当前温度************/

void ReadTemp(void)

{

unsigned char a=0;

unsigned char b=0;

unsigned char t=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0x44); // 启动温度转换

delay_18B20(100); // this message is wery important

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);

a=ReadOneChar(); //读取温度值低位

b=ReadOneChar(); //读取温度值高位

temp_value=b<<4;

temp_value+=(a&0xf0)>>4;

}

void temp_to_str() //温度数据转换成液晶字符显示

{

TempBuffer[0]=temp_value/10+'0'; //十位

TempBuffer[1]=temp_value%10+'0'; //个位

TempBuffer[2]=0xdf; //温度符号

TempBuffer[3]='C';

TempBuffer[4]='\0';

}

void Delay1ms(unsigned int count)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<120;j++);

}

/////////////////////////////////////////////////////////////////////////////////////////////

/*延时子程序*/

void mdelay(uint delay)

{ uint i;

for(;delay>0;delay--)

{for(i=0;i<62;i++) //1ms延时.

{;}

}

}

void outkey() //跳出调整模式,返回默认显示

{ uchar Second;

if(out==0||wireless_1==1)

{ mdelay(8);

count=0;

hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;

Second=Read1302(DS1302_SECOND);

Write1302(0x8e,0x00); //写入允许

Write1302(0x80,Second&0x7f);

Write1302(0x8E,0x80); //禁止写入

done=0;

while(out==0);

while(wireless_1==1);

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Upkey()//升序按键

{

Up=1;

if(Up==0||wireless_2==1)

{

mdelay(8);

switch(count)

{case 1:

temp=Read1302(DS1302_SECOND); //读取秒数

temp=temp+1; //秒数加1

up_flag=1; //数据调整后更新标志

if((temp&0x7f)>0x59) //超过59秒,清零

temp=0;

break;

case 2:

temp=Read1302(DS1302_MINUTE); //读取分数

temp=temp+1; //分数加1

up_flag=1;

if(temp>0x59) //超过59分,清零

temp=0;

break;

case 3:

temp=Read1302(DS1302_HOUR); //读取小时数

temp=temp+1; //小时数加1

up_flag=1;

if(temp>0x23) //超过23小时,清零

temp=0;

break;

case 4:

temp=Read1302(DS1302_WEEK); //读取星期数

temp=temp+1; //星期数加1

up_flag=1;

if(temp>0x7)

temp=1;

break;

case 5:

temp=Read1302(DS1302_DAY); //读取日数

temp=temp+1; //日数加1

up_flag=1;

if(temp>0x31)

temp=1;

break;

case 6:

temp=Read1302(DS1302_MONTH); //读取月数

temp=temp+1; //月数加1

up_flag=1;

if(temp>0x12)

temp=1;

break;

case 7:

temp=Read1302(DS1302_YEAR); //读取年数

temp=temp+1; //年数加1

up_flag=1;

if(temp>0x85)

temp=0;

break;

default:break;

}

while(Up==0);

while(wireless_2==1);

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Downkey()//降序按键

{

Down=1;

if(Down==0||wireless_3==1)

{

mdelay(8);

switch(count)

{case 1:

temp=Read1302(DS1302_SECOND); //读取秒数

temp=temp-1; //秒数减1

down_flag=1; //数据调整后更新标志

if(temp==0x7f) //小于0秒,返回59秒

temp=0x59;

break;

case 2:

temp=Read1302(DS1302_MINUTE); //读取分数

temp=temp-1; //分数减1

down_flag=1;

if(temp==-1)

temp=0x59; //小于0秒,返回59秒

break;

case 3:

temp=Read1302(DS1302_HOUR); //读取小时数

temp=temp-1; //小时数减1

down_flag=1;

if(temp==-1)

temp=0x23;

break;

case 4:

temp=Read1302(DS1302_WEEK); //读取星期数

temp=temp-1; //星期数减1

down_flag=1;

if(temp==0)

temp=0x7;;

break;

case 5:

temp=Read1302(DS1302_DAY); //读取日数

temp=temp-1; //日数减1

down_flag=1;

if(temp==0)

temp=31;

break;

case 6:

temp=Read1302(DS1302_MONTH); //读取月数

temp=temp-1; //月数减1

down_flag=1;

if(temp==0)

temp=12;

break;

case 7:

temp=Read1302(DS1302_YEAR); //读取年数

temp=temp-1; //年数减1

down_flag=1;

if(temp==-1)

temp=0x85;

break;

default:break;

}

while(Down==0);

while(wireless_3==1);

}

}

void Setkey()//模式选择按键

{

Set=1;

if(Set==0||wireless_4==1)

{

mdelay(8);

count=count+1; //Setkey按一次,count就加1

done=1; //进入调整模式

while(Set==0);

while(wireless_4==1);

}

}

void keydone()//按键功能执行

{ uchar Second;

if(flag==0) //关闭时钟,停止计时

{ Write1302(0x8e,0x00); //写入允许

temp=Read1302(0x80);

Write1302(0x80,temp|0x80);

Write1302(0x8e,0x80); //禁止写入

flag=1;

}

Setkey(); //扫描模式切换按键

switch(count)

{case 1:do //count=1,调整秒

{

outkey(); //扫描跳出按钮

Upkey(); //扫描加按钮

Downkey(); //扫描减按钮

if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据

{

Write1302(0x8e,0x00); //写入允许

Write1302(0x80,temp|0x80); //写入新的秒数

Write1302(0x8e,0x80); //禁止写入

up_flag=0;

down_flag=0;

}

hide_sec++; //位闪计数

if(hide_sec>3)

hide_sec=0;

show_time(); //液晶显示数据

}while(count==2);break;

case 2:do //count=2,调整分

{

hide_sec=0;

outkey();

Upkey();

Downkey();

if(temp>0x60)

if(up_flag==1||down_flag==1)

{

Write1302(0x8e,0x00); //写入允许

Write1302(0x82,temp); //写入新的分数

Write1302(0x8e,0x80); //禁止写入

up_flag=0;

down_flag=0;

}

hide_min++;

if(hide_min>3)

hide_min=0;

show_time();

}while(count==3);break;

case 3:do //count=3,调整小时{

hide_min=0;

outkey();

Upkey();

Downkey();

if(up_flag==1||down_flag==1)

{

Write1302(0x8e,0x00); //写入允许

Write1302(0x84,temp); //写入新的小时数

Write1302(0x8e,0x80); //禁止写入

up_flag=0;

down_flag=0;

}

hide_hour++;

if(hide_hour>3)

hide_hour=0;

show_time();

}while(count==4);break;

case 4:do //count=4,调整星期{

hide_hour=0;

outkey();

Upkey();

Downkey();

if(up_flag==1||down_flag==1)

{

Write1302(0x8e,0x00); //写入允许

Write1302(0x8a,temp); //写入新的星期数

Write1302(0x8e,0x80); //禁止写入

数字电子钟课程设计

摘要 在生活中的各种场合经常要用到电子钟,现代电子技术的飞跃发展,各类智能化产品相应而出,数字电路具有电路简单、可靠性高、成本低等优点,本设计就以数字电路为核心设计智能电子钟。 数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和、报时、整体清零等附加功能。干电路系统由秒信号发生器、时、分、秒计数器,译码器及显示器,校时电路,整体清零电路,整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。秒信号产生器将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。计数器用的是74LS90。译码显示电路将“时”、“分”、“秒”计数器的输出状态送到七段显示译码器译码,通过六位LED 七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。整体清零电路是根据74LS90计数器在2,3脚均为1时清零的特点用电源,开关和逻辑门组成的清零电路对“时”、“分”、“秒”显示数字清零。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的 关键词分频计数译码报时清零校时校分触发逻辑

目录 引言 1 设计目的............................................................ . (5) 2 设计任务 (5) 2.1设计指标 (5) 2.2设计要求 (5) 2.3方案的对比 (6) 3数字电子钟的组成 (6) 3.1数字钟的基本逻辑功能框图 (6) 3.2秒信号发生器(振荡器及分频电路) (7) 3.3时、分、秒计数器电路 (8) 3.4译码显示电路 (8) 3.4校时电路 (8) 3.6正点报时电路 (8) 3.7清零电路 (8) 4.数字钟的电路设计 (8) 4.1 秒信号发生器的设计 (8) 4.2计数电路的设计 (10) 4.2.1六十进制计数器 (10) 4.2.2 二十四进制计数器 (11) 4.2.3计数器的组间级联问题 (12) 4.3译码显示电路 (13) 4.4校时电路的设计 (13) 4.5正点报时电路的设计 (13) 4.6清零电路的设计 (15) 4.7数字电子钟的整体电路 (15) 4.7设计、调试要点 (15) 5元器件 (16) 5.1实验元器件清单 (16)

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

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

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

数字电子钟课程设计实验报告

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计任务书2016/2017 学年第一学期 学生姓名:张涛学号: 李子鹏学号: 课程设计题目:数字电子钟的设计 起迄日期:2017年1月4日~2017年7月10日 课程设计地点:科学楼 指导教师:姚爱琴 2017年月日 课程设计任务书

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计开题报告2016/2017 学年第一学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号:

指导教师:姚爱琴 2017 年 1 月 6 日 中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计说明书2016/2017 学年第二学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号: 指导教师:姚爱琴 2017 年月日

目录 1 引言 (6) 2 数字电子钟设计方案 (6) 2.1 数字计时器的设计思想 (6) 2.2数字电路设计及元器件参数选择 (6) 2.2.2 时、分、秒计数器 (7) 2.2.3 计数显示电路 (8) 2.2.5 整点报时电路 (10) 2.2.6 总体电路 (10) 2.3 安装与调试 (11) 2.3.1 数字电子钟PCB图 (11) 3 设计单元原理说明 (11) 3.1 555定时器原理 (12) 3.2 计数器原理 (12) 3.3 译码和数码显示电路原理 (12) 3.4 校时电路原理 (12) 4 心得与体会 (12) 1 引言 数字钟是一种用数字电子技术实现时,分,秒计时的装置,具有较高的准确性和直观性等各方面的优势,而得到广泛的应用。此次设计数字电子钟是为了了解数字钟的原理,在设计数字电子钟的过程中,用数字电子技术的理论和制作实践相结合,进一步加深数字电子技术课程知识的理解和应用,同时学会使用Multisim电子设计软件。 2数字电子钟设计方案 2.1 数字计时器的设计思想 要想构成数字钟,首先应选择一个脉冲源——能自动地产生稳定的标准时间脉冲信号。而脉冲源产生的脉冲信号地频率较高,因此,需要进行分频,使得高频脉冲信号变成适合于计时的低频脉冲信号,即“秒脉冲信号”(频率为1Hz)。经过分频器输出的秒脉冲信号到计数器中进行计数。由于计时的规律是:60秒=1分,60分=1小时,24小时=1天,就需要分别设计60进制,24进制计数器,并发出驱动信号。各计数器输出信号经译码器、驱动器到数字显示器,是“时”、“分”、“秒”得以数字显示出来。 值得注意的是:任何记时装置都有误差,因此应考虑校准时间电路。校时电路一般

数字逻辑课程设计 数字电子钟

课程设计(综合实验)报告 题目:第四个实验数字电子钟院系:计算机科学系 班级:计算计科学与技术1班学号: 学生姓名: 队员姓名: 指导教师:

《数字逻辑》综合实验 任务书 一、目的与要求 1 目的 1.1综合实验是教学中必不可少的重要环节,通过综合实验巩固、深化和扩展学生的理论知识与初步的专业技能,提高综合运用知识的能力,逐步增强实际工程训练。 1.2注重培养学生正确的设计思想,掌握综合实验的主要内容、步骤和方法。 1.3培养学生获取信息和综合处理信息的能力、文字和语言表达能力以及协作工作能力。 1.4提高学生运用所学的理论知识和技能解决实际问题的能 及其基本工程素质。 2.要求 2.1 能够根据设计任务和指标要求,综合运用电子技术课程中所学到的理论知识与实践技能独立完成一个设计课题。 2.2根据课题需要选择参考书籍,查阅手册、图表等有关文献资料。要求通过独立思考、深入钻研综合实验中所遇到的问题,培养自己分析、解决问题的能力。 2.3进一步熟悉常用电子器件的类型和特性,掌握合理选用的原则。 2.4学会电子电路的安装与调试技能,掌握常用仪器设备的正确

使用方法。利用“观察、判断、实验、再判断”的基本方法,解决实验中出现的问题。 2.5学会撰写综合实验总结报告。 2.6通过综合实验,逐步形成严肃认真、一丝不苟、实事求是的工作作风和科学态度,培养学生树立一定的生产观点、经济观点和全局观点。要求学生在设计过程中,坚持勤俭节约的原则,从现有条件出发,力争少损坏元件。 2.7在综合实验过程中,要做到爱护公物、遵守纪律、团结协作、注意安全。 二、主要内容 数字电子钟 设计一台能显示时﹑分、秒的数字电子钟,要求如下: 1)秒﹑分为00—59六十进制计数器,时为00—23二十四进制计数器; 2)可手动校正:可分别对秒﹑分﹑时进行手动脉冲输入调整或连续脉冲输入校正,(校正时不能输出进位)。 元器件选择 74LS162:4块与非门74LS00:2块共阳数码管LED 74LS161:2块GAL16V8:2块晶体振荡器:1MHZ GAL20V8:1块TDS-4实验箱 导线若干 所需要器件的图片如下

基于单片机的数字钟设计-(1)

基于单片机的数字时钟摘要 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 本课题主要研究的是基于单片机的数字钟设计,采用AT89C51单片机作为系统的主控芯片,外接LED显示电路,按键电路,晶振电路,复位电路模块构成一个简单的数字钟。通过按键电路能对时、分、秒分别进行设置和实时调整,并将结果显示在数码管上。 关键词:数字钟,单片机,数码管

Abstract Author:cheng dong Tutor:wang xin Electronic technology has been developed rapidly in the 20 century,with its modern electronic products, pushed by almost permeated every area of society has vigorously promoted social productive forces development and improvement of social informatization level, also make modern electronic product performance further improved, and the rhythm of upgrade its products is becoming more and more quickly. The most common SCM module is a digital clock, a digital clock is a kind of digital circuit technology implementation, minutes and seconds, the timing device with mechanical clock compared with higher accuracy and intuitive and no mechanical device, has more longer service life, so it has been widely used. This topic research is the digital clock design based on SCM, AT89C51 SCM as the main control chip system, external LED display circuit, key circuits, crystals circuit, reset circuit module constitute a simple digital clock. Through the key circuits can respectively the diffculties, minutes and seconds setting and real-time adjustment, and the result showed that in the digital tube. Key words:digital clock SCM ; digital

51单片机数字时钟

计算机硬件综合课程 设计报告 课目: 学院: 班级: 姓名: 指导教师: 目录 1 设计要求 功能需求 设计要求

2 硬件设计及描述 总体描述 系统总体框图 Proteus仿真电路图 3 软件设计流程及描述 程序流程图 函数模块及功能 4 心得体会 附:源程序 设计要求 功能需求 实现数字时钟准确实时的计时与显示功能; 实现闹钟功能,即系统时间到达闹钟时间时闹铃响; 实现时间和闹钟时间的调时功能; 刚启动系统的时候在数码管上滚动显示数字串(学号)。设计要求 应用MCS-51单片机设计实现数字时钟电路; 使用定时器/计数器中断实现计时; 选用8个数码管显示时间;

使用3个按钮实现调时间和闹钟时间的功能。按钮1:更换模式(模式0:正常显示时间;模式1:调当前时间的小时;模式2;调当前时间的分钟;模式3:调闹钟时间的小时;模式4:调闹钟时间的分钟);按钮2:在非模式0下给需要调节的时间数加一,但不溢出;按钮3:在非模式0下给需要调节的时间数减一,但不小于零; 在非0模式下,给正在调节的时间闪烁提示; 使用扬声器实现闹钟功能; 采用C语言编写程序并调试。 2 硬件设计及描述 总体描述 单片机采用AT89C51型; 时间显示电路:采用8个共阴极数码管,P1口驱动显示数字,P2口作为扫描信号; 时间设置电路:、、分别连接3个按键,实现调模式,时间加和时间减; 闹钟:口接扬声器。 系统总体框图 Proteus仿真电路图

3 软件设计流程及描述 程序流程图

函数模块及功能 void display_led() 学号的滚动显示函数; void display() 显示时间以及显示调节时间和闹钟时间的闪烁; void key_prc() 键盘功能函数,实现3个按键有关的模式转换以及数字加一减一; void init() 初始化设置中断;

基于单片机数字时钟设计

基于单片机数字时钟设计

单片机数字时钟课程设计

基于单片机数字时钟设计 一、设计目的:本文介绍是基于单片机的多功能数字时钟,在传统的时钟基础上它具有走时准确、显示直观、无机械传动装置等优点。随着电子产业的发展,时钟的数字化、多功能化已经成为现在时钟生产研究的主导设计方向。其实巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。最后通过对课题设计方案的分析、选择、比较、熟悉单片机应用系统开发、研制的过程,软硬件设计的方法,内容及步骤。 多功能数字时钟的用途十分广泛,只要有计时的存在,便要用到数字时钟的原理及结构;同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费者的喜爱。随着人类科技文明的发展,人们对于时钟的要求在不断提高。时钟已不仅仅被看出一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。在这种趋势下,时钟的数字化、多功能化已经成为现在时钟生产研究的主导设计方向。 二、设计要求:本次课程设计的电子时钟电路由AT89C51时钟 电路动态数码管显示电路组成,运用汇编语言控制单片机AT89C51来实现动态数码管显示。

利用AT89C51单片机P0口控制数码的位显示,P2口控制数码管的段显示,p1口与按键相连,用于时间的校正。 实现24小时制电子钟,6位数码管显示,显示时分秒。 显示格式:23-59-59。有调时,调分,调秒按钮。 三、AT89C51管脚说明 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存

基于单片机的数字时钟

郑州科技学院 《单片机原理及应用》课程设计

目 录 0 引言3 1 设计方案4 2 系统设计7 2.1 硬件原理12 2.2 软件原理16 3 实验与仿真19 4 结论21 参考文献22 附录1 程序23 附录2 仿真电路图26 0 引言 近年来,随着电子产品的发展,随着社会竞争的激烈,人们对数字时钟的要求越来越高。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间,忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。 因此从人们的日常生活到工厂的自动控制,从民用时钟到科学发展所需的时钟,现代人对时间的精度和观察时间的方便有了越来越多的需求。人们要求随时随地都能快速准确的知道时间,并且要求时钟能够更直观、更可靠、价格更便宜。这种要求催生了新型时钟的产生。 除此之外,由于对社会责任的更多承担,人们要求所设计的产品能够产生尽量少的垃圾、能够消耗尽量少的能量。因此人们对时钟的又有

了体积小、功耗低的要求。 传统的机械表由于做工的高精细要求,造价的昂贵,材料的限制,时间指示精度的限制,使用寿命方面,以及其它方面的限制,已不能满足人们的需求。另外,近些年随着科技的发展和社会的进步,人们对时钟的要求也越来越高,而使得新型电子钟表成了大势所趋。 另外单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 1 设计方案 1.1 任务及要求 ①通过单片机内定时器控制走时,准确持续走时,调时不影响走时。 ②在八个数码管上显示时、分、秒及两个小数点。 ③含有闹钟功能,可以选择闹钟开关,可以设定闹铃时间。 ④到达闹钟时刻蜂鸣器警报,可以关掉警报。 1.2 系统功能说明 电子钟的格式为:XX.XX.XX ,由左向右分别为:时、分、秒。完成显示由秒01一直加1至59,再恢复为00;分加1,由00至01,一直加1至59,再恢复00;时加1,时由00加至23之后秒、分、时全部清清零。该钟使用T0作250us的定时中断。 走时调整:走时过程中直接调整且不影响走时准确性,按下时间选择键对“时、分、秒”显示进行调整,每按一下时间加,即加1,时间减,即减1。

数字电子钟课程设计报告-数电

华东交通大学理工学院课程设计报告书所属课程名称数字电子技术课程设计题目数字电子钟课程设计分院电信分院 专业班级10电信2班 学号20100210410201 学生姓名陈晓娟 指导教师徐涢基 20 12 年12 月18 日

目录 第1章课程设计内容及要求 (3) 第2章元器件清单及主要器件介绍 (5) 第3章原理设计和功能描述 (10) 第4章数字电子钟的实现 (15) 第5章实验心得 (17) 第6章参考文献 (18)

第1章课程设计内容及要求 1.1 数字钟简介 20世纪末,电子技术获得了飞速的发展。在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高、产品更新换代的节奏也越来越快。数字钟已成为人们日常生活中必不可少的生活日用品。广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点。 因此本次设计就用数字集成电路和一些简单的逻辑门电路来设计一个数字式电子钟,使其完成时间及星期的显示功能。多功能数字钟采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。具有时间显示、走时准确、显示直观、精度、稳定等优点,电路装置十分小巧,安装使用也方便而受广大消费的喜爱。 1.2 设计目的 1. 掌握组合逻辑电路、时序逻辑电路及数字逻辑电路系统的设计、安装、测试方法;

2. 进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力; 3. 提高电路布局,布线及检查和排除故障的能力。 1.3 设计要求 1. 设计一个有“时”、“分”、“秒”(23小时59分59秒)显示,且有校时功能的电子钟。 2. 用中小规模集成电路组成电子钟,并在实验箱上进行组 装、调试。 3. 画出框图和逻辑电路图、写出设计、实验总结报告。 4. 整点报时。在59分59秒时输出信号,音频持续1s,在结束时刻为整点。

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

基于单片机的数字钟设计毕业设计 目录 1. 引言 (1) 2. 关于单片机 (3) 2.1单片机的发展 (3) 2.2 单片机的开发背景 (5) 2.2 单片机的开发背景 (6) 2.3 AT89S52单片机 (7) 2.3.1 AT89S52单片机引脚功能 (8) 2.3.2 AT89S52单片机硬件结构的特点 (9) 2.3.3 AT89S52单片机的硬件原理 (11) 3. 方案设计与论证 (13) 4. 系统总体结构框图 (14) 5. 系统的硬件设计 (14) 5.1 显示部分电路的设计 (14) 5.1.1 LED数码显示管的基本原理 (14) 5.1.2 数码管显示模块分析 (15) 5.1.3 LED显示电路 (16) 5.2 控制部分电路的设计 (16) 5.2.1 时钟模块 (16) 5.2.2 温度模块 (16) 5.2.3 音乐模块 (17) 5.2.4 复位模块 (17) 5.2.5 光识模块 (18) 6. 系统的软件设计 (19) .参考资料.

6.1 各模块的程序设计 (19) 6.1.1 计时程序 (19) 6.1.2 定时闹钟程序 (19) 6.1.3 温度程序 (19) 6.2 系统程序设计的总体框图 (20) 7. 系统电路的制作与调试 (21) 7.1 电路硬件焊接制作 (21) 7.2 调试的主要方法 (21) 7.3 系统调试 (21) 7.3.1 硬件调试 (21) 7.3.2 软件调试 (21) 7.3.3 联机调试 (22) 7.3.4调试中遇到的问题及解决方法 (22) 结论 (24) 参考文献 (25) 附录1 数字钟电路图 (27) 附录2 程序清单 (27) 附录3 英文资料 (65) 附录4 英文资料翻译 (76) 致谢 (84) .参考资料.

数字电子课程设计数字钟

数字电路课程设计报告 目录 一、………设计课题 二、………设计任务 三、………设计要求 四、………分析及设计过程 五、………组装及调试过程 六、………参考文献(各芯片功能) 七、………设计心得及总结

一、设计课题 多功能数字钟电路设计. 二、设计任务 1给定的主要器件: 芯片数量芯片数量555 1 74ls191 1 74ls90 2 74ls74 1 74ls92 1 74ls00 2 74ls47 4 2实验原理图:

三、数字钟的功能要求 ①基本功能 以数字形式显示时、分、秒的时间,为节省器件,其中秒的个位可以用发光二极管指示,小时的十位亦可以用发光二极管指示,灯亮为“1”,灯灭为“0”。小时计数器的计时要求为“12翻1”。要求手动快速校时、校分或慢校时、慢校分。②扩展功能定时控制,其时间自定;仿广播电台整点报时;触摸报整点时数或自动报整点时数。 2、设计步骤与要求:①拟定数字钟电路的组成框图,要求设计优化,电路功能多,器件少,成本低。②设计并安装各单元电路,要求布线整齐、美观,便于级联与调试。③测试数字钟系统的逻辑功能,使满足设计功能的要求。④画出数字钟系统的整机逻辑电路图。⑤写出课程设计实验报告。 四、设计分析于过程 本课题是数字电路中计数、分频、译码、显示及时钟振荡器等组合逻辑电路与时序逻辑电路的综合应用。通过学习,要求掌握多功能数字钟电路的设计方法、装调技术及数字钟的扩展应用。 1、数字钟的功能要求(1)基本功能:①准确计时,以数字形式显示时、分、秒的时间;②小时的计时要求为“12翻1”,分和秒的计时要求为60进位;③校正时间。(2)扩展功能①定时控制;②仿广播电台整点报时; ③报整点时数;④触摸报整点时数。 2、数字钟电路系统的组成框图

基于单片机的数字时钟设计

1 引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。而时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。除此之外,由于对社会责任的更多承担,人们要求所设计的产品能够产生尽量少的垃圾、能够消耗尽量少的能量。因此人们对时钟的又有了体积小、功耗低的要求。 传统的机械表由于做工的高精细要求,造价的昂贵,材料的限制,时间指示精度的限制,使用寿命方面,以及其它方面的限制,已不能满足人们的需求。另外,近些年随着科技的发展和社会的进步,人们对时钟的要求也越来越高,而使得新型电子钟表成了大势所趋。 现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时,译码代替机械式传动,用LED 显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。 在电子技术高速发展推动下微机开始向社会各个领域渗透同时大规模集成电路获得了高速发展,单片机的应用正在这时不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字

基于单片机的数字钟设计

基于单片机的数字钟设计及时间校准研究﹡ 陈姚节戴泽军 (武汉科技大学计算机学院 430081 ) 摘要用单片机来设计数字钟,软件实现各种功能比较方便。但因软件的执行需要一定的时间,所以就会出现误差。对比实际的时钟,查找出误差的来源,并作出调整误差的方法,使得误差近可能的小,使得系统可以达到实际数字钟的允许误差范围内。 1 , 串 使用。采用一个频率为 11.0592 MHz 的晶振构成时钟电路。系统原理图如图 1 : 图1 系统原理图 2.软件实现与流程 2.1 主程序

由于系统的主要功能都是有程序中断来完成的,主程序基本上没什么事可做,但因键盘扫描是通过程序查询的方式实现的,所以主程序只循环扫描键盘。主程序流程图如图2所示: 2.2 定时和串口程序 2.3 数据的显示与刷新 更新显示器涉及到两个操作:发数据和改片选信号。但实践发现,代码中无论是先改片选信号还是先发数据信号,都会出现重影(即相邻两位显示差不多)这也是动态扫描引起的。实践先该片选,则前一位的数据会在下一位显示一段时间;先发数据,则后一位的数据会在前一位显示一段时间。因而出现重影。解决这个问题的办法是先进行一个消影操作,然后再发片选,最后发数据。这样就很好地解决了重影问题。这样做的关键在于,在极短

的一段时间内让显示器都不亮,等一切准备工作都做好了以后再发数据,只要显示频率足够快,是看不出显示器有闪烁的(程序用定时中断频率作为显示更新频率,在表 1 中,只当更新率??00 赫兹时,才发现显示器有闪烁)。这段显示程序代码如下: P1=0 x00; // 消影 作为一次还是多次处理,必须有一个标准。程序中我用到了一个标志位,相当于中断系统的中断标志。当用户按下键时,标志清零,松开键时,标志恢复;键按下超过一定时间(靠一扫描计数器判定)后,恢复标志,则经过一定的时间延迟(也靠一扫描计数器判定)可以响应一次按键(即一次按键的多次响应)。而事实上,键盘响应程序就是一个事件触发器,键盘的每一个状态(按下,松开, 点击)都可能引发一段响应程序(如:重新设定键按下 =>

基于单片机的数字时钟之C51单片机

山东大学威海分校 基于单片机的数字时钟 C51单片机 王若愚 学号200800800307 2010/7/18

概述 AT89C51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4K的可编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片机芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。 功能特性概述 AT89S51提供以下标准功能:4K字节闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89S51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中到内容,但振荡器停止工作并禁止其它所有工作部件直到下一个硬件复位。

AT89S51硬件电路原理 复位及振荡电路 复位电路由按键复位和上电复位两部分组成,如图2所示。AT89S系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC 充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为8.2K和10uF。 按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。 MCS51 LITE使用22.1184MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路, 所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。

数字电子时钟课程设计

数字电子技术基础课程设计报告 班级:姓名: 学号: 一、设计目的 1掌握专业基础知识的综合能力。 2完成设计电路的原理设计、故障排除。 3逐步建立电子系统的研发、设计能力,为毕业设计打好基础。 4让学生掌握组合逻辑电路、时序逻辑电路及数字逻辑电路系统的设计、安装、测试方法。 5进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力。 6培养书写综合实验报告的能力。 二、设计仪器 1 LM555CH 2 74LS161N 74LS160N 74LS290 3 74LS00 74LS08 4 电源电阻电容二极管接地等 三数字电子钟的基本功能及用途 现在数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性

能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点,,因此在许多电子设备中被广泛使用。 电子钟是人们日常生活中常用的计时工具,而数字式电子钟又有其体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中被广泛应用,因此本次设计就用数字集成电路和一些简单的逻辑门电路来设计一个数字式电子钟,使其完成时间及星期的显示功能。 多功能数字钟采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。具有时间显示、走时准确、显示直观、精度、稳定等优点。电路装置十分小巧,安装使用也方便。同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。 四设计原理及方框图 数字钟实际上是一个对标准频率进行计数的计数电路,标准的1HZ时间信号必须做到准确稳定。由图可见:本数字钟电路主要由震荡器、、时分秒计数器、译码显示器构成。它们的工作原理是:由震荡器产生的高频脉冲信号作为数字钟的时间基准,送入秒计数

单片机课程设计(数字时钟)

单片机课程设计报告 课题名称:数字时钟 一、设计目的: 随着半导体技术的不断发展,各种微处理芯片的性价比越来越高,在各个领域的应用也越来越广泛,其中MCU在工业控制、航天航空、民用家电、医疗设备等方面占有十分重要的地位。我们在之前所学习的MCS-51系统单片机就是MCU中的一员,作为低端的8位MCU它具有价格低、适配器件成熟种类多等优势,因此尽管现在32位、16位MCU不断发展,但8位的MCU仍占有大约50%的市场份额,同时它也是我们学习MCU的必要的入门途径,本次实习就是应用我们所学习的MCS-51单片机进行一次实际制作,要经过从硬件设计、软件设计、实验电路调试、软件调试直至最后作品焊接成型,这对以前我们所学习的理论知识进行进一步的巩固和深化,更重要的是学习以MCU为控制核心的应用的实际设计流程及基本的实践动手能力。 二、设计内容 应用AT89S51及相关器件制做一个LED数码显示电子时钟。所需使用的软件及硬件具体内容如下: 1.使用软件及器件 1)软件:Keil uVision2(IDE集成开发环境)、ELITE-IV单片机开发系统、protel99se 2)器材清单:

三、实习步骤 1.根据实习内容及所提供元器件,设计硬件电路,提供的参考电路见图1,也可自行设计 1)复位及晶振电路是单片机最小系统必备部分 2)三个按钮接在P3.0、P3.1、P3.2上用于调整时、分、秒 3)P2口送LED数码显示的段码 4)P1.0至P1.5送数码显示控制的位码 2.根据设计的硬件电路,在面包板上搭接实验电路 3.在硬件基础在keil上上进行软件设计,调试 4.调试通过后,向A T89S51烧写程序 5.将烧写好的A T89S51插接到实验电路中,验证是否正常,如果正常说明软、硬件正确可进行电子时钟焊接制做。 6.焊接好电子时钟后,再次上电调试,验证通过,实习圆满完成。 注意的问题: ●单片机在锁紧座的正确放法:单片机缺口朝上。 ●在面包板上接好电路后,先用万用表测量一下电源及地是否会短路。 ●接电源调试时不能带电插拔元件 四、元件参数 1.9012 9012是一种最常用的普通三极管。 它是一种低电压,大电流,小信号的PNP型硅三极管 集电极电流Ic:Max -500mA 集电极-基极电压Vcbo:-40V 工作温度:-55℃to +150℃ 主要用途:开关应用、射频放大

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

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 本课题主要研究的是基于单片机的数字钟设计,采用AT89C51单片机作为系统的主控芯片,外接LED显示电路,按键电路,晶振电路,复位电路模块构成一个简单的数字钟。通过按键电路能对时、分、秒分别进行设置和实时调整,并将结果显示在数码管上。

1 引言 (3) 2 单片机介绍 (4) 3 数字钟硬件设计 (4) 3.1系统方案的确定 (4) 3.2功能分析 (4) 3.3数字钟设计原理 (5) 3.3.1键盘控制电路 (5) 3.3.2晶振电路 (6) 3.3.3复位电路 (7) 3.3.4数码显示电路 (7) 4.数字钟的软件设计 (8) 4.1程序设计内容 (8) 4.2源程序 (9)

1 引言 在单片机技术日趋成熟的今天,其灵活的硬件电路和软件电路的设计,让单片机得到广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影,可谓是“麻雀虽小,肝胆俱全”,单片机的学习和研究是对微机系统学习和研究的简捷途径。基于单片机的定时和控制装置在许多行业有着广泛的应用,而数字钟是其中最基本的,也是最具有代表性的一个例子[1],用数字电路实现对时、分、秒数字显示的计时装置。因为机具有体积小、功耗低、功能强、性价比高、易于推广应用的优点,在自动化装置、智能仪器表、过程控制、通信、家用电器等许多领域得到日益广泛的应用[2],因此具有很大的研究价值。

基于单片机的数字时钟程序

钟〔★〕这里用了两种编写方法(即汇编语言与C语言) (1.开机时,显示12:00:00的时间开始计时; (2.P0.0/AD0控制“秒”的调整,每按一次加1秒; (3.P0.1/AD1控制“分”的调整,每按一次加1分; (4.P0.2/AD2控制“时”的调整,每按一次加1个小时; 2.电路原理图 3.系统板上硬件连线 (1.把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上; (2.把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3.把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上; 4.相关基本知识 (1.动态数码显示的方法 (2.独立式按键识别过程 (3.“时”,“分”,“秒”数据送出显示处理方法 5.程序框图 6.汇编源程序 SECOND EQU 30H MINITE EQU 31H HOUR EQU 32H HOURK BIT P0.0 MINITEK BIT P0.1 SECONDK BIT P0.2 DISPBUF EQU 40H DISPBIT EQU 48H T2SCNTA EQU 49H T2SCNTB EQU 4AH TEMP EQU 4BH ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV SECOND,#00H MOV MINITE,#00H MOV HOUR,#12 MOV DISPBIT,#00H MOV T2SCNTA,#00H MOV T2SCNTB,#00H MOV TEMP,#0FEH LCALL DISP

基于单片机控制的电子时钟设计(完整版图纸直接可用)

毕业设计 中图分类号: 基于单片机控制的电子时钟设计 专业名称:应用电子技术 学生姓名:王明宗 导师姓名:王春霞 职称:讲师 焦作大学机电工程学院 2012年 12 月

中图分类号:密级: UDC:单位代码: 基于单片机控制的电子时钟设计 Based on single-chip microcomputer control the design of the electronic clock 姓名王明宗学制3年 专业应用电子技术研究方向电子技术 导师王春霞职称讲师 论文提交日期2012.12.20 论文答辩日期2012.12.31 焦作大学机电工程学院

摘要 现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。所以数字电子钟的精度、稳定度远远超过老式机械钟。而机械式的依赖于晶体震荡器,可能会导致误差。在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,并在数码管上显示相应的时间。 关键词:单片机 AT89S51 电子时钟

ABSTRACT Modern life people pay more and more attention to up the concept of time, can say time and money off the equal sign. For those who grasp of time is very strict and accurate person or thing, it is not accurate time will bring very big trouble, so to digital tube for display clock than pointer clock showed a lot of advantages. Digital tube display time simple and fast reading, time accurate display to seconds. So the digital clock accuracy, stability is far more than the old mechanical clock. And mechanical dependent on the crystal oscillators, may lead to error. In this design, we adopt LED digital tube display, points, SEC to 24 hours time way, according to the principle of dynamic display of digital tube to show that AT89S51 chip as the core, with the necessary circuit, design a simple electronic clock, it consists of 4.5 V dc power supply, through the digital tube can accurately display the time, adjusting time, and in the digital tube display the corresponding time. Key word:SCM AT89S51 electronic clock

相关文档
最新文档