飞码网-免费源码博客分享网站

点击这里给我发消息

用matlab设计一个模拟时钟

飞码网-免费源码博客分享网站 本篇文章由飞码网制作上传,转载请标注来源: 飞码网-免费源码社区:https://www.codefrees.com 严禁非法转载! 本篇文章由飞码网制作上传,转载请标注来源: 飞码网-免费源码社区:https://www.codefrees.com 严禁非法转载! 飞码网-免费源码博客分享网站
        模拟钟的指针是会动的时钟,其中较小的指针是时针,一小时走30°,较长的指针是分针,一小时走360°。秒针的旋转步幅为6°。下面我们来看用MATLAB设计一个模拟钟。
         如果你有一块模拟表,它是用绕着表盘扫动的指针来报时的:指针的位置就是时间的测量。指针移动的多少,直接关系到现在是什么时间。因此,如果时针扫过表盘的两段,与只移动一段相比,它显示的时间是过去的两倍。重点是,时针在表盘上的移动是代表时间流逝的一种方式。它与时间本身不是一回事:它是时间的一种表示或类比。
         数字技术有优势,并不意味着它永远比模拟技术好。如果一块模拟表使用高精度的机芯(齿轮和弹簧)来测量时间的流逝,那么它可能会比数字表精确得多。如果它有一个扫数的秒针,它比显示只显示小时和分钟的数字手表更精确地表示时间。令人惊讶的是,模拟表也能比石英表更好地掌握时间。
      一般来说,世界上最昂贵的手表都是模拟表(当然,部分原因是人们更喜欢它们的外观),尽管世界上最精确的原子钟用数字显示来显示时间。

模拟表

图-1: 模拟时钟

fig_1_analog_clock

         该代码采用MATLAB R2019a版本开发。MATLAB有一个很好的图形命令集合,用于绘制和分析复杂信号。内置的函数可以减少程序的大小,并提供所需的输出。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Author: Abhishek Agrawal
% Topic : Designing Analog Clock using MATLAB
% Company: MATLAB Helper
% Website: https://MATLABHelper.com
% Date : 12-05-2020
% With the help of this script we will design an analog clock
% NOTE: CLOCK STARTS AND IS MAINTAINED ACCORDING TO TIME INDICATED BY THE INBUILT COMMAND "clock"
% IMPORTANT NOTE: USE CTRL+C IN COMMAND LINE or FIGURE WINDOW TO END THE PROGRAM or Stop the clock
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Clearing the command window and workspace and close all other tabs
clc
close
clear
warning off
%% To create a display of the clock (outer circle)
format shortg
% Creating a circle of radius 10 with centre (0,0)
x=0;y=0;r=10;
hold on;
% angle assigning theta = 0:2*pi i.e. creating a vector theta from 0 to 2*pi
theta = 0:pi/60:2*pi;
% visualization creating and plotting a circle or display for the clock
xc = r * cos(theta);
yc = r * sin(theta);
h = plot(xc,yc,'r','linewidth',4);
axis off
%% To create an analog display for the clock
r=9; i=1;
set(gca,'FontWeight','bold');
% plotting the no. 1 to 12 in the clock every 30 degree apart
for theta = pi/6: pi/6: 2*pi
    y1 = r * cos(theta);
    x1 = r * sin(theta);
    % plotting the lines for 1 to 12
    plot([x1/9*8 x1/9*7],[y1/9*8 y1/9*7],'color',[0 0 1])
    %num2str converts no. to string to write numbers 1 to 12 in the plot
    text(x1/9*9.5,y1/9*9.5,num2str(i),'color',[0 0 1]);
    i=i+1;
end
for theta=pi/30 : pi/30 : 2*pi
    y1 = 10 * cos(theta);
    x1 = 10 * sin(theta);
    % plotting the lines for 1 to 12
    plot([x1/9*8 x1/9*7],[y1/9*8 y1/9*7],'color',[0 0 0])
