文档库 最新最全的文档下载
当前位置:文档库 › 可调电子钟程序

可调电子钟程序

可调电子钟程序
可调电子钟程序

/*-----------------------------------------------

名称:DS1302时钟数码管显示

论坛:https://www.wendangku.net/doc/1911051301.html,

编写:shifang

日期:2009.5

修改:无

内容:DS1302实时时钟数码管显示,只显示时间。并通过4个按键加减小时、分钟,其他参数调节自行添加

------------------------------------------------*/

#include "ds1302.h"

#include "18b20.h"

#include "delay.h"

#include "1602.h"

sbit key0=P3^0;

sbit key1=P3^1;

sbit key2=P3^2;

sbit key3=P3^3;

#define KeyPort P1 //定义按键端口

#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换

//sbit c_select=P1^4;//调整键

sbit c_up=P1^5;

//sbit c_down=P1^6;//调下

unsigned char ReadTimeFlag;//定义读时间标志

unsigned char key00,pos,set;

unsigned char flag;//显示模式标志位

unsigned char num;

unsigned int TempH,TempL,temp;//读取温度的临时变量

unsigned int timer1;

unsigned char position=0;

unsigned char add=1;

unsigned char TimeData[8]={1,1,1,1,1,1,1}; //存储显示时间(时分秒)的全局变量

unsigned char DateData[8]; //存储显示时间(年月日)的全局变量

unsigned char TempData[8]={0x30,0x30,'.',0x30,0x30,0xdf,'C'}; //存储显示温度的全局变量unsigned char pos1Data[3]={5,8,11};

unsigned char pos2Data[3]={8,11,14};

unsigned char MaxData[6]={100,13,32,24,60,60};

void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数void keyadd (uchar,uchar);//加一

void keydec (uchar,uchar);//减一

unsigned char KeyScan(void);//键盘扫描

void Init_Timer0(void);//定时器初始化

void int0_init();//中断0初始化

void int1_init();//int1初始化

void time_change();

/*------------------------------------------------

主函数

------------------------------------------------*/

void main (void)

