文档库 最新最全的文档下载
当前位置:文档库 › 第七组 图形时钟 源代码

第七组 图形时钟 源代码

第七组 图形时钟 源代码
第七组 图形时钟 源代码

第七组图形时钟

源代码

#include

#include

#include

#include

#include

#include

#define pi 3.1415926

#define midx 320

#define midy 240

#define CLICK 100

#define CLICKDELAY 30

void main()

{

//函数声明

void draw(int hour,int min,int sec);

void Click();

void Highclick();

void Naoling();

int gdriver, gmode,h,m;

start:gdriver=DETECT;

gmode=0;

initgraph(&gdriver, &gmode, ""); //初始化图形模式setbkcolor(WHITE); //设置背景颜色cleardevice();

while(!kbhit())

{

setfillcolor(LIGHTGRAY); //给表盘添颜色

setcolor(BLACK);

fillcircle(320,240,215); //画实心圆盘

fillcircle(320,240,170);

setfillcolor(YELLOW);

fillcircle(320,240,4);

setcolor(YELLOW); //给刻度添颜色line(120,240,150,240); //9

line(320,40,320,70); //12

line(520,240,490,240); //3

line(320,440,320,410); //6

line(410,395.7,400,378.4); //5

line(475.7,330,458.4,320); //4

line(475.7,150,458.4,160); //2

line(410,84.3,400,101.6); //1

line(230,84.3,240,101.6); //11

line(164.3,150,181.6,160); //10 line(164.3,330,181.6,320); //8 line(230,395.7,240,378.4); //7 setcolor(RED);

//给表盘添数字

outtextxy(319.9,36,"12"); outtextxy(118,238,"9"); outtextxy(519,238,"3"); outtextxy(320,435,"6"); outtextxy(418,411,"5"); outtextxy(490,337,"4"); outtextxy(493.2,139.9,"2"); outtextxy(419.9,66.8,"1"); outtextxy(215,63,"11"); outtextxy(143,136,"10"); outtextxy(146.8,340,"8"); outtextxy(220,413.2,"7");

//获取系统时间

time_t temp;

struct tm *p;

time(&temp);

p=localtime(&temp);

draw( p->tm_hour,p->tm_min,p->tm_sec); //调用画指针函数

if(p->tm_min==0&&p->tm_sec==0) //整点报时

Highclick();

else

Click();

if(p->tm_hour==h&&p->tm_min==m) //闹钟

Naoling();

Sleep(830);

if(p->tm_hour==h&&p->tm_min==m)

Naoling();

cleardevice(); //清屏

}

closegraph(); //关闭模拟时钟界面,进入设定闹钟功能选择界面

char p;

start1:system("cls");

printf("是否设定闹钟:(y/n/s)?");

p=getch(); //获得指令

if(p=='y') //执行指令

{

system("cls"); //清屏

printf("请输入闹铃时间\n");

printf("小时:");

scanf("%d",&h);

system("cls");

printf("%02d:",h);

printf("\n分钟:");

scanf("%d",&m);

system("cls");

printf("闹铃时间:\n");

printf("%02d:%02d\n",h,m);

getch();

goto start; //返回模拟时钟界面}

else if(p=='n')

goto start;

else if(p=='s') //闹钟的延时

{

m=m+5; //延时五分钟

goto start;

}

else

{

system("cls");

goto start1;

}

}

void draw(int hour,int min,int sec)//定义画指针函数

{

float endx,endy;

float a_sec,a_min,a_hour;

//根据获取时间计算对应指针角度

a_sec=(sec)*2*pi/60;

a_min=(min)*2*pi/60+a_sec/60;

a_hour=(hour)*2*pi/12+a_min/12;

//计算末端坐标

endx=midx+100*sin(a_hour);

endy=midy-100*cos(a_hour);

setcolor(BLUE); //给时针添颜色

line(midx,midy,endx,endy);//利用line()函数画指针endx=midx+170*sin(a_min);

endy=midy-170*cos(a_min);

setcolor(RED);

line(midx,midy,endx,endy);

endx=midx+180*sin(a_sec);

endy=midy-180*cos(a_sec);

setcolor(WHITE);

line(midx,midy,endx,endy);

}

void Click() //定义控制指针转动的滴答声函数{

Beep (700,100);

Sleep(CLICKDELAY);

}

