已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基本要求:1,在LCD上能显示 年、月、日、星期、时、分、秒 2,用按键能调整LCD上的日期及时间3,要求所设计的电子时钟有闹钟功能(到设定时间蜂鸣器能响)/*电子时钟源代码*/#include#include#include#include#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 t1;/*定义一个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); /*规定画线的方式。mode=0, 则表示画线时将所画位置的原来信息覆盖*/ setcolor(15); outtextxy(433,75,CLOCK);/*时钟的标题*/ setcolor(7); line(392,310,510,310); line(392,330,510,330); arc(392,320,90,270,10); arc(510,320,270,90,10); /*绘制电子动画时钟下的数字时钟的边框架*/ /*绘制数字时钟的时分秒的分隔符*/ setcolor(5); for(i=431;i=470;i+=39) for(j=317;j=324;j+=7) setlinestyle(0,0,3); circle(i,j,1); /*以(i, y)为圆心,1为半径画圆*/ setcolor(15); line(424,315,424,325); /*在运行电子时钟前先画一个光标*/ /*绘制表示小时的圆点*/ for(i=0,m=0,h=0;i=11;i+,h+) x=100*sin(h*60+m)/360*PI)+451; y=200-100*cos(h*60+m)/360*PI); setlinestyle(0,0,3); circle(x,y,1); /*绘制表示分钟或秒钟的圆点*/ for(i=0,m=0;i=59;m+,i+) x=100*sin(m/30*PI)+451; y=200-100*cos(m/30*PI); setlinestyle(0,0,1); circle(x,y,1); /*在电子表的左边打印帮助提示信息*/ setcolor(4); outtextxy(184,125,HELP); setcolor(15); outtextxy(182,125,HELP); setcolor(5); outtextxy(140,185,TAB : Cursor move); outtextxy(140,225,UP : Time +); outtextxy(140,265,DOWN: Time -); outtextxy(140,305,ESC : Quit system!); outtextxy(140,345,Version : 2.0); setcolor(12); outtextxy(150,400,Nothing is more important than time!); clockhandle();/*开始调用时钟处理程序*/ closegraph(); /*关闭图形系统*/ return 0; /*表示程序正常结束,向操作系统返回一个0值*/ void clockhandle() int k=0,count; setcolor(15); gettime(t);/*取得系统时间,保存在time结构类型的数组变量中*/ h=t0.ti_hour; m=t0.ti_min; x=50*sin(h*60+m)/360*PI)+451; /*时针的x坐标值*/ y=200-50*cos(h*60+m)/360*PI); /*时针的y坐标值*/ line(451,200,x,y);/*在电子表中绘制时针*/ x1=80*sin(m/30*PI)+451; /*分针的x坐标值*/ y1=200-80*cos(m/30*PI); /*分针的y坐标值*/ line(451,200,x1,y1); /*在电子表中绘制分针*/ digitclock(408,318,digithour(h); /*在数字时钟中,显示当前的小时值*/ digitclock(446,318,digitmin(m); /*在数字时钟中,显示当前的分钟值*/ setwritemode(1); /*规定画线的方式,如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此, 当线的特性不变, 进行两次画线操作相当于没有 画线,即在当前位置处清除了原来的画线*/ for(count=2;k!=ESC;) /*开始循环,直至用户按下ESC键结束循环*/ setcolor(12);/*淡红色*/ sound(500);/*以指定频率打开PC扬声器,这里频率为500Hz*/ delay(700);/*发一个频率为500Hz的音调,维持700毫秒*/ sound(200);/*以指定频率打开PC扬声器,这里频率为200Hz*/ delay(300); /*以上两种不同频率的音调,可仿真钟表转动时的嘀哒声*/ nosound(); /*关闭PC扬声器*/ s=t0.ti_sec; m=t0.ti_min; h=t0.ti_hour; x2=98*sin(s/30*PI)+451; /*秒针的x坐标值*/ y2=200-98*cos(s/30*PI); /*秒针的y坐标值*/ line(451,200,x2,y2); /*绘制秒针*/ /*利用此循环,延时一秒*/ while(t0.ti_sec=s&t0.ti_min=m&t0.ti_hour=h) gettime(t);/*取得系统时间*/ if(bioskey(1)!=0) k=bioskey(0); count=keyhandle(k,count); if(count=5) count=1; setcolor(15); digitclock(485,318,digitsec(s)+1);/*数字时钟增加1秒*/ setcolor(12); /*淡红色*/ x2=98*sin(s/30*PI)+451; y2=200-98*cos(s/30*PI); line(451,200,x2,y2); /*用原来的颜色在原来位置处再绘制秒针,以达到清除当前秒针的目的*/ /*分钟处理*/ if(t0.ti_min!=m) /*若分钟有变化*/ /*消除当前分针*/ setcolor(15); /*白色*/ x1=80*sin(m/30*PI)+451; y1=200-80*cos(m/30*PI); line(451,200,x1,y1); /*绘制新的分针*/ m=t0.ti_min; digitclock(446,318,digitmin(m); /*在数字时钟中显示新的分钟值*/ x1=80*sin(m/30*PI)+451; y1=200-80*cos(m/30*PI); line(451,200,x1,y1); /*小时处理*/ if(t0.ti_hour*60+t0.ti_min)!=(h*60+m) /*若小时数有变化*/ /*消除当前时针*/ setcolor(15); /*白色*/ x=50*sin(h*60+m)/360*PI)+451;/*50:时钟的长度(单位:像素),451:圆心的x坐标值*/ y=200-50*cos(h*60+m)/360*PI); line(451,200,x,y); /*绘制新的时针*/ h=t0.ti_hour; digitclock(408,318,digithour(h); x=50*sin(h*60+m)/360*PI)+451; y=200-50*cos(h*60+m)/360*PI); line(451,200,x,y); int keyhandle(int key,int count) /*键盘控制 */ switch(key) case UP: timeupchange(count-1); /*因为count的初始值为2,所以此处减1*/ break; case DOWN:timedownchange(count-1); /*因为count的初始值为2,所以此处减1*/ break; case TAB:setcolor(15); clearcursor(count); /*清除原来的光标*/ drawcursor(count); /*显示一个新的光标*/ count+; break; return count; int timeupchange(int count) /*处理光标上移的按键*/ if(count=1) t0.ti_hour+; if(t0.ti_hour=24) t0.ti_hour=0; settime(t); /*设置新的系统时间*/ if(count=2) t0.ti_min+; if(t0.ti_min=60) t0.ti_min=0; settime(t); /*设置新的系统时间*/ if(count=3) t0.ti_sec+; if(t0.ti_sec=60) t0.ti_sec=0; settime(t); /*设置新的系统时间*/ int timedownchange(int count) /*处理光标下移的按键*/ if(count=1) t0.ti_hour-; if(t0.ti_hour=0) t0.ti_hour=23; settime(t);/*设置新的系统时间*/ if(count=2) t0.ti_min-; if(t0.ti_min=0) t0.ti_min=59; settime(t);/*设置新的系统时间*/ if(count=3) t0.ti_sec-; if(t0.ti_sec=0) t0.ti_sec=59; settime(t);/*设置新的系统时间*/ int digithour(double h)/*将double型的小时数转换成int型*/int i; for(i=0;i=23;i+) if(h=i) return i; int digitmin(double m)/*将double型的分钟数转换成int型*/int i; for(i=0;i=59;i+) if(m=i) re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环保科技行业环保科技创新与可持续发展实践研究报告及未来发展趋势预测
- 北京交通大学继续教育学院招聘2人笔试考试备考题库及答案解析
- 2026中国证券登记结算有限责任公司招聘笔试考试参考试题及答案解析
- 2026浙商证券秋季校园招聘笔试考试备考题库及答案解析
- 2025河南焦作温县国资运营集团有限公司招聘高级管理人员1人考试笔试备考试题及答案解析
- 2025年甘肃省公路交通建设集团有限公司社会招聘132人笔试考试参考试题及答案解析
- 2026广西河池巴马瑶族自治县人民医院人才招聘44人笔试考试备考试题及答案解析
- 2025赛马物联科技(宁夏)有限公司招聘4人笔试考试备考试题及答案解析
- 山东省青岛第九中学选聘2026年应届高校毕业生(25人)考试笔试参考题库附答案解析
- 2025河南洛阳中信重机中心幼儿园招聘3人笔试考试参考题库及答案解析
- 2026届内蒙古呼市二中化学高一第一学期期中达标测试试题含解析
- 涂布设备安全知识培训课件
- 2025-2030油田化学品非常规油气开采技术适配性与服务型制造转型研究
- 妊娠合并高脂血症的护理措施
- 2025版建筑工程施工安全生产责任险合同范本
- 不寐的中医护理
- 乳腺癌的护理案例分享
- 产品变更通知单模板PCN(4P)
- 超声科进修汇报
- 吉林省2020-2024年中考满分作文143篇
- 给教师的人工智能教育心得体会
评论
0/150
提交评论