当前位置:文档之家› 智能电子钟(LCD显示)

智能电子钟(LCD显示)

智能电子钟(LCD显示)
智能电子钟(LCD显示)

注:本程序并没有显示星期,如有需要,可自行添加。

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

*实验名称:智能电子钟(LCD显示)

*实验效果:1602显示时钟,按K1进入时间设置,K2分别选择秒

* 分时日月星期年,按K3时间加一

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

#include

#include"ds1302.h"

#include"lcd1602.h"

#define uint unsigned int

#define uchar unsigned char

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

**声明:本实验所有IO口只与“1302时钟按键设置”仿真图配套*

*

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

sbit K1=P3^2; //接的是INT0 K1时钟设置(按一下开始调节时间,再按一下退出调节时间)

sbit K2=P3^3; //接的是INT1 K2选择秒分时日月星期年

sbit K3=P3^4; //接的是TO K3加时间

void Cursor(); //设置时光标闪烁

void Delay10ms();

void Int0Configuration();//外部中断0设置

void LcdDisplay(); //显示函数

uchar SetState,SetPlace; //设置状态、光标位置

void main() //主函数

{

uchar i;

Int0Configuration(); //外部中断0设置

lcd1602Init(); //1602初始化

ds1302Init(); //1302初始化

while(1)

{

if(SetState==0) //如果没有键按下,就显示时间

{ //SetState的高低由中断控制,按下K1则为1,再次按下则为0 ds1302readtime();

}

else

{

if(K2==0) //消除抖动

{

Delay10ms();

if(K2==0) //如果K2被按下,则光标移动

{

SetPlace++;

if(SetPlace>=7) //年月日星期时分秒共7个时间

SetPlace=0;

}

while((i<50)&&(K2==0)) //松手检测

{

Delay10ms();

i++;

}

i=0;

}

if(K3==0) //如果K3被按下,则时间每次加1

{

Delay10ms(); //消除抖动

if(K3==0)

{

TIME[SetPlace]++;

if((TIME[SetPlace]&0x0f)>9) //换成BCD码

{

TIME[SetPlace]=TIME[SetPlace]+6;

}

if((TIME[SetPlace]>0x60)&&(SetPlace<2)) //分秒只能到59

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>0x24)&&(SetPlace==2)) //小时只能到23

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>0x32)&&(SetPlace==3)) //日只能到31

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>0x13)&&(SetPlace==4)) //月只能到12

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>0x7)&&(SetPlace==5)) //周只能到7

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>0x99)&&(SetPlace==6)) //年只能到2099

{

TIME[SetPlace]=0;

}

}

while((i<50)&&(K3==0)) //松手检测

{

Delay10ms();

i++;

}

i=0;

}

}

LcdDisplay(); //Lcd1602显示时间

}

}

void LcdDisplay() //显示函数

{

writecom(0x80+0x40);

writedata('T');

writedata('I');

writedata('M');

writedata('E');

writedata(':');

writedata('0'+TIME[2]/16); //时

writedata('0'+(TIME[2]&0x0f));

writedata(':');

writedata('0'+TIME[1]/16); //分

writedata('0'+(TIME[1]&0x0f));

writedata(':');

writedata('0'+TIME[0]/16); //秒

writedata('0'+(TIME[0]&0x0f));

writecom(0x80);

writedata('D');

writedata('A');

writedata('T');

writedata('E');

writedata(':');

writedata('2'); //年

writedata('0');

writedata('0'+TIME[6]/16);

writedata('0'+(TIME[6]&0x0f));

writedata('-');

writedata('0'+TIME[4]/16); //月

writedata('0'+(TIME[4]&0x0f));

writedata('-');

writedata('0'+TIME[3]/16); //日

writedata('0'+(TIME[3]&0x0f));

}

void Delay10ms() //延时10ms

{

uchar a,b,c;

for(c=1;c>0;c--)

for(b=38;b>0;b--)

for(a=130;a>0;a--);

}

void Int0Configuration() //设置外部中断0

{

IT0=1;//跳变沿触发

EX0=1;//打开外部0中断

EA=1; //打开总中断

}

void Int0() interrupt 0 //如果按下K1就进入中断