{

flag=0;

key00=0;

add=1;

pos=0;

timer1=200;

LcdReset();

DelayMs(2000);

Ds1302_Write_Time();

Ds1302_Init();

//Ds1302_Write_Time();

if(Init_DS18B20())

{

ePutstr(9,1,"ERROR");

}

ePutstr(3,0,"20");

ePutstr(0,1,TempData);

ReadTimeFlag=0;

temp=0;

Init_Timer0();

//int0_init();//中断初始化

//int1_init();

while (1) //主循环

{

if (key00==0)

{

key0=1;

if(!key0)

{ //按下相应的按键,数码管显示相应的码值

DelayMs(20);

if(!key0)

{

key00=1;

set=0;

while (key0==0);

}

}

Ds1302_Read_Time();

DateData[0]=time_buf1[0]/10+0x30; //时

DateData[1]=time_buf1[0]%10+0x30;

DateData[2]='-'; //加入"-"

DateData[3]=time_buf1[1]/10+0x30; //分

DateData[4]=time_buf1[1]%10+0x30;

DateData[5]='-';

DateData[6]=time_buf1[2]/10+0x30; //秒

DateData[7]=time_buf1[2]%10+0x30;

TimeData[0]=time_buf1[3]/10+0x30; //时

TimeData[1]=time_buf1[3]%10+0x30;

TimeData[2]=':'; //加入"-"

TimeData[3]=time_buf1[4]/10+0x30; //分

TimeData[4]=time_buf1[4]%10+0x30;

TimeData[5]=':';

TimeData[6]=time_buf1[5]/10+0x30; //秒

TimeData[7]=time_buf1[5]%10+0x30;

if(ReadTimeFlag==1)

{

ReadTimeFlag=0;

temp=ReadTemperature();

if(temp>6000) temp=0;

TempData[0]=(temp/1000)+0x30;

TempData[1]=(temp%1000)/100+0x30;

TempData[2]='.';

TempData[3]=(temp%100)/10+0x30;

TempData[4]=temp%10+0x30;

TempData[5]=0xdf;

TempData[6]='C';

}

ePutstr(5,0,DateData);

ePutstr(8,1,TimeData);

ePutstr(0,1,TempData);

}

if (key00==1)

{

key0=1;

if(!key0)

{ //按下相应的按键,数码管显示相应的码值DelayMs(20);

if(!key0)

{

key00=0;

pos=0;

while (key0==0);

}

}

key1=1;

if(!key1)

{ //按下相应的按键,数码管显示相应的码值DelayMs(20);

if(!key1)

{

pos=pos+1;

if(pos==6)

{

pos=0;

}

while (key1==0);

}

}

if(set==0)

{

timer1--;

DateData[0]=time_buf1[0]/10+0x30; //时

DateData[1]=time_buf1[0]%10+0x30;

DateData[2]='-'; //加入"-"

DateData[3]=time_buf1[1]/10+0x30; //分

DateData[4]=time_buf1[1]%10+0x30;

DateData[5]='-';

DateData[6]=time_buf1[2]/10+0x30; //秒

DateData[7]=time_buf1[2]%10+0x30;

TimeData[0]=time_buf1[3]/10+0x30; //时

TimeData[1]=time_buf1[3]%10+0x30;

TimeData[2]=':'; //加入"-"

TimeData[3]=time_buf1[4]/10+0x30; //分

TimeData[4]=time_buf1[4]%10+0x30;

TimeData[5]=':';

TimeData[6]=time_buf1[5]/10+0x30; //秒

TimeData[7]=time_buf1[5]%10+0x30;

ePutstr(5,0,DateData);

ePutstr(8,1,TimeData);

if (timer1==0)

{

set=1;

timer1=300;

}

}

if(set==1)

{

if(pos<3)

{

ePutstr(pos1Data[pos],0," ");

timer1--;

}

else

{

ePutstr(pos2Data[pos-3],1," ");

timer1--;

}

if (timer1==0)

{

set=0;

timer1=300;

}

}

key2=1;

if(!key2)

{ //按下相应的按键,数码管显示相应的码值DelayMs(20);

if(!key2)

{

time_buf1[pos]=time_buf1[pos]+1;

if (MaxData[pos]==time_buf1[pos]) time_buf1[pos]=0;

time_buf[pos]=time_buf1[pos];

Ds1302_Write_Time();

while (key2==0);

}

}

key3=1;

if(!key3)

{ //按下相应的按键,数码管显示相应的码值

DelayMs(20);

if(!key3)

{

if (time_buf1[pos]==0) time_buf1[pos]=MaxData[pos]-1;

else time_buf1[pos]=time_buf1[pos]-1;

time_buf[pos]=time_buf1[pos];

Ds1302_Write_Time();

while (key3==0);

}

}

/*if(ReadTimeFlag==1)

{

ReadTimeFlag=0;

temp=ReadTemperature();

if(temp>6000) temp=0;

TempData[0]=(temp/1000)+0x30;

TempData[1]=(temp%1000)/100+0x30;

TempData[2]='.';

TempData[3]=(temp%100)/10+0x30;

TempData[4]=temp%10+0x30;

TempData[5]=0xdf;

TempData[6]='C';

ePutstr(0,1,TempData);

} */

}

}

}

/******************时间调整函数***************************/

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

void int0_init()//int0初始化

{

IT0=1;

EX0=1;

EA=1;

}

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

void int1_init()//int1初始化

{

IT1=1;

EX1=1;

EA=1;

}

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

TH0=(65536-5000)/256; //赋值2ms

TL0=(65536-5000)%256;

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //定时器开关打开

}

/*------------------------------------------------

定时器中断子程序

------------------------------------------------*/

void Timer0_isr(void) interrupt 1

{

static unsigned int num;

TH0=(65536-5000)/256; //重新赋值2ms

TL0=(65536-5000)%256;

num++;

if(num==500) //大致100ms

{

num=0;

ReadTimeFlag=1;

}

}

