实时电子指针时钟开发总结(C语言版)

合集下载

时钟显示设计c语言

时钟显示设计c语言

时钟显示设计1 功能:实现时钟的实时显示与定时2 基本要求:(1)画出表盘时钟,时、分、秒针填充不同的颜色(自选)。

(2)数字同步显示时间信息。

(3)整点报时。

(4)通过键盘输入闹铃时间,实现闹铃功能。

3 相关知识:图形操作、按键操作、时间函数等4 功能扩充:1)实现秒表功能2)给出其它国家的时钟同步信息目录一、题目介绍: (3)二、小组成员信息: .......................................................................................... 错误!未定义书签。

三、总体设计: (3)四、模块划分: (3)五、算法说明: (3)六、各模块函数功能及流程图: (4)七、程序测试: (5)八、结论: (9)九、体会及建议: .............................................................................................. 错误!未定义书签。

十、参考文献: .................................................................................................. 错误!未定义书签。

附录:源程序清单 (9)题目介绍:时钟显示设计可以实现时钟的实时显示与定时,并且具有整点报时与闹铃的功能,具有动态效果,能够激发学生学习c语言的兴趣与热情。

在设计过程中会遇到没有学过的知识,这需要自己查阅资料来完成,所以还是有一定难度的。

总体设计:本程序设计分为三步:1 是对时钟程序做全面的分析,即对程序要使用的编写方法功能,运行方式进行分析,并做出正确的解决方案。

2 是程序的编写。

由于该程序所涉及的信息比较广泛,所以程序的编写也有些复杂。

程序编写是一项困难的任务,完成此项目必须运用大量的知识,而且要有清晰的思路和较强的语言组织能力。

基于51系列单片机与DS1302时钟芯片的电子时钟C语言Proteus仿真报告

基于51系列单片机与DS1302时钟芯片的电子时钟C语言Proteus仿真报告

基于单片机的电子时钟:班级:学号:指导教师:完成日期:I / 20目录摘要一、引言 (1)二、基于单片机的电子时钟硬件选择分析 (2)2.1主要IC芯片选择 (2)2.1.1微处理器选择 (2)2.1.2 DS1302简介 (4)2.1.3 DS1302引脚说明 (4)2.2电子时钟硬件电路设计 (5)2.2.1时钟电路设计 (6)2.2.2整点报时功能 (7)三、Protel软件画原理图 (8)3.1系统工作流程图 (8)3.2原理图 (9)四、proteus软件仿真与调试 (9)4.1电路板的仿真 (9)4.2软件调试 (9)五、源程序 (10)六、课设心得 (13)II / 20七、参考文献 (13)基于单片机电子时钟设计摘要电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。

另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。

本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。

本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。

本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。

这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。

该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。

关键词:电子时钟;多功能;AT89C52;时钟日历芯片III / 20一、引言时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。

从古代的水漏、十二天干地支,到后来的机械钟表以与当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。

致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。

单片机C语言电子钟显示年月日星期及时间(带注释)

单片机C语言电子钟显示年月日星期及时间(带注释)