void Highclick() //定义整点报时的声音控制函数{

Beep(1000,200);

Sleep(CLICKDELAY);

}

void Naoling() //定义闹钟的声音控制函数{

Beep(2000,200);

}

单片机简易时钟课程设计

目录 1.概论 (1) 2.整体设计思路 (2) 2.1硬件各部分所能完成的功能 (3) 2.2系统工作原理 (4) 2.3时钟各功能分析及图解 (4) 2.4.1电路各功能图解分析 (4) 2.4.2电路功能使用说明 (7) 3. 软件设计思路 (8) 3.1 主程序模块 (8) 3.2 数码管动态扫描模块 (9) 3.3 当前时间计时模块 (9) 3.4 闹钟输入输出模块 (10) 3.5 当前时间调整模块 (12) 3.6复位模块 (13) 4.系统的调试和性能分析 (14) 4.1系统的调试方法 (14) 4.1.1输入按键的调试 (14) 4.1.2复位电路的调试 (14) 4.1.3显示电路的调试 (14) 4.1.4整个系统的联调 (14) 4.2心得体会 (15) 参考文献 (15) 附录 (16) 附录A 系统原理图 (16) 附录B 程序源代码 (17) 电气信息学院课程设计评分表 (28)

1.概论 单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便[4]。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。 电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。而且向着精确、低功耗、多功能发展。基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。另外,程序较为简洁,具有可靠性和较好的可读性。如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。 数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。这些方法都各有特点,其中,利用单片机实现的电子钟具有编程灵活,便于功能扩充,精确度高等特点。

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++6.0。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架