/***************中断0子程序*******************/

void int0(void) interrupt 0

{

EA=0;

while(1)

{

key0=1;

if(!key0)

{ //按下相应的按键,数码管显示相应的码值DelayMs(10);

if(!key0)

{

Ds1302_Write_Byte(ds1302_control_add,0x80);

}

}

}

EA=1;

}

单片机电子时钟程序

程序开始 ORG 0000H AJMP MAIN ORG 000BH AJMP CLOCK ORG 0100H 主程序开始: MAIN: MOV SP,#70H MOV 6EH,#00H ;显示缓存器初始值设定 MOV 6DH,#00H MOV 6CH,#00H MOV 6BH,#00H MOV 6AH,#00H MOV 69H,#00H MOV 50H,#00H ;秒,分,小时初始值设定 MOV 51H,#00H MOV 52H,#00H MOV DPTR,#0F003H ;8255端口定义,PA,PB为输出 MOV A,#80H MOVX @DPTR,A MOV 4FH,#00H MOV TMOD,#01H ;定时器T0及TL0,TH0初始值设定 MOV TH0,#3CH MOV TL0,#0B0H SETB EA ;开总中断 SETB ET0 ;开定时器中断 SETB TR0 循环程序开始,并显示时间: START: MOV A,50H LCALL BCD MOV 6AH,A ;显示秒十位 MOV 69H,B ;显示秒个位 MOV A,51H LCALL BCD MOV 6CH,A ;显示分十位 MOV 6BH,B ;显示分个位 MOV A,52H LCALL BCD ;调用十六进制至BCD码转换子程序 MOV 6EH,A MOV 6DH,B LCALL DIS ;调用显示子程序 LCALL KEY ;调用键盘子程序 AJMP START ;主程序结束

BCD: MOV B,#0AH ;BCD码转换子程序 DIV AB RET CLOCK: PUSH ACC ;保护现场 PUSH PSW CLR TR0 MOV TH0,#3CH ;定时参数重新设置 MOV TL0,#0B0H SETB TR0 INC 4FH ;100ms单元加1 MOV A,4FH CJNE A,#0AH,D0 ;100ms单元=10,就秒单元加1 MOV 4FH,#00H ;100ms单元内容清0 MOV A,50H ADD A,#01H ;秒单元加1 MOV 50H,A CJNE A,#3CH,D0 ;秒单元内容=60,则秒单元清0 MOV 50H,#00H MOV A,51H ;分,时单元代码 ADD A,#01H MOV 51H,A CJNE A,#3CH,D0 MOV 51H,#00H MOV A,52H ADD A,#01H LCALL RING ;报警子程序 MOV 52H,A CJNE A,#18H,D0 MOV 52H,#00H D0: POP PSW ;出栈,退出中断子程序 POP ACC RETI RING: MOV R3,A CLR P1.0 LCALL DELL50 SETB P1.0 LCALL DELL50 DJNZ R3,RING RET 键盘子程序: KEY: JB P1.7,MSET ;秒设定子程序 LCALL DELL ;防抖动延时 JB P1.7,MSET INC 50H

电子钟程序及原理图

. ..页脚.