end
%% Getting the time from the system
while(1)
    tic
    % clock returns the 6 element vector containing date and time
    c = clock;
    % 4:6 for hour, min,sec
    c = c(1,4:6);
    minute =c(1,2); sec=c(1,3);
    % 24hrs time format, if hr >12 so hr-12
    if (c(1,1)>12)
        hr = c(1,1)-12;
    else
        hr = c(1,1);
    end
    min1 = ceil(minute/12);
    % Angle of the hour hand
    theta = (hr*pi)/6 + (min1*pi)/30;
    f=figure(1); hold on;
    % Ploting the hour hand
    y1 = 3 * cos(theta); Yhr = [0 y1];
    x1 = 3 * sin(theta); Xhr = [0 x1];
    hrhnd=plot(Xhr,Yhr);hold on;
    % Angle sustained by the minute hand
    theta1 = (minute*pi)/30;
    % Ploting the minute hand
    y2 = 4.5 * cos(theta1); Ymin = [0 y2];
    x2 = 4.5 * sin(theta1); Xmin = [0 x2];
    minhnd=plot(Xmin,Ymin);
    % Angle sustained by the second hand
    theta2 = (sec*pi)/30;
    % Ploting the second hand
    y3 = 5 * cos(theta2); Ysec = [0 y3];
    x3 = 5 * sin(theta2); Xsec = [0 x3];
    sechnd=plot(Xsec,Ysec);
    % tic and toc is used in order to get the processing time of loop
    z=toc;
    % Viewing or pausing the screen for 'x' second
    pause(1-z);
    % delete all the current figures.
    delete(sechnd);
    delete(minhnd);
    delete(hrhnd);
end
         画出或绘制一个半径为10单位的圆。小时数从1到12,间隔30°进行标记。首先,通过使用MATLAB中的一个内置函数,即'num2str'将数字转换为字符串格式,然后通过使用MATLAB中内置的'text'函数将1到12写成文本在绘图中。系统时间,如你的PC时间是由命令'clocks',这是一个内置函数在MATLAB中读取。根据你的PC的当前时间,显示时、分、秒针。由于时钟函数以24小时格式返回时间,所以第一步是将时间转换为12小时格式。

Fig2_AnalogClock
图-2: 模拟时钟的显示
Fig2_AnalogClock

    分针在60分钟内移动360度或2π弧度(或1分钟内移动6度),时针在12小时内移动360度(或1分钟内移动0.5度)。在h小时和m分钟内,分针和时针将移动 。Minute_hand=(h*60+m)*6度。Hour_hand=(h*60+m)*0.5度。秒针在60秒内移动360度或2π弧度(一秒内移动6度),以's'秒为单位,秒针将移动(s*6)度。因为每过一秒,时间就会发生变化,绘制的数字停顿一秒,并删除当前数字,即时针、分针、秒针,重新绘制。每隔一秒后,循环重复。为了暂停和删除数字,使用内置函数 "pause "和 "delete"。
        在MATLAB中运行代码后,我们可以看到屏幕中运行着一个模拟时钟,显示的时间与系统的时间是同步的。
Fig3_AnalogClock

Fig3_AnalogClock
图-3:模拟时钟图
       上图是我们运行MATLAB代码后得到的结果,时钟显示的时间是7:49。
        就这样,相信你一定对如何使用MATLAB设计一个基本的模拟时钟有所了解了。

 
飞码网-免费源码博客分享网站 本篇文章由飞码网制作上传,转载请标注来源: 飞码网-免费源码社区:https://www.codefrees.com 严禁非法转载! 本篇文章由飞码网制作上传,转载请标注来源: 飞码网-免费源码社区:https://www.codefrees.com 严禁非法转载! 飞码网-免费源码博客分享网站
赞 ()
内容页底部广告位3
留言与评论(共有 0 条评论)
   
验证码: