基于单片机C语言电子时钟完整版

基于单片机C语言电子时钟完整版
基于单片机C语言电子时钟完整版

《单片机技术》课程设计说明书

数字电子钟

系、部:电气与信息工程学院

学生姓名:

指导教师:职称专业:班级:

完成时间:2013-06-07

摘要

电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL 公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。

关键词电子钟;AT89S52;硬件设计;软件设计

ABSTRACT

Clock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL's as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours,

minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value. Key words Electronic clock;;AT89S52;Hardware Design;Software Design

目录

1设计课题任务、功能要求说明及方案介绍……………………………………1 1.1设计课题任务………………………………………………………………1 1.2功能要求说明………………………………………………………………1 1.3设计总体方案介绍及原理说明……………………………………………1 2设计课题硬件系统的设计………………………………………………………2 2.1设计课题硬件系统各模块功能简要介绍…………………………………2 2.2设计课题电路原理图、PCB图、元器件布局图…………………………2 2.3设计课题元器件清单………………………………………………………5 3设计课题软件系统的设计………………………………………………………6 3.1设计课题使用单片机资源的情况…………………………………………6 3.2设计课题软件系统各模块功能简要介绍…………………………………6 3.3设计课题软件系统程序流程框图…………………………………………6 3.4设计课题软件系统程序清单………………………………………………10 4设计结论、仿真结果、误差分析、教学建议…………………………………21 4.1设计课题的设计结论及使用说明…………………………………………21 4.2设计课题的仿真结果………………………………………………………21 4.3设计课题的误差分析………………………………………………………22 4.4设计体

会……………………………………………………………………22 4.5教学建议……………………………………………………………………22 结束

语 (2)

3 参考文献 (2)

4 致谢 (2)

5 附录 (2)

6

1 设计课题任务、功能要求说明及方案介绍

1.1 设计课题任务

设计一个具有特定功能的电子钟。具有时间显示,并有时间设定,时间调整功能。

1.2 功能要求说明

设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时0分0秒开始运行,进入时钟运行状态;按电子钟KEY1键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按KEY1键再次进入时钟运行状态。

1.3 设计课题总体方案介绍及工作原理说明

本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:

AT89S52复位电路晶振电路键盘下载数码管显示

图1-1 总体设计方案图

本电子钟的所有的软件、参数均存放在AT89S52的Flash ROM和内部RAM 中,

减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。键盘采用动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成

数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

2 设计课题硬件系统的设计

2.1设计课题硬件系统各模块功能简要介绍

本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块。

(1)单片机最小系统模块:包括低功耗、高性能CMOS8位微控制器AT89S52;复位电路;晶振电路。本本模块AT89S52系统控制核心,单片机系统复位由复位电路完成,单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端位位引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容。这样就构成一个稳定的自激振荡器。

(2)输入模块:本模块共用到了4个按键,1个电源开关,一个复位键,单片机运行期间,利用按键完成复位操作。3个按键独立式键盘,KEY1键控制电子钟的启动,KEY2键为加1键,KEY3键为减1键,KEY1键第三次控制电子钟的调整状态。且KEY1、KEY2、KEY3、任一键都独自连一个I/O (P1.0、P1.1、P1.2、P1.3)口线,说明它们可以独立实现相应的电子钟功能。

(3)输出模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。数码管用8个PNP三极管驱动。

(4)电源模块:现在市面上销售的编程器有很多都是由PC机的USB口直

接供电为了降低本设计的成本及节省设计时间,没有另外设计编程器,而直接购买了市场上的USB供电及下载器。

2.2设计课题电路原理图、PCB图、元器件布局图

图2-1 电路原理图

总设计原理图见附录A 原理总设计图见附录附录B PCB图见附录C

2.3 设计课题元器件清单

3 设计课题软件系统的设计

3.1 设计课题使用单片机资源的情况

设计课题使用单片机资源的情况如下:

