时钟万年历
电气工程及其自动化12级3班
制作人:杨福1238170349
党国椿1238170339
一、程序介绍
本程序是一个时钟日历软件。程序自动运行时,调用系统当前日期和时间显示,日期可以更改达到万年历效果而且可以恢复当前日历。
二、程序界面
三、程序源代码
function wannianli
global aa ti hs hm hh;
aa=1;
hs=0;hm=0;hh=0;
hfig=figure('NumberTitle','off','MenuBar','none','position',[330 180 600 350],'name','时钟万年历','color','c');%建立窗口,设置窗口位置,去掉标题栏,建立自己的标题栏
editdate=['s=clock;',' p1={''年'',''月 '',''日''};','A=inputdlg(p1,''日期:'',1);', ' s(1)=str2num(A{1});',' s(2)=str2num(A{2});',' s(3)=str2num(A{3});', 'rili(s);' ] ;
u1=uimenu(hfig,'label','更改日期','call',editdate);
u2=uimenu(hfig,'label','当前时间','call','ti=clock;rili(ti);');
u3=uimenu(hfig,'label','退出','Call','close(gcf)');
u4=uicontrol(hfig,'style','text','string','杨福 1238170349 党国椿1238170339','fontsize',10, 'Units','normalized', 'position',[0 0 0.2 0.1], 'back','w')%制作人信息
ti=clock;rili(ti);ck(ti);%定义时钟函数 调用子程序运行完后提示有错
function f=rili(ti)%万年历程序
global h3
a=calendar(ti(1),ti(2));
for i=1:6%日历框
for j=1:7
if a(i,j)==0
h(i*7+j)=uicontrol(gcf,'Style','text','Units','normalized','position',[0.45+0.06*j 0.65-0.08*i 0.06 0.08],'fontsize',13, 'fontweight','bold','back','y');%日历框定义位置颜
else
h(i*7+j)=uicontrol(gcf,'Style','text','string',a(i,j),'Units','normalized', 'position',[0.45+0.06*j 0.65-0.08*i 0.06 0.085],'fontsize',13,'fontweight','bold','back','y');%日历日期位置排序
end
end
end
h2=uicontrol(gcf,'Style','text','string','日 一 二 三 四 五 六',...%万年历的星期几的位置,标题不能随窗口变化移动位置解决不
'Units','normalized', 'position',[0.51 0.65 0.42 0.1],'fontsize',16, 'fontweight','bold','back',[0.2 0.8 0.2]);
for m=1:3
h3(m)=uicontrol(gcf,'Style','text','string',num2str(ti(m)), 'Units','normalized', 'position',[0.39+0.13*m 0.78 0.09 0.08],'back','m','fontsize',13, 'fontweight','bold');%显示数字日期
end
uicontrol(gcf,'Style','text','string','年', 'Units','normalized', 'position',[0.61 0.78 0.04 0.08],'back','m','fontsize',13, 'fontweight','bold');
uicontrol(gcf,'Style','text','string','月', 'Units','normalized', 'position',[0.73 0.78 0.05 0.08],'ba
fontweight属性boldck','m','fontsize',13, 'fontweight','bold');
uicontrol(gcf,'Style','text','string','日', 'Units','normalized', 'position',[0.86 0.78 0.04 0.08],'back','m','fontsize',13, 'fontweight','bold'); %年月日显示的位置
function f=ck(ti)%时钟程序
global aa hs hm hh
set(gca,'position',[[0 0 0.5 1.0]]) %时钟的位置
A=linspace(0,2*pi,1000); %画时针的外圈
x1=7*cos(A);
y1=7*sin(A);
plot(x1,y1,'b','linewidth',1.5)
hold on
fill(0.3*cos(A),0.3*sin(A),'r'); %画钟表的内圈
axis off
axis([-10 10 -10 10]) %画钟表,去掉坐标轴显示样式
axis equal
for k=1:12;
xk=6*cos(-2*pi/12*k+pi/2);
yk=6*sin(-2*pi/12*k+pi/2);
h=text(xk-0.5,yk,num2str(k),'fontsize',13,'color','k'); %外圈的数字字体,颜,大小
end
th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2; %时针位置颜线粗
hh=line([0 4*cos(th)],[0 4*sin(th)],'color', 'r','linewidth',5);
set(hh,'EraseMode','Xor');
tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2; % 分针位置颜线粗
hm=line([0 5*cos(tm)],[0 5*sin(tm)],'color', 'r','linewidth',3);
set(hm,'EraseMode','Xor');
ts=-(ti(6))/60*2*pi+pi/2; % 秒针位置颜线粗
hs=line([0 6.5*cos(ts)],[0 6.5*sin(ts)],'color', 'r','linewidth',2);
set(hs,'EraseMode','Xor');
set(gcf,'doublebuffer','on');
while 1
if aa==0
break
end
th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2; %时针长度形状设置
set(hh,'XData',[0 4*cos(th)],'YData',[0 4*sin(th)])%赋值给横纵坐标 动态 这里有毛错啊检查几天了
tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2; % 分针长度形状设置
set(hm,'XData',[0 5*cos(tm)],'YData',[0 5*sin(tm)]) %赋值给横纵坐标 动态
ts=-(ti(6))/60*2*pi+pi/2; % 秒针长度形状设置
set(hs,'XData',[0 6.5*cos(ts)],'YData',[0 6.5*sin(ts)]) %赋值给横纵坐标 动态
drawnow;pause(1) ; %时间更新的周期
ti(6)=ti(6)+1;
if ti(6)>60 %秒针进位
ti(6)=0;ti(5)=ti(5)+1;
end
if ti(5)>60 %分针进位
ti(5)=0;ti(4)=ti(4)+1;
end
if 24>ti(4)>12 %时针清零
ti(4)=0;
end
end
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论