带闹钟功能的数字时钟程序

带闹钟功能的数字时钟程序
带闹钟功能的数字时钟程序

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit lcdrs=P1^0;

sbit lcdrw=P1^6;

sbit lcden=P1^1 ;

sbit k1set=P2^0;//控制模式选择

sbit k2up=P2^1;//加操作

sbit k3down=P2^2;//减操作

sbit T_RST=P1^2;

sbit T_IO=P1^3;

sbit T_CLK=P1^4;

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;

uint t1;

sbit did=P3^5;

uchar clocks,clockf,clockm,year,week,weeks,day,month,b,sw,gw,t,years,months,days;//b就是keyflag按键标志位

uchar hour,mie,sei,c,nhour,nmie,shour,smie,clockms,i;

uint keyflag;//按键标志位

/*********延时函数****************/

void delay(uint z)

{

uint x,y;

for(x=0;x<114;x++)

for(y=0;y

}

/********ds1320控制***************/

void write_byte(uchar da)//上升沿,写入操作

{

uchar i;

ACC=da;

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

{

T_IO=ACC0;

T_CLK=1;

T_CLK=0;

ACC>>=1;

}

}

uchar read_byte(void)//下降沿,读操作

{

uchar i;

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

{

ACC>>=1;

ACC7=T_IO;

T_CLK=1;

T_CLK=0;

}

return(ACC);

}

void write_1302(uchar addr,uchar da) //写数据,先送地址,在写数据{

T_RST=0;//停止工作

T_CLK=0;

T_RST=1;//重新工作

write_byte(addr);//写地址

write_byte(da);//写入数据

T_CLK=1;

T_RST=0;

}

uchar read_1302(uchar addr)//读数据,先送地址再读数据

{

uchar temp,tempsw,tempgw,temp10;

T_RST=0;

T_CLK=0;

T_RST=1;

write_byte(addr);//写入地址

temp=read_byte();

T_CLK=1;

T_RST=0;//停止工作

tempsw=temp/16;tempgw=temp%16;

temp10=10*tempsw+tempgw;

return(temp10);//temp是16进制的

}

void Initial(void)

{

write_1302(0x8e,0x00); //禁止写保护

write_1302(0x80,0x00); //秒位初始化

write_1302(0x82,0x06); //分钟初始化

write_1302(0x84,0x22); //时位初始化

write_1302(0x86,0x05); //写日

write_1302(0x88,0x05); //写月

write_1302(0x8a,0x06); //写星期

write_1302(0x8c,0x12); //写年

write_1302(0x8e,0x80); //允许写保护

}

/********1602显示***************/

void write_cmd(char cmd)

{

lcdrs=0;

P0=cmd;

delay(1);

lcden=1;

delay(1);

lcden=0;

}

void write_data(uchar dat)

{

lcdrs=1;

P0=dat ;

delay(1);

lcden=1;

delay(1);

lcden=0;

}

void write_str(uchar *str)

{

while(*str!='\0')

{

write_data(*str++);

delay(5);

}

}

/*********响铃***********************/

void fn()

{did=0;while(did==0){if(k2up==0)did=1;}

while(did==1){if(k3down==0)did=0;}did=1;delay(120);

}

/*************初始化*********************/

void init()

{

b=0; t=0; nhour=7;nmie=0;

keyflag=0;

////初始化1602

lcdrw=0;

lcden=0;

write_cmd(0x38);

write_cmd(0x0c);

write_cmd(0x06);

write_cmd(0x01);

write_cmd(0x80);

b=0;

//Initial() ;

}

/********显示函数*******************/

void display(uchar tt)

{

write_data(tt/10+48);

write_data(tt%10+48);

}

/**************按键函数********************/

void keyscan()