P0口输出数码管段选信号,P2口输出数码管位选信号;晶振12MHz;调整选择键KEY1:P1.0;通过选择键选择调整位,选中位闪烁;增加键KEY2:P1.1;按一次使选中位加1;减少键KEY3:P1.2;按一次使选中位减1;此数字钟可实现基本的走时和显示时间时、分、秒;时间的调整;闹钟的设定和调整;闹钟的开启和关闭功能,具体如下:

(1)实现基本的走时和显示时间的时、分、秒,上电自动显示初始时间12-00-00,且控制闹钟状态的的蓝色led灯为亮的状态。

(2)当第一次按下第一个弹性按键时进入时间的调节状态,此时实现对显示时间的小时调节,按下第二个按键时实现小时的加一调节,按下第三个按键时实现小时的减一调节。

(3)当第二次按下第一个弹性按键时进入显示时间的分钟调节状态,按下第二个按键时实现分钟的加一调节,按下第三个按键时实现分钟的减一调节。

(4)当第三次按下第一个弹性按键时进入闹钟的小时调节状态,按下第二个按键时实现闹钟小时的加一调节,按下第三个按键时实现闹钟小时的减一调节。

(5)当第四次按下第一个弹性按键时进入闹钟的分钟调节状态,按下第二个按键时实现闹钟分钟的加一调节,按下第三个按键时实现闹钟分钟的减一调节。

(6)当第五次按下第一个弹性按键时返回正常的显示时间走时状态。(7)当同时按下第二和第三个弹性按键时,关闭闹钟,且此时蓝色led 灯为灭,及定时时间到蜂鸣器并不响,若再次同时按下第二和第三个弹性按键,则开启闹钟,且此时蓝色led灯为亮,定时时间到蜂鸣器发出滴滴的闹铃声,同时按下第二和第三个弹性按键即可关闭闹铃。闹铃状态默认为开启。

3.2设计课题软件系统个模块功能简要介绍

本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。

主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程

序模块的运用及其控制。

中断服务程序:主要是用于电子钟的准确运行、数据输入过程中的闪烁。键盘输入程序模块:主要是用于确定按键并得到特定的键码值。

数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。

延时模块:程序中有两种延时子程序,一种是短延时用于判键按下等,一种是

长延时。

3.3 设计课题软件系统程序流程框图

系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程

序转变成十六进制程序语言,接着使用Proteous 进行仿真,读出显示数据。

主程序流程框图如3-1所示;时间处理子程序流程框图3-2所示;

中断服务程序程序如3=3所示;

图3-1 主程序流程框图

图3-2 时间处理子程序流程框图

图3-3 中断子程序

3.4 设计课题软件系统程序清单

;----------------------------------------------------------------------- ;项目名称:数字电子钟

;项目功能:本电子钟实现24小时制,8位数码管显示时分秒,显示格式:12-59-00 通过4只按键来调整时间,调整选择键KEY1:P1.0;通过选择键选

择调整位,选中位闪烁,增加键KEY2:P1.1;按一次使选中位加1。

减少键KEY3:P1.2;按一次使选中位减1,bear:P3.1;到了整点和闹

钟就会响,

如果长按KEY1第一次切换到正常时钟显示,按第二次切换到时的调整,

按第三次切换到分的调整,同时led:P1.2就会闪烁,

按第四次和第五次分别切换到闹钟的时分的调整,可进行调

时、调分快进快减,并停止闪烁。如果选中位是秒,

则按增加键或减少键可实现,但无调时快进和快减功能。P0口输出数

码管段选信号,P2口输出数码管位选信号;晶振12MHz。

编程作者:林炽逸

完成时间: 2013年06月8日

程序请清单如下:

#include #include #include #define uint unsigned int

#define uchar unsigned char sbit KEY1=P1^1; //切换键

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

基于 5 1 单片机的电子钟 C 语言程序 #include #include #defineucharunsignedchar #defineuintunsignedint /* 七段共阴管显示定义*/ ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF}; /* 定义并初始化变量*/ ucharseconde=0; ucharminite=0; ucharhour=12; ucharmstcnt=0; sbitP1_0=PM0;//seco nd 调整定义 sbitP1_ 仁P1A1;//mi nite 调整定义 sbitP1_2=P1A2;//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--); } /************************* /* 时间处理子程序*/ */ voidtime_pro(void) { if(seconde==60)// 秒钟设为60 进制 {seconde=0; minite++; if(minite==60)// 分钟设为60 进制 {minite=0; hour++;