#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" 2011-12-30 SA T";uchar code table1[]=" 23:59:55 ";uchar code week1[][3]={"MON","TUE","WEN","THU","FRI","SA T","SUN"}; /*uchar code week2[]="TUE";uchar code week3[]="WEN";uchar code week4[]="THU";uchar code week5[]="FRI";uchar code week6[]="SA T";uchar code week7[]="SUN"; */uchar count,shi,fen,miao,dnum,year,month,day,week,a=5;sbit rs=P2^0; //数据命令sbit rw=P2^1; //读写sbit en=P2^2; //使能sbit d1=P3^1; //独立键盘sbit d2=P3^2;sbit d3=P3^3;sbit d4=P3^4;void delay(uchar z) //延时{uint x,y;for(x=110;x>0;x--)for(y=z;z>0;z--);}void write_com(uchar com) //写指令{rs=0;rw=0;en=0;P0=com;delay(5);en=1;delay(5);en=0;}void write_date(uchar date) //写数据{rs=1;rw=0;en=0;P0=date;delay(5);en=1;delay(5);en=0;}void write_weekday (uchar a){uchar x;write_com(0x80+13);for(x=0;x<3;x++){write_date(week1[a][x]);}}void weekday(uint i){write_weekday(i%7);}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add); //指向要写的地址write_date(0x30+shi); //0x30代表的数字是0,+shi表示shi的数字write_date(0x30+ge); //ge的数字}void write_ymd(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add); //指向要写的地址write_date(0x30+shi); //0x30代表的数字是0,+shi表示shi的数字write_date(0x30+ge); //ge的数字}void unit(){uchar num;en=0;write_com(0x38); //显示write_com(0x0c); //光标不显示write_com(0x06); //指针加1,整屏不移动write_com(0x01); //清屏write_com(0x80); //指针指向0x80for(num=0;num<16;num++) //第一行显示table数组{write_date(table[num]);delay(20);}write_com(0x80+0x40);for(num=0;num<16;num++) //第二行显示table1数组{write_date(table1[num]);delay(20);}TMOD=0X01;TH0=(65536-50000)/256; //开启中断TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;shi=23;fen=59;miao=55;year=11;month=12;day=30;}void jishu() //计数{if(count==20){count=0;miao++; //秒加if(miao==60){miao=0;fen++; //分加if(fen==60){fen=0;shi++;if(shi==24){shi=0;day++;a++;weekday(a);//时加}write_sfm(3,shi);write_ymd(9,day);if(day==31){day=0x01;write_ymd(9,day);month++;write_ymd(6,month);if(month==13){month=0x01;write_ymd(6,month);year++;write_ymd(3,year);}}}write_sfm(6,fen);}write_sfm(9,miao);}}void change(){d4=0;if(d1==0) //移光标{delay(10);if(d1==0){while(!d1);dnum++;if(dnum==1){TR0=0;write_com(0x0f);write_com(0x80+0x40+10);}if(dnum==2){write_com(0x80+0x40+7);}if(dnum==3){write_com(0x80+0x40+4);}if(dnum==4){write_com(0x80+10);}if(dnum==5){write_com(0x80+7);}if(dnum==6){write_com(0x80+4);}if(dnum==7){dnum=0;TR0=1;write_com(0x0c);}}}if(d2==0) //加数据{delay(10);if(d2==0){while(!d2);if(dnum==1){miao++;if(miao==60)miao=0;write_sfm(9,miao); //顺序不能换write_com(0x80+0x40+10); //顺序不能换}if(dnum==2){fen++;if(fen==60)fen=0;write_sfm(6,fen);write_com(0x80+0x40+7);}if(dnum==3){shi++;if(shi==24){shi=0;}write_sfm(3,shi);write_com(0x80+0x40+4);}if(dnum==4){day++;a++;weekday(a);if(day==31)day=1;write_ymd(9,day);write_com(0x80+10);}if(dnum==5){month++;if(month==13)month=1;write_ymd(6,month);write_com(0x80+7);}if(dnum==6){year++;write_ymd(3,year%100);write_com(0x80+4);}}}if(d3==0) //减数据{delay(10);if(d3==0){while(!d3);if(dnum==1){miao--;if(miao==-1)miao=59;write_sfm(9,miao);write_com(0x80+0x40+10);}if(dnum==2){fen--;if(fen==-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+7);}if(dnum==3){shi--;if(shi==-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+4);}if(dnum==4){day--;a--;weekday(a);if(day==0)day=30;write_ymd(9,day);write_com(0x80+10);}if(dnum==5){month--;if(month==0)month=12;write_ymd(6,month);write_com(0x80+7);}if(dnum==6){year--;write_ymd(3,year%100);write_com(0x80+4);}}}}void main(){unit();while(1){jishu();change();}}void timer0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}#include<reg52.h>#define uchar unsigned char //宏定义#define uint unsigned int //宏定义sbit rs=P3^5; //液晶数据/指令选择端:1-数据,0-指令sbit lcden=P3^4; //液晶使能控制端:1-有效,0-无效sbit shift_key=P3^2;//位置移动键sbit up_key=P3^3;//增加键uchar temp=0;//定义定时器溢出计数变量,每隔50ms产生1次溢出,temp加1uint year=2011;//定义年变量并赋初值2011年uchar month=06,day=01,week;//定义月、日、星期变量,并赋初值5月23日uchar hour=23,minute=59,second=58;//定义时、分、秒变量,并赋初值12时00分00秒uchar code week_string[7][4]={"MON","TUE","WED","THU","FRI","SA T","SUN"};//定义星期英文缩写表uchar data month_day[12]={31,0,31,30,31,30,31,31,30,31,30,31};//定义每月天数表/*--定时计数器T0及中断初始化函数--*/void init(void){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值EA=1;//开总中断ET0=1;//开启定时器0中断EX0=1;//开启外部中断,外部中断用于调整时间PT0=1;//将定时器0中断设置高优先级,调整时间期不停止计时TR0=1;//启动定时器0}/*----------1ms延时函数----------*/void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=114;j>0;j--);}/*-------LCD1602写指令函数-----*/void LCD1602_write_com(uchar com){rs=0;//rs=0,置指令输入状态P0=com;//输出指令码delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*-------LCD1602写数据函数-----*/void LCD1602_write_dat(uchar dat){rs=1;//rs=1,置数据输入状态P0=dat; //输出待显示字符的字符码(ASCII码)delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*********************公历平年的2月只有28天,公历闰年的2月有29天。

