程序设计(频率计)

合集下载

vhdl课程设计频率计

vhdl课程设计频率计

vhdl课程设计频率计一、课程目标知识目标:1. 掌握VHDL语言的基本语法和程序结构;2. 了解频率计的工作原理和设计方法;3. 学会使用VHDL语言设计简单的数字电路系统。

技能目标:1. 能够运用VHDL语言编写简单的程序代码;2. 能够运用所学知识设计并实现一个功能完整的频率计;3. 能够运用仿真工具对所设计的频率计进行测试和验证。

情感态度价值观目标:1. 培养学生对电子设计领域的兴趣和热情;2. 培养学生的团队协作意识和解决问题的能力;3. 培养学生严谨的科学态度和良好的工程素养。

课程性质:本课程为电子技术专业课程,旨在培养学生的硬件描述语言编程能力和电子系统设计能力。

学生特点:学生已具备一定的电子技术基础和编程能力,对数字电路和VHDL 语言有一定了解。

教学要求:结合学生特点和课程性质,将课程目标分解为具体的学习成果,注重理论与实践相结合,提高学生的实际操作能力。

在教学过程中,注重引导学生主动探究、积极实践,培养学生的创新意识和实际工程能力。

二、教学内容1. VHDL语言基础:- 数据类型、运算符和表达式;- 顺序语句和并行语句;- 进程语句和敏感列表;- 子程序和包的使用。

2. 频率计原理:- 频率计的基本工作原理;- 数字频率计的计数方法;- 频率计的误差分析和改进措施。

3. VHDL设计频率计:- 设计流程和需求分析;- 模块划分和接口设计;- 代码编写和调试;- 仿真测试和验证。

4. 教学内容的安排和进度:- 第一周:VHDL语言基础学习;- 第二周:频率计原理学习;- 第三周:VHDL设计频率计实践;- 第四周:代码调试、仿真测试和课程总结。

教材章节关联:1. VHDL语言基础:参考教材第3章;2. 频率计原理:参考教材第5章;3. VHDL设计频率计:参考教材第6章。

教学内容注重理论与实践相结合,按照教学大纲逐步推进,使学生能够系统地掌握VHDL语言和频率计的设计方法。

在教学过程中,结合实例进行分析和讲解,提高学生的实际操作能力。

数字频率计设计(PCB图+电路图+源程序)-课程设计

数字频率计设计(PCB图+电路图+源程序)-课程设计

数字频率计设计(PCB图+电路图+源程序)-课程设计数字频率计设计开题报告选题意义及国内外发展状况本课题主要研究如何用单片机来设计数字频率计。

因为在电子技术中,频率的测量十分重要,这就要求频率计要不断的提高其测量的精度和速度。

在科技以日新月异的速度向前发展,经济全球一体化的社会中,简洁、高效、经济成为人们办事的一大宗旨。

在电子技术中这一点表现的尤为突出,人们在设计电路时, 都趋向于用尽可能少的硬件来实现, 并且尽力把以前由硬件实现的功能部分, 通过软件来解决。

因为软件实现比硬件实现具有易修改的优点, 如简单地修改几行源代码就比在印制电路板上改变几条连线要容易得多, 故基于微处理器的电路往往比传统的电路设计具有更大的灵活性。

单片机就属于这一类设计电路,单片机因其功能独特和廉价已在全球有数???千种成功的范例, 在国内也开发出了充电器、空调控制器、电子定时器、汽车防盗器、卫星接收机以及各种智能仪表等实用产品。

频率计也是单片机的一种很重要的应用, 价格低廉且具有实际意义。

虽然使用逻辑分析仪也可以很好的测量信号的频率等参数,但其价格太昂贵。

实现测量的数字化、自动化、智能化已成为各类仪表设计的方向,而由单片机控制的、全自动的、数字显示的频率计就符合这一设计理念。

说到用单片机设计的频率计,这里说一下单片频率计ICM7216D。

单片频率计ICM7216D是美国Intersil公司首先研制的专用测频大规模集成芯片。

它是标准的28引脚的双列直插式集成电路,采用单一的+5V稳压电源工作。

它内含高频振荡器、10进制计数器、7段译码器、位多路复用器、能够直接驱动LED显示器的8段段码驱动器、8位位码驱动器。

其基本的测频范围为DC至10MHz,若加预置的分频电路,则上限频率可达40MHz或100MHz,单片频率计ICM7216D只要加上晶振、量程选择、LED显示器等少数器件即可构成一个DC至40MHz的微型频率计,可用于频率测量、机械转速测量等方面的应用。

等精度频率计设计VHDL程序

等精度频率计设计VHDL程序

等精度频率计设计VHDL程序下面是一个基于VHDL的精度频率计设计程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.NUMERIC_STD.ALL;entity Frequency_Counter isgenericTOLERANCE : integer := 1; --容差范围REF_FREQ : natural := 100; --参考频率BIT_WIDTH : integer := 16 --输出频率计数器宽度portclk : in std_logic;reset : in std_logic;frequency : out std_logic_vector(BIT_WIDTH - 1 downto 0) --计数器输出值end entity Frequency_Counter;architecture Behavioral of Frequency_Counter issignal count : unsigned(BIT_WIDTH - 1 downto 0); --计数器signal count_enable : std_logic; --计数使能信号signal ref_counter : unsigned(ceil(log2(real(REF_FREQ * CLK_FREQ) / TOLERANCE)) - 1 downto 0); --参考计数器beginprocess(clk, reset)beginif reset = '1' thencount <= (others => '0'); --复位为0count_enable <= '0';ref_counter <= (others => '0');elsif rising_edge(clk) thencount <= count + 1; --计数信号递增end if;if ref_counter = REF_FREQ - 1 thenelseref_counter <= ref_counter + 1; --参考计数器递增end if;end if;end process;process(clk, reset)beginif reset = '1' thencount_enable <= '0';elsif rising_edge(clk) thencount_enable <= '1'; --参考频率达到后启用计数信号elsecount_enable <= '0';end if;end if;end process;frequency <= std_logic_vector(count);end architecture Behavioral;在此设计中,我们定义了一个Frequency_Counter实体,它有几个泛型参数,包括CLK_FREQ(输入时钟频率),TOLERANCE(容差范围),REF_FREQ(参考频率)和BIT_WIDTH(输出频率计数器的宽度)。

课程设计数字频率计

课程设计数字频率计

课程设计数字频率计一、课程目标知识目标:1. 理解并掌握数字频率计的基本原理与功能,了解其在实际生活中的应用。

2. 学会使用特定软件或工具进行数字频率计的设计与仿真。

3. 掌握基本的计数、计时方法,并将其应用于数字频率计的搭建。

技能目标:1. 能够运用已学知识,设计并搭建一个简单的数字频率计,培养动手操作能力和问题解决能力。

