模拟电子时钟c语言程序

合集下载

用C#编的模拟时钟(附源代码)

用C#编的模拟时钟(附源代码)

使用C#模拟时钟表的一种简单制作方法1.GDI+图形库简介1.1概述GDI+是Microsoft的新.NET Framework类库用于图形编程,因为它是.NET Framework的一部分,所以也是面对对象的。

1.2设备环境和对象在GDI+中识别输出设备的方式是使用设备环境DC对象,该对象存储特定设备的信息并能把GDI+API函数调用转换为要发送给该设备的指令,还可以查询设备环境对象,确定对应的设备有什么功能,这样才能据此调整输出结果。

在GDI+中设备环境包装在.NET基类System.Drawing.Graphics中,大多数绘图工作都是调用Graphics的对象完成的。

2.如何利用GDI+绘制时钟表2.1时钟表的各控件属性的设置用C#中各控件制作一个指针式的时钟放在桌面上显示的界面。

包括1个PictureBox控件、1个Timer控件、1个NotifyIcon控件及StatusStrip控件。

2.2各控件的属性设置Timer控件的Interval属性值设置为1000,Enable属性值设置为True;窗体的StartPosi tion属性设置为CenterScreen,这个属性使得钟表在屏幕上中中央显示。

2.3功能实现代码为实现该时钟表功能,需要设计并输入相应对象相应事件或过程的程序代码。

方法是:在设计状态,双击相应控件,或双击控件的某一事件,并输入相应的C#程序代码。

2.4通用声明及时钟表设计方法在程序中需要有一批变量或常量的定义,可事先在通用声明中完成,代码如下:const int s_pinlen = 100;//秒针长度const int m_pinlen = 75; //分针长度const int h_pinlen = 75; //时针长度PointF center = new PointF(s_pinlen +3, s_pinlen +3);//中心点位置SolidBrush sb = new SolidBrush(Color.Black);//时钟圆心的刷子除上述变量声明外,时钟表功能编写子方法,方法名为:AngleToPos和myClock,方法AngleToPos是根据角度和百分比计算出一个点的坐标函数,代码如下:PointF AngleToPos(int angle, float percent){PointF pos = new PointF();double radian = angle * Math.PI / 180;pos.Y = center.Y - s_pinlen * percent * (float)Math.Sin(radian);pos.X = center.X + s_pinlen * percent * (float)Math.Cos(radian);return pos;}方法myClock主要是绘制时钟表的中心位置、秒针、分针及时针的结束位置。

电子时钟c语言课程设计

电子时钟c语言课程设计

电子时钟c语言课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中结构体、指针、函数等基本概念;2. 学生能运用C语言编程实现电子时钟的功能,包括时、分、秒的显示与更新;3. 学生了解电子时钟的原理,明确时间与计算机系统时间的关系。

技能目标:1. 学生能运用所学知识,设计并编写出具有实际功能的电子时钟程序;2. 学生通过课程学习,掌握编程调试技巧,提高解决问题的能力;3. 学生能够进行团队协作,共同分析问题、设计解决方案并完成项目。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发探索精神,增强学习动力;2. 学生通过课程学习,认识到编程在实际生活中的应用,提高学习的实用性;3. 学生在团队协作中,学会沟通与交流,培养合作精神和团队意识。

课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握C语言编程的基本技能,培养实际编程能力。

学生特点:学生已经掌握了C语言的基本语法,具有一定的编程基础,但对实际项目的开发流程和团队协作经验不足。

教学要求:教师需引导学生将所学理论知识应用于实际项目,注重培养学生的动手能力、解决问题的能力和团队协作能力。

在教学过程中,将目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. C语言基础回顾:结构体、指针、函数的定义与使用;2. 电子时钟原理介绍:时间概念、计算机系统时间处理;3. 编程环境准备:配置开发环境、编译与调试;4. 项目需求分析:明确电子时钟的功能需求、界面设计;5. 编程实现:- 设计结构体存储时间数据;- 编写函数实现时、分、秒的更新;- 实现界面显示与交互;- 处理异常情况与边界条件;6. 项目测试与优化:测试电子时钟程序、优化代码性能;7. 团队协作与交流:分组进行项目开发、组内讨论与分享;8. 课堂总结与反馈:总结项目开发过程、收集学生反馈。

教材关联章节:C语言基础、结构体与指针、函数、项目实践。

教学内容安排与进度:1. 基础知识回顾(1课时);2. 电子时钟原理介绍(1课时);3. 编程环境准备与项目需求分析(1课时);4. 编程实现(4课时);5. 项目测试与优化(2课时);6. 团队协作与交流(2课时);7. 课堂总结与反馈(1课时)。

制作一个电子时钟C语言版

制作一个电子时钟C语言版

制作一个电子时钟C语言版平常我们常见的电子时钟,能够显示当下的时分秒信息,并且能够随时变化递增,记录着时间的流逝。

今天,我要用c语言来制作这样一款电子时钟,看时间这把杀猪刀如何“一刀一刀”溜掉。

我会一步一步引导大家了解制作过程。

首先,我们可以想到,需要获取系统的时间函数,并且显示在cmd控制台中。

time.h是c/c++日期和时间头文件,用于获取系统日期和时间等要求。

首先给出提取显示当前时间的1.0版本电子时钟。

#include<stdio.h>#include<time.h>#include<string.h>int main(){char str[50];//定义字符串用于存储时间time_t t;struct tm *nt;//tm是time.h中定义的一个结构体t=time(NULL);nt=localtime(&t);//获取当前时间strftime(str,50,"%Y-% m-%d %H:%M:%S ",nt);//strftime是根据当前计算机区域设置格式化本地时间日期printf("现在时刻:%s\n",str);//打印现在时刻getch();return 0;}运行的结果如下:可以看出,的确做到了显示当前时间,但是很明显这不是电子时钟,电子时钟要不断运行变换时间,而不是让时间凝滞。

那么,我们怎么实现真正的电子时钟呢?我们一起思考:如果要实现时间变化,需要不断重新获取当前时间,并且将之前的显示清除掉,然后再打印显示当前时间,这样循环往复。

所以,需要增加一个while(1)死循环,同时要增加一个清屏函数,清除原来的显示。

清屏函数常用的就是system("cls")。

下面是改进后的2.0版代码。

#include<stdio.h>#include<time.h>#include<string.h>int main(){char str[50];time_t t;struct tm *nt;while(1){system("cls");//清屏函数t=time(NULL);nt=localtime(&t);strftime(str,50,"%Y-%m-%d %H:%M:%S “,nt);printf("现在时刻:%s\n",str);}getch();return 0;}然后运行程序,就可以实现电子时钟了,时间不断刷新,秒数递增,时间随之递增。

电子钟的设计 C语言编程

电子钟的设计 C语言编程

课程设计说明书课程设计名称:专业课程设计课程设计题目:电子钟的设计学院名称:信息工程学院专业:电子信息工程班级: XXXXXX 学号: XXXXXXXX 姓名: XXXX 评分:教师: XXXXXX20 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)第一章 实验要求及设计思路1.1 设计内容及要求设计一个电子钟,要求如下:(1) 利用单片机最小系统设计一个电子钟(不能采用单片机开发系统)(2) 用8255扩展键盘及显示接口(3) 显示方式:** 时** 分** 秒(4) 时间可以任意修改1.2 设计的目的与意义人类的生活包括:工作、学习、休息以及参与社会的多种实践活动,环环有条理,更加丰富多彩。

电子时钟c语言

电子时钟c语言
cprintf("%d-%d-%d,Monday!",currentYear,currentMonth,currentDay);
/*还原字体颜色*/
textcolor(7);
}
/*根据系统日期输出星期函数*/
void printWeek()
{
int day ;
/*根据系统日期获得星期*/
day=getWeek(currentYear,currentMonth,currentDay);
gotoxy(45,9);
textcolor(YELLOW);
cprintf("MONTH:");
gotoxy(50,9);
printf(" Right key( ) to increase;\n");
gotoxy(50,11);
printf(" Left key( ) to decrease.\n");
gotoxy(45,5);
textcolor(YELLOW);
cprintf("YEAR");
gotoxy(50,5);
printf(" Up key( ) to increase;\n");
gotoxy(50,7);
printf(" Down key( ) to decrease.\n");
}
printf("\n");
}
/*输出使用方法函数*/
void printUsage()
{
gotoxy(45,3);
/*设定字体颜色*/

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

51单片机电子时钟C语言程序
IT0=0;//电平触发(低电平有效)
EX0=1;
ET0=1;
TR0=1;
yueqh(),riqh();//初始化日月切换
}
void ritiao()//日期的调节函数
{ if(P36==0)//日期加一调节键
{
p36xd();
if((numyue==1)||(numyue==3)||(numyue==5)||(numyue==7)||(numyue==8)||(numyue==10)||(numyue==12))
{numyue=1;}
yueqh();
}
if(P37==0)
{
p37xd();
numyue-=1;
if(numyue==0)
{numyue=12;}
yueqh();
}
}
void int0() interrupt 0
{
p32xd();
if(numsec==-1)
{
numsec=59;
}
secqh();
}
}
};
p32xd();
while(P32!=0)//第二次按下p32时,进行分调时
{
for(m=0;m<40;m++)
{
P2=0x00;
P0=table[hou1];
P2=0X20;
delayms(1);
P2=0x00;
P0=table[hou2]&0x7f;
P2=0X10;
delayms(1);
P2=0x00;
P0=table[sec1];

C语言实现电子时钟程序

C语言实现电子时钟程序

C语⾔实现电⼦时钟程序本⽂实例为⼤家分享了C语⾔实现电⼦时钟程序的具体代码,供⼤家参考,具体内容如下Qt ⾥⾯运⾏#include<windows.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>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);elseprintf("%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);elseprintf("%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);elseprintf("%5s%c", " ", 2);}return 0;}int print4(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i<6) printf("%c%4s%c", 2, " ", 2);else if (i == 6)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else printf("%5s%c", " ", 2);}return 0;}int print5(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("%c", 2);elseprintf("%5s%c", " ", 2);}return 0;}int print6(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("%c", 2);elseprintf("%c%4s%c", 2, " ", 2);}return 0;}int print7(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0) printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2); else printf("%5s%c", " ", 2);}return 0;}int print8(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("%c%4s%c", 2, " ", 2);}return 0;}int print9(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("%c%4s%c", 2, " ", 2);elseprintf("%5s%c", " ", 2);}return 0;}int clear(Point p){int i = 0;for (; i<13; i++)gotoxy(p.x, p.y + i); printf("%16s", " ");return 0;}int printtime(Point p, int n){int a, b;Point pp;a = n / 10,b = n % 10;pp.x = p.x + 8, pp.y = p.y;switch (a){case 0: print0(p); break;case 1: print1(p); break;case 2: print2(p); break;case 3: print3(p); break;case 4: print4(p); break;case 5: print5(p); break;}switch (b){case 0: print0(pp); break;case 1: print1(pp); break;case 2: print2(pp); break;case 3: print3(pp); break;case 4: print4(pp); break;case 5: print5(pp); break;case 6: print6(pp); break;case 7: print7(pp); break;case 8: print8(pp); break;case 9: print9(pp); break;}return 0;}int main(){Point phour, pmin, psec, point1, point2;phour.x = 9, pmin.x = 32, psec.x = 55;phour.y = pmin.y = psec.y = 7;point1.x = 25, point2.x = 49;point1.y = point2.y = 7;clrscr();textbackground(YELLOW); /* 设置背景颜⾊*/ textcolor(RED); /* 设置数字显⽰颜⾊*/now = time(0);pt = localtime(&now);t1 = *pt;printtime(phour, t1.tm_hour);printpoint(point1);printtime(pmin, t1.tm_min);printpoint(point2);printtime(psec, t1.tm_sec);while (1){now = time(0);pt = localtime(&now);t2 = *pt;if (t2.tm_sec != t1.tm_sec){t1 = t2;clrscr();printtime(phour, t1.tm_hour);printpoint(point1);printtime(pmin, t1.tm_min);printpoint(point2);printtime(psec, t1.tm_sec);}if (bioskey(1) == 0) continue;else exit(0);}return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

电子钟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位。

7用C#编的模拟时钟(附源代码)

7用C#编的模拟时钟(附源代码)

使用C#模拟时钟表的一种简单制作方法PointF center=new PointF(s_pinlen+3,s_pinlen+3);//中心点位置SolidBrush sb=new SolidBrush(Color.Black);//时钟圆心的刷子除上述变量声明外,时钟表功能编写子方法,方法名为:AngleToPos和myClock,方法AngleToPos是根据角度和百分比计算出一个点的坐标函数,代码如下:PointF AngleToPos(int angle,float percent){PointF pos=new PointF();double radian=angle*Math.PI/180;pos.Y=center.Y-s_pinlen*percent*(float)Math.Sin(radian);pos.X=center.X+s_pinlen*percent*(float)Math.Cos(radian);return pos;}方法myClock主要是绘制时钟表的中心位置、秒针、分针及时针的结束位置。

代码如下: Pen pDisk=new Pen(Color.Orange,3);//时钟背景的笔Pen pScale=new Pen(Color.Coral);//刻度的笔Graphics myGraphics=pictureBox1.CreateGraphics();myGraphics.Clear(Color.White);Pen myPen=new Pen(Color.Black,2);Point CPoint=new Point(s_pinlen,s_pinlen);Point SPoint=new Point((int)(CPoint.X+(Math.Sin(6*s*Math.PI/180))* s_pinlen),(int)(CPoint.Y-(Math.Cos(6*s*Math.PI/180))*s_pinlen));Point MPoint=new Point((int)(CPoint.X+(Math.Sin(6*m*Math.PI/180))* m_pinlen),(int)(CPoint.Y-(Math.Cos(6*m*Math.PI/180))*m_pinlen));Point HPoint=new Point((int)(CPoint.X+(Math.Sin(((30*h)+(m/2))*Ma th.PI/180))*h_pinlen),(int)(CPoint.Y-(Math.Cos(((30*h)+(m/2))*Mat h.PI/180))*h_pinlen));myGraphics.FillEllipse(sb,center.X-8,center.Y-7,14,14);myGraphics.DrawLine(myPen,CPoint,SPoint);myPen=new Pen(Color.Blue,4);。

51单片机C语言电子时钟程序设计程序

51单片机C语言电子时钟程序设计程序

主程序:#include"DS18B20_3.H"#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;#define yh 0x80#define er 0x80+0x40//液晶屏的与C51之间的引脚连接定义sbit rs=P2^0;sbit en=P2^2;sbit rw=P2^1; //如果硬件上rw接地,就不用写这句和后面的rw=0了sbit led=P2^6; //LCD背光开关//DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P1^1;sbit SCLK=P1^0;sbit RST=P1^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;//校时按键与C51的引脚连接定义sbit key1=P1^5; //设置键sbit key2=P1^6; //加键sbit key3=P1^7; //减键sbit buzzer=P1^3; //蜂鸣器,通过三极管9012驱动,端口低电平响/**************************************************************/uchar code tab1[]={"20 - - "}; //年显示的固定字符uchar code tab2[]={" : : "}; //时间显示的固定字符//延时函数,后面经常调用void delay(uint xms) //延时函数,有参函数{uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}/********液晶写入指令函数与写入数据函数,以后可调用**************/write_1602com(uchar com) //****液晶写入指令函数****{rs=0; //数据/指令选择置为指令rw=0; //读写选择置为写P0=com; //送入数据delay(1);en=1; //拉高使能端,为制造有效的下降沿做准备delay(1);en=0; //en由高变低,产生下降沿,液晶执行命令}write_1602dat(uchar dat) //***液晶写入数据函数****{rs=1; //数据/指令选择置为数据rw=0; //读写选择置为写P0=dat; //送入数据delay(1);en=1; //en置高电平,为制造下降沿做准备delay(1);en=0; //en由高变低,产生下降沿,液晶执行命令}lcd_init() //***液晶初始化函数****{write_1602com(0x38); //设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c); //开显示不显示光标write_1602com(0x06); //整屏不移动,光标自动右移write_1602com(0x01); //清显示write_1602com(yh+1); //日历显示固定符号从第一行第1个位置之后开始显示for(a=0;a<14;a++){write_1602dat(tab1[a]); //向液晶屏写日历显示的固定符号部分//delay(3);}write_1602com(er+2); //时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<8;a++){write_1602dat(tab2[a]); //写显示时间固定符号,两个冒号//delay(3);}}/*********************over***********************//***************DS1302有关子函数********************/void write_byte(uchar dat)//写一个字节{ACC=dat;RST=1;for(a=8;a>0;a--){IO=ACC0;SCLK=0;SCLK=1;ACC=ACC>>1;}}uchar read_byte() //读一个字节{RST=1;for(a=8;a>0;a--){ACC7=IO;SCLK=1;SCLK=0;ACC=ACC>>1;}return (ACC);}//----------------------------------------void write_1302(uchar add,uchar dat) //向1302芯片写函数,指定写入地址,数据{RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;}uchar read_1302(uchar add) //从1302读数据函数,指定读取数据来源地址{uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);}uchar BCD_Decimal(uchar bcd) //BCD码转十进制函数,输入BCD,返回十进制{uchar Decimal;Decimal=bcd>>4;return(Decimal=Decimal*10+(bcd&=0x0F));}//--------------------------------------void ds1302_init() //1302芯片初始化子函数(2010-01-07,12:00:00,week4){RST=0;SCLK=0;write_1302(0x8e,0x00); //允许写,禁止写保护//write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00//write_1302(0x82,0x00); //向DS1302内写分寄存器82H写入初始分数据00//write_1302(0x84,0x12); //向DS1302内写小时寄存器84H写入初始小时数据12//write_1302(0x8a,0x04); //向DS1302内写周寄存器8aH写入初始周数据4//write_1302(0x86,0x07); //向DS1302内写日期寄存器86H写入初始日期数据07//write_1302(0x88,0x01); //向DS1302内写月份寄存器88H写入初始月份数据01//write_1302(0x8c,0x10); //向DS1302内写年份寄存器8cH写入初始年份数据10write_1302(0x8e,0x80); //打开写保护}//温度显示子函数void write_temp(uchar add,uchar dat) //向LCD写温度数据,并指定显示位置{uchar gw,sw;gw=dat%10; //取得个位数字sw=dat/10; //取得十位数字write_1602com(er+add); //er是头文件规定的值0x80+0x40write_1602dat(0x30+sw); //数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw); //数字+30得到该数字的LCD1602显示码write_1602dat(0xdf); //显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码write_1602dat(0x43); //显示"C"符号,0x43是液晶屏字符库里大写C的地址码}//时分秒显示子函数void write_sfm(uchar add,uchar dat) //向LCD写时分秒,有显示位置加、现示数据,两个参数{uchar gw,sw;gw=dat%10; //取得个位数字sw=dat/10; //取得十位数字write_1602com(er+add); //er是头文件规定的值0x80+0x40write_1602dat(0x30+sw); //数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw); //数字+30得到该数字的LCD1602显示码}//年月日显示子函数void write_nyr(uchar add,uchar dat) //向LCD写年月日,有显示位置加数、显示数据,两个参数{uchar gw,sw;gw=dat%10; //取得个位数字sw=dat/10; //取得十位数字write_1602com(yh+add); //设定显示位置为第一个位置+addwrite_1602dat(0x30+sw); //数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw); //数字+30得到该数字的LCD1602显示码}void write_week(uchar week) //写星期函数{write_1602com(yh+0x0c); //星期字符的显示位置switch(week){case 1:write_1602dat('M'); //星期数为1时,显示write_1602dat('O');write_1602dat('N');break;case 2:write_1602dat('T'); //星期数据为2时显示write_1602dat('U');write_1602dat('E');break;case 3:write_1602dat('W'); //星期数据为3时显示write_1602dat('E');write_1602dat('D');break;case 4:write_1602dat('T'); //星期数据为4是显示write_1602dat('H');write_1602dat('U');break;case 5:write_1602dat('F'); //星期数据为5时显示write_1602dat('R');write_1602dat('I');break;case 6:write_1602dat('S'); //星期数据为6时显示write_1602dat('T');write_1602dat('A');break;case 7:write_1602dat('S'); //星期数据为7时显示write_1602dat('U');write_1602dat('N');break;}}//****************键盘扫描有关函数**********************void keyscan(){if(key1==0) //key1为功能键(设置键){delay(9); //延时,用于消抖动if(key1==0) //延时后再次确认按键按下{buzzer=0; //蜂鸣器短响一次delay(20);buzzer=1;while(!key1);key1n++;if(key1n==9)key1n=1; //设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环switch(key1n){case 1: TR0=0; //关闭定时器//TR1=0;write_1602com(er+0x09); //设置按键按动一次,秒位置显示光标write_1602com(0x0f); //设置光标为闪烁temp=(miao)/10*16+(miao)%10; //秒数据写入DS1302write_1302(0x8e,0x00);write_1302(0x80,0x80|temp);//miaowrite_1302(0x8e,0x80);break;case 2: write_1602com(er+6); //按2次fen位置显示光标//write_1602com(0x0f);break;case 3: write_1602com(er+3); //按动3次,shi//write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e); //按动4次,week//write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a); //按动5次,ri//write_1602com(0x0f);break;case 6: write_1602com(yh+0x07); //按动6次,yue//write_1602com(0x0f);break;case 7: write_1602com(yh+0x04); //按动7次,nian//write_1602com(0x0f);break;case 8:write_1602com(0x0c); //按动到第8次,设置光标不闪烁TR0=1;//打开定时器temp=(miao)/10*16+(miao)%10;write_1302(0x8e,0x00);write_1302(0x80,0x00|temp);//miao数据写入DS1302write_1302(0x8e,0x80);break;}}}//------------------------------加键key2----------------------------if(key1n!=0) //当key1按下以下。

C语言课程设计--电子时钟

C语言课程设计--电子时钟

目录第一章课程设计目的和要求.............................................................. (2)1.1 C语言课程设计的目的.......................................................... (2)1.2 C语言课程设计的要求 (2)第二章课程设计任务内容 (3)第三章详细设计说明 (4)3.1模块 (4)3.1.1函数功能模块图 (4)3.1.2模块描述 (4)3.2 流程图及注释 (5)3.3限制条件 (5)3.4测试计划 (5)第四章软件使用说明及运行结果 (6)4.1使用说明 (6)4.2运行结果 (6)第五章课程设计心得与体会 (7)附录1 参考文献 (8)附录2 程序清单 (9)第一章课程设计目的和要求1.1 C语言课程设计的目的本次课程设计使得课堂教学与实验实践之间关系更为密切,让同学们认识到必须重视实践环节,多读程序,多编写程序,多上机实践。

进一步培养结构化程序设计的思想,加深对高级语言要素和控制结构的理解,针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序风格。

本次课程设计着眼于知识的运用,把平常学的知识运用到课程时间中来,考察我们知识运用能力,对我们所学的理论知识进一步深化。

1.2 C语言课程设计的要求1. 分析课程设计题目的要求。

2. 对系统功能模块进行分析,写出详细设计说明文档。

3. 编写程序代码,代码量要求不少于300行。

调试程序使其能正确运行。

4. 设计完成的软件要便于操作和使用。

5. 设计完成后提交课程设计报告。

第二章课程设计任务内容设计一个电子时钟并满足下列要求:(1)能准确地利用数字显示日期和时间,在屏幕上显示一个运行的电子时钟,按任意键时程序退出。

(2)编写程序及上机运行并打印出来。

能准确得到相应的结果,原满完成该次课程设计的内容。

c语言实现电子时钟_课程设计

c语言实现电子时钟_课程设计

c语言实现电子时钟_课程设计题目: c语言实现电子时钟1课程设计的任务和具体要求1( 掌握利用c语言相关函数开发电子时钟的基本原理,为进一步开发高质量的程序打下坚实的基础。

提高运用c语言解决实际问题的能力。

2( 了解计算机图形学的相关算法。

3( 了解计算机图形学的相关函数的使用。

指导教师签字: 日期: 指导教师评语成绩: 指导教师签字: 日期:2课程设计所需软件、硬件等Windows xp win-TC课程设计进度计划起至日期工作内容备注 2010年12月1日-2010收集资料年12月20日2010年12月20日-2010编写程序年12月26日参考文献、资料索引序号文献、资料名称编著者出版单位a. 姜灵芝等.c语言课程设计案例精编.北京:清华大学出版社.2008b. 胡景春等。

大学生计算机课程实践优秀作品选编.南京:东南大学出版社.20103摘要:我们日常生活中有各种各样的时钟,随着计算机的普及和计算机科学的飞速发展,人们开始越来越多的利用计算机解决实际问题。

开发一个易于查看的时钟有较大的现实意义。

该时钟只实现简单的界面,程序与生活紧密结合,体直观开发简单。

利用c语言编辑源程序,再进行编译连接生成可执行文件,运行时可看见漂亮的外观。

一 .设计课题:电子时钟课程设计二.设计目的:本程序中涉及时间结构体,数组、绘图等方面的知识,通过本程序的训练,使我们有一个更深刻的了解,掌握利用c语言相关函数开发电子时钟的基本原理,为进一步开发高质量的程序打下坚实的基础。

提高运用c语言解决实际问题的能力。

三.设计内容:(1) 欢迎界面,以一个笑脸开始(2)主界面,包括数字时钟和电子时钟和按键提示。

(3)设计者介绍和功能提示。

四.总体设计:电子时钟是针对人们判断时间的落后和不准确性,通过利用计算机来实行对时间的系统计算,增加了准确性。

在软件的总体设计中采用自上而下,逐步细化,模块化设计,结构化编码方式进行。

系统结构图电子时钟时界按钟数面键动字显控画时示制处钟模模理模块块模块块1五.详细设计:(1)电子时钟执行主流程首先,程序调用initgraph()函数,使系统进入图像模式,然后通过使用line(),arc(),outtextxy(),和circle()等函数来绘制主窗口及电子时钟界面,然后调用clockhandle()函数来处理时钟的运转及数字时钟的显示。

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

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

湖南人文科技学院课程设计报告课程名称:单片机原理及应用课程设计设计题目:电子时钟的设计系别:通信与控制工程系专业:通信工程班级:09级通信二班学生姓名: 袁琦黄文付学号: 09416230 09416227起止日期:2011年12月20日~2011年12月30日指导教师:王善伟姚毅谢四莲教研室主任:刘建闽指导教师评语:指导教师签名:年月日成绩评定项目权重成绩袁琦黄文付1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:主任签字:年月日摘要时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事物入手,通过对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领域的探索。

本文利用单片机实现数字时钟计时功能的主要内容。

它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上。

本次设计采用独立式按键进行时间调整,其中STC89C52是核心元件,同时采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。

与传统机械表相比,它具有走时精确,显示直观等特点。

它的计时周期为24小时,显满刻度为“23时59分59秒”,另外利用DS1302具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。

该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。

关键词:STC89C52 ;LED数码管;8255芯片;DS1302芯片;目录设计要求 (1)1.方案论证与对比 (1)1.1方案一 (1)1.2方案二 (2)1.3方案对比 (2)2.系统硬件电路的设计 (3)2.1单片机的选择及引脚功能介绍 (3)2.2 8255A芯片的结构及引脚功能介绍 (4)2.3 DS1302芯片的结构及引脚功能介绍 (6)2.4显示电路设计 (7)2.5电源电路设计 (8)2.6键盘动态扫描电路设计 (8)3.控制系统的软件设计 (10)3.1主程序流程图 (10)3.2显示子程序 (11)3.3闹钟时间设定功能程序 (11)3.4键盘扫描程序 (12)4.系统功能调试与整体指标 (13)4.1硬件调试与分析 (13)4.2软件调试与分析 (13)4.3性能分析 (13)5.详细仪器清单 (14)6.总结与思考及致谢 (15)参考文献 (16)附录一:程序(方案一) (17)附录二:程序(方案二) (25)电子时钟的设计设计要求利用单片机作为控制核心,完成一个时钟计时器。

基于单片机C语言电子时钟完整版(闹钟,整点报时)

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock 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)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。

单片机电子钟c语言程序

单片机电子钟c语言程序

单片机电子钟程序设计实习报告单片机LCD1602电子钟毕业论文这次嵌入式系统综合实习已经结束了,哎..... 在网络发现很多计算机专业的毕业生都是以电子钟为题的毕业论文,个人感觉做一个电子钟程序设计的技术含量,技术水平都不高。

呵呵个人还是比较偏向于软件开发的,比较喜欢vc++开发。

一、引言1.1课题的背景及目的随着计算机科学与技术的飞速发展,计算机的应用已经渗透到国民经济与人们生活的各个角落,正在日益改变着传统的人类工作方式和生活方式,而单片机技术又作为计算机技术中的一个独立分支,有着性价比高,集成度高,体积小,可靠性高,控制功能强大,低功耗,低电压,便于生产,便于携带等特点,所以得到越来越广泛的应用,特别是在工业控制和仪表仪器智能化中起极其重要的作用.本文利用单片机强大的控制功能和内部定时器重要部件,设计了一款自行对时间进行调整以及把时、分、秒用LCD显示的电子钟。

电子钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。

因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法1.2课题的内容要求及研究方法①时间以24小时为一个周期;②显示时、分、秒;③具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;本文先按照设计的一般步骤,先选定用单片机实现的方案,了解设计要求,再分别从硬件系统设计和软件系统设计两个宏观方面着手.然后大量阅读相关资料,硬件方面,熟练单片机工作基本原理,查出相关元器件的参数,八个八段数码管,继电器等性能.然后画出系统框图和单元电路原理图,再对系统工作原理按照单元电路作简单的说明。

软件方面,熟悉编程语言,查找相关子程序.熟悉使用Keil uVision2开发软件及STC-ISP下载软件.把原器件按电路原理图安装.最后再对硬件和软件系统进行调试和仿真。

c语言电子时钟课程设计

c语言电子时钟课程设计

c语言电子时钟课程设计一、课程目标知识目标:1. 理解C语言中结构体、函数和循环控制的使用,掌握电子时钟的基本原理。

2. 学习并掌握使用C语言编写程序,实现电子时钟的功能,包括时、分、秒的显示与更新。

3. 了解C语言中定时器功能的使用,实现电子时钟的自动更新。

技能目标:1. 能够运用所学知识,独立设计并编写一个简单的C语言电子时钟程序。

2. 培养学生的编程实践能力,提高问题分析和解决能力。

3. 学会使用调试工具,对程序进行调试和优化,提高程序运行的稳定性。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发学生的学习主动性。

2. 培养学生的团队合作意识,学会与他人共同解决问题,相互学习和进步。

3. 培养学生的创新精神,敢于尝试新方法,勇于克服困难,不断优化程序。

课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,使学生能够学以致用。

学生特点:学生已具备一定的C语言基础,了解基本语法和编程思路,但对实际应用还不够熟练。

教学要求:结合学生特点,注重理论与实践相结合,提高学生的编程实践能力,培养学生的问题分析和解决能力。

在教学过程中,关注学生的个体差异,给予个性化指导。

通过课程学习,使学生能够独立完成一个具有实际意义的编程项目。

二、教学内容1. 复习C语言基础:变量、数据类型、运算符、控制结构(章节1-4)。

2. 结构体与指针:介绍结构体的定义和使用,指针的概念和操作(章节5)。

3. 函数:回顾函数的定义、调用和参数传递,强调模块化编程的重要性(章节6)。

4. 循环控制:深入学习for循环和while循环,理解其在电子时钟中的应用(章节7)。

5. 定时器与时间处理:介绍定时器原理,时间处理函数的使用(章节8)。

6. 电子时钟编程实践:结合所学知识,设计并实现电子时钟程序。

- 显示部分:编写代码实现时、分、秒的显示(课时1)。

- 更新部分:实现时间递增,每秒更新显示(课时2)。

- 定时器应用:使用定时器自动更新时间,减少资源消耗(课时3)。

51单片机电子时钟(C语言)

51单片机电子时钟(C语言)

#include <reg51.h>#include <intrins.h>#define uchar unsigned char //宏定义#define uint unsigned intuchar sec,min,hour,sec50,jishu,dtp2; //sec、min、hour、为显示单元,sec50为60秒计数单元,jishu为扫描数码管计数单元uchar sec1,min1,hour1; //时间中介单元uchar nzmin,nzhour,nzjishu=0,dispjishu=0; //闹钟分、时定义uchar data nzbit=0; //闹钟标志位,闹钟默认为开启uchar data dispbit=0; //显示标志位,默认显示当前时间uchar data disp[8]; //秒、分、时个位与十位存放数组及‘—’uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0-9sbit KEYmin=P3^2; //分加1按钮sbit KEYhour=P3^3; //时加1按钮sbit LABA=P1^0; //闹钟输出I/O口sbit NZdisplay=P3^4; //闹钟显示按钮,按住不放显示闹钟时间,放开则显示当前时间sbit KEYnzmin=P3^5; //闹钟分加1按钮sbit KEYnzhour=P3^6; //闹钟时加1按钮sbit KEYoff=P3^7; //关闭闹钟按钮,按第一次为关闭,第二次为开启void display(); //显示函数声明void keyscan(); //按键扫描函数声明void naozhong(); //闹钟判别函数声明void keynz(); //闹钟按键函数声明void main(){sec=0; //时间初始化为00—00—00min=0;hour=0;sec1=0; //显示单元初始化为00—00—00min1=0;hour1=0;nzmin=01; //闹钟初始时间为01:01nzhour=01;jishu=0;dtp2=0xfe;P0=0xff;TMOD=0x11; //设T0、T1为模式1IE=0x8a;TH0=0xb8; //T0定时20msTL0=0x0;TH1=0xfc; //T1定时1msTL1=0x66;TR0=1;TR1=1;while(1){display(); //调用显示子程序keyscan(); //调用按键子程序keynz(); //调用闹钟按键子程序}}void t0int() interrupt 1 //T0定时中断程序{TH0=0xb8;TL0=0x0;sec50++;if(sec50==50) //对20ms计数50次即1s{sec50=0; //清秒计数器,为下次做准备naozhong(); //调用闹钟判别子程序sec1++; //秒加1}if(sec1==60) //对秒计数60次即1min{sec1=0;min1++; //分加1}if(min1==60) //对分计数60次即1hour{min1=0;hour1++; //时加1}if(hour1==24){hour1=0;}if(dispbit==0) //判断显示标志位是否为0,为0显示当前时间{sec=sec1;min=min1;hour=hour1;}else //显示标志位为1,显示闹钟时间{min=nzmin; //将闹钟时间给显示单元hour=nzhour;}}void t1int() interrupt 3 //T1中断程序{TH1=0xfc;TL1=0x66;P2=0xff; //关闭所有数码管P2=dtp2;dtp2=_crol_(dtp2,1);P0=disp[jishu];jishu++;if(jishu==8) //扫描完8位数码管清0,重新从第一位开始扫描{jishu=0;}}void delay(uint x) //延时函数uchar i;while(x--){for(i=0;i<120;i++);}}void display() //显示子程序{disp[7]=table[sec%10]; //秒个位显示disp[6]=table[sec/10]; //秒十位显示disp[4]=table[min%10]; //分个位显示disp[3]=table[min/10]; //分十位显示disp[1]=table[hour%10]; //时个位显示disp[0]=table[hour/10]; //时十位显示disp[2]=0xbf; //显示‘_’disp[5]=0xbf;}void keyscan() //按键子程序{delay(20); //延时消抖if(KEYmin==0)//时间分加1按钮{min1++; //时间分加1if(min1==60){min1=0;hour1++; //分加到60对时加1}if(hour1==24){hour1=0;}while(!KEYmin); //等待按键放开}delay(20); //延时消抖if(KEYhour==0) //时间时加1按钮{hour1++; //时间时加1if(hour1==24){hour1=0;}while(!KEYhour); //等待按键放开}void naozhong() //闹钟判断{if(nzbit==0) //判断闹钟标志位,0为开启闹钟判断,1为关闭闹钟{if(min1==nzmin) //闹钟与时间分的判别if(hour1==nzhour) //闹钟与时间时的判别LABA=0; //时间分、时与闹钟分、时相等就打开蜂鸣器}elseLABA=1;}void keynz() //闹钟加、减及闹钟关闭、开启按键处理子程序{delay(20); //延时消抖if(KEYnzmin==0) //判别闹钟分加1按键{nzmin++; //闹钟分加1if(nzmin==60){nzmin=0;nzhour++; //闹钟分加到60对闹钟时加1if(nzhour==24)nzhour=0;}while(!KEYnzmin); //等待按键放开}delay(20); //延时消抖if(KEYnzhour==0) //判别闹钟时加1按键{nzhour++; //闹钟时加1if(nzhour==24)nzhour=0;while(!KEYnzhour); //等待按键放开}if(KEYoff==0)//判断关闭闹钟按键是否按下{delay(20); // 延时消抖nzjishu++;if(nzjishu==1) //判断是否为第一次按下{nzbit=1; //第一次按下关闭闹钟if(nzjishu==2) //判断是否为第二次按下{nzjishu=0; //第二次按下清计数单元nzbit=0; // 第二次按下开启闹钟判别}while(!KEYoff); //等待按键放开}if(NZdisplay==0) //判别显示切换闹钟按键是否按下{dispjishu++;if(dispjishu==1) //第一次按下显示闹钟时间{dispbit=1; //第一次按下,把标志位置1,显示切换为闹钟时间}if(dispjishu==2) //第二次按下显示为当前时间{dispjishu=0; //清零,重新计数dispbit=0; //第二次按下清零显示标志位,显示切换为当前时间}while(!NZdisplay); //等待按键放开}}。

超级电子时钟程序(52单片机C语言)

超级电子时钟程序(52单片机C语言)

#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcd_light=P1^0;sbit lcd_rs=P1^1;sbit lcd_rw=P1^2;sbit lcd_en=P1^3;sbit beep=P3^6;sbit DS18B20=P3^7;sbit SCLK=P3^3;sbit SDA=P3^4;sbit RST=P3^5;sbit SW1=P1^4;sbit SW2=P1^5;sbit SW3=P1^6;sbit SW4=P1^7;bitAMPM,music,light,clock_changing=1,clock1=1,clock2=1,clock3=1,forever1=1,forever2=1,forev er3=1,same=1,mode;uchar i,j,num,key,ring=1,timer,tian,light_continue,led,lsd1=0xfe;uchar code table1[]="20 / /";uchar code table2[]="Ring";uchar code table3[]="readyrunstopMode";uchar code table4[]="Good morning,sir";uchar code table5[]="Have a good day!";uchar write_add[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //年、星期、月、日、时、分、秒uchar read_add[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; //年、星期、月、日、时、分、秒uchar time[]={11,2,4,5,22,23,55}; //年、星期、月、日、时、分、秒uchar clock_time1[]={11,2,4,5,22,23,38}; //年、星期、月、日、时、分、秒uchar clock_time2[]={11,2,4,5,22,23,38}; //年、星期、月、日、时、分、秒uchar clock_time3[]={11,2,4,5,22,23,38}; //年、星期、月、日、时、分、秒uchar s,f,m,dian; //时、分、秒、小数点uchar *ptime[7]; //年、星期、月、日、时、分、秒void delay1(){;;}void delay2(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void di(){if(music==0){beep=0;delay2(50);beep=1;}}void running_led1(){P2=lsd1;}void running_led2(){switch(num){case 1:P2=0x00;break;case 25:P2=0xc0;break;case 27:P2=0x60;break;case 29:P2=0x30;break;case 31:P2=0x18;break;case 33:P2=0x0c;break;case 35:P2=0x06;break;case 37:P2=0x03;break;}}void running_led3(){switch(num){case 1:P2=0x7e;break;case 2:P2=0xbd;break;case 3:P2=0xdb;break;case 4:P2=0xe7;if(same==0){if(music==0)di();else{music=0;di();music=1;}} break;case 5:P2=0xe7;if(same==0){if(music==0)di();else{music=0;di();music=1;}} break;case 6:P2=0xdb;break;case 7:P2=0xbd;break;}}uchar how_many_days(uchar year,uchar month){uchar tian;if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==1 2))tian=31;else if(month==2){if(((year+2000)%4==0)&&((year+2000)%100!=0)||((year+2000)%400==0))tian=29;elsetian=28;}elsetian=30;return(tian);}void week_scan(){uchar year,month=1,day=1,week,tian;if(*ptime[0]<10){year=0;week=6;}else if((*ptime[0]>=10)&&(*ptime[0]<20)){year=10;week=5;}else if((*ptime[0]>=20)&&(*ptime[0]<30)){year=20;week=3;}else if((*ptime[0]>=30)&&(*ptime[0]<40)){year=30;week=2;}else if((*ptime[0]>=40)&&(*ptime[0]<50)){year=40;week=7;}else if((*ptime[0]>=50)&&(*ptime[0]<60)){year=50;week=6;}else if((*ptime[0]>=60)&&(*ptime[0]<70)){year=60;week=4;}else if((*ptime[0]>=70)&&(*ptime[0]<80)){year=70;week=3;}else if((*ptime[0]>=80)&&(*ptime[0]<90)){year=80;week=1;}else if(*ptime[0]>=90){year=90;week=7;}while((*ptime[0]!=year)||(*ptime[2]!=month)||(*ptime[3]!=day)) {day++;week++;if(week>=8)week=1;tian=how_many_days(year,month);if(day>tian){day=1;month++;if(month>12){month=1;year++;}}}*ptime[1]=week;}//液晶写命令写数据程序void write_com(uchar com){lcd_rs=0;delay2(1);P0=com;lcd_en=1;delay2(1);lcd_en=0;}void write_dat(uchar dat){lcd_rs=1;delay2(1);P0=dat;lcd_en=1;delay2(1);lcd_en=0;}void init_lcd1602(){uchar i;lcd_rw=0;lcd_en=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+1);for(i=0;i<8;i++)write_dat(table1[i]);write_com(0x80+0x40+3);write_dat(':');write_com(0x80+0x40+6);write_dat(':'); }//DS1302读写程序void write_DS1302_byte(uchar dat) {uchar i;for(i=0;i<8;i++){SCLK=0;SDA=dat&0x01;SCLK=1;dat=dat>>1;}}void write_DS1302(uchar add,uchar dat) {RST=0;SCLK=0;RST=1;delay1();write_DS1302_byte(add);write_DS1302_byte(dat);RST=0;delay1();RST=1;SCLK=1;}uchar read_DS1302(uchar add){uchar i,dat;RST=0;SCLK=0;delay1();RST=1;delay1();write_DS1302_byte(add);for(i=0;i<8;i++){dat=dat>>1;SCLK=0;if(SDA)dat=dat|0x80;SCLK=1;}RST=0;delay1();RST=1;SCLK=1;return(dat);}void dat_to_BCD(){uchar i,j;for(i=0;i<7;i++){j=time[i]/10;time[i]=time[i]%10;time[i]=time[i]+j*16;}}void BCD_to_dat(){uchar i,j;for(i=0;i<7;i++){j=time[i]/16;time[i]=time[i]%16;time[i]=time[i]+j*10;}}void set_time_to_DS1302(){uchar i;dat_to_BCD();write_DS1302(0x8e,0x00);for(i=0;i<7;i++)write_DS1302(write_add[i],time[i]);write_DS1302(0x8e,0x80);}void get_time_from_Ds1302(){uchar i;for(i=0;i<7;i++)time[i]=read_DS1302(read_add[i]);BCD_to_dat();}void write_nyr(uchar add,uchar dat){uchar shi,ge;shi=dat/10;ge=dat%10;write_com(0x80+add);write_dat(0x30+shi);write_dat(0x30+ge);}void write_sfm(uchar add,uchar dat){uchar shi,ge;shi=dat/10;ge=dat%10;write_com(0x80+0x40+add);write_dat(0x30+shi);write_dat(0x30+ge);}void write_week(){write_com(0x80+13);switch(*ptime[1]){case 1:write_dat('M');write_dat('O');write_dat('N');break;case 2:write_dat('T');write_dat('U');write_dat('E');break;case 3:write_dat('W');write_dat('E');write_dat('D');break;case 4:write_dat('T');write_dat('H');write_dat('U');break;case 5:write_dat('F');write_dat('R');write_dat('I');break;case 6:write_dat('S');write_dat('A');write_dat('T');break;case 7:write_dat('S');write_dat('U');write_dat('N');break;}}//DS18B20读写程序void init_DS18B20(){uint i;DS18B20=1;delay1();DS18B20=0;for(i=0;i<70;i++);//延时563微秒DS18B20=1;for(i=0;i<60;i++);//延时483微秒}bit read_temp_byte(){uint i;bit dat;DS18B20=1;delay1();DS18B20=0;delay1();DS18B20=1;delay1();dat=DS18B20;for(i=0;i<4;i++);//延时35微秒return(dat);}uchar read_temp(){uchar i,j,dat;for(i=0;i<8;i++){j=read_temp_byte();dat=(j<<7)|(dat>>1);}return(dat);}void write_DS18B20(uchar dat){uint i;uchar j;bit byte;for(j=0;j<8;j++){byte=dat&0x01;dat=dat>>1;if(byte){DS18B20=0;i++;i++;i++;i++;//延时16微秒DS18B20=1;for(i=0;i<5;i++);//延时43微秒}else{DS18B20=0;for(i=0;i<7;i++);//延时59微秒DS18B20=1;}}}void temp_change(){init_DS18B20();delay2(1);write_DS18B20(0xcc);//写跳过读ROM指令write_DS18B20(0x44);//写温度转换指令}uint get_temp(){uchar a,b;uint temp;//注意要是无符号整形变量8位float f_temp;init_DS18B20();delay2(1);write_DS18B20(0xcc);write_DS18B20(0xbe);a=read_temp();b=read_temp();temp=b;temp=temp<<8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;return(temp);}//显示程序void display_temp(){uchar shi,ge,dian;uint t;//注意要是无符号整形变量8位temp_change();t=get_temp();shi=t/100;ge=t%100/10;dian=t%100%10;write_com(0x80+0x40+11);write_dat(0x30+shi);write_dat(0x30+ge);write_dat('.');write_dat(0x30+dian);write_dat('C');}void renew_nyr(){write_nyr(3,*ptime[0]);write_week();write_nyr(6,*ptime[2]);write_nyr(9,*ptime[3]);}void write_xiaoshi(){write_com(0x80+0x40);if(AMPM==0){write_dat(' ');write_sfm(1,*ptime[4]);}else{if(*ptime[4]>=12){write_dat('P');if(*ptime[4]==12)write_sfm(1,12);elsewrite_sfm(1,*ptime[4]-12);}else{write_dat('A');write_sfm(1,*ptime[4]);}}}void renew_sfm(){write_xiaoshi();write_sfm(4,*ptime[5]);write_sfm(7,*ptime[6]);}void renew_time(){renew_nyr();renew_sfm();}void Is_it_time_to_ring(){if(clock1==0){for(i=0;((time[i]==clock_time1[i])&&(i<7));i++);if(i>=7){same=0;led=2;if(forever1==1)clock1=1;else{clock_time1[3]=clock_time1[3]+1;clock_time1[1]=clock_time1[1]+1;if(clock_time1[1]>=8)clock_time1[1]=1;tian=how_many_days(clock_time1[0],clock_time1[2]);if(clock_time1[3]>tian){clock_time1[3]=1;clock_time1[2]=clock_time1[2]+1;if(clock_time1[2]>12){clock_time1[2]=1;clock_time1[0]=clock_time1[0]+1;if(clock_time1[0]==100)clock_time1[0]=0;}}}write_com(0x80+0x40+11);for(i=0;i<4;i++)write_dat(table2[i]);write_dat('1');}}if(clock2==0){for(i=0;((time[i]==clock_time2[i])&&(i<7));i++);if(i>=7){same=0;led=2;if(forever2==1)clock2=1;else{clock_time2[3]=clock_time2[3]+1;clock_time2[1]=clock_time2[1]+1;if(clock_time2[1]>=8)clock_time2[1]=1;tian=how_many_days(clock_time2[0],clock_time2[2]);if(clock_time2[3]>tian){clock_time2[3]=1;clock_time2[2]=clock_time2[2]+1;if(clock_time2[2]>12){clock_time2[2]=1;clock_time2[0]=clock_time2[0]+1;if(clock_time2[0]==100)clock_time2[0]=0;}}}write_com(0x80+0x40+11);for(i=0;i<4;i++)write_dat(table2[i]);write_dat('2');}}if(clock3==0){for(i=0;((time[i]==clock_time3[i])&&(i<7));i++);if(i>=7){same=0;led=2;if(forever3==1)clock3=1;else{clock_time3[3]=clock_time3[3]+1;clock_time3[1]=clock_time3[1]+1;if(clock_time3[1]>=8)clock_time3[1]=1;tian=how_many_days(clock_time3[0],clock_time3[2]);if(clock_time3[3]>tian){clock_time3[3]=1;clock_time3[2]=clock_time3[2]+1;if(clock_time3[2]>12){clock_time3[2]=1;clock_time3[0]=clock_time3[0]+1;if(clock_time3[0]==100)clock_time3[0]=0;}}}write_com(0x80+0x40+11);for(i=0;i<4;i++)write_dat(table2[i]);write_dat('3');}}}void display_time(){if((led!=3)||(light==0)){if((led==0)||((light==0)&&(lcd_light==0))||(clock1==0)||(clock2==0)||(clock3==0)){i=time[6];get_time_from_Ds1302();if(i!=time[6]){if(led==0)lsd1=_cror_(lsd1,1);if((light==0)&&(lcd_light==0)){light_continue++;if(light_continue==5)lcd_light=1;}j++;if(j>=6)j=1;}}switch(led){case 1:num++;if(num>=38)num=1; break;case 2:num++;if(num>=8)num=1; break;}}get_time_from_Ds1302();for(i=0;i<7;i++)ptime[i]=&time[i];if(same==1)renew_time();else delay2(60);}//键盘扫描程序void SW1_scan(){if(SW1==0){if((key==0)&&(clock_changing==1)){delay2(300);if(SW1!=0){di();AMPM=~AMPM;display_time();}elsedelay2(700);}elsedelay2(20);if(SW1==0){di();key++;if(clock_changing==0){switch(ring){case 1:clock1=1;break;case 2:clock2=1;break;case 3:clock3=1;break;}}while(!SW1);}}}void SW4_scan(){uchar i;if(SW4==0){if((key==0)||(clock_changing==0)){delay2(300);if(SW4!=0){di();switch(ring){case 1: for(i=0;i<7;i++)ptime[i]=&clock_time1[i];break;case 2: for(i=0;i<7;i++)ptime[i]=&clock_time2[i];break;case 3: for(i=0;i<7;i++)ptime[i]=&clock_time3[i];break;}clock_changing=~clock_changing;if(clock_changing==0){renew_time();write_com(0x80+0x40+11);for(i=0;i<4;i++)write_dat(table2[i]);switch(ring){case 1: write_dat('1');case 2: write_dat('2');case 3: write_dat('3');}}else{switch(ring){case 1:clock1=~clock1;if(key==0)forever1=1;break;case 2:clock2=~clock2;if(key==0)forever2=1;break;case 3:clock3=~clock3;if(key==0)forever3=1;break;}if((forever1==1)&&(forever2==1)&&(forever3==1)){write_com(0x80);write_dat(' ');}key=0;}}else{delay2(700);if(SW4==0){if(clock_changing==0){di();key=0;clock_changing=1;write_com(0x01);write_com(0x80);for(i=0;i<16;i++)write_dat(table4[i]);write_com(0x80+0x40);for(i=0;i<16;i++)write_dat(table5[i]);switch(ring){case 1:clock1=0;forever1=0;break;case 2:clock2=0;forever2=0;break;case 3:clock3=0;forever3=0;break;}while(!SW4);init_lcd1602();}else{music=~music;di();write_com(0x80+0x40+11);write_dat(' ');write_dat(' ');write_dat('O');if(music==0){write_dat('N');write_dat(' ');}else{write_dat('F');write_dat('F');}}while(!SW4);}}}if(key!=0){ delay2(20);if(SW4==0){di();key=0;write_com(0x0c);set_time_to_DS1302();display_time();while(!SW4);}}}}void renew_timer_time(){write_sfm(0,s);write_sfm(3,f);write_sfm(6,m);write_sfm(9,dian);}void choose_rings(){uchar i;switch(ring){case 1: for(i=0;i<7;i++)ptime[i]=&clock_time1[i];break;case 2: for(i=0;i<7;i++)ptime[i]=&clock_time2[i];break;case 3: for(i=0;i<7;i++)ptime[i]=&clock_time3[i];break;}renew_time();write_com(0x80+0x40+15);switch(ring){case 1: write_dat('1');case 2: write_dat('2');case 3: write_dat('3');}}void timer_and_led(){uchar i;if(timer==0){delay2(300);if(SW2){di();num=0;led++;if(led==3)P2=0xff;if(led>=4)led=0;}else{delay2(700);if(SW2==0){di();timer++;s=f=m=dian=0;mode=0;write_com(0x01);write_com(0x80);for(i=12;i<16;i++)write_dat(table3[i]);write_dat(':');write_dat('1');write_com(0x80+0x40+2);write_dat(':');write_com(0x80+0x40+5);write_dat(':');write_com(0x80+0x40+8);write_dat('.');write_com(0x80+0x40+11);for(i=0;i<5;i++)write_dat(table3[i]);renew_timer_time();while(!SW2);delay2(10);while(!SW2);}}}else{timer++;if(timer==2){di();write_com(0x80+0x40+11);write_dat(' ');write_dat(' ');for(i=5;i<8;i++)write_dat(table3[i]);while(!SW2);TR0=1;delay2(10);while(!SW2);}if(timer==3){TR0=0;di();if(mode==1)timer=1;write_com(0x80+0x40+11);write_dat(' ');for(i=8;i<12;i++)write_dat(table3[i]);while(!SW2);delay2(10);while(!SW2);}if(timer>=4){i=255;di();while((!SW2)&&(i>0)){i--;delay2(5);}if(i==0){di();timer=0;write_com(0x01);init_lcd1602();display_time();display_temp();while(!SW2);}else{timer=1;s=f=m=dian=0;renew_timer_time();write_com(0x80+0x40+11);for(i=0;i<5;i++)write_dat(table3[i]);}}}}void change_timer(){if(SW4==0){TR0=0;di();mode=~mode;write_com(0x80+5);if(mode==0)write_dat('1');else write_dat('2');timer=1;s=f=m=dian=0;renew_timer_time();write_com(0x80+0x40+11);for(i=0;i<5;i++)write_dat(table3[i]);while(!SW4);delay2(10);while(!SW4);}}void SW2_scan(){if(SW2==0){if(key==0){if(clock_changing==1)timer_and_led();else{delay2(20);if(SW2==0){di();ring++;if(ring>=4)ring=1;choose_rings();}while(!SW2);}}else{delay2(20);if(SW2==0){di();switch(key){case 1: *ptime[0]=*ptime[0]+10;if(*ptime[0]>99)*ptime[0]=0;write_nyr(3,*ptime[0]);if(*ptime[2]==2){tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian){*ptime[3]=tian;write_nyr(9,*ptime[3]);}}week_scan();write_week(); break;case 2: *ptime[0]=*ptime[0]+1;if(*ptime[0]>99)*ptime[0]=0;write_nyr(3,*ptime[0]);if(*ptime[2]==2){tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian){*ptime[3]=tian;write_nyr(9,*ptime[3]);}}week_scan();write_week(); break;case 3: *ptime[2]=*ptime[2]+10;if(*ptime[2]>12)*ptime[2]=1;write_nyr(6,*ptime[2]);week_scan();write_week(); break;case 4: *ptime[2]=*ptime[2]+1;if(*ptime[2]>12)*ptime[2]=1;write_nyr(6,*ptime[2]);if(*ptime[2]==2){tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian){*ptime[3]=tian;write_nyr(9,*ptime[3]);}}week_scan();write_week(); break;case 5: *ptime[3]=*ptime[3]+10;tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian)*ptime[3]=1;write_nyr(9,*ptime[3]);week_scan();write_week(); break;case 6: *ptime[3]=*ptime[3]+1;tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian)*ptime[3]=1;write_nyr(9,*ptime[3]);week_scan();write_week(); break;case 7: *ptime[4]=*ptime[4]+10;if(*ptime[4]>=24)*ptime[4]=0;write_xiaoshi(); break;case 8: *ptime[4]=*ptime[4]+1;if(*ptime[4]>=24)*ptime[4]=0;write_xiaoshi(); break;case 9: *ptime[5]=*ptime[5]+10;if(*ptime[5]>=60)*ptime[5]=0;write_sfm(4,*ptime[5]); break;case 10:*ptime[5]=*ptime[5]+1;if(*ptime[5]>=60)*ptime[5]=0;write_sfm(4,*ptime[5]); break;case 11:*ptime[6]=*ptime[6]+10;if(*ptime[6]>=60)*ptime[6]=0;write_sfm(7,*ptime[6]); break;case 12:*ptime[6]=*ptime[6]+1;if(*ptime[6]>=60)*ptime[6]=0;write_sfm(7,*ptime[6]); break;}while(!SW2);}}}}void normal_or_save(){delay2(300);if(SW3){di();lcd_light=0;light_continue=0;}else{delay2(700);if(SW3==0){di();light=~light;if(light==0)lcd_light=1;elselcd_light=0;while(!SW3);}}}void SW3_scan(){if(SW3==0){if(key==0){if(clock_changing==1)normal_or_save();else{delay2(20);if(SW3==0){di();if(ring==1)ring=3;else ring--;choose_rings();}while(!SW3);}}else{delay2(20);if(SW3==0){di();switch(key){case 1: if(*ptime[0]>=10)*ptime[0]=*ptime[0]-10;else*ptime[0]=99;write_nyr(3,*ptime[0]);if(*ptime[2]==2){tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian){*ptime[3]=tian;write_nyr(9,*ptime[3]);}}week_scan();write_week(); break;case 2: if(*ptime[0]>=1)*ptime[0]=*ptime[0]-1;else*ptime[0]=99;write_nyr(3,*ptime[0]);if(*ptime[2]==2){tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian){*ptime[3]=tian;write_nyr(9,*ptime[3]);}}week_scan();write_week(); break;case 3: if(*ptime[2]>=11)*ptime[2]=*ptime[2]-10;else*ptime[2]=12;write_nyr(6,*ptime[2]);if(*ptime[2]==2){tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian){*ptime[3]=tian;write_nyr(9,*ptime[3]);}}week_scan();write_week(); break;case 4: if(*ptime[2]>=2)*ptime[2]=*ptime[2]-1;else*ptime[2]=12;write_nyr(6,*ptime[2]);if(*ptime[2]==2){tian=how_many_days(*ptime[0],*ptime[2]);if(*ptime[3]>tian){*ptime[3]=tian;write_nyr(9,*ptime[3]);}}week_scan();write_week(); break;case 5: if(*ptime[3]>=11)*ptime[3]=*ptime[3]-10;else{tian=how_many_days(*ptime[0],*ptime[2]);*ptime[3]=tian;}write_nyr(9,*ptime[3]);week_scan();write_week(); break;case 6: if(*ptime[3]>=2)*ptime[3]=*ptime[3]-1;else{tian=how_many_days(*ptime[0],*ptime[2]);*ptime[3]=tian;}write_nyr(9,*ptime[3]);week_scan();write_week(); break;case 7: if(*ptime[4]>=10)*ptime[4]=*ptime[4]-10;else*ptime[4]=23;write_xiaoshi(); break;case 8: if(*ptime[4]>=1)*ptime[4]=*ptime[4]-1;else*ptime[4]=23;write_xiaoshi(); break;case 9: if(*ptime[5]>=10)*ptime[5]=*ptime[5]-10;else*ptime[5]=59;write_sfm(4,*ptime[5]); break;case 10:if(*ptime[5]>=1)*ptime[5]=*ptime[5]-1;else*ptime[5]=59;write_sfm(4,*ptime[5]); break;case 11:if(*ptime[6]>=10)*ptime[6]=*ptime[6]-10;else*ptime[6]=59;write_sfm(7,*ptime[6]); break;case 12:if(*ptime[6]>=1)*ptime[6]=*ptime[6]-1;else*ptime[6]=59;write_sfm(7,*ptime[6]); break;}while(!SW3);}}}}void keyscan(){if(same==1){if(timer==0){SW1_scan();SW4_scan();if(key!=0){switch(key){case 1: write_com(0x80+3);write_com(0x0f); break;case 2: write_com(0x80+4); break;case 3: write_com(0x80+6); break;case 4: write_com(0x80+7); break;case 5: write_com(0x80+9); break;case 6: write_com(0x80+10); break;case 7: write_com(0x80+0x40+1); break;case 8: write_com(0x80+0x40+2); break;case 9: write_com(0x80+0x40+4); break;case 10:write_com(0x80+0x40+5); break;case 11:write_com(0x80+0x40+7); break;case 12:write_com(0x80+0x40+8); break;case 13:if(clock_changing==1){key=0;write_com(0x0c);set_time_to_DS1302();display_time();}else key=1; break;}}}SW2_scan();SW3_scan();if(timer!=0)change_timer();}else{if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0)){delay2(20);if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0)){same=1;led=0;while((!SW1)||(!SW2)||(!SW3)||(!SW4));}}}}void main(){init_lcd1602();TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;//set_time_to_DS1302();while(1){keyscan();if((key==0)&&(clock_changing==1)&&(timer==0)){display_time();if(same==1){write_com(0x80+0x40+11);if((clock1==1)&&(clock2==1)&&(clock3==1))display_temp();else{switch(j){case 1: if(clock1==0){if(forever1==0){write_com(0x80);write_dat('*');}write_com(0x80+0x40+11);for(i=0;i<4;i++)write_dat(table2[i]);write_dat('1');}else{write_com(0x80);write_dat(' ');display_temp();} break;case 2: if(clock2==0){if(forever2==0){write_com(0x80);write_dat('*');}write_com(0x80+0x40+11);for(i=0;i<4;i++)write_dat(table2[i]);write_dat('2');}else{write_com(0x80);write_dat(' ');display_temp();} break;case 3: if(clock3==0){if(forever3==0){write_com(0x80);write_dat('*');}write_com(0x80+0x40+11);for(i=0;i<4;i++)write_dat(table2[i]);write_dat('3');}else{write_com(0x80);write_dat(' ');display_temp();} break;case 4: write_com(0x80);write_dat(' ');display_temp();break;case 5: display_temp();break;}}Is_it_time_to_ring();}if(led!=3){switch(led){case 0:running_led1();break;case 1:running_led2();break;case 2:running_led3();break;}}}}}void T0_timer() interrupt 1//中断函数{TR0=0;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;dian++;if(dian>=100){dian=0;m++;if(m>=60){m=0;f++;if(f>=60){f=0;s++;if(s>=24)TR0=0;write_sfm(0,s);}write_sfm(3,f);}write_sfm(6,m);}write_sfm(9,dian);}。

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

0
2004-12-26 14:52回复举报|
do熊
强能力者7
case 2: print2(p); break;
case 3: print3(p); break;
case 4: print4(p); break;
case 5: print5(p); break;
}
switch(b)
{
case 0: print0(pp); break;
case 1: print1(pp); break;
}
return 0;
}
int print7(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0) printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else printf("%5s%c"," ",2);
}
return 0;
算法:将当前时间显示到屏幕,当时间发生变化时,清屏,显示新的时间(当有键盘操作时退出程序)。
显示时间格式:小时:分钟:秒
/* DEV C++ Win XP*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
{
t1=t2;
clrscr();
printtime(phour, t1.tm_hour);
printpoint(point1);
printtime(pmin, t1.tm_min);
printpoint(point2);
printtime(psec, t1.tm_sec);
}
if(bioskey(1)==0) continue;
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);
{
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)
point1.x=25, point2.x=49;
point1.y=point2.y=7;
clrscr();
textbackground(BLUE);
textcolor(YELLOW);
now=time(0);
pt=localtime(&now);
t1=*pt;
printtime(phour, t1.tm_hour);
{
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("%c",2);
else
printf("%c%4s%c",2," ",2);
if(i<6) printf("%c%4s%c",2," ",2);
else if(i==6)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else printf("%5s%c"," ",2);
}
return 0;
}
int print5(Point p)
{
int i=0;
for(;i<13;i++)
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)
printpoint(point1);
printtime(pmin, t1.tm_min);
printpoint(point2);
printtime(psec, t1.tm_sec);
while(1)
{
now=time(0);
pt=localtime(&now);
t2=*pt;
if(t2.tm_sec!=t1.tm_sec)
return 0;
}
int printtime(Point p, int n)
{
int a,b;
Point pp;
a=n/10, b=n%10;
pp.x=p.x+8, pp.y=p.y;
switch(a)
{
case 0: print0(p); break;
case 1: print1(p); break;
2楼
else printf("%c%4s%c",2," ",2);
}
return 0;
}
int print9(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);
case 2: print2(pp); break;
case 3: print3(pp); break;
case 4: print4(pp); break;
case 5: print5(pp); break;
case 6: print6(pp); break;
case 7: print7(pp); break;
case 8: print8(pp); break;
case 9: print9(pp); break;
}
return 0;
}
int main()
{
Point phour, pmin, psec,point1,point2;
phour.x=9, pmin.x=32, psec.x=55;
phour.y=pmin.y=psec.y=7;
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)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+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("%c",2);
else
printf("%5s%c"," ",2);
}
return 0;
}
int print6(Point p)
else if(i>0&&i<6)
printf("%c%4s%c",2," ",2);
else
printf("%5s%c"," ",2);
}
return 0;
}
int clear(Point p)
{
int i=0;
for(;i<13;i++)
相关文档
最新文档