模拟时钟程序设计
- 格式:doc
- 大小:125.42 KB
- 文档页数:29
使用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主要是绘制时钟表的中心位置、秒针、分针及时针的结束位置。
“可校准实时时钟”设计说明1程序设计框架说明本案例程序设计主要分为:DS1302、按键扫描三个模块。
1.1宏定义#define uchar unsigned char //宏定义#define uint unsigned int#define ADC_CHS1_7 0X07/***********时分秒写寄存器**************/#define DS1302_SECOND_WRITE 0x80#define DS1302_MINUTE_WRITE 0x82#define DS1302_HOUR_WRITE 0x84#define DS1302_WEEK_WRITE 0x8A#define DS1302_DAY_WRITE 0x86#define DS1302_MONTH_WRITE 0x88#define DS1302_YEAR_WRITE 0x8C#define ADC_POWER 0X80#define ADC_FLAG 0X10 //当A/D转换完成后,ADC_FLAG要软件清零#define ADC_START 0X08#define ADC_SPEED_90 0X60/***********时分秒读寄存器**************/#define DS1302_SECOND_READ 0x81#define DS1302_MINUTE_READ 0x83#define DS1302_HOUR_READ 0x85#define DS1302_WEEK_READ 0x8B#define DS1302_DAY_READ 0x87#define DS1302_MONTH_READ 0x89#define DS1302_YEAR_READ 0x8D#define P1_7_ADC 0x802.2引脚定义/********DS1302*******/sbit Rtc_sclk = P1^5; //时钟线引脚,控制数据的输入与输出sbit Rtc_rst = P1^6; //CE线引脚,读、写数据时必须置为高电平sbit Rtc_io = P5^4; //实时时钟的数据线引脚/********数码管显示******/sbit L ed_sel = P2^3; //流水灯和数码管选通引脚sbit S el0 = P2^0; //Sel0、Sel1、Sel2三位二进制进行数码管位选0-7 sbit S el1 = P2^1;sbit S el2 = P2^2;sbit K EY1=P3^2; //Key1对应引脚1.3 变量定义typedef struct __SYSTEMTIME__{uchar Second;uchar Minute;uchar Hour;uchar Week;uchar Day;uchar Month;uchar Year;}SYSTEMTIME; //定义的时间类型SYSTEMTIME t;/*时、分、秒标志*/bit set_H_flag;bit set_Ms_flag;bit set_S_flag;/*时、分、秒值*/uint set_H_val;uint set_Ms_val;uint set_S_val;bit set_HMS_done; //时分秒设置完bit show_set_HMS; //显示时分秒bit show_HMS; //显示时分秒bit show_key_val;unsigned char key_val;uchar flag; //所选择点亮的数码管0-7标志位uchar temp; //要写入到DS1302的数据uchar duanxuan[];uchar weixuan[];2、程序函数说明延时程序void Delayms(char i);DS1302读写函数void Ds1302_write(uchar temp);uchar Ds1302_read();void WriteDS1302(uchar Addr, uchar Data);uchar ReadDS1302(uchar cmd)SYSTEMTIME DS1302_GetTime();系统初始化void Init();void Init_key();ADC转换unsigned char GetADC();检测导航键unsigned char Fun_Keycheck();监听功能键,完成时分秒相关值的设置void Fun_Key_task_HMS();监听按键1,完成时分秒设置void Fun_key1();完成相关设置功能的操作void Key_OFFON();初始化DS1302void Initial_DS1302(void);中断显示程序void timer0() interrupt 1初始化ADCvoid Init_ADC();2程序设计框架及关键技巧说明2.1 I/O引脚及相关寄存器配置2.1.1 I/O引脚:(1)数码管位选引脚整个设置P2口的值;(2)数码管使能引脚sbit led_sel = P2^3 ;(3)DS1302引脚sbit rtc_sclk=P1^5; //时钟线引脚sbit rtc_rst=P1^6; // CE线引脚sbit rtc_io=P5^4; //实时时钟的数据线引脚(4)按键引脚sbit KEY1 = P3^2 ; //设置时间2.1.2寄存器:(1)DS1302相关寄存器其中:①控制字寄存器:写地址0x8E,读地址0x8F位7:必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词:电子钟 AT89C52 硬件设计软件设计目录一、数字电子钟设计任务、功能要求说明及方案介绍 (4)1.1 设计课题设计任务 (4)1.2 设计课题的功能要求说明 (4)1.3 设计课的设计总体方案介绍及工作原理说明 (4)二、设计课题的硬件系统的设计 (5)2.1硬件系统各模块功能简要介绍 (5)2.1.1 AT89C52简介 (5)2.1.2 按键电路 (6)三、设计课题的软件系统的设计 (6)3.1 使用单片机资源的情况 (6)3.2 软件系统个模块功能简要介绍 (7)3.3 软件系统程序流程框图 (7)3.4 软件系统程序清单 (7)四、设计课题的设计结论、仿真结果、误差分析 (9)4.1 设计结论及使用说明 (9)4.2 仿真结果 (10)结束语 (12)参考文献 (12)附录 (13)附录A:程序清单 (13)一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。
具有时间显示,并有时间设定,时间调整功能。
1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。
电子钟设计c语言设计电子钟是一种使用数字或者模拟显示时间的时钟。
它通常使用数字显示屏或者液晶屏来显示时间。
电子钟的优势在于与传统机械钟相比,它更加准确、可靠、精准和方便。
通过使用c语言来设计电子钟可以使它更加智能化和强大。
我们知道,c语言是一种通用的高级编程语言,它非常适合用于系统编程和应用程序开发。
电子钟的设计需要运用c语言的数据结构、算法、指针和其他通用编程技术。
设计一个可靠的电子钟需要考虑到准确显示时间、时区调整、闹钟功能、定时器和更多的功能。
在设计电子钟时,我们首先需要考虑到选择合适的开发平台和硬件选型。
例如,我们可以使用Arduino或者Raspberry Pi 等开发板来设计电子钟。
这些开发板既能提供强大的计算能力,又可以提供足够的GPIO引脚和通信接口。
同时,我们还需要选择合适的时钟模块,例如DS1307、DS3231和DS1302等。
接下来,我们可以考虑设计程序框架。
设计程序框架需要考虑到用户需求,从而使程序有条不紊地进行。
我们可以设计菜单选项来满足用户需求,例如时钟显示、日期显示、温度显示等等。
此外,还可以考虑添加一些有趣的功能,例如给予经度和纬度计算日出日落时间以及天气预报等。
电子钟的时间显示通常使用RTC模块与单片机进行通信。
RTC模块可以提供秒、分、时、日、月、年等时间数据。
我们需要从RTC模块读取这些数据,并将它们转换成格式化的字符串进行显示。
我们还需要考虑到时区的调整,以便在不同时区下准确显示时间。
闹钟功能是电子钟的一个重要特性。
我们可以设计界面来设置闹钟时间和日期。
当闹钟响起时,电子钟可以触发警报并发出声音或声音和振动提醒。
我们还可以增加关闭闹钟的选项,以便用户可以在闹钟响起时快速关闭它。
另一个特色功能是定时器,它可以用来进行倒计时或计时操作。
我们可以使用按钮或者旋转编码器来设置定时器时间。
定时器可以在倒计时或计时完成时发出警报来通知用户,以便执行相应的操作。
最后,我们需要考虑到电子钟的可扩展性和灵活性。
课程设计说明书姓名:学号:院系:专业:题目:实时时钟程序设计指导教师:职称:课程设计说明书院系:专业:姓名:学号:课程设计题目:实时时钟程序设计起迄日期:课程设计地点:指导教师:系主任:课程设计任务书课程设计任务书目录第一章课题设计目的容及要求 (6)1.1 目的................ ... . . . . . . . . .61.2 容 (6)1.3 要求 (6)第二章程序流程图设计 (2)2.1主流程图设计 (2)2.2子流程图设计.............. 错误!未定义书签。
第三章程序段落的说明 (8)3.1光标的设立和隐藏 (8)3.2调用系统的时间 (5)3.3判断是否有键盘的输入 (6)第四章程序调试说明、结果记录与分析 (7)4.1程序调试的过程 (7)4.2调试结果 (7)4.3分析结果 (8)第五章总结与体会 (8)参考文献 (8)附录 (9)1.程序流程图 (9)2.程序清单 (11)第一章课题设计目得容及要求1.1 目得1)培养学生文献检索的能力,特别是如何利用Internet检索需要的文献资料。
2)培养学生综合分析问题、发现问题和解决问题的能力。
3)培养学生运用知识的能力和工程设计的能力。
4)提高学生课程设计报告撰写水平。
1.2 容设计一个根据所学汇编语言课程的知识,熟练8086汇编语言的编程原理,和程序设计思想,编写一个实时时钟程序进一步提高综合运用知识的能力。
1.3 要求每隔一秒显示系统时钟;可以重复输入,有退出键功能。
第二章程序流程图设计2.1主流程图设计由方案设计分析可知,此次设计比较简单,先初始化程序,然后设立光标,在光标移动时,不断地取时,取分,取秒,并不断的循环。
在循环的过程中,当按下ESC键时退出程序;当按下其它键时,程序继续运行,并显示时间界面,再按下ESC键时,程序又将退出。
流程图设计:当初始化后,设定一个光标用来显示时间的时、分、秒,并将光标隐藏。
时钟程序设计时钟程序设计是一项涉及编程基础、时间管理以及用户界面设计的综合任务。
本文将从几个关键方面展开,包括时钟程序的基本功能、设计原则、实现方法和一些常见的编程技巧。
基本功能一个时钟程序通常具有以下基本功能:1. 时间显示:能够显示当前的时间,包括小时、分钟和秒。
2. 闹钟功能:允许用户设置一个或多个闹钟,并在指定时间提醒用户。
3. 计时器:提供一个倒计时功能,可以用于计时活动或休息。
4. 世界时钟:显示不同地区或国家的时间。
5. 日期显示:显示当前的日期,包括年、月、日。
设计原则在设计时钟程序时,应遵循以下原则:1. 用户友好:界面应简洁明了,易于操作。
2. 准确性:时间显示必须准确无误。
3. 可扩展性:设计时应考虑未来可能增加的新功能。
4. 兼容性:程序应能在不同的操作系统和设备上运行。
实现方法实现时钟程序可以采用多种编程语言和工具,以下是一些常见的实现方法:1. 桌面应用:使用C++、Java或Python等语言,结合图形用户界面库如Qt、Swing或Tkinter。
2. 网页应用:使用HTML、CSS和JavaScript,结合前端框架如React 或Vue.js。
3. 移动应用:使用Swift或Kotlin为iOS或Android开发应用。
4. 命令行程序:使用任何支持标准输入输出的编程语言,如Python 或C。
编程技巧1. 时间获取:大多数编程语言都提供了获取当前时间的函数,如Python中的`datetime.now()`。
2. 定时器:使用循环或专门的定时器函数来更新时间显示,如JavaScript中的`setInterval`。
3. 闹钟逻辑:设计一个闹钟系统需要考虑时间比较和事件触发,可以使用条件判断和循环结构。
4. 用户界面:设计直观的界面,使用户能够轻松设置时间和日期。
5. 错误处理:确保程序能够处理无效的输入和异常情况。
示例代码(Python)以下是一个简单的Python时钟程序示例,使用标准库`datetime`来获取和显示时间:```pythonimport timefrom datetime import datetimedef display_time():while True:now = datetime.now()current_time = now.strftime("%H:%M:%S")print(current_time)time.sleep(1)if __name__ == "__main__":display_time()```结语设计一个时钟程序是一个有趣且具有教育意义的项目,它不仅能够帮助你理解编程的基本概念,还能够提高你对时间管理和用户界面设计的认识。
MFC之模拟时钟最近在学习MFC,程序设计⽼师布置”画板“和”模拟时钟“作为实验来实践,由于没去上课,⽹上搜索的很多教程⼏乎都是以VC6.0为基础的,⽽⾝边⼏乎都是VS2008以上,对于初学者来说,有时仿照VC6.0的教程在VS2008或更⾼的环境上难免会出现⼀些困难,特此将模拟时钟程序在VS2008环境下的开发过程总结如下:1.新建项⽬项⽬类型选择“MFC”,模板选择“MFC应⽤程序”,名称⾃拟,这⾥命名为”Clock"。
选择好以后效果如下:2.MFC应⽤程序向导设置选择“下⼀步"这⾥有两个更改,⼀是”应⽤程序类型”选择“基于对话框”,同时取消选中“使⽤Unicode库”。
完成以上两步之后,直接单击“完成”即可。
三、核⼼部分1.⾸先打开“类视图”,选择"CClockDlg"在该类的头⽂件中,找到如下代码:紧接着后⾯添加三个变量⽤于临时保存时间的秒、分、时。
int m_Sec, m_Min, m_Hour;插⼊后的效果如下:2.⼿动添加⼀个消息映射函数,完成时间的获取和指针的绘制。
在CClockDlg类的头⽂件中找到如下代码:在其中增加⼀⾏如下:afx_msg void OnTimer(UINT nIDEvent);增加后显⽰效果如下:接着在资源管理器中找到CClockDlg类的cpp⽂件来实现刚才的函数声明需要添加的代码如下:1void CClockDlg::OnTimer(UINT nIDEvent)2 {3// TODO: Add your message handler code here and/or call default4 CTime time = CTime::GetCurrentTime(); //获得系统时间5 m_Sec = time.GetSecond();6 m_Min = time.GetMinute();7 m_Hour = time.GetHour();89 CDC* pDC = GetDC();10 CRect rect;11 GetClientRect(&rect); //获取客户区域12 CBitmap bitmap; //定义图⽚类13 bitmap.LoadBitmap(IDB_BITMAP1); //加载位图14 CDC memdc; //定义临时画布15 memdc.CreateCompatibleDC(pDC); //创建画布16 memdc.SelectObject(&bitmap); //关联图⽚1718int x = rect.Width()/2;19int y = rect.Height()/2;2021 CPen MinutePen(PS_SOLID,2,RGB(0,0,0)); //设置分针画笔22 memdc.SelectObject(&MinutePen);23 memdc.MoveTo(x,y);24//绘制分针25 memdc.LineTo(x+(long)40*cos(PI/2-2*PI*m_Min/60.0),y-(long)40*sin(PI/2-2*PI*m_Min/60.0));26 CPen HourPen(PS_SOLID,3,RGB(0,0,0)); //设置时针画笔27 memdc.SelectObject(&HourPen);28 memdc.MoveTo(x,y);29//绘制时针30 memdc.LineTo(x+(long)30*cos(PI/2-2*PI*(5*m_Hour/60.0+m_Min/12.0/60.0))31 ,y-(long)30*sin(PI/2-2*PI*(5*m_Hour/60.0+m_Min/12.0/60.0)));32 CPen SecondPen(PS_SOLID,1,RGB(255,0,0)); //设置秒针画笔33 memdc.SelectObject(&SecondPen);34 memdc.MoveTo(x,y);35 memdc.LineTo(x+(long)50*cos(PI/2-2*PI*m_Sec/60.0),y-(long)50*sin(PI/2-2*PI*m_Sec/60.0));//绘制秒针36 memdc.MoveTo(x,y);37 memdc.LineTo(x+(long)10*cos(PI/2-2*PI*(m_Sec+30)/60.0),y-(long)10*sin(PI/2-2*PI*(m_Sec+30)/60.0));//绘制秒针38 SecondPen.DeleteObject();39 MinutePen.DeleteObject();40 HourPen.DeleteObject();41 pDC->BitBlt(0,0,rect.right,rect.bottom,&memdc,0,0,SRCCOPY); //复制图⽚42 memdc.DeleteDC(); //复制临时画布到预览窗⼝43 bitmap.DeleteObject(); //删除图⽚44 ReleaseDC(pDC);45 CDialog::OnTimer(nIDEvent);46 }3.设置时钟位图打开“资源视图”在“资源视图”中添加资源资源类型选择“Bitmap",然后选择”导⼊”,把实现准备好的BMP⽂件导⼊。
单片机电子时钟设计程序
1.引用头文件和定义全局变量
首先需要引用相应的头文件,例如`reg52.h`,并定义全局变量用于
存储时间、闹钟时间以及其他相关参数。
2.初始化时钟
在主函数中,首先进行时钟的初始化。
这包括设置定时器和中断相关
的寄存器,以及初始化显示屏和按钮等外设。
3.时间更新
编写一个中断服务函数,用于根据定时器的中断来更新时间。
在该中
断服务函数中,需要将全局变量中的时间进行递增,并考虑到分钟、小时、日期和星期等的进位和换算。
4.按钮输入
设置一个子函数用于读取按钮输入,并根据按钮的状态来进行相应的
操作,比如切换时钟显示模式、设置闹钟等。
5.显示时间
编写一个子函数用于将时间信息显示在数码管上。
这需要先将时间信
息转换为数码管的显示格式,然后通过IO口输出控制数码管的显示。
6.闹钟设置
使用按钮输入的功能,可以设置闹钟时间和开关闹钟功能。
当闹钟时
间到达时,可以通过控制蜂鸣器发声或点亮LED等方式来进行提醒。
7.主函数
在主函数中,循环执行按钮输入的检测和相应操作,以及时间的更新和显示等功能。
可以通过一个状态机来控制整个程序的流程。
以上是一个简要的单片机电子时钟设计程序的概述。
实际的程序设计过程中,还需要考虑到各个模块之间的交互、错误处理、电源管理以及代码的优化等细节问题。
具体的程序实现可以根据具体需求和硬件平台的差异进行适当的修改和扩展。
摘要模拟电子时钟主要就是对电子时钟4个功能模块的组成进行编程。
对电子时钟的界面显示模块,时钟动画处理模块,数字时钟处理模块。
界面显示模块主要调用了C语言图形系统函数和字符屏幕处理函数画出时钟程序的主面。
按键控制处理模块第一是读取用户按键的键值。
第二是通过对键盘按键值的判断,执行相应的操作。
时钟动画处理模块是通过对相关条件的判断和时钟指针坐标值的计算,完成时,分,秒指针的擦除和重绘。
以及最后的数字处理模块是实现数字时钟的显示和数字时钟的修改。
关键词:C语言;电子时钟;WIN-TC;目录(参考一)第一章综述 (4)1.1 课题的现实意义 (4)1.2 软件环境 (4)1.3 硬件环境 (4)1.4 项目人员分工 (4)第二章系统设计流程图 (5)2.1 系统流程图 (5)2.2 主要功能表 (5)第三章系统分析和设计 (8)3.1 图形的绘制和输出 (8)3.2 文本的输出显示 (8)3.3 计算函数的调用 (8)3.4 程序的运行和退出 (10)第四章系统测试 (11)4.1 系统测试 (11)4.2 调试 (11)4.3 错误原因分析一 (11)4.4 错误原因分析二 (11)第五章用户使用说明书 (14)5.1 运行WIM-TC程序进入系统界面 (14)5.2 系统的使用 (14)5.3 退出程序 (14)第六章工作总结 (15)第七章源代码 (16)参考文献 (28)第一章综述1.1课题的现实意义:随着社会的进步和科技的发展,电子钟表业成为了我们生活中不可缺少的一部分。
特别是应用在如火车站之类的公共场所,其用途不言而喻。
在此,我们介绍一个电子时钟的设计和实现,模拟windows自带的时钟。
1.2软件环境:WINTC;C语言,Windows开发环境;1.3硬件环境:学校台式电脑1.4项目人员分工:界面设计--------刘丹,程序设计--------林帅键界面设计:在颜色搭配的发面,其中也遇到了一点小麻烦,就是在搭配秒针颜色的时,运行的时候秒针走的所有路径都会留下痕迹,开始的时候秒针的颜色只能选择深灰色,其他的颜色都会出现路径走时痕迹的出现,这时候就应该考虑到在编写程序中这个数字代号是否已经被其他的名称所使用了。
程序设计:程序应该分模块编译才能提高效率。
弄懂程序流程图,可以在最短时间发现错误。
实验报告的部分处理:对实验数据报告的整体思路的流程的粗矿处理和填写。
PPT的大体制作:在PPT中主要是根据对我们这次模拟时钟的主要思路,从而我们也是编写程序的主要步骤,在其中我们也注明了一些在模拟时钟出现的一些错误的原因。
第二章系统设计流程图2.1系统设计原理图程序流程图如下所示2.2 主要功能表如下所示(图2)界面显示模块:电子时钟界面显示在调用时钟运行处理之前完成,在这里主要调用C语言图形系统函数和字符屏幕处理函数画出时钟程序的主界面,主界面包括类似windows自带的电子时钟的界面和帮助界面两部分。
按键控制模块:按键控制模块主要完成两部分功能。
第一,读取用户按键的键值。
第二,通过对键盘按键值的判断,执行相应的操作,如光标、修改时间。
时钟动画处理模块:它通过对相关条件的判断和时钟指针指标值的计算,完成时、分、秒指针的擦除和重绘,以达到模拟时钟运转的功能。
数字时钟处理模块:主要实现了数字时钟的显示和数字时钟的修改。
其中,在数字时钟的修改中,用户可先按T ab键定位需要修改内容的位置,然后通过按光标上移或下移键来修改当前时间。
第三章系统分析与设计3.1 图形的绘制与输出函数(1)图形方式的初始化通过函数initgraph来完成。
其调用格式为:Innitgraph(*gdriver, *gmode,*path);函数initgraph是通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将系统设置为图形方式。
其中3个参数含义如下:gdriver是一个整型值,用来指定要装入的图形驱动程序。
gmode是一个整型值,用来设置图形显示模式。
path是一个字符串,用来指明图形驱动所在的路径。
如果路径为C:\TC,则写在参数中则为“C:\\TC”.(2)line函数:用来指定两个点之间画一条直线,其调用格式为:line(int x1, int y1, int x2 , int y2);其中(x1,y1)和(x2,y2)分别为直线的两个端点坐标。
(3)arc函数:用来画圆弧,其调用格式为:arc(int x, int y, int angs, int ange, int r);其中(x,y)为圆弧所在的圆心的坐标,angs,ange分别为圆弧的起始角和终止角,单位为“度”,r圆弧的半径(4)circle函数:该函数用来指定圆心和半径画圆。
其调用格式为:circle(int x, int y, int r);其中x,y为指定圆心的坐标,r为圆的半径。
(5)cleardevice():清屏使用该函数,它的作用就是清除全屏幕,并将当前点位置设置与屏幕的左上角(0,0)。
执行后原先的视图不再存在。
(6)closegraph():其作用是释放所有图形系统的分配存储区,恢复到调用initgraph之前状态。
(7)setlinestyle():该函数用于设置当前绘图所用的线型与宽度,这些设置仅限于对直线类图形有效。
其调用格式为:setlinestyle(int sty, int pat, int b);其3个参数的含义如下:sty用来定义所画直线类型,pat用于用户自定义类型,b指定所画直线粗细。
(8)setbkcolor():该函数用来设置背景色,其功能是设置绘图时的背景颜色。
其调用格式如下:setbkcolor(int color),其中参数color代表所取颜色,可以为整型常数,也可以为符号常数。
(9)setcolor(int color):该函数用来设置前景色,即绘图用的颜色,其调用格式与“setbkcolor”相同。
3.2 文本的输出显示其中调用outtextxy函数,outtextxy函数用来在(X,Y)位置输出一个字符串。
其调用格式为:outtextxy(int x, int y , char *text );其中参数(x,y)为指定位置坐标,text为待输出的字符串。
3.3计算函数的调用调用clockhandle()函数:(1)程序中旧时钟指针的去除是借助setwritemode(mode)函数设置画线的方式来实现的。
如果mode=1,则表示画线是用当前特性的线与所画之处的线进行异或操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。
因此,当线的特性不变,进行两次画线操作相当于没画线,即在当前位置处清除了原来的画线。
(2)bioskey()为直接使用BIOS服务的键盘接口函数。
其原型为:int bioskey(int cmd),cmd的值决定执行什么操作,当cmd=0时,bioskey()返回下一个在键值,如果按下一个键则返回一个非零值,否则返回0值;当cmd=2时,bioskey()Shift,Ctril,Alt,ScrollLock,NumLock,CapLock,Insert键的使用状态。
(3)time结构体struct time{unsigned char ti_min;/*分钟*/unsigned char ti_hour;/*小时*/unsigned char ti_hund;/*百分之一秒*/unsigned char ti_sec;/*秒*/};time 结构体定义在dos.h文件中,用来保存当前系统时间(4)gettime(struct time*t):该函数用于获取系统时间。
(5)settime(t):用于设置新的系统时间。
(6)数字时钟处理函数:digithour(double);/*将小时数转换成整型*/digitmin(double);/*将分钟数转换成整型*/digitsec(double);/*将秒数转换成整型*/digitclock(int, int, int);/*在指定位置显示时间*/(7)按键处理函数:keyhandle(int key, int count);/*按键处理*/drawcursor(int count);/*根据count的值画一个光标*/clearcursor(int count);/*消除光标*/timeupchange(int count);/*处理光标上移*/timedownchange(int count);/*处理光标下移3.4程序的运行和退出打开WIN-TC软件,新建个文件,将程序复制到软件上,运行程序显示下页界面,按ESC可退出程序。
进入图形界面,按TAB键可切换光标在时分秒间的位置,按方向键可调节可调节光标相应位置时分秒的值。
第四章系统测试4.1系统测试打开WIN-TC软件先进行编译检查语法是否有错误,确认语法正确再运行程序。
4.2调试问题一:程序不显示只是闪过问题二:程序无法正常退出;问题三:图形文件打不开,显示如下代码:“”linker error:unable to open input file 'Cos.OBJ ;问题四:图形才画到一半就结束运行;问题五:调试分钟的时候时钟出现问题,时钟分钟不同步;4.3 错误原因分析一软件篇问题一:在Window2000以上版本运行WIN-TC软件是应在其后面的输入语句添加getch().以便让程序可以停顿一下。
问题三:将其文件保存在桌面上,导致路径设置错误。
可以再新建个模板,将源代码复制到模板上,默认保存后运行程序问题四:没有调用相关的头文件(#include <math.h>),导致当程序调用到与该头文件有关的程序时出错。
4.4错误原因分析二算法篇问题二:程序出现死循环,检查一下循环语句的算法,发现如下循环语句for(count=2;count!=Esc;){ }应将其改为for(count=2;k!=Esc).问题五:算法还不够完善,原先算法如下,由于程序中m=t[0].ti_min,导致后面的条件语句(if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m)))中的m值发生变化,致使调节分钟值的时候时钟无法同步:因此因在设置一个变量r来收上一个m的值,故改进算法如下所示然而算法仍然不够完善,分钟转完一圈,时钟又要回到原点,由于t[0].ti_hour=60时,m=0.导致程序不够完善,故再改进算法如下所示:if(t[0].ti_min!=m)/*如果分钟有变化*/{/*消除当前分钟*/setcolor(15);/*白色*/setlinestyle(0,0,3);x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);/*绘制新的分钟*/r=m;/*第一次改进*/m=t[0].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);}else r=m;/*第一次改进*//*小时处理*/if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+r)) {/*消除当前时钟*/setcolor(15);x=50*sin((h*60+r)/360*PI)+451;/*第一次改进*/ y=200-50*cos((h*60+r)/360*PI);/*第一次改进*/ setlinestyle(0,0,3);line(451,200,x,y);/*绘制新的时钟*/if(m==0&&r==59){t[0].ti_hour++; settime(t);}/*第二次改进*/if(m==59&&r==1)/*第二次改进*/{t[0].ti_hour--; settime(t); }h=t[0].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);}第五章用户使用说明书5.1用户使用说明书5.1 打开WINTC软件,新建个模板,将源代码复制到程序上。