2. 能够运用逻辑思维,分析并优化数字频率计的设计方案,提高创新意识和团队协作能力。

3. 能够熟练运用相关软件或工具进行数字频率计的仿真实验,提高计算机操作技能。

情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学习热情,形成积极的学习态度。

2. 培养学生的团队合作精神,学会倾听、交流、分享,增强集体荣誉感。

3. 使学生认识到科技对社会发展的作用,提高社会责任感和使命感。

本课程针对初中年级学生,结合电子技术课程内容,以数字频率计为主题,旨在培养学生的动手操作能力、问题解决能力和创新意识。

在教学过程中,注重理论与实践相结合,让学生在实际操作中掌握知识,提高技能,同时注重情感态度价值观的培养,使学生在学习过程中形成积极向上的人生态度。

通过本课程的学习,学生能够达到上述课程目标,为后续相关知识的学习奠定基础。

二、教学内容1. 理论知识:- 数字频率计的基本原理与功能- 频率的定义及测量方法- 计数器、定时器的工作原理2. 实践操作:- 数字频率计的硬件组成与电路设计- 软件仿真工具的使用方法- 设计并搭建数字频率计的实验步骤3. 教学大纲:- 第一阶段:数字频率计基本原理学习(1课时)- 理解频率概念,掌握频率测量方法- 了解数字频率计的基本原理与功能- 第二阶段:硬件组成与电路设计(2课时)- 学习数字频率计的硬件组成- 掌握计数器、定时器的工作原理- 分析并设计数字频率计电路- 第三阶段:软件仿真与实验操作(2课时)- 学习并掌握软件仿真工具的使用方法- 设计实验方案,搭建数字频率计- 进行仿真实验,验证设计效果4. 教材关联:- 本教学内容与教材中“电子技术基础”、“数字电路设计与应用”等章节相关。

简易频率计的设计课程设计

简易频率计的设计课程设计

简易频率计的设计课程设计一、课程目标知识目标:1. 理解并掌握频率的概念,了解频率在电子技术中的应用。

2. 学习简易频率计的设计原理,掌握相关电子元件的功能和连接方式。

3. 掌握简易频率计的电路图绘制方法,理解电路工作原理。

技能目标:1. 能够运用所学知识,设计并搭建一个简易频率计电路。

2. 学会使用相关测量工具和仪器,对简易频率计进行调试和优化。

3. 提高动手实践能力,培养解决实际问题的能力。

情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发创新意识。

2. 培养学生团队合作精神,学会分享和交流。

3. 增强学生环保意识,养成爱护电子设备的好习惯。

本课程针对初中年级学生,结合电子技术基础知识,设计简易频率计课程。

通过本课程的学习,学生能够掌握频率相关知识,提高动手实践能力,培养创新意识和团队合作精神。

课程目标具体、可衡量,为后续教学设计和评估提供明确方向。

在教学过程中,注重理论与实践相结合,充分调动学生的主观能动性,培养符合时代需求的技能型人才。

二、教学内容1. 频率概念及其应用:介绍频率的定义、单位,频率在电子技术中的应用。

相关教材章节:第一章第三节“频率与周期”2. 简易频率计设计原理:讲解简易频率计的工作原理,分析电路中各元件的作用。

相关教材章节:第二章第五节“简易频率计的设计与应用”3. 电子元件及电路连接:学习常用电子元件的功能、符号及使用方法,掌握电路连接技巧。

相关教材章节:第二章第一节“常用电子元件”和第二节“电路的连接方法”4. 简易频率计电路图绘制:学习电路图的绘制方法,根据设计原理绘制简易频率计电路图。

相关教材章节:第二章第四节“电路图的绘制”5. 电路搭建与调试:动手搭建简易频率计电路,使用测量工具进行调试,优化电路性能。

相关教材章节:第三章第二节“电路搭建与调试方法”6. 实践操作与总结:分组进行实践操作,交流心得体会,总结课程所学内容。

相关教材章节:第三章第三节“实践操作与总结”教学内容安排和进度:第一课时:频率概念及其应用,简易频率计设计原理第二课时:电子元件及电路连接,简易频率计电路图绘制第三课时:电路搭建与调试,实践操作与总结教学内容科学系统,注重理论与实践相结合,旨在帮助学生掌握简易频率计的设计与应用,培养动手实践能力和创新意识。

频率计设计全过程

频率计设计全过程

频率计设计全过程一、前言本文以AT89C51单片机为控制器件的频率测量方法,并用汇编语言进行设计,采用单片机智能控制,结合外围电子电路,得以高低频率的测量。

根据频率计的特点,可广泛应用于各种测试场所。

二、系统概述本文设计了一种基于单片机的简易数字频率计。

(一)系统设计任务设计一简易数字频率计,其基本要求是: (1)被测信号可以是正弦波、三角波、方波。

(2)频率测量范围为0.1HZ-10MHZ信号。

(3)频率测量准确度:公式。

(4)显示方式为六位十进制数显示。

(5)使用PROTEUS软件进行仿真。

(二)系统组成频率计由单片机AT89C51、信号预处理电路、测量数据显示电路和系统软件所组成,其中信号预处理电路包含待测信号放大、波形变换、波形整形和分频电路。

系统软件包括测量初始化模块、显示模块、信号频率测量模块、量程自动转换模块、信号周期测量模块、信号定时器中断服务模块、二进制数到BcD码转换模块。

(三)系统原理频率的定义是:单位时间(1S)内周期信号的变化次数。

若在一定时间间隔T内测得周期信号的重复变化次数为N,则其频率为f=N/T。

本频率计的设计以AT89C51单片机为核心,利用它内部的定时/计数器完成待测信号频率、周期的测量。

单片机AT89C51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出中断要求的功能。

在构成为定时器时每个机器周期加1(使用12MHZ时钟时,每IUS加1),这样以机器周期为基准可以用来测量时间间隔。

在构成计数器时,在相应的外部引脚发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率,外部输入每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12MHZ时钟时,最大计数速率为500KHZ)。

定时/计数器的工作由相应的运行控制位TR控制,当TR置1,定时/计数器开始计数;当TR清0,停止计数。

等精度频率计设计C程序

等精度频率计设计C程序

等精度频率计设计C程序下面是一个用C语言编写的精度频率计程序。

该程序使用了时钟计时器来测量输入信号的频率,并计算出其精确频率。