{

uchar

clocks1,clocks2,clockf1,clockf2,year1,year2,month1,month2,day1,day2,clockm1,clockm2,week1;

if(k1set==0)

{

delay(10);

if(k1set==0)

{did=0;delay(10);did=1;b++;}

while(!k1set);write_cmd(0xcf);write_str("M");

if(b==1)

{

years=year;

months=month;

days=day;

weeks=week;

hour=clocks;

mie=clockf;

clockms=clockm;

write_cmd(0x80);

write_str("DA TE:20");

write_data(years/10+48);

write_data(years%10+48);

write_str("/");

write_data(months/10+48);

write_data(months%10+48);

write_str("/");

write_data(days/10+48);

write_data(days%10+48); write_cmd(0x87);

write_cmd(0x0f);//开显示光标

}

if(b==2){write_cmd(0x8a);}

if(b==3){write_cmd(0x8d);}

if(b==4)

{

write_cmd(0xc5);

}

if(b==5)

{

write_cmd(0xc8);

}

if(b==6)

{

write_cmd(0xce);

}

if(b==7)

{

write_cmd(0xc0);

write_str("ALAM");

write_cmd(0xc5);

display(nhour);

write_str(":");

display(nmie);

write_str("--W AKE");

write_cmd(0xc5);

}

if(b==8)

{

write_cmd(0xc8);

display(nmie);

write_str("--W AKE");

write_cmd(0xc8);

}

if(b==9)

{write_cmd(0x01);

write_cmd(0x0c);

// write_str("TIME ");

b=0;

clocks1=hour/10; ///十进制转换十六进制

clocks2=hour%10;

clocks1=clocks1&0xff;

clocks2=clocks2&0xff;

clocks1<<=4;

clocks1=clocks1|clocks2;

clockm1=clockms/10;

clockm2=clockms%10;

clockm1=clockm1&0xff;

clockm2=clockm2&0xff;

clockm1<<=4;

clockm1=clockm1|clockm2;

clockf1=mie/10;

clockf2=mie%10;

clockf1=clockf1&0xff;

clockf2=clockf2&0xff;

clockf1<<=4;

clockf1=clockf1|clockf2;

day1=days/10; ///十进制转换十六进制

day2=days%10;

day1=day1&0xff;

day2=day2&0xff;

day1<<=4;

day1=day1|day2;

month1=months/10; ///十进制转换十六进制month2=months%10;

month1=month1&0xff;

month2=month2&0xff;

month1<<=4;

month1=month1|month2;

year1=years/10; ///十进制转换十六进制

year2=years%10;

year1=year1&0xff;

year2=year2&0xff;

year1<<=4;

year1=year1|year2;

week1=weeks%10;

write_1302(0x8e,0x00);//wp=0,写操作

write_1302(0x80,0x00);//写秒

write_1302(0x82,clockf1);//写分

write_1302(0x84,clocks1);//写时

write_1302(0x86,day1); // 写日

write_1302(0x88,month1);//写月

write_1302(0x8a,week1); //写星期

write_1302(0x8c,year1); //写年

write_1302(0x8e,0x80);//WP=1,写保护

}

}

if(b!=0)

{

if(k2up==0)

{

delay(5);

if(k2up==0)

{did=0;delay(10);did=1;delay(10);

while(!k2up);

if(b==1)

{

years++;

if(years>=99)

years=1;

write_cmd(0x87);

display(years);

write_cmd(0x87);

}

if(b==2)

{

months++;

if(months>=12)

months=1;

write_cmd(0x8a);

display(months);

write_cmd(0x8a);

}

if(b==3)

{

days++;

if(days>=32)

days=1;

write_cmd(0x8d);

display(days);

write_cmd(0x8d);

}

if(b==4)

{

hour++;

if(hour>=24)

hour=0;

write_cmd(0xc5);

display(hour);

write_cmd(0xc5);

}

if(b==5)

{

mie++;

if(mie>=60)

mie=0;

write_cmd(0xc8);

display(mie);

write_cmd(0xc8);

}

if(b==6)

{

weeks++;

if(weeks>7)

weeks=1;

write_cmd(0xce);

write_data(weeks%10+48);

write_cmd(0xce);

}

if(b==7)

{

nhour++;

if(nhour>=24)

nhour=0;

write_cmd(0xc5);

display(nhour);

write_cmd(0xc5);

}

if(b==8)

{

nmie++;

if(nmie>=60)nmie=0;

write_cmd(0xc8);

display(nmie);

write_cmd(0xc8);

}

}

}

if(k3down==0)

{ delay(10);

if(k3down==0)

{

did=0;delay(10);did=1;delay(10);

while(!k3down);

if(b==1)

{

years=years-1;

if(years==-1)

years=99;

write_cmd(0x87);

display(years);

write_cmd(0x87);

}

if(b==2)

{

months--;

if(months<=0)

months=12;

write_cmd(0x8a);

display(months);

write_cmd(0x8a);

}

if(b==3)

{

days--;

if(days==0)

days=31;

write_cmd(0x8d);

display(days);

write_cmd(0x8d);

}

if(b==4)

{

hour=hour-1;

if(hour==-1)

hour=23;

write_cmd(0xc5);

display(hour);

write_cmd(0xc5);

}

if(b==5)

{

mie=mie-1;

if(mie==-1)

mie=59;

write_cmd(0xc8);

display(mie);

write_cmd(0xc8);

}

if(b==6)

{

weeks=weeks-1;

if(weeks==0)

weeks=7;

write_cmd(0xce);

write_data(weeks%10+48);

write_cmd(0xce);

}

if(b==7)

{

nhour=nhour-1;

if(nhour==-1)

nhour=23;

write_cmd(0xc5);

display(nhour);

write_cmd(0xc5);

}

if(b==8)

{

nmie=nmie-1;

if(nmie==-1)nmie=59;

write_cmd(0xc8);

display(nmie);

write_cmd(0xc8);

}

}

}

}

}

/***************主函数*****************************/ void main()