模拟电子时钟c语言程序

算法:将当前时间显示到屏幕,当时间发生变化时,清屏,显示新的时间(当有键盘操作时退出程序)。 显示时间格式:小时:分钟:秒 /* DEV C++ Win XP*/ #include #include #include #include typedef struct { int x; int y; }Point; time_t now; struct tm *pt,t1,t2; int printpoint(Point p) { Point p1; p1.x=p.x+2; p1.y=p.y+4; gotoxy(p1.x,p1.y); printf("%c%c",2,2); gotoxy(p1.x, p1.y+1); printf("%c%c",2,2); p1.y+=4; gotoxy(p1.x,p1.y); printf("%c%c",2,2); gotoxy(p1.x,p1.y+1); printf("%c%c",2,2); return 0; } int print0(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else printf("%c%4s%c",2," ",2); } return 0; }

int print1(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); printf("%5s%c"," ",2); } return 0; } int print2(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==6||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else if(i>0&&i<6) printf("%5s%c"," ",2); else printf("%c",2); } return 0; } int print3(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==6||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else printf("%5s%c"," ",2); } return 0; } int print4(Point p) {

99.9s秒表代码c语言

#include #include sbit DG1 = P0^0; sbit DG2 = P0^1; sbit DG3 = P0^2; sbit START_KEY = P1^0; sbit SUSPEND_KEY = P1^1; sbit RESET_KEY = P1^2; sbit LED1 = P1^4; sbit LED2 = P1^5; sbit LED3 = P1^6; sbit LED4 = P1^7; unsigned char WorkMode = 0; #define STANDBY_MODE 0 #define RECORD_MODE 1 #define SUSPEND_MODE 2 #define RECORDOUT_MODE 3 unsigned int display_num = 0; unsigned char timeoutnum = 0; unsigned char duanxuan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay2ms(void); void dev_init(void); void Timer0_init(void); void Timer0_start(void); void Timer0_stop(void); void standby_mode(void); void record_mode(void); void suspend_mode(void); void recordout_mode(void); void display(unsigned int value); void main() { dev_init(); Timer0_init(); while(1) { switch(WorkMode) { case STANDBY_MODE:

电子时钟计时器的设计(c语言版_调试完美通过_可直接使用)(附原理图源程序以及完整的文档)..

湖南人文科技学院 课程设计报告 课程名称:单片机原理及应用课程设计 设计题目:电子时钟的设计 系别:通信与控制工程系 专业:通信工程 班级:09级通信二班 学生姓名: 袁琦黄文付 学号: 09416230 09416227 起止日期:2011年12月20日~2011年12月30日 指导教师:王善伟姚毅谢四莲 教研室主任:刘建闽

指导教师评语: 指导教师签名:年月日 成绩评定 项目权重 成绩 袁琦黄文付 1、设计过程中出勤、学习态度等方面0.2 2、课程设计质量与答辩0.5 3、设计报告书写及图纸规范程度0.3 总成绩 教研室审核意见: 教研室主任签字:年月日教学系审核意见: 主任签字:年月日

摘要 时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事物入手,通过对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领域的探索。 本文利用单片机实现数字时钟计时功能的主要内容。它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上。本次设计采用独立式按键进行时间调整,其中STC89C52是核心元件,同时采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外利用DS1302具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。 关键词:STC89C52 ;LED数码管;8255芯片;DS1302芯片;

基于c语言单片机电子时钟课程设计报告书

课程设计报告 课程名称:单片机程序设计 报告题目:电子时钟 学生: 所在学院:信息科学与工程学院专业班级: 学生学号: 指导教师:

2013年12月25日课程设计任务书

摘要 单片计算机即单片微型计算机。由RAM、ROM、CPU构成。定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计主要设计了一个基于AT89C51单片机的电子时钟。并在数码管上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。 关键词:单片机;子时钟;键控制

目录 一、概述 (5) 1.1电子时钟简介 (5) 1.2电子时钟的基本特点 (5) 1.3电子时钟的原理 (5) 二、方案设计选择 (5) 2.1计时方案 (5) 2.2显示方案 (5) 三、硬件设计 (6) 3.1单片机型号选择 (6) 3.2数码管显示工作原理 (6) 3.3键盘电路设计 (7) 3.4电路原理图 (7) 四、软件设计 (7) 五、结论与心得 (15) 六、参考文献 (16)

一、概述 1.1 电子时钟简介 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。 1.2 电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED

基于51单片机的跑表,秒表程序c语言程序

基于51单片机的跑表,秒表程序c语言程序#include #define uchar unsigned char #define uint unsigned int uchar table[]=" 00:00:00:00 "; bit flag=0; sbit en=P2^0; sbit rs=P2^1; sbit s1=P1^0; sbit s2=P1^1; sbit bb=P1^2; uchar shi,fen,miao,biao,tt,num1,aa; void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void write_com(uchar com) { rs=0; P0=com;

delay(10); en=1; delay(10); en=0; } void write_date(uchar date) { rs=1; P0=date; delay(10); en=1; delay(10); en=0; } void display(uchar com1,uchar date1) { uchar aa,bb; aa=date1/10; bb=date1%10; write_com(0x80+com1); write_date(0x30+aa);

write_date(0x30+bb); } void init() { TMOD=0x01; ET0=1; TR0=0; EA=1; TH0=(65536-10000)/256; TL0=(65536-10000)%256; en=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80+0x40); for(num1=0;num1<17;num1++) { write_date(table[num1]); delay(5); }