C语言课程设计 时钟代码

C语言课程设计 时钟代码

/*电子时钟源代码*/#include<graphics.h>#include<stdio.h>#include<math.h>#include<dos.h>#define PI 3.1415926 /*定义常量*/#define UP 0x4800 /*上移↑键:修改时间*/#define DOWN 0x5000 /*下移↓键:修改时间*/#define ESC 0x11b /*ESC键:退出系统*/#define TAB 0xf09 /*TAB键:移动光标*//*函数声明*/int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/int timeupchange(int); /*处理上移按键*/int timedownchange(int); /*处理下移按键*/int digithour(double); /*将double型的小时数转换成int型*/int digitmin(double); /*将double型的分钟数转换成int型*/int digitsec(double); /*将double型的秒钟数转换成int型*/void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/void drawcursor(int); /*绘制一个光标*/ void clearcursor(int);/*消除前一个光标*/void clockhandle(); /*时钟处理*/ double h,m,s; /*全局变量:小时,分,秒*/double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/struct time t[1];/*定义一个time结构类型的数组*/main(){int driver, mode=0,i,j;driver=DETECT; /*自动检测显示设备*/initgraph(&driver, &mode, "");/*初始化图形系统*/setlinestyle(0,0,3); /*设置当前画线宽度和类型:设置三点宽实线*/ setbkcolor(0);/*用调色板设置当前背景颜色*/setcolor(9); /*设置当前画线颜色*/ line(82,430,558,430);line(70,62,70,418);line(82,50,558,50);line(570,62,570,418);line(70,62,570,62);line(76,56,297,56);line(340,56,564,56); /*画主体框架的边直线*//*arc(int x, int y, int stangle, int endangle, int radius)*/arc(82,62,90,180,12);arc(558,62,0,90,12);setlinestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(558,418,270,360,12); /*画主体框架的边角弧线*/setcolor(15);outtextxy(300,53,"CLOCK"); /*显示标题*/setcolor(7);rectangle(342,72,560,360); /*画一个矩形,作为时钟的框架*/setwritemode(0); /*规定画线的方式。

C语言模拟时钟转动课设报告-附代码

C语言模拟时钟转动课设报告-附代码

模拟时针转动程序姓名:学号:完成日期:2012年12月设计目的加深对讲授内容的理解,尤其是一些语法规定。

通过课程设计,自然地、熟练地掌握。

熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。

学会上机调试程序。

熟悉C语言图形模式下的编程,掌握利用C语言相关函数开发电子时钟的基本原理。

能模拟机械钟表行走;要准确地利用数字显示时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致。

总体设计电子时钟的功能描述电子时钟流程图模块描述动画处理模块在屏幕上显示sin和cos型的动态函数图像,显示运动的问候语。

