点击上方蓝字关注“公众号”
基于MATLAB编写的一个电子万年历
本程序主要是一个时钟软件,包括一个时钟表和一个日历。程序自动运行时,显示系统当前日期和时间,日期和时间可以由用户自行更改。
本程序由一个主程序myclcok及两个子函数rili和ck。主程序myclcok主要建立主窗口的菜单及相关的功能编辑。rili函数用于建立日历界面,ck函数用于建立时钟界面。
本程序在一开始运行时便显示系统当前日期和时间,用户可以根据需要做更改日期和时间。更改日期和时间步骤一样。下面以更改日期为例简单做下介绍,点击“更改日期”,弹出对话框(如下图),并输入年月日,点“OK”。
壹
01
仿真程序
主程序:
function myclock
global aa ti hs hm hh;
aa=1;
hs=0;hm=0;hh=0;
hfig=figure('NumberTitle','off','position',[624 118 600 350],...
'name','时钟','MenuBar','none','color',[0.8 0.7 0.8]);
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);');
ab=['global aa ti hs hm hh;',...
'aa=0;',...
'ti=clock;'...
' p2={''时'',''分 '',''秒''};',...
'B=inputdlg(p2,''日期:'',1);',...
' ti(4)=str2num(B{1});',...
' ti(5)=str2num(B{2});',...
' ti(6)=str2num(B{3});',...
'delete(hs);delete(hm);delete(hh);'...
'aa=1;'...
'ck(ti);'
];
u3=uimenu(hfig,'label','&更改时间','Callback',ab);
ab1=['global aa ti hs hm hh;',...
'aa=0;',...
'delete(hs);delete(hm);delete(hh);'...
'ti=clock;'...
'aa=1;'...
'ck(ti);'
];
u4=uimenu(hfig,'label','&恢复当前时间','call',ab1);
u5=uimenu(hfig,'label','&退出','Call','close(gcf)');
u6=uicontrol(hfig,'style','text','string','制作By电力MATLAB',...
'Units','normalized', 'position',[0.85 0.01 0.15 0.05],...
'back',[0.8 0.7 0.8])
ti=clock;rili(ti);ck(ti);
贰
01
子函数
子函数——时钟:
function f=ck(ti)
global aa hs hm hh
set(gca,'position',[[0 0 0.5 0.9]])
A=linspace(0,6.3,1000);
x1=8*cos(A);
y1=8*sin(A);
x2=7*cos(A);
y2=7*sin(A);
plot(x1,y1,'b','linewidth',1.4)
hold on
plot(x2,y2,'b','linewidth',3.5)
fill(0.4*cos(A),0.4*sin(A),'r');
axis off
axis([-10 10 -10 10])
axis equal
for k=1:12;
xk=9*cos(-2*pi/12*k+pi/2);
yk=9*sin(-2*pi/12*k+pi/2);
plot([xk/9*8 xk/9*7],[yk/9*8 yk/9*7],'color',[0.8 0.1 0.5])
h=text(xk-0.5,yk,num2str(k),'fontsize',13,'color',[0.9 0.3 0.8]);
end
% 计算时针位置
th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2;
xh3=4.0*cos(th);
yh3=4.0*sin(th);
xh2=xh3/2+0.5*cos(th-pi/2);
yh2=yh3/2+0.5*sin(th-pi/2);
xh4=xh3/2-0.5*cos(th-pi/2);
yh4=yh3/2-0.5*sin(th-pi/2);
hh=fill([0 xh2 xh3 xh4 0],[0 yh2 yh3 yh4 0],[0.6 0.5 0.3]);
set(hh,'EraseMode','Xor');
% 计算分针位置
tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;
xm3=6.0*cos(tm);
ym3=6.0*sin(tm);
xm2=xm3/2+0.5*cos(tm-pi/2);
ym2=ym3/2+0.5*sin(tm-pi/2);
xm4=xm3/2-0.5*cos(tm-pi/2);
ym4=ym3/2-0.5*sin(tm-pi/2);
hm=fill([0 xm2 xm3 xm4 0],[0 ym2 ym3 ym4 0],[0.6 0.5 0.3]);
set(hm,'EraseMode','Xor');
% 计算秒针位置
ts=-(ti(6))/60*2*pi+pi/2;
hs=line([0 7*cos(ts)],[0 7*sin(ts)],'color',...
[0.6 0.5 0.3],'linewidth',3);
set(hs,'EraseMode','Xor');
set(gcf,'doublebuffer','on');
while 1
if aa==0
aaa=1
break
end
02
% 计算时针位置
th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2;
xh3=4.0*cos(th);
yh3=4.0*sin(th);
xh2=xh3/2+0.5*cos(th-pi/2);
yh2=yh3/2+0.5*sin(th-pi/2);
xh4=xh3/2-0.5*cos(th-pi/2);
yh4=yh3/2-0.5*sin(th-pi/2);
set(hh,'XData',[0 xh2 xh3 xh4 0],'YData',[0 yh2 yh3 yh4 0])
plot(0,0,'*')
% 计算分针位置
tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;
xm3=6.0*cos(tm);
ym3=6.0*sin(tm);
xm2=xm3/2+0.5*cos(tm-pi/2);
ym2=ym3/2+0.5*sin(tm-pi/2);
xm4=xm3/2-0.5*cos(tm-pi/2);
ym4=ym3/2-0.5*sin(tm-pi/2);
set(hm,'XData',[0 xm2 xm3 xm4 0],'YData',[0 ym2 ym3 ym4 0])
% 计算秒针位置
ts=-(ti(6))/60*2*pi+pi/2;
set(hs,'XData',[0 7*cos(ts)],'YData',[0 7*sin(ts)])
drawnow;
pause(0.05) ;
%时间更新
ti(6)=ti(6)+0.15;
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 ti(4)>12
ti(4)=0;
end
end
03
子函数——日历:
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',[0.6 0.8 0.1]);
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.08],'fontsize',13,...
'fontweight','bold','back',[0.6 0.8 0.1]);
end
if a(i,j)==ti(3)
set(h(i*7+j),'back',[0.5 0.2 0.5]);
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',[0.9 0.8 0.8],'fontsize',13, 'fontweight','bold');
end
uicontrol(gcf,'Style','text','string','年', 'Units','normalized', 'position',...
[0.61 0.78 0.04 0.08],'back',[0.9 0.8 0.8],'fontsize',13, 'fontweight','bold');
uicontrol(gcf,'Style','text','string','月', 'Units','normalized', 'position',...
[0.73 0.78 0.05 0.08],'back',[0.9 0.8 0.8],'fontsize',13, 'fontweight','bold');
uicontrol(gcf,'Style','text','string','日', 'Units','normalized', 'position',...
[0.86 0.78 0.04 0.08],'back',[0.9 0.8 0.8],'fontsize',13, 'fontweight','bold');
end
04
仿真结果图
具体仿真程序链接,微信公众号回复【小工具】即可获得链接。
未完待续扫码关注
不迷路