{

Delay10ms();

if(K1==0)

{

// writecom(0x80+0x40+12);

// writecom(0x0f);

SetState=~SetState;

SetPlace=0;

ds1302Init();//调过时间后再按下K1,调好的时间就被写进DS1302 }

}

------------------------------------------------------分割线------------------------------------------------------

#ifndef _LCD1602_H_

#define _LCD1602_H_

//---包含头文件---//

#include

//---宏定义关键词---//

#ifndef uint

#define uint unsigned int

#endif

#ifndef uchar

#define uchar unsigned char

#endif

//---定义1602的IO口---//

sbit E=P2^2;

sbit RW=P2^1;

sbit RS=P2^0;

//---声明全局函数---//

void delay1ms(uint z);

void writecom(uchar com);

void writedata(uchar dat);

void lcd1602Init();

#endif

#include"lcd1602.h"

/*********函数功能:延时函数,延时1ms*********/

void delay1ms(uint c)

{

uchar a,b;

for (; c>0; c--)

for (b=199;b>0;b--)

for(a=1;a>0;a--);

}

/*********函数功能:向1602写入一个字节的指令*********/ void writecom(uchar com)

{

E=0; //使能端口

RW=0; //低电平选择写入

RS=0; //低电平选择写入指令

P0=com; //放入指令

delay1ms(1); //等待数据稳定

E=1; //高电平期间写入

delay1ms(5); //保持时间

E=0; //变低

}

/*********函数功能:向1602写入一个字节的数据*********/

void writedata(uchar dat)

{

E=0;

RW=0;

RS=1; //高电平选择写入数据

P0=dat;

delay1ms(1);

E=1;

delay1ms(5);

E=0;

}

/*********函数功能:初始化LCD1602*********/

void lcd1602Init()

{

writecom(0x38); //开显示

writecom(0x0c); //开显示,不显示光标

writecom(0x06); //写一个字符指针加1

writecom(0x01); //清屏

writecom(0x80); //设置数据指针起点

}

-------------------------------------------分割线--------------------------------------------------- #ifndef _DS1302_H_

#define _DS1302_H_

//---包含头文件---//

#include

#include

//---宏定义关键词---//

#ifndef uint

#define uint unsigned int

#endif

#ifndef uchar

#define uchar unsigned char

#endif

//---定义1302的IO口---//

sbit IO=P2^7;

sbit CE=P2^5;

sbit SCLK=P2^6;

//---声明全局函数---//

void ds1302write(uchar addr,uchar dat);

uchar ds1302read(uchar addr);

void ds1302Init();

void ds1302readtime();

//---加入全局变量---//

extern uchar TIME[7];

#endif

#include"ds1302.h"

uchar READ_ADDR[]={0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; //DS1302的读取地址,与下面的数组时间对应

uchar WRITE_ADDR[]={0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //DS1302的写入地址,与下面的数组时间对应

uchar TIME[7] = {0x00,0x00,0x12,0x01,0x01,0x02,0x14};

//---TIME[7]数组存储分别是秒分时日月星期年---//

/*********函数功能:向ds1302写数据*********/

void ds1302write(uchar addr,uchar dat)

{

uchar n;

CE=0;

SCLK=0; //先将SCLK置低电平

_nop_();

CE=1; //然后将CE置高电平

_nop_();

for(n=0;n<8;n++)//开始传送8位地址命令

{

IO=addr&0x01;//从低位开始传送

addr>>=1;

SCLK=1; //上升沿读取数据

_nop_();

SCLK=0; //下降沿放置数据

_nop_();

}

for(n=0;n<8;n++)//写入8位数据

{

IO=dat&0x01;

dat>>=1;

SCLK=1;

_nop_();

SCLK=0;

_nop_();

}

CE=0; //数据传送结束

_nop_();

}

/*********函数功能:从ds1302读数据*********/ uchar ds1302read(uchar addr)

{

uchar n,dat,dat1;

CE=0;

SCLK=0; //先将SCLK置低电平

_nop_();

CE=1; //然后将CE置高电平

_nop_();

for(n=0;n<8;n++)//开始传送八位地址命令

{

IO=addr&0x01;

addr>>=1;

SCLK=1;

_nop_();

SCLK=0;

_nop_();

}

for(n=0;n<8;n++)//读取8位数据

{

dat1=IO;

dat=(dat>>1)|(dat1<<7);

SCLK=1;

_nop_();

SCLK=0;

_nop_();

}

CE=0;

_nop_(); //以下为DS1302复位的稳定时间,必须的

SCLK=1;

_nop_();

IO=0;

_nop_();

IO=1;

_nop_();

return dat;

}

/*********函数功能:初始化DS1302*********/

void ds1302Init()

{

uchar n;

ds1302write(0x8e,0x00); //关闭写保护

for(n=0;n<7;n++)

{

ds1302write(WRITE_ADDR[n],TIME[n]);

}

ds1302write(0x8e,0x80); //打开写保护

}

/*********函数功能:读取时钟信息*********/

void ds1302readtime()

{

uchar n;

for(n=0;n<7;n++)

{

TIME[n]=ds1302read(READ_ADDR[n]);//将读取到的时间存入TIME[7]数组里}

}

以下为仿真图片,K4键没有设置功能

电子钟程序及原理图

. ..页脚.

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

数字时钟程序

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

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

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

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

电子时钟程序

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

一、绪论 当今世界但片机以飞快的速度在发展,了解和掌握单片机技术是我们机电系学生应该学习的课程之一,基于本学期对单片机的学习,现在对单片机语言所写出的电子时钟展开说明,现在生活很多东西都是离不开电子了,许许多多的东西都被电子产品所代替,时钟就是一种在我们生活之中很普通的电子产品,它虽然在单片机机之中算是一种比较简单的东西,但它在我们生活在是普遍存在的,它能让我们对更多的电子产品有所了解,所以我们想要了解更多的电子产品,电子时钟也是我们应该了解的,所以我们对电子时钟展开课程设计,并对其工作原理及工作方式进行了解,这样能让我们初步学习到有关的电子产品。设计过程中我们将对生活中电子时钟的工作方式进行了解,接着我们要在学过的单片机语言基础上,对电子时钟这样的工作方式进行单片机解释,有单片机语言解释,为什么电子时钟要这样工作,接着我们有汇编语言写出电子时钟程序,在报告中我们将对单机汇编语言的有关语句进行解释,并对单片机的电路板的工作原理进行解释,并对电子时钟工作方式进行说明。 二、对本课程设计的分析 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 秒加一 秒减一 说明:以上框图是系统版上对应的四个按键对电子时钟的操作功能,在什么情况下,对应的按键实现什么样的功能。 三、 主要电路模块的实现方案比较及选择

电子时钟程序设计

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

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

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

电子时钟设计方案及程序

大学英语四六级考试网上报名操作流程 友情提醒: 1.进行网上报名前请认真阅读操作流程; 2.本次报名系统开通时间为2012年9月11日9:00至9月18日16:00; 3.因以前没有设置登录密码,导致无法进入报名系统的同学,请尝试使用学号作为密码登录;4.如出现浏览器不兼容的情况,建议使用IE浏览器。 一、进入教务信息系统 登录南京晓庄学院教务处的网站(可通过学校主页进入,也可直接输入网址 https://www.doczj.com/doc/3811835871.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

可调电子时钟程序

#include unsigned char led[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0 x00,0xFF}; //用一维数组定义0-9 unsigned char a[4]; unsigned char second=0,minute=0,hour=12; unsigned char minute1=0,hour1=0,zdbs=0; unsigned char b[4]={0xFE,0xFB,0xEF,0xBF}; //扫描 unsigned char k=0; unsigned int temp; // 记录1000毫秒为1秒的变量 unsigned char M,S_flag,md=0; //M是模式,更新时间的4种模式加上正常模式S_flag闪烁标志 sbit K1=P3^0; //设置键 sbit K2=P3^1; //增加键 sbit K3=P3^2; //减少键 void delay(unsigned n) //0.2毫秒 { int x,y;

for(x=0;x

电子钟(带电路图及程序)

《单片机技术》课程设计任务 一、设计题目:基于单片机并行口的电子钟的设计 二、适用班级:电子0303 三、指导教师:王韧 四、任务与要求: 在智能化仪器仪表中,控制核心均为微处理器,而单片机以其高性能、高速度、体积小、价格低廉、稳定可靠而得到广泛应用,是设计智能化仪器仪表的首选微控制器,单片机结合简单的接口电路即可构成电子钟,它可广泛应用于工业、农业、日常生活等领域,与传统钟表相比较,它具有高精度、高可靠性、操作方便、价格便宜、智能化等特点,是钟表的一个发展方向,具有一定的实用价值。 1、本课题任务如下: 设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。 2、本课题要求如下: (1)在AT89S51的P0口和P2口外接由六个LED数码管(LED5~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.5~P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LED0),P1口外接四个按键A、B、C、D(对应于P1.0~P1.3)。 (2)、利用六个LED显示当前时间。 (3)、四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0 为60分,每按一次分加1;D键用于调秒, 范围0-59,0为60秒,每按一次秒加1。 (4)、单片机采用AT89S51,f osc=12MH Z。

基于STC89C52多功能电子时钟系统程序+原理图

一、设计任务 设计制作一台以控制器为核心的多功能电子时钟系统 二、设计要求: ①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。(PC主机端可利用高级语言进行人机界面设计) ②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。 ③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz; ④.在系统校准模式时,系统具有快速校准时间的功能。 ⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。 ⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。 原理图 设计制作一台以控制器为核心的多功能电子时钟系统 二、设计要求: ①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。(PC主机端可利用高级语言进行人机界面设计)

(注:此三种模式可以通过SET键盘来回切换,在正常时钟模式,第二排显示S:time,校准模式显示S:adjst,秒表模式,是TN~T3:四个秒表模式); ②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。 (注:这个已经全部显示了,含星期) ③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz; (注:这个都实现了,要验证的话就是将时钟调整到59分后验证即可) ④.在系统校准模式时,系统具有快速校准时间的功能。 (注:按SET键进入校正模式可以对时钟进行校正,UP向上,DOWN键向下,按STOP键保存退出,遗憾的是,这个正在调节的参数无法反白显示) ⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。 (注:按SET键进入秒表模式,按0K键启动,STOP键清零,按UP键记录,可以对100ms的定时器开始计时,最大999.9秒,按下UP键盘,则记录一个,总共记3个,T1-T3,按SET键退出) ⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。 乖乖,真的是1602显示的啊。 /******************************************/ /*File Name: main.c */ /*Function : The entrance of all fuctions */ /*Author : WuYingjian */ /*V ersion : V1.0 */ /*Date : 2012.11.03 */ /* All Rights Reserved. */ /******************************************/ #include #include #define uint unsigned int #define uchar unsigned char #define nop _nop_ void write_command(uchar tempdata);

单片机汇编程序电子闹钟完整版

单片机汇编程序电子闹 钟 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

电子闹钟课程设计 摘要:本课程设计主要是通过单片机系统,综合运用定时器、中断、数码显示等知识设计一个可定时的电子钟。它包括系统总体方案及硬件设计,软件设计,Proteus软件仿真等部分。 硬件设计的主要任务是根据总体设计要求,以及在所选机型的基础上,确定系统扩展所要用的存储器,I/O电路及有关外围电路等然后设计出系统的电路原理图。 合理的软件结构是设计出一个性能优良的单片机应用性系统软件的基础,因此必须充分重视。编写完程序后在用Proteus软件仿真检查设计是否合理。一.课程设计的概况 通过对51单片机的扩展,接键盘,显示器等相应的外围器件。在LED显示器中分成静态显示和动态显示两类,在本设计中主要用了它的动态显示功能,动态显示利用了人视觉的短暂停留,在数据的传输中是一个一个传输的,且先传输低位。键盘是由若干个按键组成的开关矩阵,是一种廉价的输入设备。键盘通常包括有数字键,字母键以及一些功能键。操作人员可以通过对键盘向计算机输入数据,地址,指令或其他的控制命令,实现简单的人机对话。这里采用非编码式键盘。通过51单片机的P1口扩展出独立连接式键盘。外围扩展复位,时钟电路,利用软件源程序代码实现相应的功能。 二.课程设计实现的功能: 1.能显示时时-分分-秒秒。 2.能够设定定时时间,修改定时时间。 3.定时时间到能发出警报声或者启动继电器,从而控制电器的起停。 三.设计方案 使用是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。 本系统采用单片机AT89C51作为本设计的核心元件,利用7段共阴LED作为显示器件。接入共阴LED显示器,可显示时,分钟,秒,单片机外围接有定时报警系统,定时时间到,扬声器发出报警声,提示预先设定时间电器的起停时间到,从而控制电器的起停。

电子钟程序及原理图

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

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 MOV NMIN,#0 MOV KEZT,#0 MOV K2ZT,#0 MOV TIME,#0 CLR F0

AT89C2051制电子钟时钟源程序

AT89C2051制电子钟时钟源程序 本程序来自于互联网,站长尚没试验,但是,该程序给出了详细的说明,相信对大家很有帮助!因此,站长向原作者表示真诚谢意! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AT89C2051时钟程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; 定时器T0、T1溢出周期为50MS,T0为秒计数用,T1为调整时闪烁用, ; P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 中断入口程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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 ; 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秒定时用初值(50MS×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 ;状态字入栈保护 CLR ET0 ;关T0中断允许 CLR TR0 ;关闭定时器T0 MOV A,#0B7H ;中断响应时间同步修正 ADD A,TL0 ;低8位初值修正 MOV TL0,A ;重装初值(低8位修正值) MOV A,#3CH ;高8位初值修正 ADDC A,TH0 ; MOV TH0,A ;重装初值(高8位修正值) SETB TR0 ;开启定时器T0 DJNZ R4, OUTT0 ;20次中断未到中断退出 ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H) ACALL ADD1 ;调用加1程序(加1秒操作) MOV A,R3 ;秒数据放入A(R3为2位十进制数组合) CLR C ;清进位标志 CJNE A,#60H,ADDMM ; ADDMM: JC OUTT0 ;小于60秒时中断退出 ACALL CLR0 ;大于或等于60秒时对秒计时单元清0 MOV R0,#77H ;指向分计时单元(76H-77H)

电子钟e程序

#include #define uchar unsigned char #define uint unsigned int sbit DATE=P3^7; //数据口 sbit CLK=P3^6; //时钟口 sbit RST=P1^3; sbit SCLK=P1^1; sbit IO=P1^2; sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; //sbit ground=P3^3; uchar sum1=0,i=0,days; uchar table[]={"日期年月日"}; uchar table1[]={"时间点分秒"}; uchar table3[]={" "}; uchar table4[]={"电子万年日历"}; uchar table5[]={"星期:"}; uchar *table2[]={"---","星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; uchar datetime[7];//读取的日期时间 uchar sum,j,week1,ground; uint temp; void delay(uint z);//延时函数; void write_a_byte_to_1302(uchar x) ; uchar week(uchar,uchar,uchar); // 星期转换 uchar read_a_byte_from_1302(); uchar read_date(uchar addr); //读取数据 void gettime(); void format_datetime(uchar y,uchar *a); void delay(uint z)//延时函数 { uint x,y; for(x=0;x

单片机电子日历(电子时钟)程序

51单片机电子日历(电子时钟)程序 经过两天的调试,完成了51单片机电子日历课程设计,现在把C程序源代码帖出来纪念一下:~ 硬件实验箱是伟福LAB2000实验箱。 程序代码: /****************************************************************************/ /* 电子日历,有时间显示、闹铃、日期、秒表及键盘设置功能*/ /* 功能键A: 设置位数字+1 闹钟模式下为闹钟开关秒表模式下为记时开关*/ /* 功能键B: 设置位数字-1 闹钟模式下为闹钟开关*/ /* 功能键C:设置模式及设置位选择秒表模式下为清零键*/ /* 功能键D:在四种工作模式下切换设置闹钟开关*/ /* 曹宇03电子0201029 */ /* 2006.6.3 更新*/ /* 中央民族大学*/ ***********************************************************************/ #include #include /***************这里设置程序初始化时显示的时间****************/ #define SET_HOUR 12 /*设置初始化小时*/ #define SET_MINUTE 00 /*设置初始化分钟*/ #define SET_SECOND 00 /*设置初始化秒数*/ /*************************系统地址****************************/ #define BASE_PORT 0x8000 /*选通基地址*/ #define KEY_LINE BASE_PORT+1 /*键盘行线地址*/ #define KEY_COLUMN BASE_PORT+2 /*键盘列线地址*/ #define LED_SEG BASE_PORT+4 /*数码管段选地址*/ #define LED_BIT BASE_PORT+2 /*数码管位选地址*/ #define LED_ON(x) XBYTE[LED_BIT]=(0x01<<1)

基于51单片机的电子钟C语言程序

基于51单片机的电子钟C语言程序 #include #include #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF}; /*定义并初始化变量*/ uchar seconde=0; uchar minite=0; uchar hour=12; uchar mstcnt=0; sbit P1_0=P1^0; // second 调整定义 sbit P1_1=P1^1; //minite调整定义 sbit P1_2=P1^2; //hour调整定义 /*函数声明*/ void delay(uint k ); //延时子程序 void delay1(uchar h ); void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay1 (uchar h) { uchar j; while((h--)!=0) { for(j=0;j<125;j++) {;} } } void delay (uint k) { uint a,b,c; for(c=k;c>0;c--)

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 int cnt) { 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()

基于单片机的电子钟C语言程序

基于单片机的电子钟C语 言程序 This model paper was revised by the Standardization Office on December 10, 2020

基于51单片机的电子钟C语言程序 #include #include #defineucharunsignedchar #defineuintunsignedint /*七段共阴管显示定义*/ ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF}; /*定义并初始化变量*/ ucharseconde=0; ucharminite=0; ucharhour=12; ucharmstcnt=0; sbitP1_0=P1^0;//second调整定义 sbitP1_1=P1^1;//minite调整定义 sbitP1_2=P1^2;//hour调整定义 /*函数声明*/ voiddelay(uintk);//延时子程序 voiddelay1(ucharh); voidtime_pro();//时间处理子程序 voiddisplay();//显示子程序 voidkeyscan();//键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ voiddelay1(ucharh) { ucharj; while((h--)!=0) { for(j=0;j<125;j++) {;} } } voiddelay(uintk) { uinta,b,c; for(c=k;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); }

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