转时针动处理模块指针式的时钟表盘为椭圆形并且圆周上有分布均匀的12个刻度刻度显示清楚钟面上有长度不相同的指针即时针、分针、秒针指针的运动具有规律性为顺时针。

数字时钟处理模块数字钟显示时间的格式是年月日时分秒小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步且两个时钟所显示的时间与计算机的系统时间一致。

详细设计time结构体strume time{usigned char ti_min;usigned char ti_hour;usigned char ti_hud;usigned char ti_sec;};time 结构体定义在dos.h文件中,可以保存系统的当前时间。

全局变量double h,m,s;这三个变量分别保存小时,分钟,秒。

double x,y,x1,y1,x2,y2;保存数字时钟中小时分钟秒在屏幕中显示的位置。

struct time t[1];定义一个time结构类型的数组。

函数功能的描述1.def()函数原型: void def()def()函数是用来输出一组彩带的,通过输入位置和颜色的变化来输出sin型的彩带,且在整个函数中保留结果。

2. abc()函数原型: void abc()abc()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。

c课程设计实时钟表

c课程设计实时钟表

c课程设计实时钟表一、课程目标知识目标:1. 学生能够理解实时钟表的基本概念,掌握时、分、秒的相互关系及其在钟表上的表示方法。

2. 学生能够运用所学知识,识别并准确读取各种类型的实时钟表时间。

3. 学生了解钟表的历史发展及其在日常生活和科技领域中的应用。

技能目标:1. 学生能够通过观察、分析,正确设置和调整钟表时间,培养实际操作能力。

2. 学生能够运用所学知识解决与实时钟表相关的问题,提高问题解决能力。

3. 学生能够运用信息技术手段,设计并制作简单的实时钟表模型。

情感态度价值观目标:1. 学生培养对时间观念的尊重,养成守时、珍惜时间的良好习惯。

2. 学生在小组合作中,培养团队协作精神,学会分享和交流。

3. 学生通过学习实时钟表,认识到科技与生活的紧密联系,增强对科学技术的兴趣和探索精神。

课程性质:本课程为小学四年级信息技术课程,旨在通过实时钟表的学习,让学生掌握时间的基本概念,提高观察、操作和问题解决能力。

学生特点:四年级学生对新鲜事物充满好奇,动手操作能力强,但注意力容易分散,需要结合实际操作和趣味性教学。

教学要求:教师应注重理论与实践相结合,运用生动、形象的教学方法,激发学生兴趣,引导学生在实践中掌握知识,培养技能和情感态度价值观。

通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。

二、教学内容1. 实时钟表的基本概念:时、分、秒的定义及其关系,钟表的构造及其工作原理。

2. 钟表时间的读取与设置:各类钟表(电子钟、指针钟、数字钟)的读取方法,如何调整和设置时间。

3. 钟表的应用与制作:- 钟表在日常生活和时间管理中的应用;- 设计并制作简易实时钟表模型,运用信息技术手段实现基本功能。

4. 钟表与科技发展:介绍钟表的历史演变,探讨钟表在科技领域的应用。

教学大纲安排:第一课时:实时钟表的基本概念及构造,了解时、分、秒的关系。

第二课时:学习读取和设置各类钟表时间,培养实际操作能力。

第三课时:探索钟表在日常生活和时间管理中的应用,培养时间管理意识。

电子钟C程序,显示年月日时分秒,有秒表功能

电子钟C程序,显示年月日时分秒,有秒表功能

#include<reg51.h>//#include"DS18B20_3.H"#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,key4n;//sheding 为调节打铃时间时显示//flag用于读取头文件中的温度值,和显示温度值uchar codeSeg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned int s_1,s_2,s_3,s_4,s_5,s_6;#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)uchar flag_xs=0,flag_m,flag_m1,flag_f,flag_f1,flag_s,flag_s1;uchar flag_n,flag_n1,flag_y,flag_y1,flag_r,flag_r1,flag_mb;uint numt;//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)//DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P1^1;sbit SCLK=P1^0;sbit RST=P1^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit nyr=P3^1;sbit sfm=P3^0;/************************************************************ACC累加器=AACC.0=E0HACC.0就是ACC的第0位。