秒表C语言程序

#include "reg52.h" #include "intrins.h" sbitStart_Stop = P3^2; sbit Clear = P3^3; sbit Sel_A1 = P1^0; sbit Sel_B1 = P1^1; sbit Sel_C1 = P1^2; sbit Sel_D1 = P1^3; #define LED P0 #define DP 0x80 bdata unsigned char flag; sbitStatus_Flag = flag^0; sbit Is_KeyS_Hold=flag^1; unsigned char xiaoshu1 = 0 , xiaoshu2 = 0 , miao1 = 0 ; miao2 = 0 ; code unsigned char table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,}; voidinit(); void display(); void delay(); void key(); void main() { init(); while(1) { key(); display(); } } void key() { if(Is_KeyS_Hold) if(Start_Stop) { Is_KeyS_Hold = 0 ; EX0 = 1 ; } }

void delay() { unsignedinti ; for(i = 0; i<300; i++); } void display() { Sel_A1 = 1; Sel_B1 = 1; Sel_C1 = 1; Sel_D1 = 0; LED = table[xiaoshu2];delay(); Sel_A1 = 1; Sel_B1 = 1; Sel_C1 = 0; Sel_D1 = 1; LED = table[xiaoshu1];delay(); Sel_A1 = 1; Sel_B1 = 0; Sel_C1 = 1; Sel_D1 = 1; LED=table[miao2]|DP;delay(); Sel_A1 = 0; Sel_B1 = 1; Sel_C1 = 1; Sel_D1 = 1; LED = table[miao1];delay(); voidKey_Start_Stop() interrupt 0 { EX0 = 0; Status_Flag = ~ Status_Flag ; Is_KeyS_Hold = 1; if(Status_Flag ) TR0 = 1; else TR0 = 0; } void time10ms() interrupt 1 { TL0 = 0XEF; TH0 = 0XD8; TR0 = 1 ; xiaoshu2+=1; if(xiaoshu2 == 10) { xiaoshu2 = 0 ; xiaoshu1 += 1;}

简易秒表

课程设计 题目简易数字秒表的设计与实现学院信息工程学院 专业通信工程 班级 姓名 指导教师撒继铭 2016 年 6 月26 日

课程设计任务书 学生姓名:专业班级: 指导教师:撒继铭工作单位:信息工程学院 题目: 简易数字秒表的设计与实现 初始条件: 本设计主要使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等来完成,用一组数码管显示时间计数值。 要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求) 1、课程设计工作量:1周。 2、技术要求: 1)设计一个能测量3名100米跑运动员短跑成绩的数字秒表。要求用一组四位数码管显示时间,格式为00.00s,最大计数时间是99.99秒。 2)秒表设置3个开关输入(清零开关1个、记录开关1个、成绩开关1个)。按下“记录”开关第一次,将记录并储存第一名运动员的成绩,以此类推。当“记录”开关按下3次后,成绩计数结束。3)成绩计数结束之后,连续按动“成绩”开关,可以把3个运动员的成绩循环显示在数码管上。4)确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。 3、查阅至少5篇参考文献。按《武汉理工大学课程设计工作规范》要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。 时间安排: 1、年月日,布置课设具体实施计划与课程设计报告格式的要求说明。 2、年月日至年月日,方案选择和电路设计。 3、年月日至年月日,电路调试和设计说明书撰写。 4、年月日,上交课程设计成果及报告,同时进行答辩。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