(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。 (5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。 图1-2 信息程序基本 3.编辑菜单资源 设计如图1-1所示的菜单项。在工作区的ResourceView标签中,单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据表1-1中的定义编辑菜单资源。此时VC已自动建好程序框架,如图1-2所示。 表1-1菜单资源表 菜单标题菜单项标题标示符ID 直线DDA算法生成直线ID_DDALINE Bresenham算法生成直线ID_BRESENHAMLINE 中点算法生成直线ID_MIDPOINTLINE 4.添加消息处理函数 利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView,根据表1-2建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。 表1-2菜单项的消息处理函数 菜单项ID消息消息处理函数ID_DDALINE CONMMAN OnDdaline

计算机图形学实验--橡皮筋技术(完整代码,准确无误)

计算机图形学上机实验报告 橡皮筋技术 计算机科学与技术学院 姓名: xxx 完成日期: 2010-12-7

实验:橡皮筋技术 一、实验目的与要求 实验目的:1.学会使用OpenGL,进一步掌握基本图形的绘制方法, 2.理解glut程序框架 3.理解窗口到视区的变换 4.理解OpenGL实现动画的原理 5.学会基于鼠标和键盘实现交互的实现方法 二、实验内容: 利用OpenGL实现折线和矩形的皮筋绘制技术,并采用右键菜单实现功能的选择 实现方法:1.橡皮筋技术的实现采用双缓存技术,绘制图形时分别绘制到两个缓存,交替显示。 2.右键菜单控制选择绘制折线还是绘制矩形,实现方法:通过菜单注册函数创建一个弹出式菜单,然后使用函数加入菜单项,最后使用函数讲菜单与鼠标右键关联起来,GLUT通过为菜单提供一个整数标识符实现对菜单的管理,在main主函数通过标识符用函数指定对应的菜单为当前的菜单。 2. 折线的橡皮筋绘制技术实现:鼠标所在位置确定一个点,移动鼠标时,每次移动时将点的信息保存在数组中,连接当前鼠标所在点和前一个点的直线段。 3.矩形的橡皮筋绘制技术:每个矩形由两个点唯一确定,鼠标当前点为第一个点,移动鼠标确定第二个点的位置,由这两点的坐标绘制出举行的四条边(直线段),矩形即绘制完毕。 三、实验结果

图鼠标右键菜单 图绘制矩形 四、体会 1> 经过这次实验,逐步对opengl软件有了一定的了解,而且对于理论知识有了很好的巩固,并非仅仅会C语言就能编写画图程序,gult程序有自己特殊的框架与实现过程.在这次试验中,虽然没有完全理解其原理,但在一定程度上已经为我们今后的学习应用打下了基础. 2>初步了解了如何在OpenGL实现基本的绘图功能,以及鼠标和键 盘灯交互设备的实现,还有如何由初始生成元绘制分形物体。在这个过 程中遇到了很多问题,程序的调试也是困难重重,通过自己看书思考和 老师、同学的帮助最终完成了程序的调试,在这一过程中加深了对理论 知识的理解,以及理清了理论到实践转换的一点点思路,再一次体会到 理论与实践的结合的重要性,今后要多多提高提高动手能力。

JAVA课程设计钟表(含代码)

Java程序课程设计 任务书 钟表的设计与开发 1、主要内容: 创建一个钟表。 借助swing类和接口内部类的实现,在本程序中以实现Runnable接口内部类的形式创建多线程对象。 Runnable接口只定义了一个run()方法,所以调用start和sleep()方法时,必须创建Thread实例化对象。Interrupt()方法的作用是中断线程。 其作用方式是:多线程对象.interrupt()。 2、具体要求(包括技术要求等): 系统的功能要求: 1.可以记录时间的钟表。 2.熟悉JAVA中swing的组件运用,基本工具的熟练掌握。 学习并掌握以下技术:Java等。 熟练使用以下开发工具:JCreator + JDK 1.6.0_02 等实现系统上述的功能。 3、进度安排: 12月28日~ 12月29日:课程设计选题,查找参考资料 12月29日~ 1月2日:完成程序代码的编写 1月2日~ 1月3日:系统测试与完善 1月4日~ 1月5日:完成课程设计报告,准备答辩 4、主要参考文献 [1]张帆.Java范例开发大全[M].北京:清华大学出版社,2010:0-831. [2]耿祥义,张跃平.Java大学实用教程[M].北京电子工业出版社,2008:213-216

摘要 随着经济全球化的发展,推动生活节奏的加快,也给时间赋予了更重要的意义。基于方便人们更好的掌握时间,我们小组设计出了这个小时钟。 本时钟是一个基于Java语言设计而成的一个小程序,目的是显示时间,并且能调准时钟。整个程序从符合操作简便、界面友好、灵活使用的要求出发,完成调用、调整的全过程。 本课程设计报告介绍了时钟的构成,论述了目标功能模块;给出了时钟设计的步骤,程序主要所用到的Swing组件以及graphics方法。 关键词:时钟,

电子时钟设计报告

电子时钟设计报告Last revision on 21 December 2020

电子时钟设计报告 1 设计任务与要求 设计任务 用STM32设计一个数字电子钟,采用LCD12864来显示并修改,时间或闹铃。 设计要求 1)显示功能:可显示时间等基本功能。 2)具有闹铃功能。 3)按键改变时间。 4)按键改变闹铃。 5)温度的显示。 2 方案设计与论证 整个系统用stm32单片机作为中央控制器,由单片机执行采集内部RTC 值,时钟信号通过单片机I/O口传给TFT彩屏,单片机模块控制驱动模块驱动显示模块,通过显示模块来实现信号的输出。系统设有按键模块用于对时间进行调整及扩展多个小键盘。

显示电路 方案一:TFT彩屏。显示质量高,没有电磁辐射,可视面积大,应用范围广,画面效果好,数字式接口,“身材”匀称小巧,功耗小。 方案二:数码管动态显示。动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O 口,降低了能耗。 从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案一,既TFT彩屏显示。 电源电路 本数字电子钟设计所需电源电压为直流、电压值大小5V的电压源直接用mini USB通过电脑USB接口供电。 按键电路 本数字电子钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。 单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求。

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

Java实现电子时钟