```c#include <stdio.h>#define MEASUREMENT_TIME 1 // 测量时间(单位:秒)unsigned long long getTickCounint maiunsigned long long startTick, endTick;double elapsedTime, frequency;printf("精度频率计\n");printf("请将输入信号连接到计算机的输入端口。

\n");printf("按下Enter开始测量,测量时间为%d秒...\n", MEASUREMENT_TIME);getchar(;//开始计时startTick = getTickCount(;//测量信号频率unsigned int pulseCount = 0;unsigned int prevState = 0;unsigned int currState;while (1)currState = /* 读取输入端口的状态值 */;if (prevState == 0 && currState == 1)pulseCount++;}prevState = currState;endTick = getTickCount(;elapsedTime = (endTick - startTick) * 1e-9; // 转换为秒if (elapsedTime >= MEASUREMENT_TIME)break;}}frequency = pulseCount / elapsedTime;printf("测量时间: %.2lf秒\n", elapsedTime);printf("测量得到的频率: %.2lf Hz\n", frequency);return 0;```以上程序基于以下假设:-输入信号的频率范围适合用计算机进行测量和计算。

基于51单片机的频率计的设计

基于51单片机的频率计的设计

基于51单片机的频率计的设计频率计是一种测量信号频率的仪器或装置,其原理是通过对信号进行计数和定时来测量信号的周期,并进而计算出信号的频率。

在本篇文章中,我们将设计一个基于51单片机的频率计。

设计方案:1.硬件设计:(1)时钟电路:使用11.0592MHz晶振为主频时钟源。

(2)信号输入:选择一个IO口作为信号输入口,通过外部电平转换电路将信号转换为51单片机能够处理的电平。

(3)显示装置:使用一个数码管或液晶显示屏来输出测量结果。

2.软件设计:(1)初始化:设置51单片机的工作模式、引脚功能、定时器等。

初始化时,将IO口配置为输入模式,用于接收外部信号。

(2)定时器设置:利用定时器来进行时间的测量,可以选择适当的定时器和计数器来实现定时功能。

(3)外部中断设置:使用外部中断来触发定时器,当外部信号边沿发生变化时,触发定时器的启动或停止。

(4)中断处理:通过中断处理程序来对定时器进行启动、停止和计数等操作。

(5)频率计算:将计数结果经过一定的处理和运算,计算出信号的频率。

(6)结果显示:将计算得到的频率结果通过数码管或液晶显示屏输出。

3.工作流程:(1)初始化设置:对51单片机进行初始化设置,包括端口、定时器、中断等的配置。

(2)外部信号输入:通过外部电平转换电路将要测量的信号输入至51单片机的IO口。

(3)定时测量:当外部信号发生边沿变化时,触发外部中断,启动定时器进行定时测量。

(4)停止计时:当下一个信号边沿出现时,中断处理程序停止定时器,并将计数结果保存。

(5)频率计算:根据定时器的设置和计数结果,计算出信号的周期和频率。

(6)结果显示:将计算得到的频率结果通过数码管或液晶显示屏进行显示。

4.注意事项:(1)确保信号输入的稳定性:外部信号输入前需要经过滤波处理,保证稳定且无杂波的输入信号。

(2)测量精度的提高:如有必要,可以通过增加定时器的位数或扩大计数范围来提高测量精度。

(3)显示结果的优化:可以根据需要,通过增加缓冲区、优化数码管显示等方式来改善结果的可读性。

数字频率计课程设计

数字频率计课程设计

数字频率计课程设计引言数字频率计是一种用来测量波形信号频率的仪器。

在本次课程设计中,我们将设计并实现一个基于微控制器的数字频率计。

在设计过程中,我们将使用Arduino开发板以及相应的传感器和电路组件。

本文档将介绍该课程设计的目标、设计思路、实现步骤以及预期的结果。

目标本次课程设计的目标是通过设计一个数字频率计来实现以下功能: 1. 测量输入的波形信号的频率。

2. 将测量结果以数字形式在液晶显示屏上显示。

设计思路1.硬件设计:•使用Arduino开发板作为主控制器。

•使用一个脉冲传感器作为输入信号源。

•使用一个液晶显示屏来显示测量结果。

2.软件设计:•使用Arduino编程语言编写程序。

•通过读取脉冲传感器的信号来计算输入信号的频率。

•将计算得到的频率值通过串口传输给液晶显示屏。

实现步骤1.硬件连接:•将脉冲传感器的输出引脚连接到Arduino开发板的数字输入引脚。

•将液晶显示屏的控制引脚连接到Arduino开发板的对应输出引脚。