基于51单片机电子钟设计 利用如图所示电路,设计一个电子钟,要求如下: 1)显示容:时-分-秒 2)具有闹铃设定功能、时间调整功能 3)具有按键设置功能 一、显示容 显示时间:用六位7段数码管 闹铃提示:用8个发光二极管 设置提示:用8个发光二极管 二、按键功能 P3.2——功能设置键; P3.3——显示区切换键; P3.4——“+”键; P3.5——“-”键。 设置提示显示要求: 1)正常显示状态,8个发光二极管全灭; 2)时间调整状态,P1.7亮; 3)闹铃设定状态,P1.7和P1.6亮。 显示时间要求: 1)显示时-分-秒,分三个显示区。 功能设置键K1是一个多功能键: 按第一次,进入时间调整状态 按第二次,进入闹铃设定状态 按第三次,退出设置状态,时钟正常显示。 备注:其他键在K1退出设置状态时无效。 显示区切换键K2: 在设置状态,用于切换不同的显示区,每按一次,将切换一次。 “+”键K3:在设置状态,用于对相应的显示区数字进行累加,每按一次,数字加1。“-”键K4:在设置状态,用于对相应的显示区数字进行自减,每按一次,数字减1。程序: K1 BIT P3.2 K2 BIT P3.3 K3 BIT P3.4 K4 BIT P3.5 L1 BIT P1.7 L2 BIT P1.6 KEZT EQU 30H HOUR EQU 31H MINU EQU 32H SECO EQU 33H NHOU EQU 34H NMIN EQU 35H K2ZT EQU 36H

TIME EQU 37H TIM EQU 40H NTIM EQU 50H LED EQU P1 ORG 0000H AJMP START ORG 000BH AJMP DINGSHI ORG 100H START: ACALL RESET LOOP: ACALL KEYSET ACALL DISPLAY ACALL ZHISHI AJMP LOOP ;************************************** DINGSHI: MOV TH0,#3CH MOV TL0,#0B0H INC TIME MOV A,TIME CJNE A,#20,DINGEND MOV TIME,#0 INC SECO MOV A,SECO CJNE A,#60,DINGEND INC MINU MOV SECO,#0 MOV A,MINU CJNE A,#60,DINGEND INC HOUR MOV MINU,#0 MOV A,HOUR CJNE A,#24,DINGEND MOV HOUR,#0 DINGEND: RETI ;**************************************** RESET: MOV TMOD,#01H ;T0工作在方式1,12MHZ MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 MOV HOUR,#23 MOV MINU,#59 MOV SECO,#58 MOV NHOU,#12

用LCD设计的可调式电子钟

单片机应用 课程设计说明书 用1602LCD设计的可调式电子钟专业自动化 学生姓名 班级自动化142 学号 14100 指导教师蒋 完成日期 20年1 月23 日

目录 1 概述.......................................................................................... 错误!未指定书签。 2 课题研究背景与意义...................................................................... 错误!未指定书签。 2.1 课题研究背景....................................................................... 错误!未指定书签。 2.2 课题研究意义....................................................................... 错误!未指定书签。 3 系统方案设计与主要设计工作 ..................................................... 错误!未指定书签。 3.1 设计任务............................................................................... 错误!未指定书签。 3.2 功能要求说明....................................................................... 错误!未指定书签。4设计课题总体方案........................................................................... 错误!未指定书签。 4.1硬件设计方案........................................................................ 错误!未指定书签。 4.2系统软件设计........................................................................ 错误!未指定书签。 5. 软件仿真及实物设计调试 ........................................................... 错误!未指定书签。 5.1PROTUES仿真软件介绍 ......................................................... 错误!未指定书签。 5.2仿真运行结果说明 ............................................................... 错误!未指定书签。 5.3实物设计结果与调试 ........................................................... 错误!未指定书签。6课程设计实验总结........................................................................... 错误!未指定书签。参考文献.............................................................................................. 错误!未指定书签。附录.............................................................................................. 错误!未指定书签。 附录1:程序清单........................................................................ 错误!未指定书签。 附录2:系统电路原理图 ........................................................... 错误!未指定书签。 附录3:元器件清单.................................................................... 错误!未指定书签。

基于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

数字时钟程序

#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]);

时钟可调时间可报时程序

///////////////////////////////////////////////////////// // 工程名称:可调时报时电子钟 // 使用描述: // K1 按一次进入时间调整模块调完后,再按一次恢复时间 // K2 非时间调整模式下,按键报时时间调整模块下,按键选择调整秒分时 // K3 时间调整模块下,时间值增加 // K4 时间调整模块下,时间值减小 // 硬件连接:IOA0~IOA7接SEG IOA8~IOA15接1*8KEY // IOB0~IOB7接DIG 2*4KEY.D_dp接高电平 // 维护记录:2012-8-15 增加时间调整功能,增加报时功能 // /////////////////////////////////////////////////////////// #include "spce061a.h" #include "Sound.h" #include "Clock_Speech.h" //定义各种宏 #define P_IOA_Data (volatile unsigned int *)0x7000 #define P_IOA_Buffer (volatile unsigned int *)0x7001 #define P_IOA_Dir (volatile unsigned int *)0x7002 #define P_IOA_Attrib (volatile unsigned int *)0x7003 #define P_IOB_Data (volatile unsigned int *)0x7005 #define P_IOB_Buffer (volatile unsigned int *)0x7006 #define P_IOB_Dir (volatile unsigned int *)0x7007 #define P_IOB_Attrib (volatile unsigned int *)0x7008 #define P_Watchdog_Clear (volatile unsigned int *)0x7012 #define P_INT_Ctrl (volatile unsigned int *)0x7010 #define P_INT_Clear (volatile unsigned int *)0x7011 #define uint unsigned int #define KEY_ALL 0xff00 int DispTbl[10] = { 0x003F,0x0006,0x005B,0x004F,0x0066, 0x006D,0x007D,0x0007,0x007F,0x006F}; uint sec=0,min=0,hour=0; uint Start_End_Flag=0; uint Adjust_Wei=4; uint flag=1;

电子时钟单片机【完整版】

烟台南山学院 单片机课程设计题目电子时钟 姓名: 所在学院 所学专业: 班级: 学号: 指导教师: 完成时间:

随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。 由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。 在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。 本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。本系统为多功能数字钟的系统。本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。 关键词:单片机 AT89S52 电子时钟汇编语言

基于单片机的可调电子钟的设计说明

编号: 基础工程设计 题目:基于单片机设计的可调电子时钟院(系):信息与通信学院 专业:微电子科学与工程 学生姓名:卢镜 学号:1300240119 指导教师:宋保林

2016 年 1 月 6 日 摘要 本人设计的是一个以单片机STC89C52为核心部件的电子钟,结合LCD液晶显示屏。可以在液晶屏上显示时间和字符,并可任意调整时间。本来想用数码管来显示,但是想到数码管仅能显示数字,所以采用了液晶显示屏。它不仅能显示数字,还能显示字符。它的计时周期为24小时,显满刻度为“23时59分59秒”。 文中详细论述了可调电子钟设计原理、使用的各芯片的介绍,阐明了本实例所使用的设计方案、详细的电路图以及程序。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。本系统以单片机的C语言进行软件设计,并着重介绍了所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程,并且还进行了软件仿真调试和硬件调试。 关键词:单片机STC89C52 ;可调电子钟;液晶显示;仿真

目录 摘要 (1) 前言 (3) 第一章设计说明 (5) 1.1 设计目的和内容 (5) 1.2 设计方案选择 (5) 1.3 设计总体框图 (7) 第二章系统主要硬件设计 (5) 2.1 单片机主控模块 (7)

2.1.1 STC89C52芯片简介 (7) 2.1.2 封装和引脚说明 (8) 2.2 液晶显示模块 (7) 2.2.1 LCD1602模块简介 (11) 2.2.2 LCD1602的控制指令及操作流程 (12) 2.3时钟电路及按键电路 (9) 2.3.1时钟电路 (9) 2.3.2按键电路 (10) 第三章系统软件设计 (10) 3.1 系统程序流程图 (10) 3.2系统程序设计电子时钟清单 (11) 第四章系统调试 (12) 4.1软件调试 (12) 4.2源代码 (14) 4.3硬件调试 (20) 4.3.1原理图 (20) 4.3.2 PCB图 (20) 4.3.3用跳线修改电路 (21) 结语 (21) 谢辞 (22) 参考文献 (23) 附录Ⅰ (24)

电子时钟程序

+-+ 机电工程系 课程设计报告题目: 专业: 班级: 学号: 姓名: 同组人: 指导老师: 答辩日期:

一、绪论 当今世界但片机以飞快的速度在发展,了解和掌握单片机技术是我们机电系学生应该学习的课程之一,基于本学期对单片机的学习,现在对单片机语言所写出的电子时钟展开说明,现在生活很多东西都是离不开电子了,许许多多的东西都被电子产品所代替,时钟就是一种在我们生活之中很普通的电子产品,它虽然在单片机机之中算是一种比较简单的东西,但它在我们生活在是普遍存在的,它能让我们对更多的电子产品有所了解,所以我们想要了解更多的电子产品,电子时钟也是我们应该了解的,所以我们对电子时钟展开课程设计,并对其工作原理及工作方式进行了解,这样能让我们初步学习到有关的电子产品。设计过程中我们将对生活中电子时钟的工作方式进行了解,接着我们要在学过的单片机语言基础上,对电子时钟这样的工作方式进行单片机解释,有单片机语言解释,为什么电子时钟要这样工作,接着我们有汇编语言写出电子时钟程序,在报告中我们将对单机汇编语言的有关语句进行解释,并对单片机的电路板的工作原理进行解释,并对电子时钟工作方式进行说明。 二、对本课程设计的分析 2.1 工作原理 当电子时钟上电时候将在电子时钟上显示23-30-00,带表现在是时间,电子时钟将按正常的时间一样走动,有对应的四个按钮用来调整时钟所对应的时间,第一个按钮对应设置按钮,当它按下去时候,时钟将停止走动,这时候将进入调时间模式,第二个按键用来选择调的是时还有分还秒,第三个按键用来加运算的,

第四个按键用来减运算的。 2.2 P3口对应的按键操作功能系统框图 开始 P3.0是否按 下 P3.1是否按 下 YES P3.2是否按下 P3.3是否按下NO P3.3是否按下21H 是否为几 YES P3.2是否按下P3.3是否按下P3.2是否按下NO 时加一 YES NO 时减一 是否为一 YES NO 分加一 分减一 是否为2NO YES YES NO 秒加一 秒减一 说明:以上框图是系统版上对应的四个按键对电子时钟的操作功能,在什么情况下,对应的按键实现什么样的功能。 三、 主要电路模块的实现方案比较及选择

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单片机可调电子时钟

目录 摘要 (2) Abstract (3) 1.设计目的 (4) 2.设计任务 (4) 2.1.任务1:开机界面的设置 (4) 2.2.任务2:LCD-1602显示日期时间 (4) 2.3.任务3:时间与日期的调整 (4) 3.硬件设计 (4) 3.1.STC89C51(51单片机) (4) 3.2.LCD-1602液晶显示屏 (5) 4.软件设计 (7) 4.1.应用软件 (7) 4.2.程序框图 (7) 4.3.使用说明 (7) 4.4.注意事项 (8) 4.5.调试结果 (8) 5.收获 (9) 附录: (10) 附录A.硬件图 (10) 附录B.主要程序 (11)

摘要 电子时钟是单片机系统的一个应用,由硬件和软件相配合使用。本文通过对单片机的控制实现日历功能电子时钟的设计,以达到学习、了解单片机相关指令在各方面的应用。硬件由主控器、显示电路、键盘接口等三个模块组成。该时钟设计以STC-89C51作为主控器,控制显示时钟信息;显示模块用LCD-1602液晶屏;键盘接口电路由普通按键完成。软件利用C语言编程实现单片机的控制功能。 关键词:电子时钟、单片机、LCD-1602液晶显示

Abstract Electronic clock is a single chip microcomputer system application, by the use of hardware and software. In this paper, through the control of single-chip microcomputer to achieve the design of the electronic clock, in order to achieve learning, to understand the microcontroller related instructions in various aspects of the application. The hardware is composed of three modules, such as the main controller, the display circuit, the keyboard interface and so on. The clock is designed with STC-89C51 as the main controller, controlling the display clock information; the display module uses the LCD-1602 LCD screen; the keyboard interface circuit is completed by the ordinary button.Software uses C language programming microcontroller control functions. Key words: electronic clock, single chip microcomputer,LCD-1602 liquidcrystal display

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

电子时钟程序设计

1.设计目的 电子时钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。电子时钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究电子时钟及扩大其应用,有着非常现实的意义。 2.设计内容 设计思想 针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚

结构。这样,既能做到经济合理又能实现预期的功能。 在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

设计元件 元件 规格 数量 单片机 AT89C51 1 晶振 12MHz 1 晶振电容 30pF 2 按键 4 准备器件、搭接电 路 熟悉硬件 了解各引脚功 能 分块设计各部分电 路 将分块的电路组合 认真学习单片机汇编 语言 完成整体电路图 确定变成结构和思 路 综合各程序完成整体 程序 编辑各个程序模块 用Proteus 画出电路图 调试程序,进行修改 对仿真中出现的问题 进行改正 画出仿真图进行仿 真 仿真成功 软硬件结合,完成任务 书要求 验证硬件电路 成功 进行扩展

微机原理课程设计——可调电子时钟

《微机原理课程设计》 设计报告 姓名:张经纬 学号: 1345533124 班级: 13 电气 1 班 专业:电气工程及其自动化 学院:电气与工程信息学院 2016年3月

目录 一、设计任务描述 (3) 1.1设计题目 (3) 1.2设计目的 (3) 1.3设计要求 (3) 二、设计方案描述 (3) 2.1设计原理 (3) 2.2设计芯片结构 (4) 三、具体模块设计 (5) 3.1概述 (5) 3.2小键盘模块 (5) 3.3显示模块 (5) 3.4定时模块 (6) 3.5中断处理模块 (6) 3.6硬件接线图 (6) 3.7主程序流程图 (6) 四、可控电子时钟源程序 (9) 五、心得体会 (14)

可调电子时钟 一、设计任务描述 1.1设计题目 可调电子钟设计 1.2设计目的 《微型计算机原理及应用》是一门实践性较强的课程,课堂上的理论学习 不足以让学生熟练掌握这门课程。所以让学生在学完该课程之后,进行一次课 程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用 系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。具体如下: 1、熟悉中断工作原理,定时计数原理,并行通信原理工作原理。 2、掌握8259芯片,8254芯片,8255芯片功能,结构,编程。 3、掌握七段数码管以及小键盘的使用。 4、能运用所提到的芯片,设计系统并进行程序开发,满足用户需求。 1.3设计要求 1、设计一电子时钟,能计时、在数码管上显示时间并用键盘调节时间。 2、根据所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成 电路的连接和调试通过. 3、程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。 4、前期完成的实验有:8259A中断控制器实验,8254定时计数器实验,8255并行接口实验。 二、设计方案描述 2.1设计原理 首先利用程序硬性规定分、秒的起始时间为零。利用实验台上提供的定时 器8254和扩展板上提供的8259以及键盘和数码显示电路,设计一个电子时钟,

电子时钟设计方案及程序