项目效果图: 源代码: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.image.BufferedImage; import java.awt.EventQueue; import java.util.Calendar; import java.util.GregorianCalendar; import javax.swing.JFrame; import javax.swing.JPanel; /* author: 蒋冰 */ public class MoveDraw extends JFrame{ private Draw draw = new Draw(); public static void main(String[] args){ EventQueue.invokeLater(new Runnable() { public void run() { try { MoveDraw frame = new MoveDraw(); frame.setVisible(true);

} catch (Exception e) { e.printStackTrace(); } } }); } public MoveDraw(){ super(); setTitle("动画"); setBounds(400,300,400,300); add(draw); Thread thread = new Thread(draw);// 创建线程对象 thread.start();// 启动线程对象 } class Draw extends JPanel implements Runnable{ Calendar calendar = new GregorianCalendar(); int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); int year = calendar.get(Calendar.YEAR); int mouth = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int week = calendar.get(Calendar.DAY_OF_WEEK); String date = year+"-"+mouth+"-"+day; String weeks[] = new String[]{"星期天","星期一","星期二","星期三","星期四","星期五","星期六"}; double theta = second * (2 * Math.PI)/60 ; double theta1 = (minute * (2 * Math.PI) + theta)/60; double theta2 = (hour*(2 * Math.PI) + theta1)/12; public void paint(Graphics g){ Graphics2D g2 = (Graphics2D) g; g2.clearRect(0, 0, 400, 300); g2.translate(draw.getWidth()/2, draw.getHeight()/2); g2.setColor(Color.blue); Font font = new Font("楷体",Font.ROMAN_BASELINE ,14); g2.setFont(font); g2.drawString(date, -25, 30); g2.drawString(weeks[week-1]+"", -15, 50); g2.setColor(Color.black); for(int i=1; i<=12; i++){ double theta = i*2*Math.PI/12;

#基于单片机AT89C51的电子时钟的课程设计

苏州市职业大学 课程设计任务书课程名称:单片机原理和使用课程设计 起讫时间:2011年6月22日----6月28日 院系:电子信息工程系 班级:09电子3班 指导教师:金小华 系主任:张红兵 一、课程设计课题 基于单片机的电子时钟的设计

1.掌握使用proteus软件的方法。 2.理解单片机的时钟显示方法。 3.明确设计指标,写出设计方案,设计出硬件原理图。 4.基于硬件的软件设计和调试。 5.将结果向指导教师演示,由教师提问验收通过; 6.打印程序清单,撰写程序说明,完成课程设计报告书,进行分组讨论 设计心得。

1.第一天:明确课程设计任务和目标,熟悉单片机系统调试软件仿真实 现。 2.第二天:明确设计指标,设计电路原理图。 3.第三、四天:基于硬件的软件设计和调试。 4.第五天:学生演示设计调试结果,教师提问验收。打印程序清单,撰 写程序说明,完成课程设计报告书。 四、课程设计说明书内容(有指导书的可省略) 1,单片机结构、原理。 2,电子时钟硬件设计(原理图,原理图分析)。 3,软件设计(软件简介,调试过程)。 4,硬件、软件程序清单。

苏州市职业大学课程设计说明书 名称基于单片机的电子时钟的设计 2011年6月22日至2011年6月28日共一周院系电子信息工程系 班级09电子3班 姓名于宁 学号097302340 系主任张红兵 教研室主任陆春妹 指导教师金小华

目录 第一章电子时钟 (1) 1.1电子时钟简介 (1) 1.2电子时钟的基本特点 (1) 1.3电子时钟的原理 (1) 第二章单片机识的相关知识 (2) 2.1单片机简介 (2) 2.2单片机的发展史 (2) 2.3单片机的特点 (3) 2.489C51单片机介绍 (3) 第三章控制系统的硬件设计 (6) 3.1单片机型号的选择 (6) 3.2数码管显示工作原理 (6) 3.3键盘电路设计 (7) 3.4系统工作原理 (7) 3.5整个电路原理图 (9) 第四章控制系统的软件设计 (10) 4.1程序设计 (10) 4.2程序流程图 (13) 4.3伟福硬件仿真器简介 (14) 4.4仿真图及结果分析 (15) 第五章附录程序 (17) 第六章结束语 (19) 参考文献 (20)

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

简易电子时钟的设计

单片机课程设计报告设计题目:简易电子时钟的设计 院别: 专业班级: 学号:

姓名: 指导教师: 摘要 通过一学期单片机的学习,对其已经有了初步的了解,但是随着社会的不断发展,单片机的应用正在不断地走向深入,它特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。我们也借此课程设计的机会,对单片机有更深一步的了解与学习。 本次课程课程设计的目的是设计一个简易的电子时钟,通过一个8位共阴极数码管进行时、分、秒的显示,另外设置7个按键,一个用来调整小时,一个用来调整分钟,一个开关控制是否调整时间。 关键词:AT89C51,数码管,按键,DS1303时钟芯片

1.概述 本设计是锻炼我们的自学能力合作能力,依靠团队的力量去完成一项具体的任务系统的训练了所学知识,设计的过程必将是难忘的,这也将是大学向社会工作过度的一个重要阶段。 本阶段过后要去能够熟练的运用单片机中的计数器、定时器、中断、数码管显示等参考教材或者相关资料,采用C语言实现数字时钟功能,在数码管上实时显示,并运用Protues软件绘制电路原理图,并进行仿真验证和误差分析。 2.系统总体方案设计 2.1系统方案的确定 用6位数码管,可以显示出时、分、秒;用P2端口控制位选,由定时器进行时间的控制(秒);当总按键按下时可以进行时间调整; 2.2方案分析 2.3系统总框图 图2.1

3.系统硬件系统设计 3.1复位电路 单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程跑飞的时候,按下复位按钮内部的程序自动从头开始执行。 复位电路的工作原理: 在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。单片机复位电路如下图 图3.1 3.2时钟电路 单片机运行需要时钟支持——就像计算机的CPU一样,如果没有时钟电路来产生时钟驱动单片机,那单片机就不能执行程序。 单片机可以看成是在时钟驱动下的时序逻辑电路。 以5l单片机为例随明:51单片机为l2个时钟周期执行一条指令。也就是说单片机运行一条指令,必须要用r2个时钟周期。没有这个时钟,单片机就跑不起来了,也没有办法定时和进行和时间有关的操作。 时钟电路是微型计算机的心脏,它控制着计算机的二个节奏。CPU就是通过复杂的时序电路完成不同的指令功能的。51的时钟信号可以由两种方式产生:一种是内部方式,利用芯片内部的振荡电路,产生时钟信号:另一种为外部方式,时钟信号由外部引入。

嵌入式电子闹钟()时钟课程设计

#include //头文件 #include #define uchar unsigned char //宏定义 #define uint unsigned int //位定义 sbit rs=P2^5; //液晶位定义 sbit lcden=P2^7; sbit s1=P2^0; //时间功能切换按键 sbit s2=P2^1; //按键加 sbit s3=P2^3; //按键减 sbit s4=P2^4; //闹钟功能切换键 sbit rst=P1^5; //ds1302引脚定义 sbit io=P1^6; sbit sclk=P1^7; sbit beep=P3^0; //蜂鸣器 uchar num,count,shi,fen,miao,s1num,s2num, year,month,day,week,flag,flag1,year1,month1, day1,week1,shi1,fen1,miao1,year2,month2, day2,week2,shi2,fen2,miao2,year5,month5, day5,week5,shi5,fen5,miao5,wk,ashi,afen; //参数定义 uchar code table[]="20 - - "; //液晶固定显示 uchar code table1[]=" : : 00:00"; /* uchar time_dat[7]={12,1,6,6,12,59,59}; //年周月日时分秒 uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; */ void write_com(uchar com); //液晶写指令函数 void write_data(uchar date); //液晶写数据函数 void write_ds1302(uchar add,uchar dat); //ds1302芯片写指令函数void set_rtc(); //ds1302时间设置函数void time_pros(); //ds1302进制转换函数void read_rtc(); //ds1302读时间函数void alarm(); //闹钟函数 void delay(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

计算机图形学实验C++代码

一、bresenham算法画直线 #include #include #include void draw_pixel(int ix,int iy) { glBegin(GL_POINTS); glVertex2i(ix,iy); glEnd(); } void Bresenham(int x1,int y1,int xEnd,int yEnd) { int dx=abs(xEnd-x1),dy=abs(yEnd-y1); int p=2*dy-dx; int twoDy=2*dy,twoDyMinusDx=2*dy-2*dx; int x,y; if (x1>xEnd) { x=xEnd;y=yEnd; xEnd=x1; } else { x=x1; y=y1; } draw_pixel(x,y); while(x

} void myinit() { glClearColor(0.8,1.0,1.0,1.0); glColor3f(0.0,0.0,1.0); glPointSize(1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,500.0,0.0,500.0); } void main(int argc,char **argv ) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(200.0,200.0); glutCreateWindow("CG_test_Bresenham_Line example"); glutDisplayFunc(display); myinit(); glutMainLoop(); } 二、中点法绘制椭圆 #include #include #include inline int round(const float a){return int (a+0.5);} void setPixel(GLint xCoord,GLint yCoord) { glBegin(GL_POINTS); glVertex2i(xCoord,yCoord); glEnd(); } void ellipseMidpoint(int xCenter,int yCenter,int Rx,int Ry) { int Rx2=Rx*Rx; int Ry2=Ry*Ry; int twoRx2=2*Rx2; int twoRy2=2*Ry2; int p; int x=0; int y=Ry; int px=0; int py=twoRx2*y; void ellipsePlotPoints(int,int,int,int);