C51单片机秒表计时(C语言)

南开大学滨海学院 C51嵌入式软件设计(C语言) 题目:计时秒表 功能描述:本设计实现在99秒内的秒表计时,一个按键实 现开始、暂停、复位。 原理概述:P1接四位七段数码管,P3.2接一按键产生外部中断0, P3.4-P3.7控制扫描显示。计时使用定时器0产生10ms 中断累计。按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零。主程序调用显示程序,显示程序实时显示计时时间。 效果显示

图一(电路总图) 图二(效果显示) 注:第四位显示为单位:S 程序清单 #in clude #in clude unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; sbit P37=P3A 7; sbit P36=P3A6; sbit P35=P3A5; sbit P34=P3A4; un sig ned int a=0,cout=0,mm=0;x,y,p,q; /********* void delay() { in t g; for(g=70;g>0;g--); H Ef H pf s II 劭B bg ^rl ry s " ■ U1 ■ ■ 口 HILK. paims^ i^^im Fl.^TD ■k i F JJ SOUI n.Tfflr dgirvi^n PH 1 win fOSAtl FCO A E3 POSAD5 HUMth rnTf^vr riwnrr 、:i ■ 品< rz.v^ 冲护 晒 PTanil 程和W P2J5^L 13 PZB?H Px-TiHIS RET ■nep rn F 目*.曰 '怛屮耐 B USr^.L* fDJMKi RONUn P2则a a ?3*J3 *5.

电子钟显示时分秒c语言程序

/*电子钟显示时分秒*/ #include sbit INCH=P3^2; //小时加1 sbit INCM=P3^3; //分钟加1 #define LCDP P0 // 定义LCM 接至P0 sbit RS = P2^7; // 暂存器选择位元(0:指令,1:资料) sbit RW = P2^6; // 设定读写位元(0:写入,1:读取) sbit E = P2^5; // 致能位元(0:禁能,1:致能) sbit BF = P0^7; // 忙碌检查位元(0:不忙,1:忙碌) char count=20; // 中断次数计数,20次*50ms=1秒 char time0[]="CLOCK"; // 显示时间阵列(第1行) char time[11]; // 显示时间阵列(第2行) bit ampm=1; // 0:上午(am),1:下午(pm),初值下午 char hour=11; // 声明时,初值为11点 char minute=59; // 声明分,初值为59分 char second=50; // 声明秒,初值为50秒 void transfer(void); // 转换时分秒至time阵列中 void write_inst(char); // 写入指令函数 void write_char(char); // 写入字元函数 void write_pat(void); // 写入自建字型函数 void check_BF(void); // 检查忙碌函数 void init_LCM(void); // 声明LCM初始设定函数 void delay(int); //去抖函数 main() { char i; init_LCM(); // 初始设定 IE=0X87; // T0、INT0、INT1中断使能TMOD=0x01; // T0设为MODE1 TH0=(56636-50000) / 256; // 填入计时量之高位元组 TL0=(56636-50000) % 256; // 填入计时量之低位元组 TR0=1; // 启动Timer 0 write_inst(0x85); // 指定第1列位置 for (i=0;i<5;i++) write_char(time0[i]); //显示CLOCK while(1) { transfer(); // 转换时分秒至time阵列中write_inst(0xC0); // 指定第2列位置 for (i=0;i<11;i++) write_char(time[i]);// 显示时间 } } //转换函数 void transfer(void)

