整点声音报时时钟.docx
《整点声音报时时钟.docx》由会员分享,可在线阅读,更多相关《整点声音报时时钟.docx(14页珍藏版)》请在冰豆网上搜索。
整点声音报时时钟
C语言实习报告
整点声音报时时钟
电科1001班任新龙120
2011-07-08
目录
●实习人信息……………………………………………….2
●C语言实习简介………………………………………….2
●实习课题………………………………………………….2
●参考资料………………………………………………….3
●参考时钟运行效果图…………………………………….7
●我设计的时钟….…………………………………………7
●我设计的时钟运行效果图………………………………10
●实习心得................………………………….…………...10
实习人信息
西安科技大学
学院:
通信与信息工程学院
专业班:
电子科学与技术1001班
姓名:
任新龙
学号:
1007060120
手机号码:
187********
邮箱:
465039505@
C语言实习简介
实习时间:
2011-07-04至2011-07-08
实习地点:
实验楼4楼A机房
实习工具:
TC
实习课题
《整点声音报时时钟》
用C语言设计一个整点声音报时时钟,在TC环境下运行,要求满足以下条件:
1.具有指针式表盘界面(方形或圆形);
2.具有时针+分针+秒针并正确旋转;
3.时钟时间须与系统时间相一致,秒针具有滴答声音效果.并实现整点报时.
参考资料
时钟参考代码:
#include
#include
#include
#definepi3.1415926
#defineX(a,b,c)x=a*cos(b*c*pi/180-pi/2)+300;
#defineY(a,b,c)y=a*sin(b*c*pi/180-pi/2)+240;
#defined(a,b,c)X(a,b,c);Y(a,b,c);line(300,240,x,y)
intx1,y1,x2,y2;
voidinit()
{inti,l,x1,x2,y1,y2;
chars[10];
floatf;
setbkcolor(0);
setcolor
(2);
circle(300,240,180);
circle(300,240,200);
circle(300,240,5);
for(i=12;i>=1;i--)
{f=(30*(i-12)*pi/180);
x1=300+sin(f)*(180-6)-16;
y1=240-cos(f)*(180-6);
sprintf(s,"%2d",i);
setcolor(13);
settextstyle(0,0,2);
outtextxy(x1,y1,s);
}
for(i=0;i<60;i++)
{
if(i%5==0)
{setcolor(5);
setlinestyle(0,0,3);
l=15;}
else
{setcolor(14);
l=5;}
x1=160*cos(i*6*pi/180)+300;
y1=160*sin(i*6*pi/180)+240;
x2=(160-l)*cos(i*6*pi/180)+300;
y2=(160-l)*sin(i*6*pi/180)+240;
line(x1,y1,x2,y2);
}
}
main()
{
intx,y;
intgd=VGA,gm=2;
unsignedcharh,m,s;
structtimet[1];
initgraph(&gd,&gm,"d:
\\tc");
init();
setwritemode
(1);
gotoxy(30,20);
printf("madebyliyunzhan");
gettime(t);
/*h=t[0].ti_hour;*/
if(t[0].ti_hour>12)
t[0].ti_hour=t[0].ti_hour-12;
if(t[0].ti_hour<4)
h=abs(t[0].ti_hour-3);
m=t[0].ti_min;
s=t[0].ti_sec;
setcolor(7);
d(80,h,30);
setcolor(14);
d(110,m,6);
setcolor(4);
d(150,s,6);
while(!
kbhit())
{while(t[0].ti_sec==s)
gettime(t);
sound(400);
delay(70);
sound(200);
delay(30);
nosound();
setcolor(4);
d(150,s,6);
s=t[0].ti_sec;
d(150,s,6);
if(t[0].ti_min!
=m)
{
setcolor(14);
d(110,m,6);
m=t[0].ti_min;
d(110,m,6);
}
if(t[0].ti_hour!
=h)
{setcolor(7);
d(80,h,30);
h=t[0].ti_hour;
d(80,h,30);
sound(1000);
delay(240);
nosound();
delay(140);
sound(2000);
delay(240);
nosound();
}
}
getch();
closegraph();
}
时钟音乐参考代码:
#include
#include
#defineS145
#defineS2S1/2
#defineS4S1/4
#defineS8S1/8
#defineS16S1/16
enumFREQDEF
{
L1=131,L2=147,L3=165,L4=175,L5=196,L6=220,L7=247,
N1=262,N2=296,N3=330,N4=349,N5=392,N6=440,N7=494,
H1=523,H2=587,H3=659,H4=698,H5=784,H6=880,H7=988,
I1=1047,I2=1175,I3=1319,I4=1397,I5=1568,I6=1760,I7=1976
}song[]=
{
N2,S4,N2,S8,N3,S16,N2,S16,N1,S4,L6,S4,L5,S8,L3,S8,L5,S8,L6,S8,N1,S2,L6,S4,
L6,S8,N1,S8,N5,S8,N6,S8,N3,S8,N5,S8,N2,S1,N3,S4,N3,S8,N2,S8,N3,S8,N5,S4,N3,S4,
L5,S8,L3,S8,L5,S8,L6,S8,N1,S2,L6,S4,L6,S8,N1,S8,L6,S8,L6,S8,L2,S8,L3,S8,L5,S1,N2,S4,
N2,S4,N5,S4,N6,S8,N5,S8,N4,S2,N5,S2,N6,S4,N5,S8,N3,S8,N2,S8,N3,S16,N2,S16,N1,S8,L6,S16,
N1,S16,N2,S1,N3,S4,N2,S8,N3,S8,N5,S4,N3,S4,L5,S8,L3,S8,L5,S8,L6,S8,N1,S2,L6,S4,
L6,S8,N1,S8,N2,S8,L6,S8,N1,S8,N3,S8,N2,S1,0
};
voidmain()
{
intnote=0,fre,dur,control;
clock_tgoal;
while(song[note]!
=0)
{
fre=song[note];
dur=song[note+1];
if(kbhit())break;
if(fre)
{
outportb(0x43,0xb6);
fre=(unsigned)(1193180L/fre);
outportb(0x42,(char)fre);
outportb(0x42,(char)(fre>>8));
control=inportb(0x61);
outportb(0x61,(control)|0x3);
}
goal=(clock_t)dur+clock();
while(goal>clock());
if(fre)
outportb(0x61,control);
goal=(clock_t)0;
note=note+2;
}
}
参考时钟运行效果图
我设计的时钟
我设计的时钟代码:
#include
#include
#include
#definepi3.1415926
intox,oy,locx,locy,i;
floatangle;
charstr[20];
voidinitial()/*初始化,绘制表盘*/
{
intgdriver=VGA,gmode=2;
initgraph(&gdriver,&gmode,"");
ox=getmaxx()/2;oy=getmaxy()/2;
/*setbkcolor();
setcolor();*/
for(i=0;i<8;i++)/*绘制外表盘*/
circle(ox,oy,200-i);
setcolor(3);
setfillstyle(SOLID_FILL,3);
/*circle(ox,oy,10);
floodfill(ox,oy,3);*/
for(i=0;i<60;i++)
{
angle=i*pi/30-pi/2;
locx=ox+150*cos(angle);locy=oy+150*sin(angle);
if(i%5==0)
{
settextstyle(0,0,2);
sprintf(str,"%-2d",i/5);
if(i==0)
outtextxy(ox+180*cos(angle)-13,oy+180*sin(angle)-4,"12");
elseif(i/5<=9&i/5>0)
outtextxy(ox+180*cos(angle)-4,oy+180*sin(angle)-4,str);
else
outtextxy(ox+180*cos(angle)-8,oy+180*sin(angle)-4,str);
circle(locx,locy,5);
}
else
circle(locx,locy,1);
floodfill(locx,locy,3);
}
setwritemode
(1);
gotoxy(30,30);
printf("DesignedbyRenXinlong");
setwritemode(0);
}
main()
{
inthour,min,sec=60;
structtimet;
initial();
gettime(&t);
while(!
kbhit())
{
gettime(&t);
if(sec!
=t.ti_sec)
{
setcolor(BLACK);
angle=hour*pi/6+min*pi/360-pi/2;
line(ox,oy,ox+90*cos(angle),oy+90*sin(angle));
/*setlinestyle(SOLID_LINE,0,1);*/
angle=min*pi/30-pi/2;
line(ox,oy,ox+110*cos(angle),oy+110*sin(angle));
angle=sec*pi/30-pi/2;
line(ox,oy,ox+130*cos(angle),oy+130*sin(angle));
setcolor(WHITE);
hour=t.ti_hour;min=t.ti_min;sec=t.ti_sec;
/*setlinestyle(SOLID_LINE,0,3);*/
angle=hour*pi/6+min*pi/360-pi/2;
line(ox,oy,ox+90*cos(angle),oy+90*sin(angle));
/*setlinestyle(SOLID_LINE,0,1);*/
angle=min*pi/30-pi/2;
line(ox,oy,ox+110*cos(angle),oy+110*sin(angle));
angle=sec*pi/30-pi/2;
line(ox,oy,ox+130*cos(angle),oy+130*sin(angle));
if(min==0&&sec==0)
{
sound(10000);delay(5000);nosound();
}
else
{
sound(10000);delay(20);nosound();
}
}
}
getch();
closegraph();
return0;
}
我设计的时钟运行效果图
实习心得
在2011-07-04至2011-07-08这段时间里,我们在专业老师的带领下进行了c语言程序实践学习。
老师给我们推荐了5道实习题目,让我们从中选出一道完成即可。
老师还给我们提供了大量的资料供我们参考,以减少实习难度。
我选择了《整点声音报时时钟》:
用C语言设计一个整点声音报时时钟,在TC环境下运行,要求满足以下条件:
1.具有指针式表盘界面(方形或圆形);
2.具有时针+分针+秒针并正确旋转;
3.时钟时间须与系统时间相一致,秒针具有”滴答”声音效果.并实现整点报时。
对只刚刚学了一个学期的C语言的我来说,这要算是一个大的程序了!
起初,我什么都看不懂,就连老师给的参考资料都看不懂。
后来,经过我上网搜集资料、向好友寻求帮助、请教华为公司的一位研发工程师,我开始摸索着去学习这些新的东西。
在这短短的5天实习期间,我在图书馆和网上查阅了大量的资料。
我感觉我的我的自学能力和相关知识在飞速增长。
通过这些请教和自学,我终于完成了老师布置的课题!
实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。
首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这几天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点。
其次,在编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺。
再次,通过几天的实习使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便;改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成;我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。
总之,通过实习使我自身的知识体系和学习能力都得到了巩固和提高。