利用JAVA实现一个时钟的小程序

JAVA课程项目报告 项目题目:利用JAVA实现一个小时钟的程序 专业班级:10软件工程 利用JAVA实现一个时钟的小程序 1.软件开发的需求分析 在当今的信息时代,时钟已经成为人们生活中必不可少

的应用工具,Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。使用Java 语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的、嵌入式设备进行应用程序的开发。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼我们熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。 此次课程设计的题目为简单的小时钟程序设计,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。 2.具体实现 2.1设计思路 Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。Java去掉了C++语言的许多功能,让Java的语言功能很精炼,并增加了一些很有用的功能,如

自动收集碎片。这将减少平常出错的50%。而且,Java很小,整个解释器只需215K的RAM。 因此运用JAVA程序编写小时钟程序,实现简单显示时间的功能。本次课程设计做的是Java简单小时钟,它是图形界面、线程、流与文件等技术的综合应用,其界面主要采用了java.awt包,javax.swing包等。程序实现了小时钟的基本功能。 2.2设计方法 在设计简单小时钟时,需要编写5个Java源文件:Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。 小时钟除了需要编写的上述5个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。 2.3 运行环境 CPU:Pentium 2.8GHz以上 内存:256MB以上 硬盘空间:80G以上 操作系统:Windows XP 运行环境:JDK,JCreator 2.4 程序功能图及程序相关说明 2.4.1 主功能框