简易秒表的keil C程序

晶振设置为:12MHz 机器周期为:12*(1/12MHz)=1μs 用Atmel89c52完成,LED显示 用定时器0工作方式2 简易秒表的keilC程序?/span> #include unsigned char led_code[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7 F,0X6F};//共阴显示 unsigned long cnt=0; unsigned int second=0,minute=0; void delay(unsigned int n) //延时 { unsigned long i; while(n--) for (i=0;i<100;i++); } t0_int() interrupt 1

{ if(cnt++==5000)//5000*200个机器周期=1S { cnt=0; second++; if(second==60) { second=0; minute++; if(minute==60) minute=0; } } } main() { TMOD=0x02;//工作方式2 TH0=256-200;//初值计算,200个机器周期 TL0=256-200; ET0=1; EA=1; TR0=1;

while(1) { P3=0;//动态扫描 P2=led_code[second%10]; P3_3=1; delay(1); P3=0; P2=led_code[second/10]; P3_2=1; delay(1); P3=0; P2=led_code[minute%10]; P3_1=1; delay(1); P3=0; P2=led_code[minute/10]; P3_0=1; delay(1); }

51单片机秒表计时器课程设计报告(含C语言程序)

XXXXXX学院 51单片机系统设计课程设计报告 题目:秒表系统设计 专业、班级: 学生姓名: 学号: 指导教师: 分数 : [摘要]本设计是一个秒表计时器,采用51单片机实现。电路包括以下几部分:单片机最小系统部分,数码管显示部分,摁键开关部分部分。电路选用共阴型4位数码管组成时钟显示电路;时钟的增减控制以及清零部分主要由轻触开关构成的摁键系统组成;信号接收和处理部分主要由单片机来执行。接通电源后,秒表计时器处于初始状态,4位数码管显示000.0。当摁下“开始”开关时,秒表开始计时,数码管显示当前状态的时间。当再次摁下开关时,数码管停止计时。摁下“清零”键后,系统重新回到初始状态。 [关键词] 单片机最小系统秒表计时摁键控制 任务书 1、任务 设计一个秒表计时器,在51单片机的控制作用下,采用4个LED数码管显示时间,计时范围设置为00.0~60.0秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。 2、设计要求 (1)开始时显示00.0。每按下S1键一次,数值加1s; (2)每按下S2键一次,数值减1s; (3)每按下S3键一次,数值清零; (4)每按下S4键一次,启动定时器使数值开始自动每秒加1, 再次按下S4键,数值停止自动加1,保持显示原数。 3、发挥部分 (1)开关按键3:“复位60.0”按键(用来60秒倒计时)。按键按下去时数码管复位为“60.0”(用于倒计时)。

(2)开关按键4:倒计时“逐渐自减”按键。按键按下去则是数码管开始“逐渐自减”倒计时。 (3)开关按键5:倒计时初始值“增加”按键。 (4)开关按键6:倒计时初始值“减小”按键。 4、课程设计的难点 单片机电子秒表需要解决三个主要问题,一是有关单片机定时器(一个控制顺序计时,一个控制倒计时)的使用;二是如何实现LED 的动态扫描显示;三是如何对键盘输入进行编程。 5、课程设计仪器 集成电路芯片STC89C52,八段数码管,MCS-51系列单片机微机仿真课程系统中的软件(keil uvision2)。 目录 摘要 (2) 关键词 (2) 任务书 (3) 1、设计任务目的 (5) 2、设计方案选取与论证 (5) 2.1 系统总体设计方案 (5) 2.2 系统整体框图 (5) 3、电路设计 (6) 3.1 单片机最小系统设计 (6) 3.2 数码管显示模块设计 (6) 3.3 摁键控制系统模块设计 (6) 3.4 程序设计 (6) 4、制作及调试过程 (11) 5、结果分析和总结 (12) 参考文献 (12) 附录a 秒表计时器原理图 (13) 附录b 元器件清单 (14) 附录c 秒表计时器实物图 (15) 1、设计任务目的

电子钟的设计 C语言编程

课程设计说明书 课程设计名称:专业课程设计 课程设计题目:电子钟的设计 学院名称:信息工程学院 专业:电子信息工程班级: XXXXXX 学号: XXXXXXXX 姓名: XXXX 评分:教师: XXXXXX 20 XX 年 X 月 X 日

当今信息科技高速发展,使用方便、低成本电子设备已逐步成为我们日常生活中电子产品的主力军。用软件代替硬件的电子设备能大大地节省成本,且有利于资源的节约,因此,以软代硬的设计必将成为我们现代设计的主流。本设计是利用MCS-51系列单片机内部的定时器/计数器进行中数年定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能够使设计者在定时/计数器的使用中及程序设计方面得到锻炼和提高,因此本系统将采用软件方法实现计时。 关键词:单片机计数器软件

第一章实验要求及设计思路 (4) 1.1 设计内容及要求 (4) 1.2 设计的目与和意义 (4) 1.3 设计的基本思路与主要内容 (5) 第二章系统组成及工作原理 (6) 2.1 系统组成 (6) 2.2工作原理 (7) 第三章硬件设计与分析 (9) 3.1 硬件设计原理 (9) 3.2 AT89C51单片机介绍 (9) 3.3单片机最小应用系统 (9) 3.4显示电路 (11) 3.5 键盘及其接口 (12) 第四章软件设计 (14) 4.1 主程序设计 (14) 4.2 定时中断程序 (17) 4.3 显示子程序 (17) 第五章调试与运行 (19) 第六章结论与体会 (20) 参考文献 (21) 附录一系统原理图 (22) 附录二元件清单 (23) 附录三程序清单 (24)

单片机制作秒表计时器(c语言)

利用单片机制作秒表计时器 (c语言) #include//包含单片机对应的头文件 int MM=0,SS=0,MS=0; int time=2; unsigned int sc[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned int dianyuan[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xbf}; void main(void) { int m=0,n=0; TMOD=0x01; //TH0=0xee; //TL0=0x00; TH0=(65535-5100)/256;//设定5毫秒溢出初值 TL0=(65535-5100)%256; TR0=1; IT0=1;//外部终端以按下效 EX0=1;//启动 IT1=1;//外部终端以按下效 EX1=1;//启动 EA=1; while(1) { m=MM/10; P2=0xfe; P0=sc[m]; delay_ms(1); n=MM%10; P2=0xfd; P0=sc[n]+0x80; delay_ms(1);

m=SS/10; P2=0xfb; P0=sc[m]; delay_ms(1); n=SS%10; P2=0xf7; P0=sc[n]+0x80; delay_ms(1); m=MS/10; P2=0xef; P0=sc[m]; delay_ms(1); n=MS%10; P2=0xdf; P0=sc[n]; delay_ms(1); } } void ex0(void) interrupt 0 { ET0=1; } void ex2(void) interrupt 2 { if(ET0==1) { ET0=0; return ; } if(ET0==0) { MM=0;

51单片机电子钟C语言程序1

基于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(uchar k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay (uchar k) { uchar j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } /**************************/ /*时间处理子程序*/ /**************************/ void time_pro( void) {

C语言实现秒表

源代码如下(作者:中南大学通信工程1602肖涛,qq:2391527690)#include #include//_kbhit #include #include struct t { intho,mi,se; }ti; struct t carry(struct t sj) { sj.se++; if(sj.se==60) { sj.se=0; sj.mi++; } if(sj.mi==60) { sj.mi=0; sj.ho++; } if(sj.ho==24)

sj.ho=0; return(sj); } void showtime(struct t sj) { system("cls"); printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t"); printf("秒表显示器:"); if(sj.se<10&&sj.ho<10&&sj.mi<10)//控制计时时时间显示格式printf("0%d:0%d:0%d\n",sj.ho,sj.mi,sj.se); if(sj.se>=10&&sj.ho<10&&sj.mi<10) printf("0%d:0%d:%d\n",sj.ho,sj.mi,sj.se); if(sj.se<10&&sj.mi>=10&&sj.se<10) printf("0%d:%d:0%d\n",sj.ho,sj.mi,sj.se); if(sj.se<10&&sj.mi<10&&sj.ho>=10) printf("0%d:0%d:%d\n",sj.ho,sj.mi,sj.se); if(sj.se>=10&&sj.mi>=10&&sj.ho<10) printf("0%d:%d:%d\n",sj.ho,sj.mi,sj.se); if(sj.se>=10&&sj.mi<10&&sj.ho>=10) printf("%d:0%d:%d\n",sj.ho,sj.mi,sj.se); if(sj.se<10&&sj.mi>=10&&sj.ho>=10) printf("%d:%d:0%d\n",sj.ho,sj.mi,sj.se);

C语言实现电子钟编程

/************************************************************** ********二班第二组电子钟程序 ******** ***********************************************************/ #include #define uchar unsigned char #define uint unsigned int uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar i,j,k,a=0,b=0; uchar s=12,f=0,m=0; //定义时、分、秒变量 sbit LED=P1^3; sbit k1=P3^0; // 控制暂停和启动 sbit k2=P3^1; //功能选择键 sbit k3=P3^2; sbit k4=P3^3; /************************************************************** ********延时函数******** ***********************************************************/ void delay(uint k) { for(i=0;i<60;i++) for(j=0;j

51单片机数码管显示时钟(C语言)

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////以下是主文件main.c 的内容 /****************************************************************************** * * 实验名: 万年历实验 * 使用的IO : * 实验效果:1602显示时钟 * 注意: ******************************************************************************* / #include #include"ds1302.h" //数码管IO #define DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Num=0; unsigned int disp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f}; void LcdDisplay(); void Timer0Configuration(); /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main() {

简单的时钟程序(C语言)

#include // 头文件 #define uchar unsigned char; #define uint unsigned int; /////**********全局变量声明************************* uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9段码表uchar h,m,s,k=0,j; void delay(); void display() ; //*****************延时1ms************************ void delay() { unsigned char i,j; for(i=0;i<20;i++) for(j=0;j<100;j++); } //*******************函数初始化******************** void int_init() { EA=1; TMOD=0x01;; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; //定时器T0开启 ET0=1; //定时器0允许中断 P0 = 0X00; P2 = 0X00; h=m=s=0; //****时,分,秒,初值 } //******************数码管显示函数*********************** void display() { P0=tab[h/10]; //取小时的十位 P2=0x01; delay(); P2=0X00; //P2口清屏 P0=tab[h%10]; //取小时的个位 P2=0x02; delay(); P2=0X00; P0=tab[m/10]; //取分钟的十位

秒表设计C语言程序

/*----------------------------------------------- 名称:数码管显示,按键控制秒表 论坛:https://www.360docs.net/doc/d86143537.html, 编写:shifang 日期:2009.5 修改:无 内容:中断按键控制,数码管显示,中断0控制计时和停止,中断1清零 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 unsigned int msecond,second;//定义全局变量 bit GoFlag;//定义停止,计时标志 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void DelayUs2x(unsigned char t);//函数声明 void DelayMs(unsigned char t); void Display(unsigned char FirstBit,unsigned char Num); void Init_Timer0(void); void CLR(void); /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char num=0; EX0=1; //外部中断0开 IT0=1; //IT1=0表示边沿触发 EX1=1; //外部中断1开 IT1=1; //IT1=1表示边沿触发 Init_Timer0(); while (1) //主循环 {

相关文档
最新文档