2.软件编程: ```c // 引入LiquidCrystal库 #include<LiquidCrystal.h>// 定义液晶显示屏的引脚 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// 定义脉冲传感器的引脚 int pulsePin = 7;// 定义变量存储频率值 float frequency = 0;void setup() { // 初始化液晶显示屏 lcd.begin(16, 2);// 设置脉冲传感器引脚为输入状态 pinMode(pulsePin, INPUT);// 设置波特率为9600 Serial.begin(9600); }void loop() { // 定义变量存储脉冲计数值 int pulseCount = 0;// 计算脉冲计数值 while (pulseCount < 1000) { if (digitalRead(pulsePin) == HIGH) { pulseCount++; delayMicroseconds(100); } }// 计算频率值 frequency = pulseCount / 1000.0;// 在串口上发送频率值 Serial.println(frequency);// 清除液晶屏内容 lcd.clear();// 在液晶屏上显示频率值 lcd.setCursor(0, 0); lcd.print(。

频率计课程设计报告

频率计课程设计报告

频率计课程设计报告一、课程目标知识目标:1. 理解频率计的基本概念,掌握频率计的使用方法。

2. 学会运用频率计进行简单的数据收集、统计和分析。

3. 掌握频率分布表的制作方法,并能运用其进行数据处理。

技能目标:1. 能够正确操作频率计,进行实际数据的收集。

2. 培养学生运用频率分布表进行数据处理的能力,提高数据分析技能。

3. 培养学生的观察能力、动手能力和团队合作能力。

情感态度价值观目标:1. 培养学生对数据科学的兴趣,激发学生探索科学规律的欲望。

2. 培养学生严谨、细致的科学态度,养成认真观察、记录数据的良好习惯。

3. 增强学生的团队协作意识,培养学生在团队合作中互相尊重、共同进步的精神。

课程性质分析:本课程为初中物理与数学相结合的实践课程,通过实际操作频率计,让学生在实践中学习数据收集、统计和分析的方法。

学生特点分析:初中生好奇心强,动手能力强,但注意力容易分散,需要通过实际操作和有趣的教学活动来激发学习兴趣。

教学要求:1. 教师应注重理论与实践相结合,让学生在实际操作中掌握知识。

2. 教学过程中要关注学生的个体差异,给予每个学生充分的指导和鼓励。

3. 创设有趣的教学情境,激发学生的学习兴趣,提高课堂参与度。

二、教学内容1. 频率计基础知识:介绍频率计的定义、原理和功能,使学生理解频率计在数据收集与分析中的应用。

- 教材章节:第三章第二节《数据的收集与处理》2. 频率计的操作方法:讲解频率计的正确使用步骤,指导学生进行实际操作。

- 教材章节:第三章第三节《频率计的使用》3. 数据收集与统计:指导学生运用频率计进行实际数据收集,学会制作频率分布表。

- 教材章节:第三章第四节《数据的整理与表示》4. 数据分析与应用:通过对收集到的数据进行分析,引导学生发现数据背后的规律。

- 教材章节:第三章第五节《数据分析与应用》教学安排与进度:第一课时:频率计基础知识学习,了解频率计的原理和功能。

第二课时:学习频率计的操作方法,并进行实际操作练习。

课程设计实验报告(简易频率计)

课程设计实验报告(简易频率计)

实验二:简易电子琴一、实验目的(1)学习采用状态机方法设计时序逻辑电路。

(2)掌握ispLEVER 软件的使用方法。

(3)掌握用VHDL 语言设计数字逻辑电路。

(4)掌握ISP 器件的使用。

二、实验所用器件和设备在系统可编程逻辑器件ISP1032一片示波器一台万用表或逻辑笔一只TEC-5实验系统,或TDS-2B 数字电路实验系统一台三、实验内容设计一个简易频率计,用于测量1MHz 以下数字脉冲信号的频率。

闸门只有1s 一档。

测量结果在数码管上显示出来。

不测信号脉宽。

用一片ISP芯片实现此设计,并在实验台上完成调试。

实验设计:1.产生准确闸门信号(1s)。

100kHz时钟经100K分频(一次完成),再经2分频产生方波,1s 用于计数,1s用于显示结果(及清零);2. 利用闸门信号控制一个计数器对被测脉冲信号进行计数, 1s内计数的结果就是被测信号的频率;3.每次对被测信号计数前,自动清零;4. 计数器采用十进制;5.显示频率值上下浮动,要修改源代码。

6.数码管高低位的接线。

VHDL源代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fget isport(clk:in std_logic; --输入时钟源 bclk:in std_logic;kout:out std_logic_vector(26 downto 0));end fget;architecture top of fget iscomponent divideport(clk1:in std_logic;cl:out std_logic;co:out std_logic;ro:out std_logic);end component;component gateport(bc1:in std_logic;cl1:in std_logic;co1:in std_logic;op:out std_logic_vector(26 downto 0));end component;component saveport(op1:in std_logic_vector(26 downto 0);ro1:in std_logic;eout:out std_logic_vector(26 downto 0));end component;signal scl:std_logic;signal sco:std_logic;signal sro:std_logic;signal sop:std_logic_vector(26 downto 0);BEGINu1:divide PORT MAP(clk,scl,sco,sro);u2:gate PORT MAP(bclk,scl,sco,sop);u3:save PORT MAP(sop,sro,kout);end;--闸门模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity gate isport(bc1:in std_logic;cl1:in std_logic;co1:in std_logic;op:out std_logic_vector(26 downto 0) --5个8421,一个七段译码);end;architecture art2 of gate iscomponent cnt10 --十进制计数模块port(clk2:in std_logic;en:in std_logic;--使能端clr:in std_logic;--重置qout:out std_logic_vector(3 downto 0 );cout:out std_logic);end component;component seventranse --七段模块port(clk6:in std_logic_vector(3 downto 0 );op2:out std_logic_vector(6 downto 0 ));end component;signal scout1:std_logic;--输出(十进制)signal scout2:std_logic;signal scout3:std_logic;signal scout4:std_logic;signal scout5:std_logic;signal scout6:std_logic;signal qout1:std_logic_vector(3 downto 0);--8421(下同)signal qout2:std_logic_vector(3 downto 0);signal qout3:std_logic_vector(3 downto 0);signal qout4:std_logic_vector(3 downto 0);signal qout5:std_logic_vector(3 downto 0);signal qout6:std_logic_vector(3 downto 0);signal op2: std_logic_vector(6 downto 0);--七段beginr1:cnt10 PORT MAP(bc1,co1,cl1,qout1,scout1);r2:cnt10 PORT MAP(scout1,co1,cl1,qout2,scout2);r3:cnt10 PORT MAP(scout2,co1,cl1,qout3,scout3);r4:cnt10 PORT MAP(scout3,co1,cl1,qout4,scout4);r5:cnt10 PORT MAP(scout4,co1,cl1,qout5,scout5);r6:cnt10 PORT MAP(scout5,co1,cl1,qout6,scout6);t1:seventranse PORT MAP(qout6,op2);process(co1)beginif (co1'event and co1='0') thenop<=op2&qout5&qout4&qout3&qout2&qout1;--结果显示end if;end process;end;--寄存器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity save isport(op1:in std_logic_vector(26 downto 0);ro1:in std_logic;eout:out std_logic_vector(26 downto 0));end entity;architecture art4 of save issignal temp:std_logic_vector(26 downto 0);beginprocess(ro1)beginif ro1'event and ro1='1'then --上升沿判断temp<=op1;end if;eout<=temp;end process;end art4;--十进制计数器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity cnt10 isport(clk2:in std_logic;en:in std_logic;clr:in std_logic;qout:out std_logic_vector(3 downto 0 );cout:out std_logic);end entity;architecture art3 of cnt10 issignal temp:std_logic_vector(3 downto 0 );beginprocess(clk2,en,clr)beginif (clr='1') then --重置时清0temp<="0000";elsif (en='1') thenif(clk2'event and clk2='1')then --上升沿判断进位if(temp="1001")thentemp<="0000";elsetemp<=temp+1;end if;end if;end if;end process;qout<=temp;cout<='1' when temp="1001" else '0';end art3;--分频模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity divide isport(clk1:in std_logic;cl:out std_logic;co:out std_logic;ro:out std_logic);end;architecture art1 of divide issignal preclk:std_logic;signal temp1:std_logic;signal temp2:std_logic;beginp1: process(clk1) --先进行2500分频variable count:integer range 0 to 2500;beginif clk1'event and clk1='1'thenif count=2499 thencount:=0;preclk<='1';else count:=count+1;preclk<='0';end if;end if;end process;p2: process(preclk) --依次二分频实现闸门beginif preclk'event and preclk='1'thentemp2<=not temp2;end if;end process;p3: process(temp2)variable count2:std_logic;beginif temp2'event and temp2='1'thencount2:=not count2;if count2='1'thenco<='1';temp1<='0';else co<='0';temp1<='1';end if;end if;end process;p4:process(temp2)beginif (temp1='1' and temp2='0') thencl<='1';elsecl<='0';end if;end process;ro<=temp1;end;--七段译码器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity seventranse isport(clk6:in std_logic_vector(3 downto 0 );op2:out std_logic_vector(6 downto 0 ));end entity;architecture art5 of seventranse isbeginprocess(clk6)begincase clk6 iswhen "0000"=> op2<="1111110";when "0001"=> op2<="0110000";when "0010"=> op2<="1101101";when "0011"=> op2<="1111001";when "0100"=> op2<="0110011";when "0101"=> op2<="1011011";when "0110"=> op2<="1011111";when "0111"=> op2<="1110000";when others=> op2<="0000000";end case;end process;end art5;四、实验小结:实验要求用闸门信号控制计数器计时,于是在十进制计数器模块中添加使能信号en(en=‘1’计数器进行加1 计数,en=‘0’时计数器保持),将闸门信号作为使能信号接入,即可实现1s计数,1s显示。

简易频率计课程设计

简易频率计课程设计

简易频率计课程设计一、课程目标知识目标:1. 学生能理解频率计的基本工作原理,掌握其电路组成和功能。

2. 学生能运用已学过的电子元件,设计并搭建一个简易频率计。

3. 学生能够掌握频率、周期等基本概念,并了解它们在实际应用中的重要性。

技能目标:1. 学生通过动手实践,提高电子电路搭建和调试的能力。

2. 学生能够运用所学知识解决实际问题,培养创新思维和动手能力。

3. 学生学会查阅相关资料,提高自主学习能力。

情感态度价值观目标:1. 学生在课程学习过程中,培养对电子技术的兴趣,激发探究精神。

2. 学生在团队合作中,学会互相尊重、沟通与协作,培养团队精神。

3. 学生能够认识到科技对社会发展的作用,增强社会责任感和创新意识。

课程性质:本课程为实践性课程,结合理论教学,注重培养学生的动手能力和创新思维。

学生特点:本年级学生具备一定的电子基础知识,对新鲜事物充满好奇,喜欢动手实践。

教学要求:教师需结合课本知识,引导学生主动参与课程,关注学生个体差异,鼓励学生提出问题和解决问题。

在教学过程中,注重理论与实践相结合,培养学生的实际操作能力。

通过课程目标的实现,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。

二、教学内容本课程教学内容围绕以下三个方面进行组织:1. 理论知识:- 介绍频率、周期、频率计的基本概念和原理。

- 分析简易频率计的电路组成和功能,包括时钟电路、计数器、显示电路等。

2. 实践操作:- 指导学生使用面包板搭建简易频率计电路。

- 教学内容包括电子元件的选择、电路连接、调试和测试等。

3. 教学案例与拓展:- 结合课本案例,分析实际应用中的频率计,如心跳频率计、转速表等。

- 探讨频率计在生活中的应用,激发学生对电子技术的兴趣。

教学大纲安排如下:1. 第一课时:导入课程,介绍频率计的基本概念和原理,分析电路组成。

2. 第二课时:讲解实践操作步骤,指导学生进行电路搭建和调试。

3. 第三课时:展示和讨论教学案例,进行课程总结和拓展。

数字频率计设计(使用VHDL语言)

数字频率计设计(使用VHDL语言)

实验报告\
一、实验目的
设计数字频率计,学习较复杂数字系统设计方法。

二、实验内容
设计八位数码显示频率计P228
三、实验环境
计算机、QuartusII软件
四、实验步骤
1、子模块FTCTRL(用于产生控制信号) (1)程序代码
(2)仿真结果
2
、子模块COUNTER32B (用于计数)
(1)程序代码
(2)仿真结果
(3)结果分析
当使能信号ENABLE=‘1’时,允许计数。

当CLR=‘1’时重新计数
3、子模块REG32B(输出数据)
(1)程序代码
(2)仿真结果
(3)结果分析
当LK=’1’时,输出当前数据DIN,否则不做处理。

4、子模块SHOW
(1)程序代码
(2)仿真结果
(3)结果分析
当S=‘0’时,载入数据DATA,否则将数据DATA左移4位。

每次上升沿,SHOW1输出数据的高四位。

综合模块:
五、实验结果与讨论
这个实验花了比较多的时间,在做计数器的时候由于没有考虑到最后使用的是二进制显示的,所以在转换的时候遇到了不少的问题,最后
新亏有老师帮我想了办法解决。

频率计设计 个人设计

频率计设计 个人设计

频率计设计摘 要频率计又称频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器。

在传统的频率测量中,精度较低,误差较大,速度慢,然而数字频率计是用来测量信号频率的装置。

它可以测量正弦波、方波、三角波和尖脉冲信号的频率。

在进行模拟、数字电路的设计、安装、调试的过程中,经常要用到频率计。

由于其用十进制数显示,测量速度快、精度高、显示直观,因此频率计开始很广泛应用在制造企业,实验室,通讯行业等生产测试中。

本设计中应用到模拟,数字电路,实现简单,可靠,准确的数字频率计。

1、总体方案设计从频率计本身分析,基本的原理上考虑,频率计的总体构造可以如图1-1所示:图1-1 频率计设计总体框图为了达到频率计的设计,精准,简单,方便的原则,测频系统的大致结构包括前端时间基准单元,计数单元,还有显示单元,逻辑控制部分对各单元进行逻辑控制,使每个部件有序正常工作。

时间基准负责产生一定的时间基准T ,在T 时间范围内对输入的信号进行检测,单位时间的脉冲数就是被测信号的频率,后续电路实现显示和逻辑控制。

TNf (1)该式中,N 是T 时间内的被测信号的脉冲数,T 有我们按照需要人为设定。

2、单元电路设计单元电路指的是就是上节中提到的几部分模块,分别实现不同功能,设计时要求要有参数的具体设置,具体的电路实现与芯片选择,下面进行分部介绍设计的具体过程。

2.1 时间基准电路时间基准电路的作用是产生一个标准的时间信号(如高电平持续时间为xS),其设计要求得到精度较高,基于设计简单的原则,采用555定时器组成单稳态触发器,单稳态触发器有两个状态,分别为稳定状态和暂稳定状态,暂稳定状态的保持时间由电路参数决定,故操作起来简单,容易实现。

单稳态触发器的时间基准产生波形如图2-1所示:暂稳状态图2-1 单稳示意图那为什么选择单稳态触发器来产生时间基准呢?因为其只有两个状态,即稳态和暂稳态;当遇到外界触发脉冲作用,可以从稳态翻转到暂稳态,维持一段时间,自动回到稳态;维持的时间长短取决于电路本身的参数,与宽度和幅度无关。

频率计——单片机课程设计

频率计——单片机课程设计

频率计摘要数字频率计是直接用十进制数字显示被测信号频率的一种测量装置。

设计中应用单片机的数学运算和控制功能,通过AT89C52内部存储程序进行软件计数,对输出进行控制。

在单片机应用系统中利用C语言编程具有一定的优点,本次课程设计介绍了C语言实现数字频率计的软件设计以及硬件电路。

全部软件编程不是采用常规的汇编语言,而是利用C语言强大的浮点运算能力,实现频率计的软件设计,因此提高了频率计的测量精度,具有一定的实用价值。

本次课程设计通过在Keil环境中用C语言编程,并在Protues中设计电路进行仿真测试,实现了频率计在信号1Hz~500kHz频率段的测试,误差较小,与输入信号源的频率相近。

最后通过LCD显示模块显示出信号频率。

同时还利用AD0808进行对源信号模数转换,得到信号的最大值。

关键词:频率测量单片机C语言频率计目录摘要 (1)关键词:频率测量单片机C语言频率计 (1)绪论(或前言) (3)1、课程设计的主要内容 (4)2、单片机的种类、用途、发展历史、基本工作原理、常规用法、组成最小系统的硬件设计方法 (5)2.1.1主流单片机简介 (5)2.1.2单片机的用途 (6)2.1.3 单片机的历史 (6)2.1.4单片机基本工作原理 (7)2.1.5单片机组成最小系统的硬件设计方法 (7)2.2接口电路的特点、分类及设计方法 (7)2.3课题的设计思路、实施方法 (8)2.4硬件设计:系统电路图、关键元器件的性能、参数及外形封装等 (9)2.5软件设计:包括程序流程框图、源代码(汇编或C语言),典型程序要求加注释 (11)2.5.1程序流程图: (11)2.5.2C程序源代码: (11)见附件 (11)2.6设计测试结果: (11)3、总结 (12)附件: (14)绪论(或前言)数字频率计在电子、通讯的领域中的实验、研究开发、生产用途非常广泛,它可以由逻辑电路组成,也可以用单片机控制。

由逻辑电路组成的频率计,结构复杂,组装、调试比较麻烦;传统的频率计通常采用组合电路和时序电路等大量的硬件电路构成,产品不但体积较大,运行速度慢,而且测量低频信号时不宜直接使用。

课程设计数字频率计

课程设计数字频率计

课程设计 数字频率计一、课程目标知识目标:1. 学生能理解数字频率计的基本原理,掌握其电路组成和工作方式。

2. 学生能运用数学知识,计算出数字频率计的测量范围,并解释相关计算公式。

3. 学生能运用物理知识,解释数字频率计测量频率时的误差来源。

技能目标:1. 学生能够独立完成数字频率计的搭建,并进行简单的调试和测量。

2. 学生能够运用所学知识,解决实际测量中遇到的问题,提高动手操作能力和问题解决能力。

3. 学生能够通过小组合作,进行数字频率计的优化设计和创新改进。

情感态度价值观目标:1. 学生能够认识到数字频率计在实际应用中的重要性,激发对电子技术的学习兴趣。

2. 学生通过动手实践,培养团队协作意识,增强克服困难的信心和勇气。

3. 学生能够养成严谨的科学态度,注重实验数据的准确性和实验过程的完整性。

课程性质:本课程属于电子技术实践课程,以项目式教学为主,结合理论教学和动手实践。

学生特点:学生处于八年级,具有一定的数学、物理基础和动手能力,对电子技术有一定的好奇心和兴趣。

教学要求:注重理论与实践相结合,引导学生主动探究,培养创新意识和实践能力。

在教学过程中,关注学生的个体差异,因材施教,确保每个学生都能在课程中收获成果。

通过课程学习,使学生能够将所学知识应用于实际生活和未来学习。

二、教学内容1. 数字频率计基本原理:介绍频率计的作用,原理及其在电子测量中的应用,对应教材第3章第2节。

- 电路组成和工作方式- 频率测量方法及误差来源2. 数字频率计电路分析与搭建:分析数字频率计的电路结构,进行实际操作搭建,对应教材第3章第3节。

- 电路元件的识别与选用- 电路搭建步骤及注意事项3. 数字频率计的测量与调试:学习测量原理,进行实际测量和调试,对应教材第3章第4节。

- 测量范围计算与公式解释- 调试方法及技巧4. 数字频率计的优化与创新:针对现有频率计进行优化设计和创新改进,对应教材第3章第5节。

- 小组合作,讨论设计方案- 创新改进,提高测量精度和稳定性教学大纲安排:第1课时:数字频率计基本原理学习第2课时:数字频率计电路分析与搭建第3课时:数字频率计的测量与调试第4课时:数字频率计的优化与创新设计教学内容进度:第1-2周:学习基本原理,进行电路分析与搭建第3周:进行测量与调试,总结问题与经验第4周:优化设计与创新改进,展示成果与评价反思三、教学方法1. 讲授法:教师通过生动的语言和形象的表达,讲解数字频率计的基本原理、电路组成和测量方法,使学生系统地掌握理论知识,对应教材第3章第2-3节。

简易频率计设计

简易频率计设计

单片机课程设计——简易频率计数器的设计简易频率计数器的设计一、设计要求自制一个单片机最小系统,包括串口下载、复位电路,采用外部计数器T0或T1作为外部频率输入,外部频率由信号源提供,计算出来的频率显示在四位一体的数码管上。

二、设计原理及步骤51单片机有40个引脚,都有对应的功能。

先设计一个最小系统,9号位接一个复位电路,能够将数码管显示清零。

在通过时钟引脚18、19脚接一个振荡电路,用来控制时钟信号。

1S跳动的次数就是频率,在频率计数器中必须要有一个定时和计数功能,设置T0计数,T1定时,部T1定时50MS,T0计数20次,通过外部中断产生的信号就是对应的频率。

用几个三态门作为总线的驱动器,而74LS244芯片可以起到这个作用,排阻有稳定电路和保护电路的功能,然后连接到四位数码显示管,通过引脚的一一对应和相应功能显示出来。

这样就完成了整个设计。

三、设计原理图及仿真用PROTEUS7.2软件设计,找到自己需要的元件,按照自己的构思设计连接好实线,而与原理图对应的程序则通过KEILC51生成的HE*文件在仿真中参加C51芯片中。

根据原理设计仿真测试结果:数码管和示波器显示的频率一致,满足设计要求四、程序设计*include<reg51.h>bit int_flag;unsigned char volatile T0Count; unsigned char volatile T1Count; unsigned char code table[] ={0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f};unsigned char code temp[] = {0*fe,0*fd,0*fb,0*f7};unsigned long sum;unsigned char Led[4];void delay(unsigned int num ){while(--num);}void init(void){TMOD=0*51; //T1定时,T0计数TH0=(65536-50000)/256; //定时50msTL0=(65536-50000)%256;TH1=0*00;TL1=0*00;}void disp(void){unsigned char i;for(i=0;i<4;i++){P2=temp[i];//片选P0=table[Led[i]]; //取数据显示delay(100); //延时1毫秒}}void main(void){EA=1;init();TR0=1;TR1=1;ET1=1;ET0=1;while(1){if(int_flag==1){int_flag=0;sum=TL1+TH1*256+T1Count*65536;//计算脉冲个数Led[0]=sum%10000/1000;//显示千位Led[1]=sum%1000/100;//显示百位Led[2]=sum%100/10;//显示十位Led[3]=sum%10;//显示个位T0Count=0*00;T1Count=0;TH1=0*00;TL1=0*00;TR1=1;}disp();}}void int_t0(void) interrupt 1{ TH0=(65535-50000)/256; TL0=(65536-50000)%256; T0Count++;if(T0Count==20){TR1=0;int_flag=1;T0Count=0*00;}}void int_T1(void) interrupt 3{T1Count++;}六、设计体会在做课程设计的过程中,我进一步认识到全面专业知识以及逻辑思考方式对研究问题的重要性,同时我更加具体的掌握了课程设计的根本方法。

课程设计 频率计的设计

课程设计 频率计的设计

学生姓名(学号) )课程名称数字电子技术设计题目数字频率计设计完成期限自 2009 年 6 月 24至 2009 年 6月 30 共 1 周设计依据已学过电路分析、模拟电子技术、数字电子技术,按照教学计划要求进行《数字电子技术课程设计》。

设计要求及主要内容1、设计一个3位十进制频率计,其测量范围为1MHz。

量程分为10KHz、100KHz、1MHz三档(最大读数分别为9.99KHz、99.9KHz、999KHz),量程转换规则如下:(1)当读数大于999时,频率计处于超量程状态,此时显示器发出溢出指示。

下一次测量时,量程自动增大一档。

(2)当读数小于099时,频率计处于欠量程状态,下一次测量时,量程自动减小一档。

2、显示方式如下:(1) 采用记忆显示方式。

即计数过程中不显示数据,等到计数过程结束以后,显示计数结果,并将此计数结果保持到下一次计数结束。

显示时间不小于1s。

(2) 小数点位置随量程变换自动移位。

3、对电路进行仿真。

参考资料[1]MAXPLUSII 及 VHDL 使用教程.东南大学[2]康华光.电子技术基础数字部分.高等教育出版社.指导教师签字日期目录一、设计任务 (4)二、设计条件 (4)三、设计要求 (4)四、总体概要设计 (4)五、各单元模块设计和分析 (5)六、元器件清单 (7)七、设计总结 (7)八、参考文献 (7)九、附数字钟课程设计仿真图 (8)十、实验心得 (9)引言:数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波、方波或其它周期性变化的信号。

如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率、转速、声音的频率以及产品的计件等等。

因此,数字频率计是一种应用很广泛的仪器。

一、设计任务:频率计设计二、设计条件:本设计基于Multisim仿真软件的调试三、设计要求:1、设计一个3位十进制频率计,其测量范围为1MHz。

量程分为10KHz、100KHz、1MHz三档(最大读数分别为9.99KHz、99.9KHz、999KHz),量程转换规则如下:(1)当读数大于999时,频率计处于超量程状态,此时显示器发出溢出指示。

基于51单片机的频率计的设计讲解

基于51单片机的频率计的设计讲解

基于51单片机的频率计的设计讲解频率计是一种测量信号频率的仪器。

基于51单片机的频率计设计能够实现对不同频率信号的测量,具有简单、可靠、价格低廉的优势。

本文将详细介绍基于51单片机的频率计的设计原理、电路设计和程序设计。

设计原理:基于51单片机的频率计的设计原理主要包括输入信号的检测和计数、计数值显示和频率计算。

当外部信号输入到单片机的输入引脚时,单片机通过计数器对输入信号的波形进行计数,计数值与输入信号的频率成正比。

通过将计数值转换为频率值,并在显示屏上显示,即可实现对输入信号频率的测量。

电路设计:输入电路:输入电路主要负责将外部信号通过耦合电容和电阻接入单片机的输入引脚。

在输入电路中,耦合电容的作用是将交流信号的AC分量通过,阻隔直流信号的DC分量。

电阻的作用是限制输入信号的幅值,防止单片机输入引脚的过大电流。

计数电路:计数电路是基于51单片机的频率计的核心部分,主要由计数器和时钟发生器组成。

计数器负责对输入信号的波形进行计数,时钟发生器负责提供计数脉冲。

计数器的选择应根据所需测量范围来确定,通常使用定时器/计数器来实现。

显示电路:显示电路主要由数码管和驱动电路组成。

通过将计数值转换为对应的数字,并将数字数据发送给数码管进行显示。

驱动电路负责控制数码管的亮度和显示方式。

程序设计:输入信号的采样:在程序中,通过定时器/计数器对输入信号进行采样,采样时间根据信号频率来确定。

采样得到的数据存储在特定的寄存器中,以供后续的计数和计算。

计数器的计数:通过对输入信号进行计数,得到计数值。

计数值的大小与输入信号的周期成反比,与输入信号频率成正比。

计数器的计数方式可以是边沿计数或脉冲计数,根据实际需求选择。

频率计算和显示:通过将计数值转换为频率值,并将频率值显示在数码管上。

频率计算可以采用简单的比例关系,如频率=计数值/计数时间。

将频率值转换为对应的数字,并通过驱动电路控制数码管的显示。

总结:基于51单片机的频率计通过对输入信号进行采样、计数、计算和显示,能够实现对不同频率信号的测量。

烟台大学单片机课程设计频率计(模拟无误版)

烟台大学单片机课程设计频率计(模拟无误版)

烟台大学机101-5 课程设计单片机课程设计题目:频率计班级:机101-5学号2013年6 月4 日目录设计任务...............................................功能与框图..........................................单片机部分.........................................基本人机接口设计..........................附录........................................................总程序..................................................任务分工..............................................参考文献..............................................一.设计任务1.1设计题目:频率计1.2任务要求:检测十秒内人按按钮的最快频率,并用三位LED显示出实际检测的频率。

1.3设计内容:⑴设计思路:根据任务要求,确定设计要分为三个小部分:首先,设计程序检测出人按按键的频率;然后,设计一个比较子程序,筛选出人按按键的最快频率;最后,将筛选出的频率值输出到LED上进行显示。

其中最主要的是如何检测人按按钮的频率,对此,有三种设计方案,(1)通过定时器定时1S,检测人按按钮的频率;(2)通过检测相邻两次按键动作的时间间隔计算频率,也需用到定时器;(3)直接定时检测十秒内人按按键的频率(因为任务要求可以理解为不同的含义)。

综合考虑,我们选择了第一种设计方案。

(2)基本人机接口设计①完成显示接口设计。

②完成按键接口设计。

设计要求:①完成设计说明书;②软件设计;③件设计;④序仿真;1.4设计步骤⑴理解并确定设计要求⑵确定整体控制方案⑶编写程序说明书附录附上电路图一张及汇编控制程序一份。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机系统的 程序设计
一、程序设计步骤
一说到程序设计,人们很往往 想到的就是写代码,其实写代码只 是整个程序设计过程中的一个微不 足道的阶段而已。 那么一个完整的程序设计过程 包括哪些步骤呢。
1 、方案制定(立项) 一个项目的成败往往不是在最后 一天体现,而是在第一天就被注定 了,也就是说,方案的制定阶段直 接关系项目的成败。因此,在这个 阶段,我们要细致地做好准备工作。 这些工作包括:
2)相互兼容 对于一个团队来说,效率来自于 分工合作。这时要奉行的最高原则 就是“相互兼容”。 在团队中,统一的编程规范,团 体的默契配合,才是成功的关键因 素。
4、程序调试 程序调试就是验证前面的工作, 把程序调通。 调试阶段要做的两件重要事情: 一是测试,就是要尽可能多地找出 程序中的BUG;二是DEBUG,就是要 解决那些BUG。
7、多进程并行运行机制 多进程并行机制,就是把每个任 务都看作是一个进程,该进程可以 被分成多个阶段,每个阶段的执行 时间较短。当该进程获得系统的控 制权后,每次只执行一个阶段,然 后就将控制权交还给上级调度程序。 待到下次重新获得系统控制权时, 再执行一个阶段。
8、基于状态机思路的程序调度机制 用状态寄存器来表示程序的工作 状态。在调度程序中,根据系统当 前工作状态和触发条件,综合分析, 执行相应的动作,或迁移到新的状 态。 这种基于状态机的程序调度机制, 通常包含以下4个要素:
3、模块的事件驱动机制 所谓事件驱动机制,就是给每个 模块安排使能标志,通过使能标志 来触发该模块代表的事件。也就是 说在每次进入功能模块时,先判断 条件是否满足,若满足则执行,否 则则不执行。
4、顺序调度机制和优先调度机制 1)在主程序循环中,如果各个模块 没有优先级的区别则我们可以采取 顺序调度机制。 2)如果各个功能模块有优先级的区 别,则我们需要采取优先调度机制。
2)主程序循环体 初始化程序结束后,系统的工作 环境已经建立起来了,这时就可以 进入主程序。 主程序一般是一个循环体。在这 里执行的是程序要实现的具体功能, 如输入检测、输出控制和人机界面 等。这些语句可以直接写在主程序 里,也可以写成子程序形式,由主 程序进行调用。
2、模块化的程序结构 在模块化的程序结构中,主程序 仅仅是执行调度功能,负责轮流调 用功能模块程序。主程序每循环一 圈,所有的功能模块都被调用一次。 显然,采用了这种结构后,各个 模块之间的相互独立性较强。我们 可以像搭积木一样,很方便地增加 或减少主程序调用的模块。
1)程序框架的规划 2)各个模块功能的细分 3)系统资源的分配 4)算法的设计 5)程序流程图的绘制
3、代码编写 这个阶段就是我们平时所谓 用一段文字说明,要有写注释的习 惯。同时还应遵循两个最高原则:
1)向前兼容 许多有经验的程序员,都拥有自 已的程序模块库。当他们需要设计 一个新的程序时,只要直接从旧项 目中抽取出成熟模块,移植到新项 目中。七拼八凑的,就完成了新程 序设计,大大提高了开发的速度。
2、 程序设计 1)程序框架的规划 2)各个模块功能的细分 3)系统资源的分配
4)算法的设计 根据技术开发要求列出频率计的 具体算法
5)程序流程图的绘制
上 电
初 始 化 程 序
计 数 器 计 计 数
数 码 管 显 示 程 序
图 1主 程 序 流 程 图
开 始
计 数 器 计 数
定 时 器 开 启
1)现态 --2)条件 --条件; 3)动作 --4)次态 --状态。
当前所处的工作状态; 触发动作或状态迁移的 条件满足后执行的动作; 条件满足后要迁移的新
以上介绍的,都是构建单片机程 序框架的一些思路。通过将各种程 序结构灵活应用,各种调度机制有 机结合,就可以更有效的管理各个 任务,实现程序预期目标。
1、程序的基本结构 单片机程序都是为了实现某个特 定的功能而定制的。因此每个程序 的流程也不可能完全相同。但是写 得多了,总还是有些规律可循的。 事实上,大多数程序都可以套用这 样一个基本流程结构:
1)初始化程序 单片机上电复位后,从复位入口 开始运行程序。这个时候应该对系 统进行自检和初始化动作。系统初 始化包括对I/O口、RAM(变量)、 定时器、中断、显示、ADC以及其 它功能模块的初始化。
5、中断与前/后台的程序结构 我们把实时性要求更高的事件 (比如:外部触发信号,或者通信) 入在中断中(前台)响应,把实时 性要求较低的任务(比如:按键扫 描、显示刷新)交给主程序(后台) 去调度。这样就形成了前/后台的 程序结构模型。
6、分时调度机制 在系统任务较多的时候,为了使 实时性要求较高的任务能得到系统 时间,我们可以尝试采用分时调度 机制。
定 时 1S到 ?

是 保 存 计 数 值 并 清 空 计 数 器
返 回
计 数 器 计 数 流 程 图
3、代码编写 4、程序调试
5、程序维护 这个阶段是指推向市场或交付客 户后,根据市场和客户的需求,进 行升级维护,当然也包括进一步对 隐性BUG的消除。
二、程序设计思路
对于新手来说,背熟了指令集并 不代表你就会写程序了。就像我们 普通人,即使认识了所有的汉字, 但并不代表他就会写文章了。 如何把那一条条指令汇集成程序, 并顺利实现预期的要求呢,这就是 我们下面将要讲到的程序设计思路。
1)制定技术开发要求 2)制定实现方案 3)评估整个项目开发需要的各方面 的资源 4)评估并确定开发周期 5)其它 在经过多方面的综合评估,确 认方案可行,即可立项。
2、 程序设计 程序设计阶段中包含了系统、程 序、电路、机械结构等多方面的内容。 由于我们现在只是单纯的讲程序,因 此暂时先撇开其它;在这里程序员的 主要任务是:
三、程序设计实例
题目:基于单片机系统的 简易频率计程序设计
1 、方案制定 1)制定技术开发要求 设计一基于51单片机的频率计 程序,对外部接入频率信号进行测 量,频率范围为0-65535HZ,采用红 色数码管显示输入频率。
2)制定实现方案 3)评估整个项目开发需要的各方面 的资源 4)评估并确定开发周期 5)其它
相关文档
最新文档