软件实时钟(RTC)演示程序-C语言

软件实时钟(RTC)演示程序-C语言

/*
软件实时钟(RTC)演示程序

说明:该程序演示RTC程序库所包含的常用的RTC功能函数的使用方法。
在使用RTC相关函数之前,其中RTC_Tick()函数需要被一个准确
的周期定时中断调用。

*/
d年%.2d月%.2d日 %.2d:%.2d:%.2d\r",Year,Month,Date,Hour,Minute,Second);
//从串口输出,打印到超级终端软件上。
for(i=0;i<30000;i++); //延迟
}
}

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实时时钟开发总结
一.功能描述
本时钟可以获取电脑系统时钟,实现与系统时间的同步,时间的准确性根本不需怀疑,
可用于车站等公共场所的电子指针时钟。

二.系统开发平台
Visual C++
注意:
1) 单纯的Visual C++ 不行,需下载一个EasyX小插件对其进行配置好才可(网上有
下的,也有配置方法)。
2) 程序代码必须以.cpp结尾。
3) 分辨率:最佳效果1024*768。

三.游戏开发详细过程:
四.详细完整的代码
#include // 就是需要引用这个图形库
#include
#include
#include
#include
#include
#include
#define PI 3.14159
#define ESC 0x011b
#define YELLOW 0x54FCFC
float s0=-1,m0=-1,h0=-1;
void timer();
//主函数
void main()
{
int i=3;
char H[10];
double n;
char key;
initgraph(640, 480); // 这里和 TC 略有区别,可以自定义大小
circle(200, 200, 100);
circle(200,200,95);
//时针、分针、秒针的动态实现
for(n=0;n<=2*PI;n+=PI/30)
{
putpixel((int)(200+94*cos(-n)),(int)(200+94*sin(-n)),4);

}
for(n=0;n<=2*PI;n+=PI/6)
{
circle(200+1*cos(-n),200+1*sin(-n),14);
}
for(n=0;n<=2*PI;n+=PI/6)
{
itoa(i,H,10);
outtextxy((int)(197+90*cos(-n)),(int)(197+90*sin(-n)),H);
i--;
if(i<1)
i+=12;
}
while(!kbhit())
{
timer();
double delay(1000);
}
//key=bioskey(0);
key=getchar();
if(key==ESC)
{
closegraph();
exit(0);

}
getch(); // 按任意键继续
closegraph(); // 关闭图形界面
}
//通过时间函数获取系统时钟
void timer()
{
struct tm *when;
float s,m1,h1;
int h,m;
time_t now;
time(&now);//获取当前系统时间
when= localtime(&now);
h=when->tm_hour;//将当前时间的小时成员赋值给h
m=when->tm_min;
s=(float)(when->tm_sec);
h1=(float)((h+(m*60+s)/3600)*PI/6-PI/2); //计算时钟的角度
m1=(float)((m+s/60)*(PI/30)-PI/2); //计算分钟的角度

if(s0!=(-1) && m0!=(-1) && h0!=(-1)) // 覆盖前一个指针留下的痕迹
{
setcolor(0);//清楚
line(200,200,200+55*cos(m0),200+55*sin(m0));
line(200,200,200+45*cos(h0),200+45*sin(h0));
line(200,200,200+65*cos((s0)*(PI/30)+PI/2),200+65*sin((s0)*(PI/30)+PI/2));

}
setcolor(RED);//设置时针的颜色
line(200,200,200+45*cos(h1),200+45*sin(h1));//绘制时针
setcolor(LIGHTGRAY);
line(200,200,200+55*cos(m1),200+55*sin(m1));//绘制分针
setcolor(BLUE);//设置秒针颜色
line(200,200,200+65*cos((s)*(PI/30)+PI/2),200+65*sin((s)*(PI/30)+PI/2));//绘制秒针

s0=s;
m0=m1;
h0=h1;
}

作者:flybird
时间:2012/08/12

相关文档
最新文档