大学英语四六级考试网上报名操作流程 友情提醒: 1.进行网上报名前请认真阅读操作流程; 2.本次报名系统开通时间为2012年9月11日9:00至9月18日16:00; 3.因以前没有设置登录密码,导致无法进入报名系统的同学,请尝试使用学号作为密码登录;4.如出现浏览器不兼容的情况,建议使用IE浏览器。 一、进入教务信息系统 登录南京晓庄学院教务处的网站(可通过学校主页进入,也可直接输入网址 https://www.wendangku.net/doc/1911051301.html,),点击左侧“快速导航”中的“教务信息系统”图标,进入教务信息 系统页面,如图1所示。 图1 教务信息系统页面 二、进行四六级网上报名 在图1所示页面左侧的“登录系统”区域中输入学号、密码、验证码,如图2所示。

1 登录系统用户名、密码输入框图2 所示的界面。中的“登录”按钮,可进入如图3点击图2 3 教务信息网络登录后的界页图,展开该菜单,如图页面中左侧的“考试管理?等级考试管 理”菜单左侧的点击图3 所示。4 展开菜单图4 所示的页面。中展开的“学生报名”菜单,即可在右侧出现如图点击图45 2

报名选项界面图5 、报名考试1”链接,即出现右侧主界面中“学生网上英语等级考试报名”前方的“5点击图6如图所示的界面。

报名界面图6 3 前方的按钮即可实现大学根据自己需要报名的等级,如要报名四级,点击CET-4英语四级的报名,报名成功后在“报名情况”一栏中即出现“已报名”字样,如图7所示。 图7 报名界面 直接关于浏览器窗口即可完成报名工作。 2、取消报名 若报名之后,在规定的网上报名时间内出现各种原因不想参加考试,可以在登录后点击 相应等级后面的按钮。 3、更改报名级别 若报名之后,发现自己选择的报名等级有误,可以先取消报名,再重新选择其他等级进行报名(报考各测试等级的条件必须符合相关规定)。 4

设计报告可调电子时钟

《单片机实训》设计报告 题目:可调电子时钟的设计 学院: 专业: 班级: 姓名: 学号: 指导老师:

一、实验内容 利用CPU的定时器和实验仪上提供的数码显示电路,设计一个可调电子时钟。显示格式如下:XX XX XX ,由左向右分别为:时、分、秒。同时还可以通过键盘(开关)对电子时钟的时间进行加减,达到可调。 二、实验内目的 1、掌握定时器的使用和编程方法; 2、掌握中断处理程序的编程方法; 3、掌握数码显示电路的驱动程序编程方法; 4、掌握键盘电路的程序编程方法; 5、掌握模块子程序的编程方法; 6、掌握硬件的线路的设计及连线方法。 三、实验说明 设计定时器每50ms中断一次,在中断服务程序中,对中断次数进行计数,50ms 计数20次,就是1秒,然后再对秒计数得到分的值,对分计数得到小时的值,分别将各值送到相应的段地址端口和位地址端口,通过数码管显示结果,达到电子时钟的效果。在电子时钟的基础上,程序增加了键盘程序,对电子时钟进行可调(对秒/分/时进行加/减,此功能的增加使电子时钟功能更强、更实用。 四、硬件电路设计原理图 图1 总电路图 R3 图2 键盘控制电路

图3 显示部分电路图 五、软件设计 (一) 程序设计框图

(二) LED数码管字型表

(三)实验程序设计 步骤1、用定时器编写延迟子程序; 2、编写BCD码转换子程序; 3、编写学号显示子程序; 4、编写从0~9秒用数码管显示子程序; 5、据时分秒的要求,编写定时器0中断服务子程序; 6、结合以上子程序,与主程序相组合成电子时钟程序; 7、编写键盘控制加子程序; 8、编写键盘控制减子程序; 9、组合以上子程序,与主程序相组合成可调电子时钟程序; ORG 0000H ;程序入口 AJMP START ;指向主程序 ORG 000BH ;定时器中断入口 AJMP INT1 ;指向中断服务程序 ; INT1: MOV TH0,#9EH MOV TL0,#58H DJNZ R7,EXITINT ;20次未到继续记数 MOV R7,#20 INC 20H MOV R2,20H CJNE R2,#60,EXITINT ;60秒未到继续记数 MOV 20H,#0 INC 21H MOV R2,21H CJNE R2,#60,EXITINT ;60分未到继续记数 MOV 21H,#0 INC 22H MOV R2,22H CJNE R2,#24,EXITINT ;24小时未到继续记数 MOV 22H,#0 EXITINT:RETI START: MOV 20H,#0 MOV 21H,#0 MOV 22H,#0 MOV R7,#20 MOV TMOD,#11H ;设定时器0和1均为方式1 MOV TH0,#9EH ;置定时器0初值为250 ms MOV TL0,#58H MOV TH1,#3CH ;置50ms计数循环初值(定时器1) MOV TL1,#0B0H SETB EA ;CPU开中断

相关文档