{

init();

while(1)

{

keyscan();

if(b==0)

{

clockf=read_1302(0x83);

clocks=read_1302(0x85);

clockm=read_1302(0x81);

year=read_1302(0x8d);

month=read_1302(0x89);

day=read_1302(0x87);

week=read_1302(0x8b);

write_cmd(0x80);

write_str("DA TE:20");

write_data(year/10+48);

write_data(year%10+48);

write_str("/");

write_data(month/10+48);

write_data(month%10+48);

write_str("/");

write_data(day/10+48);

write_data(day%10+48);

write_cmd(0xc0);

write_str("TIME:");

display(clocks);

write_str(":");

display(clockf);

write_str(":");

display(clockm);

write_str("-");

write_data(week%10+48);

for(i=0;i<=24;i=i+2)

{ if((clocks==nhour+i)&&(clockf==nmie)) fn();

//while(did==0){if(k2up==0)did=1;}

//while(did==1){if(k3down==0)did=0;} }

}

}

}

EDA课程设计——多功能数字钟

哈尔滨工业大学(威海) 电子学课程设计报告带有整点报时的数字钟设计与制作 姓名: 蒋栋栋 班级: 0802503 学号: 080250331 指导教师: 井岩

目录 一、课程设计的性质、目的和任务 (3) 二、课程设计基本要求 (3) 三、设计课题要求 (3) 四、课程设计所需要仪器 (4) 五、设计步骤 (4) 1、整体设计框图 (4) 2、各个模块的设计与仿真 (4) 2.1分频模块 (4) 2.2计数器模块 (6) 2.3控制模块 (10) 2.4数码管分配 (13) 2.5显示模块 (14) 2.6报时模块 (16) 六、调试中遇到的问题及解决的方法 (18) 七、心得体会 (18)

一、课程设计的性质、目的和任务 创新精神和实践能力二者之中,实践能力是基础和根本。这是由于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动是创新的源泉,也是人才成长的必由之路。 通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。 二、课程设计基本要求 掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。 三、设计课题要求 (1)构造一个24小时制的数字钟。要求能显示时、分、秒。 (2)要求时、分、秒能各自独立的进行调整。 (3)能利用喇叭作整点报时。从59分50秒时开始报时,每隔一秒报时一秒,到达00分00秒时,整点报时。整点报时声的频率应与其它的报时声频有明显区别。 #设计提示(仅供参考): (1)对频率输入的考虑 数字钟内所需的时钟频率有:基准时钟应为周期一秒的标准信号。报时频率可选用1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。另外,为防止按键反跳、抖动,微动开关输入应采用寄存器输入形式,其时钟应为几十赫兹。 (2)计时部分计数器设计的考虑 分、秒计数器均为模60计数器。 小时计数为模24计数器,同理可建一个24进制计数器的模块。 (3)校时设计的考虑 数字钟校准有3个控制键:时校准、分校准和秒校准。 微动开关不工作,计数器正常工作。按下微动开关后,计数器以8Hz频率连续计数(若只按一下,则计数器增加一位),可调用元件库中的逻辑门建一个控制按键的模块,即建立开关去抖动电路(见书70页)。 (4)报时设计的考虑

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

#include #define uchar unsigned char #define uint unsigned int //----端口定义--- sbit ACC_7=ACC^7; sbit RST1=P2^5; sbit IO=P2^6; sbit SCLK=P2^7; sbit k1=P3^2; sbit k2=P3^3; sbit k3=P2^2; sbit k4=P2^3; //uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 数码的位选,左到右 uchar tab_1302[7]={45,50,11,19,1,1,15}; uchar tab_time[8]={0,0,10,0,0,10,0,0}; //时间 uchar tab_day[8]={0,0,10,0,0,10,0,0,}; //年月日 uchar tab_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //0 1 2 3 4 5 6 7 8 9 - {"0123456789-"} ////////////=============函数声明============//////////////// void display_time(); void delayms(uint); void display_day(); void ds1302(); //获取DS1302的时间 void ds1302_init(); //DS1302的初始化 void write1302(uchar,uchar); //指定地址向DS1302写数据 uchar read1302(uchar); //指定地址向DS1302读数据 void ds1302(); void int0_init(); /////////=======中断初始化=======/////////// void int0_init() { EX0=1;

微机原理课程设计数字时钟程序

河北科技大学 课程设计报告 学生姓名:学号: 专业班级: 电子信息科学与工程 课程名称:微型计算机原理及应用 学年学期: 2 01 1 —2012 学年第1 学期 指导教师: 20 0 1 1年 1 2月 课程设计成绩评定表

目录 一、课设题目及目的………………………………….4 二、设计任务………………………………………….4 三、总框图及设计流程 (4) 四、?源程序清单 (6) 五、?调试结果及显示 (19) 六、?个人贡献………………………………………….19 七、课程设计总结及体会 (21) 一、课设题目及目的 实习题目:数字时钟程序 实习目的:通过实习,使我们进一步弄懂所学到的课本知识,巩固和深化对8086系统的指令系统、中断系统、键盘/显示系统、程序设计、应用开发等基本理论知识的理解,提高汇编语言应用于技术的实践操作技能,掌握汇编语言应用系统设计、研制的方法,培养利用科技革新、开发和创新的基本能力,为毕业后从事与其相关的工作打下一定的基础。

二、课设任务 本课题为利用汇编语言设置时钟程序,其显示效果为:截取系统时间,能以时、分、秒(其中时为24小时制)的形式显示,并且通过合理的操作能修改时和分的内容来修改时间。再有,可以给它设定一个ALARM时间,到这个时间它就能产生信号,起到定时作用,。除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx 月xx日。 ' *

DB '***********PRESS ESCBUTTON TO EXIT**************',0AH,0DH,'$' TN DB'PLEASE INPUT THE NEW TIME(HH:MM:SS):',0DH,0AH,'$' TMDB'PLEASE INPUT THE ALARM TIME (HH:MM:SS):',0DH,0AH,'$' MUSICMESS DB'PLEASE CHOOSE THE TYPE OF MUSIC:1(FAST) 2(MIDDLE) 3(SLOW)',0DH,0AH,'$' MESS2DB'TIME IS:',0AH,0DH,'$' MESS3DB 'TODAY IS:',0AH,0DH,'$' DBUFFER1DB20DUP('') T_BUFFD B 40 ;在数据段开一段时间显示缓冲区 DB ? DB 40DUP(?) HOR DB? MIN DB? SEC DB? TEMPHOR DB ? TEMPMIN DB? TEMPSEC DB? MUSIC DW 800;存放音乐的频率数DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODESEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: CALL CLEAR ;调用清屏子程序 DISPLAY:;时间显示部分 MOV AX,DATA MOVDS,AX MOVBX,OFFSETT_BUFF;送T_BUFF的偏移地址到BX MOV AH,2CH;调用DOS时间调用功能,功能号:2CH,小时,分钟,秒数分别保存在CH,CL,DH中 INT 21H ;判断时间是否相等SUB DH,1;秒数+1修正 CALL CHECK ;.........................................................................

整点报时数字钟设计

信息与电气工程学院 课程设计说明书 课程名称:整点报时数字钟 题目:整点报时数字钟 专业班级:电气工程及其自动化07-05 学生姓名: 学号: 指导教师:崔春艳 设计周数:2周 设计成绩:

1. 课程设计目的……………………………………………………… 2 .课程设计的要求…………………………………………………… 3. 数字钟方案设计…………………………………………………… 3.1方案设计…………………………………………………………… 3.2数字钟逻辑框架图………………………………………………… 4. 单元电路的设计和元器件的选择………………………………… 4.1 时钟秒脉冲的产生………………………………………………… 4.2 六十进制计数电路的设计………………………………………… 4.3 双六十进制计数电路设计………………………………………… 4.4 二十四进制计数电路的设计……………………………………… 4.5 译码驱动及显示单元电路设计…………………………………… 4.6 整点报时器单元电路……………………………………………… 4.7 校正单元电路的设计……………………………………………… 5.数字钟的PCB 板图的设计…………………………………………… 5.1PROTEL99的使用…………………………………………………… 5.2具体工艺要求和相关规则………………………………………… 5.3 注意事项………………………………………………………… 6.系统调试……………………………………………………………… 6.1 系统调试方法……………………………………………………… 6.2调试出现的问题及解决方法……………………………………… 7. 元器件清单………………………………………………………… 8. 主要元件介绍……………………………………………………… 9. 课程设计总结和心得体会………………………………………… 9.1 设计过程中遇到的问题及解决方法……………………………… 9.2 个人体会…………………………………………………………… 10. 参考文献……………………………………………………………附录…………………………………………………………………… 1 数字钟原理图……………………………………………………… 2 数字钟PCB板………………………………………………………课程设计评语表格……………………………………………………

数字钟设计(带仿真和连接图)

- 数字电子技术课程设计报告 题目:数字钟的设计与制作 : 专业:电气本一班 学号:姓名: 指导教师: 时间: - —

一、设计内容 数字钟设计 … 技术指标: (1)时间以24小时为周期; (2能够显示时,分,秒; (3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; (4)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时; (5)为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号. ~ 二、设计时间: 第十五、十六周 三、设计要求: (1)画出设计的电路原理图; $ (2) 选择好元器件及给出参数,在原理图中反应出来; (3)并用仿真软件进行模拟电路工作情况; (4)编写课程报告。

! 摘要 数字钟实际上是一个对标准频率(1Hz)进行计数的计数电路。振荡器产生的时钟信号经过分频器形成秒脉冲信号,秒脉冲信号输入计数器进行计数,并把累计结果以“时”、“分”、“秒”的数字显示出来。秒计数器电路计满60后触发分计数器电路,分计数器电路计满60后触发时计数器电路,当计满24小时后又开始下一轮的循环计数。一般由振荡器、分频器、计数器、译码器、数码显示器等几部分组成。 振荡电路:主要用来产生时间标准信号,因为时钟的精度主要取决于时间标准信号的频率及稳定度,所以采用石英晶体振荡器。 分频器:因为振荡器产生的标准信号频率很高,要是要得到“秒”信号,需一定级数的分频器进行分频。 计数器:有了“秒”信号,则可以根据60秒为1分,24小时为1天的进制,分别设定“时”、“分”、“秒”的计数器,分别为60进制,60进制,24进制计数器,并输出一分,一小时,一天的进位信号。 译码显示:将“时”“分”“秒”显示出来。将计数器输入状态,输入到译码器,产生驱动数码显示器信号,呈现出对应的进位数字字型。 由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路可以对分和时进行校时。另外,计时过程要具有报时功能,当时间到达整点前10秒开始,蜂鸣器1秒响1秒停地响5次。 } 为了使数字钟使用方便,在设计上使用了一个变压器和一个整流桥来实现数字钟电能的输入,使得可以方便地直接插入220V的交流电就可以正常地使用了。关键词数字钟振荡计数校正报时

数字时钟程序

#define uchar unsigned char #define unit unsigned int #include #include #include void 1cd_putchar(uchar 1cdchar) void 1cd_putsf(uchar code *chars) uchar code http[ ]={"current time is:"} sbit KEY1=P3^3; // sbit KEY2=p3^4; // ///////////////////////////////////////// uchar t50ms,ts,tm,th; uchar DISP_BUFFER[6]=0; void timer0(void) interrupt 1 using1 { THO=0x3c; TLO=0xbo; //50ms t50ms++; if(t50ms==20) { t50ms=0; ts++; if(ts==60) {tm=0; th++; if(th==24) {th=0; } } } } } void main (void) { p0=OXFF; P1=OXFF; P2=OXFF; P3=OXFF; TMOD=0X01;//T0 THO=0X3C; TLO=0XB0;//50ms EA=1 ETO=1; initialise();

1cd_setxy(0,0); 1cd_putsf(http); TRO=1; while(1) { DISP_BUFFER[0]=th/10; DISP_BUFFER[1]=th%/10; DISP_BUFFER[2]=tm/10; DISP_BUFFER[3]=tm%/10; DISP_BUFFER[4]=ts/10; DISP_BUFFER[5]=ts%/10; 1cd_setxy(1,0); 1cd_putchar(DISP_BUFFER[0]+0X30; 1cd_putchar(DISP_BUFFER[1]+0X30; 1cd_putchar(':'); 1cd_putchar(DISP_BUFFER[2]+0X30; 1cd_putchar(DISP_BUFFER[3]+0X30; 1cd_putchar(':'); 1cd_putchar(DISP_BUFFER[4]+0X30; 1cd_putchar(DISP_BUFFER[5]+0X30; if(!KEY1) {TM++; delay_ms(100);} } } //display one char void 1cd_putchar(uchar 1cdchar) { output(1cdchar); } //display a sting void 1cd_putsf(uchar code *chars) { uchar i=0; while(chars[i]>=0x20&chars[i]<0x7f) {if (i<0x0f) {output (chars[i]); i++; } else { 1cd_setxy(1,0); while( (chars[i]>0x20&chars[i]<0x7f) ) {output(chars[i]);

整点报时可调式数字电子时钟的设计

用EDA软件实现整点报时数字式可调电子时钟的设计 一、设计目的 了解常见中规模数字集成电路的使用方法,包括计数器、显示译码器、多谐振荡器的工作原理及使用方法。通过组装具有整点报时数字可调电子时钟,了解这类电路的使用技巧及调整方法。通过对电路板的实际布线焊接检测调试,提高电子技术硬件的基本能力。 二、系统组成 1、先用Multisim实现如下系统: 本组合电路包括时基多谐振荡器、计数器、十进制译码显示器、发光数码管等部分组成。各部分组成框图如下: 系统组成图 2、仿真通过 三、单元电路组成原理与参数选择 1、多谐振荡器:这里采用最常见的时基电路555组成的周期为1秒的振荡器。555集成电路的原理及应用可以参见教材,此不重复。通常选择适当的定时电阻和电容元件使振荡刚好为1秒钟。多谐振荡器的电路图和NE555的芯片引脚图如下:

2、十进制计数器: 本系统采用的是十进制计数器7490。本系统秒钟是用两个7490构成60进制组成。分钟也是用两个7490构成60进制组成时钟采用两个7490构成24进制计数器组成。将三个计数器级连起来就构成了电子时钟。7490的芯片图和真值表如下:(5脚接电源VCC,10脚接地其中1脚和12脚相连)。 X 0 0 X COUNT 下面介绍秒钟和分钟连接方法如下图(如果是秒钟14脚则接多谐振荡器555电路的第3脚,如果是分钟14脚则接秒钟的7408(与门)芯片的第3脚。

下面介绍时钟的接法(14脚接分钟的7408的第3脚): 3、7448实现多位数字码显示译(如果是选用共阳极七段数码管则选择7447) 7448为七段译码显示器,其功能可详细参见数字电路书。它实现的功能是把7490输出 的(QA、QB、QC、QD)实现译码驱动七段共阴极数码显示它的接法如下:

数字电子钟(计时、校时以及整点报时)数电课程设计报告

设计要求 1.用秒脉冲作信号源,构成数字钟,显示秒、分、时 2.具有“对时”功能,即时间可以快速预置 3.具有整点提示功能。一种实现的方法是每到整点时触发“音乐芯片”或每到整点前几秒钟,发出如“的、的、的、答”声音信号。 系统框图 设计过程 时间显示模块电路可以用3个CD4518作为核心芯片,进行级联,再辅以若干逻辑门,完成进位、置零等功能,CD4518是双十进制计数器,有两个时钟输入端,正好可以满足进位和校时的功能,而不会产生干扰,且有一个置零功能,可以组成六十进制和二十四进制的计数器。 整点报时模块电路用的是555芯片和一块CD4068芯片组成的电

路,555芯片可以接成多谐振荡器,提供交变信号使蜂鸣器发出声音,而整点报时的控制可以用CD4068实现,CD4068是8输入与/与非门,可以在整点之前输出脉冲信号,经过由555芯片组成的多谐振荡器,为其提供一个信号,这样由多谐振荡器输出端可以使蜂鸣器发出“嘀、嘀、嘀”的响声。 秒信号发生器可以用实验箱上的秒脉冲信号代替。 考虑到开关抖动现象,校时模块电路实验实验箱上的按键开关,每输出一个脉冲信号可以改变分个位和十个位,同时考虑到干扰问题,进位接线和校时接线接在不同的时钟输入端。 电路仿真与设计 3.1所需芯片及芯片管脚图 CD4518 CD4068 CD4002 CD4011

CD4069 555 3.2时、分、秒显示电路模块设计 整个电路的的核心芯片是CD4518,它是一个双10进制加法计数器,因此只需要三个芯片,进行级联即可实现两个六十进制和一个二十四进制计数器,再加上一些合适的逻辑门,实现置零和进位。 上图是秒显示电路设计图,右边为秒个位,左边为秒十位,秒个位的电路中置零引脚和时钟输入端CP1必须接地,这是因为CMOS 的引脚不能悬空,否则会影响实验结果,CP0接秒脉冲信号,考虑到秒个位计数到9的时候必须进位,所以在显示0的同时输出一个进位信号,输出是0000,因此可以用一个或非门,当输出是0000的时候提供一个进位信号至秒十位的时钟输入端,秒十位另一个时钟输入端接地,当秒十位计数器计到5时,在输出为0110时提供一个信号到秒十位计数器的置零端,使其实现0110——0000,即六十进制。

最新毕业设计:基于单片机的电子日历时钟

一课程设计题目:电子日历时钟 二实现的功能: 基本功能: (1)显示北京时间,并且能够校准时间; (2)程序使用汇编语言; (3)显示的时、分、秒之间以及年、月、日间以小数点分隔;(4)显示公历日期,并且能够校准日期; 发挥功能: (5)运动秒表; (6)闹钟功能; (7)自动整点报时。 三课程设计的目的: 课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。 四、设计方案说明 1、硬件部分 (1)采用6位LED数码管显示日期或者时间。 (2)显示器的驱动采用“动态扫描驱动”,且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹 钟设置状态; (3)电路连接使用PCB,使电路连接简洁美观

2、软件部分 (1)“时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不 能超过16位定时器的最长定时时间;最短不能少于中断服 务程序的执行时间。基准时间越短,越有利于提高时钟的 运行精确度。基准时间定为0.05秒。 (2)用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理 进行“分”﹑“时”定时,以及“日”﹑“月”﹑“年” 定时。 (3)LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间 短),而驱动信号的间歇时间必须小于“余辉时间”(电流 大余辉时间长),但驱动电流大小受硬件电路能力和LED 数码管极限功耗的制约。 (4)动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容 写入显示器之前将所有的LED数码管熄灭。 (5)关于自动识别“月大﹑月小”和“平年﹑润年”问题的考虑 a)月大和月小 2月另外计算;

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

课题:基于51单片机的多功能数字时钟系统设计 一、概述、设计思路 该设计方案是以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输入。

整点报时数字钟资料

整点报时数字钟

数字钟 一、设计任务 本任务为:数字钟。设计任务具体内容如下: 1.1 基本设计任务 依据命题题意,本设计采用89C51进行24小时计时并显示。要求其显示时间范围是00:00:00~23:59:59,具备有时分秒校准功能。数字钟上面要带有闹钟,闹钟与时钟之间能随时切换,闹钟具备时分秒设置功能。 1.2 控制设计任务 由于本设计采用手动校准时钟与手动设置闹钟方案,所以要求用较少的按键来达到切换闹钟与时钟、时钟时分秒校准、闹钟时分秒设置等功能。 1.3 软件设计任务 数字钟的所有计时都要由软件控制实现。用软件对几个按键所得信号进行相应改变,以控制时钟与闹钟的显示。通过软件对闹钟与时钟进行比较,当时钟所显示时间与闹钟一样时,要启动报时模块。 三、总体设计 经过对各个方案分析比较,最终确定总方案如图3-1所示。该系统所有模块都由主单片机控制。其中,设计各个模块,包括单片机、显示模块、电机驱动、光电探测由四节AA电池供电。电机驱动采用L298驱动芯片控制。用光电传感器对边线的探测来控制距离。通过单片机的机器周期计算时间计数周期,以达到计时目的。

图3-1 系统方案图3.1 系统硬件电路设计 3.1.1 显示及控制模块

图3-4 语音报时模块

3.2 系统软件设计 3.2.1 软件计时的分析与计算 单片机内部定时器有4种工作模式,方式0是13位计数器,由于计时时间过短,中断频率高,所以不选用此模式;方式2是自动重装式计数器,是8位计数器,同样中断频率过高;方式3也是8位计数器;方式1是16位计数器,综合考虑,选用方式1做精确计时。 由于51单片机是12分频,因此机器周期=晶振频率/12。在该设计中,选用频率为12MHz的晶振,因此机器周期=1μs。定时1s需要1000000个机器周期,因此通过20次定时器中断完成1s的定时,每次完成50000个周期的定时,因此每次给定时器的初值应该是TH0=B0H,TL0=3CH。 3.2.2 系统软件设计 设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。

电子日历时钟设计

目录 1题目设计的要求 (1) 2 系统硬件设计 (1) 2.1设计原理 (1) 2.2器件的功能与作用 (1) 2.2.1 MCS51单片机AT89C51 (1) 2.2.2 串行时钟日历片DS1302 (2) 2.2.3 液晶显示LCD1602 (3) 3 系统软件设计 (4) 3.1程序流程 (4) 3.2程序代码 (5) 4 系统仿真调试 (12) 4.1仿真原理图设计 (12) 4.2仿真运行过程 (12) 4.3仿真运行结果 (13) 5 总结 (13) 6 参考文献 (13)

1题目设计的要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2 系统硬件设计 2.1 设计原理 图3.1 电路原理图 2.2 器件的功能与作用 2.2.1 MCS51单片机AT89C51 XX AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件

采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。 AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2.2.2 串行时钟日历片DS1302 系统的组成与工作原理: 系统由单片机AT89C52,串行日历时钟片DS1302,液晶显示模组LCD1602。 DS1302的CLOCK与AT89C52的P1.6相连,RST与P1.5相连,IO与P1.7相连。 LCD1602的D0~D7与AT89C51的P0.0~P.7相连,并接上拉电阻,RS与P2.0相连,RW与P2.1相连,E与P2.2相连。 DS1302是DALLAS公司拖出的涓流充电时钟芯片,内含有一个实时时钟/日历和31个季节静态RAM,通过简单地串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24小时或12小时格式,DS1302与单片机之间能简单地采用同步串行方式进行通信,仅需用到RES复位、I/O 数据线、SCLK串行时钟3个口线。对时钟、RAM的读/写,可以改用单字节方式或多达31个字节的字符组方式。DS1302工作时功耗很低,保持数据和时钟信息是功率小于1mW。DS1302广泛应用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。 RT-1602 字符型液晶模块是以两行16个子的5*7点阵吐信来显示字符的液晶显示器。 DS1302有8个引脚: X1、X2:32.768kHz晶振介入引脚。 GND:地。 RST:复位引脚,低电平有效。 I/O:数据输入/输出引脚,具有三态功能。 SCLK:串行时钟输入引脚。 Vcc1:工作电源引脚。 Vcc2:备用电源引脚。 DS1302有一个控制寄存器,12个日历,时钟寄存器和31个RAM。 控制寄存器 控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它的格式如下:

数字电子时钟源程序

#include "2407c.h" //数字电子时钟按Key1启动、Key2暂停、Key3复位、Key4调时 #define disable() asm(" setc INTM") //禁止全局中断 #define enable() asm(" clrc INTM") //允许全局中断 unsigned int k=0,s=30,m=59,h=23,j=1; unsigned int d[8] = {0x0100,0x0200,0x030a,0x0400,0x0500,0x060a,0x0700,0x0800}; unsigned int w[8] = {0x0101,0x0204,0x030a,0x0400,0x0503,0x060a,0x0700,0x0804}; //系统初始化子程序 void chushihua (void) { asm (" clrc SXM"); //抑制符号位扩展 asm (" clrc OVM"); //累加器正常溢出 asm (" clrc CNF"); //B0被配置为数据存储空间 *WDCR=0x00E8; //关闭看门狗 *SCSR1=0X00FC; //CLKIN=10M,CLKOUT=CLK*4=40M *IMR=0x0002; //开INT2 *IFR=0xFFFF; //清全部中断,写1清0,参见P43 *MCRB=0xFE3C; //启用SPI功能引脚 *MCRA=0; //IOPA、IOPB配置为一般I/O功能 *MCRC=0; //IOPE、IOPF配置为一般I/O功能 *PFDATDIR=0x00FF; //IOPF设置为输入,并上拉 *SPICCR=0x0F; //SPI软复位、上升沿输出数据、16位数据长度 *SPICTL=0x0E; //禁止过冲中断、允许TALK(发送)数据、主机模式、禁止SPI中断//上升沿有延时 *SPIBRR=0x0F; //SPI波特率=SYSCLK/(SPIBRR+1)=2.5M *SPICCR=*SPICCR|0x80; //SPI恢复操作,准备发送、接收下一个字符 WSGR=0x00; //禁止所有的等待状态 } //延时子程序 void delay(unsigned int pp) { unsigned int k,i; for(k=0;k

整点报时数字钟课程设计

整点报时数字钟课 程设计

信息工程学院 课程设计报告书 ( / 年第二学期) 课程名称:电子技术课程设计题目:能整点报时的电子表专业班级:自动化111 学生姓名:胡义海 学号: 指导教师:康耀明 设计成绩:

1课程设计目的................................................................... 错误!未定义书签。2系统的方案设计............................................................... 错误!未定义书签。 3 系统的详细设计 ............................................................... 错误!未定义书签。 3.1脉冲产生和分频电路.................................................... 错误!未定义书签。 3.1.1脉冲产生和分频电路的设计 .................................. 错误!未定义书签。 3.1.2馆建器件74 LS74的介绍........................................ 错误!未定义书签。 3.1.3关键器件CD4060的介绍 ....................................... 错误!未定义书签。 3.2计时电路 ....................................................................... 错误!未定义书签。 3.2.1分,秒计时电路的设计 .......................................... 错误!未定义书签。 3.2.2小时计时电路的设计 .............................................. 错误!未定义书签。 3.2.3关键器件CD4510的介绍........................................ 错误!未定义书签。 3.3显示译码电路................................................................ 错误!未定义书签。 3.3.1显示译码电路的设计 .............................................. 错误!未定义书签。 3.3.2关键器件CD4511和数码管的介绍........................ 错误!未定义书签。 3.4校时电路 ....................................................................... 错误!未定义书签。 3.4.1校时的电路的详细设计 .......................................... 错误!未定义书签。 3.4.2关键器件RS触发器的详细介绍............................. 错误!未定义书签。 3.5整点报警电路................................................................ 错误!未定义书签。 4 心得体会 .......................................................................... 错误!未定义书签。 5 参考文献 .......................................................................... 错误!未定义书签。

数字钟的设计(含有闹钟功能)

# 综合设计报告~ 设计名称:数字逻辑综合设计报告 设计题目:数字电子钟 学生学号: 专业班级: … 学生姓名: 学生成绩: 指导教师(职称): 课题工作时间:至

目录 摘要……………………………………………………………………………………… II Abstract …………………………………………………………………………………... II 第一章课题背景(或绪论、概述) (1) 数字电子钟应用 (1) 电子钟的应用前景 (x) 第二章设计简介及设计方案论述 (x) 设计原理简介 (x) 设计方案论述 (x) 设计目的概述 (x) 第三章详细设计 (x) 实验元件及介绍 (x) 模块的详细设计 (x) 3.2.1 二十四时制显示模块 3.2.2 校时电路模块 3.2.2 整点报时模块 3.2.2 闹钟模块 第四章设计结果及分析 (x) 设计电路 (x) 运行结果及分析 (x) 结果分析 (x) 总结 (x) 致谢 (x)

参考文献 (x) 附录主要程序代码 (x) 摘要 【关键词】电子钟、校时电路、比较器、整点报时 数学逻辑课程设计选题是电子钟的设计,运用 SP3版仿真软件进行电子钟的设计。主要原理是由555芯片及门电路产生多谐震荡,输出稳定的为1HZ秒脉冲,作为时间基准。秒计时器满60向分计时器仅为,分计时器满60向小时计时器进位,小时计时器以24为一个周期,并实现了小时高位具有零熄灭的功能,计时器的输出送到显示屏,课在相应位置正确显示时、分。秒。计时出现误差或者调整时间时用校时电路进行时、分的调整。而且添加了整点报时功能,并利用比较器实现了闹钟功能。 Abstract 【Keywords】Digital clock, divider chip, the decoder chip, the campus circuit, the whole point alarm The desigining topic of the electronic technology course is the digital clock. The main principle by the oscillator transistor multivibrator oscillation, after the output frequency divider and stable pulse,60 seconds over the counter sub-counters to carry, at least 60 minutes to the hour counter binary counter, hours counter for a period of 24 and achieve a high level with zero off-hour functions. Counter displays the output sent by the decoder can be displayed correctly in the appropriate location, minutes, second. Timing errors, or adjust the time when the school when the circuit is available, the minutes of the adjustment. In this circuit, The whole point alarm will last 10 seconds per hour.

单片机课程设计 电子日历时钟显示器设计

目录 1.题目设计要求 (1) 2.开发平台简介 (1) 3.系统硬件设计 (2) 3.1设计原理 (2) 3.2器件的功能与作用 (2) 3.2.1 MCS51单片机AT89C51 (2) 3.2.2复位电路 (3) 3.2.3晶振电路 (4) 3.2.4 DS1302时钟模块 (4) 3.2.5 引脚功能及结构 (4) 3.2.6 DS1302的控制字节 (5) 3.2.7 数据输入输出(I/O) (5) 3.2.8 DS1302的寄存器 (6) 3.2.9 液晶显示LCD1602 (6) 3.2.10 串行时钟日历片DS1302 (8) 4.系统软件设计 (10) 4.1程序流程 (10) 4.2程序代码 (10) 5.系统仿真调试 (20) 5.1仿真原理图设计 (20) 5.2仿真运行过程 (21) 5.3仿真运行结果 (21) 6.总结 (21) 7.参考文献 (22)

1.题目设计要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2.开发平台简介 2.1系统仿真平台Proteus Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,已有近20年的历史,在全球得到了广泛应用。Proteus软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩。和我们手头其他的电路设计仿真软件,他最大的不同即它的功能不是单一的。另外,它独特的单片机仿真功能是任何其他仿真软件都不具备的。 2.2软件开发平台Keil C Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51生成的目标代码效率之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

相关文档
最新文档