str2num函数matlab_基于MATLAB编写的一个电子万年历

点击上方蓝字关注“公众号”

41c9f9bfc250ecbd46e95d52993e24ab.png

基于MATLAB编写的一个电子万年历

本程序主要是一个时钟软件,包括一个时钟表和一个日历。程序自动运行时,显示系统当前日期和时间,日期和时间可以由用户自行更改。

本程序由一个主程序myclcok及两个子函数rili和ck。主程序myclcok主要建立主窗口的菜单及相关的功能编辑。rili函数用于建立日历界面,ck函数用于建立时钟界面。

041570afe8576449ae70e5dcbf359757.png

  本程序在一开始运行时便显示系统当前日期和时间,用户可以根据需要做更改日期和时间。更改日期和时间步骤一样。下面以更改日期为例简单做下介绍,点击“更改日期”,弹出对话框(如下图),并输入年月日,点“OK”。

d1c20f6bef646b330595095bef348d1c.png

525c08ae6b6f657fcafb602e9dd6a14e.png 7bd8e8b5e880abb03994f0dc3f1ce459.png 3e529c821f4ccabcf50ef3fbf0261f55.png

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);

cf7078d303ec605bb5e4f27b34c5d5ae.png

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

仿真结果图

957ffb20910e92496a24d70ea1e0a915.png

d5cf232c9e14905c71239aca2a38c33c.png

具体仿真程序链接,微信公众号回复【小工具】即可获得链接。

未完待续

扫码关注

不迷路

640?wx_fmt=gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值