基于嵌入式系统的LCD电子时钟设计

目录 前言 (1) 第一章课题目标及总体方案 (2) 第二章系统设计 (3) 1、系统结构原理 (3) 2、硬件组成与设计 (4) 3、软件组成与设计 (4) 第三章实验结果 (5) 心得体会 (5) 参考文献 (5) 附录 (6)

前言 嵌入式系统反映了当代最新的技术水平。嵌入式系统不仅和一般的PC机上的应用系统不同,就是针对不同的具体应用而设计的嵌入式系统之间差别也很大。嵌入式系统一般功能单一,简单而且兼容性方面要求不高,但是在大小和成本方面限制较多。在本实验中以arm7处理器S3C44B0X和液晶显示屏LRH9J515XA STN/BW为基础,设计实现了带农历的实时时钟电路。当有外部中断产生时,串口与S3C44B0X进行通信,实现更改时钟时间,且应用公历转农历的算法,实现将农历时间实时显示在LCD上。另外还具有闹铃、星期提示功能,基本上能够满足人们的需求。 关键字:arm7 S3C44B0X LCD 农历串口

第一章课题目标及总体方案 一、目的 ●了解实时时钟的硬件控制原理及设计方法。 ●掌握S3C44B0X处理器的RTC模块程序设计方法。 ●初步掌握液晶显示屏的使用及其电路设计方法。 ●掌握S3C44B0X处理器的LCD控制器的使用。 ●通过实验掌握液晶显示文本和图形的方法以及程序设计的方法。 二、设备 1. 硬件:Embest EDUKIT —Ⅱ/Ⅲ实验平台,Embest ARM标准/增强型仿真器套件,PC机。 2. 软件:Embest IDE Pro 2004集成开发环境,Windows 98/2000/NT/XP操作系统。 三、内容 通过运用S3C44B0X的RTC模块、串口模块和LCD模块,编写应用程序,在LCD上实时显示当前时间及农历时间。 四、研究方法 1. 将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务。 2. 连接PC和Embest EDUKIT —Ⅱ/Ⅲ实验箱,进行整个实验环境搭建。

《计算机图形学实验报告》

一、实验目的 1、掌握中点Bresenham直线扫描转换算法的思想。 2掌握边标志算法或有效边表算法进行多边形填充的基本设计思想。 3掌握透视投影变换的数学原理和三维坐标系中几何图形到二维图形的观察流程。 4掌握三维形体在计算机中的构造及表示方法 二、实验环境 Windows系统, VC6.0。 三、实验步骤 1、给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、使用中点Bresenham直线扫描转换算法实现自己的画线函数,函数原型可表示如下: void DrawLine(CDC *pDC, int p0x, int p0y, int p1x, int p1y); 在函数中,可通过调用CDC成员函数SetPixel来画出扫描转换过程中的每个点。 COLORREF SetPixel(int x, int y, COLORREF crColor ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用DrawLine 函数画出不同斜率情况的直线,如下图:

最后、调试程序直至正确画出直线。 2、给定多边形的顶点的坐标P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4)…使用边标志算法或有效边表算法进行多边形填充。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、实现边标志算法或有效边表算法函数,如下: void FillPolygon(CDC *pDC, int px[], int py[], int ptnumb); px:该数组用来表示每个顶点的x坐标 py :该数组用来表示每个顶点的y坐标 ptnumb:表示顶点个数 注意实现函数FillPolygon可以直接通过窗口的DC(设备描述符)来进行多边形填充,不需要使用帧缓冲存储。(边标志算法)首先用画线函数勾画出多边形,再针对每条扫描线,从左至右依次判断当前像素的颜色是否勾画的边界色,是就开始填充后面的像素直至再碰到边界像素。注意对顶点要做特殊处理。 通过调用GDI画点函数SetPixel来画出填充过程中的每个点。需要画线可以使用CDC的画线函数MoveTo和LineTo进行绘制,也可以使用实验一实现的画直线函数。 CPoint MoveTo(int x, int y ); BOOL LineTo(int x, int y ); 实现边标志算法算法需要获取某个点的当前颜色值,可以使用CDC的成员函数 COLORREF GetPixel(int x, int y ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用FillPolygon 函数画出填充的多边形,如下: void CTestView::OnDraw(CDC* pDC) { CTestcoodtransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

计算机图形学 实验一:生成彩色立方体(含源代码)

实验一 实验目的:生成彩色立方体 实验代码://ColorCube1.java import java.applet.Applet; //可以插入html import java.awt.BorderLayout; //窗口采用BorderLayout方式布局import com.sun.j3d.utils.applet.MainFrame; //application import com.sun.j3d.utils.geometry.ColorCube;//调用生成ColorCube的Utility import com.sun.j3d.utils.geometry.Primitive; import com.sun.j3d.utils.universe.*; //观测位置的设置 import javax.media.j3d.*; //核心类 import javax.vecmath.*; //矢量计算 import com.sun.j3d.utils.behaviors.mouse.*; public class ColorCube1 extends Applet { public BranchGroup createSceneGraph() { BranchGroup objRoot=new BranchGroup(); //BranchGroup的一个对象objRoot(放置背景、灯光)BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);//有效范围 TransformGroup objTrans=new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objRoot.addChild(objTrans); MouseRotate behavior = new MouseRotate(); behavior.setTransformGroup(objTrans); objRoot.addChild(behavior); behavior.setSchedulingBounds(bounds); MouseZoom behavior2 = new MouseZoom(); behavior2.setTransformGroup(objTrans); objRoot.addChild(behavior2); behavior2.setSchedulingBounds(bounds); MouseTranslate behavior3 = new MouseTranslate(); behavior3.setTransformGroup(objTrans); objRoot.addChild(behavior3); behavior3.setSchedulingBounds(bounds);

相关文档
相关文档 最新文档