实用文档之51单片机脉冲产生程序设计

合集下载

一种基于MCS-51单片机的数字可调脉冲发生器的设计实现

一种基于MCS-51单片机的数字可调脉冲发生器的设计实现

2系统需求分析与总体设计
以及显示灯 。 本文所设计的系统主要 是利用单片机控制脉冲发生器 分有限 , 输 出电流值 的大小也十分 有效 , 因而一般 采用连接运 算放 产生脉冲 , 利用可调 式的数字 电位器 的控制实现对脉冲的幅值 、 频 大 电路的形式, 来对 脉冲信号进行放大 。 本系统 所选 择的运算 放大 率 以及宽度的控制。 本 文利用5 1 单片机 以及A D C 模数转换器来实现 器为L M2 9 0 4 通过计算能够在满足输 出电压幅值 的情况下不失真 。 产生数字 脉冲信 号, 并 由L E D液晶显示。 3 . 3 A/ D转 换 模 块 选 型
设计 开发
I数 目啦 术
I与 应 用
种基于 MC S 一 5 1 单片机 的数字可调脉冲发生器的设计实现

高 敏
( 江苏商贸职业学院 江苏南通 2 2 6 0 1 1 )
摘要 : 脉 冲发生 器在 自 动 化控制领域 有着非 常广泛 的应用, 而传 统的脉冲发 生器操 作复杂且 造价较 高, 并且精确 度不能 够保证, 本 ̄ 1 7 J , MC S 一 5 1 单 片机 为基础 设计 出了一种 可调 式的数 字脉 冲发 生器, 对幅值 、 频 率和输 出宽度进行 调整且输 出精度 高, 不需要人 工调节 自动化程度 较 高。 可 以应 用在 很 多 实用到 脉冲发 生 器的场合 , 并且造 价较 为低 廉 。 为可调 式脉 冲发 生器的设计 与应 用提供 可具体 实践 的技术 解决 方案 。 关键 词: 可调式数 字脉 冲发 生器 MC S 一 5 1 A D C 0 8 0 9 L E D 显 示器 中图分 类号: T N 7 8 2 文献标识 码: A 文章编 号: 1 0 0 7 — 9 4 1 6 ( 2 0 1 6 ) 0 8 — 0 2 0 4 — 0 1

项目5 脉冲发生器的设计与制作

项目5 脉冲发生器的设计与制作

5.2 项目理论知识
4. 方式3 在工作方式3下,定时/计数器T0被拆成两个独立的8 位TL0和TH0。 其中,TL0既可以用做计数,又可以用做定时,定时/ 计数器T0的各控制位和引脚信号全归它使用,其功能 和操作与方式0和方式1完全相同,而且逻辑电路结构 也极其类似。 定时/计数器T0的高8位TH0,只能作为简单的定时器 使用。由于定时/计数器T0的控制位已被TL0占用,因 此只好借用定时/计数器T1的控制位TR1和TF1,即以 计数溢出置位TF1,而定时的启动和停止则由TR1的状 态控制。
5.3 项目概要设计
5.3.3 软件程序的概要设计 有关脉冲发生器项目的软件设计的核心:如何产生脉 冲。从输出端口的电平状态分析,脉冲就是指定时间 的高电平和指定时间的低电平,周期变化,从而形成 指定频率的脉冲。 根据上述分析,软件概要设计的内容就是: (1)产生脉冲,就转换成产生端口的高、低电平; (2)指定的时间,由单片机的定时/计数器0来完成
5.2 项目理论知识
5.2.5 单片机定时器的初始化步骤 在使用单片机的定时/计数器时,需要进行初始化设 置: (1) 设置定时/计数器的工作方式——TMOD寄存器; (2)装载初值——TH和TL; (3)如果采用中断方式工作时,设置中断允许和优 先级——IE寄存器和IP寄存器; (4)启动定时/计数器——TCON中的TR1或TR0位。 在进行定时/计数器的初始化设置时,需要注意的是 ,TMOD不能按位设置,只可以按字节设置,TCON寄 存器则可以按位设置和按字节设置。
嵌 入 式 开 发 初 级
单片机原理与应用(C语言版)
项目五 脉冲发生器的设计与制作
目录
5.1 项目要求与分析
5.2 项目理论知识
5.3 项目概要设计

MCS-51单片机程序设计

MCS-51单片机程序设计

+1
,当X>0
Y= 0
,当X=0
开始
-1
,当X<0
X=0
N
程序流程框图如图4.1所示。 Y
Y←0
X>0 Y
Y←1
N Y←-1
结束
程序如下: ORG
MOV CJNE MOV AJMP MP1: JB MOV LJMP MP2: MOV HERE: SJMP
1000H A,R0 A,#00H,MP1 R1,#00H HERE ACC.7 MP2 R1,#01H HERE R1,#0FFH HERE
1000H DPTR,#2000H DPL DPH DPTR,#3000H R2,DPL R3,DPH
;源数据区首地址 ;源首址暂存堆栈
;目的数据区首地址 ;目的首址暂存寄存器
LOOP:
POP POP MOVX INC PUSH PUSH MOV MOV MOVX MOV MOV DJNZ SJMP
;源数据区首地址 ;目的数据区首地址 ;循环次数 ;取数据 ;数据传送 ;源地址加1 ;目的地址加1 ;循环控制 ;结束
例4.8 外部RAM之间的数据传送程序。
把外部RAM 2000H开始单元中的数据传送到外部RAM 3000H开始的单 元中,数据个数在内部RAM的35H单元中。
START:
ORG MOV PUSH PUSH MOV MOV MOV
K=?
K=0
K=1
转向 0 分支 转向 1 分支
K= n-1
K=n
转向 n-1 分支 转向 n 分支
例4.5 设内部RAM的30H单元有一个数,根据该数值的不同 转移到不同的程序段进行处理,设数值的范围为0~10的 无符号数。

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序51单片机外部脉冲计数程序是一种常见的嵌入式应用程序,它可以通过计数外部脉冲信号来实现各种功能,如测量速度、记录行程、控制电机等。

在本文中,我们将介绍如何编写一个简单的51单片机外部脉冲计数程序,供初学者参考。

一、程序框架```c#include <reg52.h>sbit PulsePin = P1^0; //定义脉冲信号输入引脚unsigned long cnt = 0; //计数器void ExternalInterrupt0() interrupt 0 //外部中断0的中断服务程序{cnt++; //计数器加一}```程序中定义了一个脉冲信号输入引脚PulsePin,一个计数器cnt,并在主程序中开启了全局中断和外部中断0,并设置外部中断0为下降沿触发。

在外部中断0的中断服务程序中,计数器cnt会加一。

二、程序解析1. 硬件连接将需要计数的脉冲信号输入引脚连接到单片机的P1.0引脚上,并连接好单片机的电源和地线。

2. 宏定义和全局变量首先定义了PulsePin引脚为输入模式,并定义了计数器cnt为无符号长整型变量。

3. 主程序在主程序中,首先开启了全局中断和外部中断0,然后设置外部中断0为下降沿触发。

最后加入一个无限循环,等待外部中断的触发。

4. 外部中断0的中断服务程序在外部中断0的中断服务程序中,计数器cnt会加一。

三、总结本文介绍了如何编写一个简单的51单片机外部脉冲计数程序。

通过外部中断0的中断服务程序,可以实现对外部脉冲信号的计数。

本程序只是一个简单的例子,读者可以根据自己的需求对其进行改进和优化。

51系列单片机输出PWM的两种方法

51系列单片机输出PWM的两种方法

51系列单片机输出PWM的两种方法PWM(Pulse Width Modulation,脉宽调制)是一种常用的调制技术,通过改变信号的脉宽来控制输出电平的占空比。

在51系列的单片机中,常用的PWM输出方式有基于定时/计数器和软件实现两种方法。

一、基于定时/计数器的PWM输出方法:在51系列单片机中,内部有多个定时/计数器可用于实现PWM输出。

这些定时/计数器包括可编程定时/计数器T0、T1、T2和看门狗定时器。

1.T0定时/计数器:T0定时/计数器是最简单和最常用的PWM输出方式之一、通过配置T0定时/计数器的工作模式和重装值来实现PWM输出。

具体步骤如下:(1)选择T0的工作模式:将定时/计数器T0设置为工作在16位定时器模式,并使能PWM输出。

(2)设置T0的重装值:通过设定T0的装载值来定义PWM输出的周期。

(3)设置T0的计数初值:通过设定T0的计数初值来定义PWM输出的脉宽。

(4)启动T0定时/计数器:开启T0定时/计数器的时钟源,使其开始计数。

2.T1定时/计数器:T1定时/计数器相对于T0定时/计数器来说更加灵活,它具有更多的工作模式和功能,可以实现更复杂的PWM输出。

与T0定时/计数器类似,通过配置T1的工作模式、装载值和计数初值来实现PWM输出。

3.T2定时/计数器:T2定时/计数器在51系列单片机中的应用较少,但也可以用于实现PWM输出。

与T0和T1不同,T2定时/计数器没有独立的PWM输出功能,需要结合外部中断请求(INT)来实现PWM输出。

二、软件实现PWM输出方法:在51系列单片机中,除了利用定时/计数器来实现PWM输出外,还可以通过软件来实现PWM输出。

软件实现PWM的核心思想是利用延时控制来生成不同占空比的方波信号。

软件实现PWM输出的步骤如下:(1)设置IO口:选择一个适合的IO口,将其设置为输出模式。

(2)生成PWM信号:根据要求的PWM占空比,通过控制IO口的高低电平和延时的时间来生成PWM方波信号。

基于51单片机的脉冲控制器-课程设计

基于51单片机的脉冲控制器-课程设计

目录1. 课程设计目的................................................................................................32. 课程设计内容及设计过程说明...........................................................................32.1功能介绍................................................................................................32.2.1电路原理..........................................................................................32.2.2protel原理图....................................................................................42.2.3各功能模块电路设计...........................................................................52.2.3.1LED和蜂鸣器模块.....................................................................52.2.3.2硬件复位模块和晶振模块............................................................52.2.3.3段码输出和共阴极数码管模块......................................................62.2.4 PCB图.............................................................................................72.2.5 共阴极数码管显示码对照表..................................................................72.3元件清单................................................................................................82.4实际电路板成品图....................................................................................92.5程序流程图 (10)2.6汇编程序 (11)2.6.1程序源代码 (11)2.6.2代码分析 (13)3. 课程设计结论 (13)4. 参考文献 (15)1、课程设计目的的使用方法和技巧,初步掌握单片机编程和调试的技能,例如本课题的数码管显示模块,中断程序设计等。

单片机 低频脉冲信号发生器 设计报告

单片机 低频脉冲信号发生器 设计报告

低频脉冲信号发生器“低频脉冲信号发生器”功能:在P1.0引脚输出低频脉冲信号,脉冲信号的频率可以通过键盘设定,输出的脉冲频率在6位数码管显示。

在程序执行过程中,读取键盘设置,根据设置改变输出频率,根据脉冲频率计算定时周期,使用定时器产生定时中断,在中断服务程序中对P1.0取反(cpl P1.0),产生脉冲。

编写数码管显示程序,完成频率显示。

MCS-51单片机内部有2个定时/计数器,当工作在定时器模式时,可以对时钟的12分频计数,实现准确定时。

利用定时器的周期中断,就可以实现在P1.0上产生脉冲波。

单片机实验开发系统上提供了键盘,在程序执行过程中,读取键盘状态,根据状态值改变定时器的定时周期,就可以实现改变输出频率。

单片机实验开发系统上数码管显示采用8155的PB、PC口控制的动态扫描方式,共6位数码管。

编写一个通用的数码管显示驱动程序,在每一次定时器中断中显示一位数码,6个定时器中断周期完成扫描,只要保证扫描周期<20ms,就可以稳定显示。

程序中各功能模块如下所示:程序清单如下:ORG 0000HMOV R1,#50HAJMP MAINORG 000BHAJMP TC0S ;转到T/C0的中断TC0SMAIN: MOV TMOD,#00H ;置T/C0为方式0,定时MOV TH0,#0E0HMOV TL0,#18HSETB ET0 ;T/C0允许中断SETB EA ;CPU开中断SETB TR0 ;启动T/C0定时HERE: SJMP HERE ;等待中断ORG 0150HTC0S: MOV TH0,#0E0HMOV TL0,#18HCPL P1.0 ;输出方波START: MOV DPTR,#0FF20HMOV A,#03HMOVX @DPTR,A ;设定状态字MOV 70H,#00HKEY1: ACALL KS1 ;跳至KS1,扫描是否有键闭合JNZ LK1 ;有键闭合跳至LK1N1: ACALL DIRAJMP KEY1 ;转到KEY1,继续扫描是否有闭合键LK1: ACALL DIRACALL DIRACALL KS1 ;转到KS1,扫描闭合键是否为波动JNZ LK2 ;键不是波动,跳至LK2判断键号ACALL DIRAJMP KEY1LK2: MOV R2,#0FEH ;列扫描码送到R2MOV R4,#00H ;R4是列数的计数单元LK4: MOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,A ;列扫描码送到PA口INC DPTRINC DPTRMOVX A,@DPTR ;读PC口JB ACC.0,LONE ;第零行为高电平,转到第一行MOV A,#00H ;第零行为低电平,行首健号送到AAJMP LKP ;转到LKP,计算键号LONE: JB ACC.1,LTWOMOV A,#08HAJMP LKPLTWO: JB ACC.2,LTHRMOV A,#10HAJMP LKPLTHR: JB ACC.3,LFORMOV A,#18HSJMP LKPLFOR: JB ACC.4,NEXTMOV 70H,#19H ;“19号键”为确认键AJMP KEY2 ;转到KEY2,将输入值给TL0&TH0赋值LKP: ADD A,R4 ;行首键号+列号=键号MOV @R1,AINC R1MOV 70H,A ;将键号送入70H单元PUSH ACC ;键号压入堆栈LK3: ACALL DIRACALL KS1 ;进行第二次扫描JNZ LK3 ;有键闭合,返回LK3POP ACCAJMP KEY1NEXT: INC R4 ;第一行没有键闭合,进行第二列的扫描MOV A,R2 ;列扫描码送到A中JNB ACC.7,KND ;全部列扫描完成,跳到KND进行下一轮扫描RL A ;列扫描码向后移一位MOV R2,A ;列扫描码送回R2AJMP LK4KND: AJMP KEY1KS1: MOV DPTR,#0FF21H ;PA口地址0FF21HMOV A,#00HMOVX @DPTR,AINC DPTR ;转到PC口,地址0FF23HINC DPTRMOVX A,@DPTR ;读键入状态CPL A ;键入状态取反ANL A,#0FH ;屏蔽键入状态高四位RETDIR: MOV R0,#70H ;键值放入R0MOV A,@R0ANL A,#0FH ;屏蔽键值高四位MOV 30H,AMOV A,@R0SW AP AANL A,#0FH ;屏蔽键值高四位MOV 31H,AMOV R0,#30HMOV R3,#01HDO1: MOV A,R3MOV DPTR,#0FF21HMOVX @DPTR,AINC DPTRMOV A,@R0ADD A,#0DH ;计算偏移量MOVC A,@A+PC ;查表得出相应的键值DIR1: MOVX @DPTR,AACALL DL1MOV A,R3RL AJB ACC.2,LD1MOV R3,AINC R0AJMP DO1LD1: RETDSEH: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB 80H,90H,88H,83H,0C6H,0A1H,086H,08EH,0FFH,0C0HDL1: MOV R7,#2DL: MOV R6,#0FFHDL6: DJNZ R6,DL6DJNZ R7,DLRETKEY2: MOV B,50H ;将输入值给B,A,并合并存在A中MOV A,51HSW AP AANL A,BMOV TL0,A ;低位赋给TL0MOV 40H,A ;保存以备后用MOV B,52HMOV A,53HSW AP AANL A,BMOV TH0,A ;高位赋给TH0MOV 41H,AEND改进方案:本程序为了方便输入的是计时初值而非频率,可以尝试使用频率,然后编写一个多位除法的程序。

51单片机脉冲产生程序设计

51单片机脉冲产生程序设计

51单片机脉冲产生程序设计脉冲产生是嵌入式系统中非常重要的功能之一、在51单片机中,我们可以通过定时器/计数器和中断来实现脉冲的产生。

下面将详细介绍如何设计一个脉冲产生的程序。

首先,我们需要选择一个定时器作为脉冲产生的源。

在51单片机中,有两个可用的定时器,分别是定时器0和定时器1、我们选择一个定时器后,就需要设置定时器的工作模式和计数方式。

在这个例子中,我们选择使用定时器1,并设置为工作模式1和16位计数。

下面是相关的代码示例:```c#include <reg51.h>//定义定时器1的计数周期,用于控制脉冲的频率//主函数void main//声明并初始化定时器计数值unsigned int count = 0xFFFF - TIM1_CYCLE;//设置定时器1的工作模式和计数方式TMOD=0x20;//工作模式1TH1 = count / 256; // 设置高字节TL1 = count % 256; // 设置低字节//启动定时器1TR1=1;while (1)//脉冲输出的相关处理//这里可以添加相关操作}```在上述代码中,我们通过`TIM1_CYCLE`宏定义了定时器1的计数周期,用于控制脉冲的频率。

然后,我们设置了定时器1的工作模式为工作模式1,并计算出计数值,将其分别赋值给TH1和TL1寄存器。

最后,启动定时器1,并在主循环中进行相关的脉冲输出处理。

通过以上的代码段,我们实现了一个简单的脉冲产生程序。

在实际应用中,我们可以根据需要进行进一步的处理,例如根据输入信号进行触发控制、与其他模块进行通信等。

需要注意的是,在上述代码中,我们使用了51单片机的计数方式1,即工作模式1、根据实际需求,您可以根据相应的定时器和计数方式进行调整。

另外,定时器的计数周期也可以根据具体应用进行调整,以满足不同的脉冲需求。

总结起来,设计一个脉冲产生的程序需要选择定时器和计数方式,设置定时器的工作模式和计数值,然后启动定时器,并在主循环中进行相关的处理。

51单片机定时器产生pwm波的程序

51单片机定时器产生pwm波的程序

51单片机定时器产生pwm波的程序PWM(Pulse Width Modulation)是一种调节脉冲信号宽度的技术,通过改变信号的高电平时间和低电平时间的比例来控制输出电压的大小。

在很多应用中,PWM技术被广泛应用于电机控制、LED调光、音频放大器等领域。

在使用51单片机生成PWM波之前,我们首先需要了解51单片机的定时器的工作原理。

51单片机内部集成了多个定时器,其中最常用的是定时器0和定时器1。

这两个定时器都是16位的,可以通过设定定时器的计数值和工作模式来控制定时器的工作。

在使用定时器0和定时器1生成PWM波之前,我们还需要明确一些概念。

占空比是指高电平时间与一个周期的比值,通常用百分比表示。

频率是指一个周期的时间,单位是赫兹(Hz)。

接下来我们以定时器1为例,介绍如何在51单片机上生成PWM波。

我们需要设置定时器1的工作模式。

定时器1的工作模式分为两种:8位自动重装载模式和16位工作模式。

在8位自动重装载模式下,定时器1的计数器值从0到255,然后自动重装载为初始值,重复计数。

在16位工作模式下,定时器1的计数器值从0到65535,然后自动重装载为初始值,重复计数。

在生成PWM波时,我们通常使用16位工作模式。

我们需要设置定时器1的计数值。

定时器1的计数值决定了PWM波的频率。

计数值越大,频率越低;计数值越小,频率越高。

我们可以根据具体的应用需求来设定计数值。

然后,我们需要设置定时器1的占空比。

占空比决定了PWM波的高电平时间与低电平时间的比例。

占空比为50%时,高电平时间和低电平时间相等;占空比小于50%时,低电平时间多于高电平时间;占空比大于50%时,高电平时间多于低电平时间。

我们可以通过改变定时器1的占空比来控制PWM波的输出电压的大小。

我们需要启动定时器1开始工作。

定时器1开始工作后,会自动根据设定的计数值和占空比生成相应的PWM波。

使用51单片机定时器生成PWM波的步骤如下:1. 设置定时器1的工作模式为16位工作模式;2. 设定定时器1的计数值,确定PWM波的频率;3. 设定定时器1的占空比,确定PWM波的输出电压的大小;4. 启动定时器1开始工作。

单片机脉冲计数及显示课程设计

单片机脉冲计数及显示课程设计

目录• 1. 设计思想和设计说明----------------------- • 2. 硬件原理框图-----------------------------3 • 3. 硬件原理图与其软件配合介绍---------------3 • 4. 程序存储器和数据存储器的单元分配---------6 • 5. 程序流程图-------------------------------7 • 6. 源程序清单-------------------------------9 •7. 芯片资料---------------------------------12 •8. 仿真结果(打印仿真图)-------------------17 •9. 参考文献---------------------------------19一设计思想和设计说明设计思想:本次课程设计采用一个可扩展芯片AT89C51,四个7段LED数码管显示器,经过电阻连接而组成,并具有开关复位等功能。

首先在keil软件中输入计数器程序,在生成以hex为后缀名的文件,拷贝添加到芯片AT89C51中以实现其功能。

其中芯片的P0.0到P0.7和P1.0到P1.7分别和四个7段LED数码管显示器相连接,作为0000-9999计数的十位数显示,在练习使用译码器驱动7段LED数码管显示器的同时,芯片AT89C51的由12MHZ的晶振提供脉冲支持芯片工作。

设计说明:在汇编程序中可将十六进制转换变为十进制输出显示,即使得计数器的初始状态为0000,当第1个计数脉冲来到后,其状态为0001,以后来一个脉冲计一次数,依次可计数到9999后清零,计数器是采用数字电路实现的对个,十,百,千位的数字显示技术装置,能广泛应用于实验室,公共场合,以及实际生活中的一些应用,是人们日常生活中不可少的必需品。

由于数字集成电路以及555振荡器的广泛应用,使得计数器的精度大大的提高。

基于51单片机的脉冲计数

基于51单片机的脉冲计数

一、课程设计任务 (1)二、课程设计分工安排................................................................................. 错误!未定义书签。

三、课程设计原理和方法 (1)3.1定时器工作原理 (1)3.1.1 定时/计数器构成 (1)3.1.2 定时/计数器的控制寄存器 (2)3.1.3 定时器/计数器工作方式 (2)3.1.3 定时器/计数器工作方式 (3)3.1.3 定时器/计数器工作方式 (4)3.2 软件设计 (5)3.2.1 程序流程图 (5)3.2.2 程序清单............................................................................... 错误!未定义书签。

3.2.2 程序清单 (7)3.3 功能图 (8)3.4硬件电路布线图 (9)四、小结 (9)五、参考文献 (10)六、致谢 (10)七、心得体会..................................................................................................................................一、课程设计任务熟悉8031定时/计数器的计数功能,掌握初始化编程方法,掌握中断程序的调试方法,利用定时/计数器0对外部输入的脉冲进行计数,并送显示器显示。

二、课程设计分工安排组长朱威主持共同分析系统结构和功能,并负责写出总体设计方案;易瑞刚负责论述8031定时/计数器的主要功能,以及在设计系统中的具体编程语句和含义,同时负责购买电阻,分频器,并焊接电路板;李孝捷负责论述8031定时/计数器的工作方式,以及在设计系统中的具体编程语句和含义;张友清负责论述如何利用8031定时/计数功能实现脉冲计数,以及在设计系统中的具体编程语句和含义;三、课程设计原理和方法3.1定时器工作原理3.1.1 定时/计数器构成AT89C51单片机有二个16位定时/计数器T0、T1,分别由4个8位计数器组成,均属SFR寄存器。

基于51单片机音乐盒程序设计

基于51单片机音乐盒程序设计

基于51单片机音乐盒程序设计一、功能设计说明1、电路设计实物图矩阵键盘部分电路图2、运行流程图3、电子琴模式按键对应发音设计按键 发音 按键 发音 K1 低 1 K9 中 2 K2 低 2 K10 中 3 K3 低 3 K11 中 4 K4 低 4 K12 中 5 K5低 5K13中 6程序开始播放小苹果歌曲判断任意按键是否按下继续播放小苹果歌曲否是进入电子琴模式判断K16按键是否按下播放完成是否按键发音按键发音K6 低6 K14 中7K7 低7 K15 高1K8 中1 K16 重新播放小苹果二、硬件电路说明1、程序下载电路音乐盒电路图ISP下载接口本设计采用的单片机为A T89S52单片机,需使用ISP下载器进行下载程序,程序下载电路图如图中ISP1接口.2、音乐发音电路IO口P10发出不同频率的脉冲,则BUZZER产生各种不同的声音,本设计采用12MHZ 晶振,系统频率1MHZ,定时器计数一个1us,其对应关系如下表所示:音符频率(HZ)简谱码(T值)音符频率(HZ) 简谱码(T值)低 1 DO 262 63628 # 4 FA# 740 64860 # 1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 294 63853 # 5 SO# 831 64934 # 2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178中1 DO 523 64580 # 4 FA# 1480 65198# 1 DO# 554 64633 高 5 SO 1568 65217中 2 RE 587 64684 # 5 SO# 1661 65235# 2 RE# 622 64732 高 6 LA 1760 65252中 3 M 659 64777 # 6 1865 65268中 4 FA 698 64820 高 7 SI 1967 65282 计算方法:例如产生262HZ频率(发音DO),周期T=1/262=3816 us,由于定时器中断使IO不停取反,故周期T=3816/2=1908 us 定时器初值N=65536-1908=63628TH0=63628/256TL0=65536%256三、程序代码说明1 、脉冲产生采用定时器0溢出中断产生脉冲,定时器初始化如下:TMOD = 0x01; //定时器0工作方式1 ,即十六位计数器计数TR0 = 1; //启动定时器ET0 = 1; //定时器0溢出中断使能EA = 1; //总中断使能定时器0溢出中断产生脉冲,void Timer0() interrupt 1代码如下:TH0 = th0;TL0 = tl0;if(th0==0)BUZZER=1; //判断停顿,有停顿不发音else{BUZZER = ~BUZZER;} //无停顿发音2、音普规则:a、音普由一个字节十六进制数组成b、高4位代表节拍,一拍约400MS,将一拍分成8份c、低4位代表音符,一一对应Note[]列表d、0x20代表歌曲结束符e、uint code Note[]={0,64580,64684,64777,64820,64898,64968,65030,/*中音*/63628,63853,64021,64103,64260,64400,64524,/*低音*/65058,65110,65157,65178,65217,65252,65282/*高音*/};该列表为发音所对应的定时器初装值例如编写如下一段音乐列表:0x83,0x81,0x82,0x8d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40 0x40表示停顿4*50MS /*你是我的小呀小苹果*/3、音普列表解读while(Xiaopingguo[temp]!=0x20) //不停判断音乐是否结尾,结尾跳出{jiepai=Xiaopingguo[temp]>>4; //获取节拍,即高4位数yinpu=Xiaopingguo[temp]&0x0F; //获取音普,即低4位数Timer_Set(yinpu); //根据列表对应发音Delay(jiepai*50); //节拍temp++;P0 = 0x0f;if(P0!=0x0f)goto out;}void Timer_Set(uchar num)为定时器0赋值子程序,包含的代码如下:th0=Note[num]/256;tl0=Note[num]%256;四、程序代码编写/**********************************************************************************************项目名称:音乐盒单片机型号:AT89S52频率:外部石英晶振12MHZ设计时间:2014-08-06设计者:小左MCU工作室Q Q: 576689422******************************************************************************* **************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit BUZZER=P1^0;//蜂鸣器输出uchar th0,tl0; //定时器0赋值变量uchar start_; //返回变量uint code Note[]={0,64580,64684,64777,64820,64898,64968,65030,/*中音*/63628,63853,64021,64103,64260,64400,64524,/*低音*/65058,65110,65157,65178,65217,65252,65282/*高音*/};/*************************************************************************音普规则:1、音普由一个字节十六进制数组成2、高4位代表节拍,一拍约400MS,将一拍分成8份3、低4位代表音符,一一对应Note[]列表4、0x20代表歌曲结束符**************************************************************************/uchar code Xiaopingguo[]={0x83,0x81,0x82,0x6d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40,/*你是我的小呀小苹果*/0x83,0x81,0x82,0x82,0x45,0x43,0x8e,0x81,0x40,/*怎么爱你都不嫌多*/0x41,0x4e,0x8d,0x4e,0x41,0x82,0x8c,0x46,0x45,0x83,0x83,0x43,0x40,/*红红的小脸温暖我的心窝*/0x42,0x81,0x42,0x43,0x42,0x43,0x42,0x23,0x25,0x85,0x30,0x45,0x10,0x45,0x30,0x45,0x10,0x 45,0x30,0x85,0x85,0x85,0x40,/*点亮我生命的火火火火火火*/0x83,0x81,0x82,0x6d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40,/*你是我的小呀小苹果*/0x83,0x81,0x82,0x82,0x45,0x43,0x8e,0x81,0x40,/*就像天边最美丽的云朵*/0x41,0x4e,0x8d,0x4e,0x41,0x82,0x8c,0x46,0x45,0x83,0x83,0x43,0x40,/*春天又来到了花开满山坡*/0x42,0x81,0x42,0x43,0x82,0x8c,0x8d,0x4d,0x41,0x8d,0x20/*种下希望就会收获*/};//----延时子程序--------------------------------------------------void Delay(uint xms){uint j;for(;xms>0;xms--)for(j=110;j>0;j--);}//---------------------------------------------------------------//----定时器变量赋值--------------------------------------------- void Timer_Set(uchar num){th0=Note[num]/256;tl0=Note[num]%256;}//---------------------------------------------------------------//----系统初始化------------------------------------------------- void Init(){BUZZER = 1; //关闭蜂鸣器TMOD = 0x01; //定时器0工作方式1TR0 = 1; //启动定时器ET0 = 1; //定时器0溢出中断使能EA = 1; //总中断使能start_ = 0; //返回变量初始化}//---------------------------------------------------------------//----按键扫描--------------------------------------------------- void Key_Scan(){P0 = 0x0f;if(P0!=0x0f){Delay(5);if(P0!=0x0f){P0=0xfe;if(P0==0xee){Timer_Set(8);} //按键1被按下else if(P0==0xde){Timer_Set(12);}//按键5被按下else if(P0==0xbe){Timer_Set(2);} //按键9被按下else if(P0==0x7e){Timer_Set(6);} //按键13被按下else;P0=0xfd;if(P0==0xed){Timer_Set(9);} //按键2被按下else if(P0==0xdd){Timer_Set(13);}//按键6被按下else if(P0==0xbd){Timer_Set(3);} //按键10被按下else if(P0==0x7d){Timer_Set(7);} //按键14被按下else;P0=0xfb;if(P0==0xeb){Timer_Set(10);} //按键3被按下else if(P0==0xdb){Timer_Set(14);}//按键7被按下else if(P0==0xbb){Timer_Set(4);} //按键11被按下else if(P0==0x7b){Timer_Set(15);}//按键15被按下else;P0=0xf7;if(P0==0xe7){Timer_Set(11);} //按键4被按下else if(P0==0xd7){Timer_Set(1);} //按键8被按下else if(P0==0xb7){Timer_Set(5);} //按键12被按下else if(P0==0x77){start_=1;} //按键16被按下else;}}else{th0=0;}}//---------------------------------------------------------------//----主程序----------------------------------------------------- void main(){uchar temp,yinpu,jiepai;Init();while(1){start:temp=0;while(Xiaopingguo[temp]!=0x20){jiepai=Xiaopingguo[temp]>>4; //获取节拍yinpu=Xiaopingguo[temp]&0x0F; //获取音普Timer_Set(yinpu);Delay(jiepai*50);temp++;P0 = 0x0f;if(P0!=0x0f)goto out;}out:th0 = 0;BUZZER = 1;//关闭蜂鸣器while(1){Key_Scan();if(start_==1){start_=0;goto start;}}}}//---------------------------------------------------------------//----定时器0中断服务程序----------------------------------------void Timer0() interrupt 1{TH0 = th0;TL0 = tl0;if(th0==0)BUZZER=1; //判断停顿,有停顿不发音else{BUZZER = ~BUZZER;} //无停顿发音}//----------------------------------------------------------------更多精彩程序请在淘宝店铺中搜索“小左MCU”QQ:576689422。

51单片机C语言程序设计-图文

51单片机C语言程序设计-图文
03 8 只 LED 左右来回点亮
/* 名称:8 只 LED 左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果
*/ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) {
case 2: //东西向黄灯闪烁,绿灯关闭 DelayMS(300); YELLOW_A=~YELLOW_A;GREEN_A=1; if(++Flash_Count!=10) return; //闪烁 5 次 Flash_Count=0; Operation_Type=3; break;
case 3: //东西向红灯,南北向绿灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1; RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000); Operation_Type=4; break;
3 Ykcsh 呈献
0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff }; //延时 void DelayMS(uint x) {
uchar i; while(x--) {
for(i=0;i<120;i++); } } //主程序 void main() { uchar i; while(1) { //从数组中读取数据送至 P0 和 P2 口显示
uchar i; while(x--) {
for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) {

(完整word版)如何利用51单片机输出PWM波

(完整word版)如何利用51单片机输出PWM波

如何利用51单片机输出PWM波1、理论知识PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片实现PWM 功能时只需要通过设置相应的寄存器就可实现周期和占空比的控制。

但是如果要用51单片机的话,也是可以的,但是比较的麻烦。

此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现.用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。

大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。

下面重点介绍用一个定时器的实现PWM的方法.因为市面上的智能小车所采用的电机大多数为TT减速电机,通过反复的实验,此电机最佳的工作频率为1000HZ(太高容易发生哨叫,太低电机容易发生抖动),所以下面以周期为1ms(1000HZ)进行举例,要产生其它频率的PWM波,程序中只需作简单修改即可。

用一个定时器时(如定时器T0),首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n’。

因为这里我们是产生周期为1ms(1000HZ)的PWM,所以可设置中断的时间间隔为0.01ms,,然后中断100次即为1ms.在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句:1、当time〉=100时,time清零(此语句保证频率为1000HZ),2、当time〉n时(n应该在0-100之间变化开),让单片相应的I/O口输出高电平,当time<n时,让单片相应的I/O口输出低电平,此时占空比就为%n。

2、程序1,使单片机的I/O口输出固定频率的PWM波下面按上面的思路给出一个具体程序:/*******************************************************************//*程序名:单片机输出固定频率的PWM波*//*晶振:11.00592 MHz CPU型号:STC89C52 *//* 功能:P2^0口输出周期为1ms(1000HZ),占空比为%80的PWM波*//*****************************************************************/#include〈reg52.h>#define uint unsigned int#define uchar unsigned charsbit PWM1=P2^0;//接IN1 控制正转sbit PWM2=P2^1;//接IN2 控制反转uchar time;void main(){TMOD=0x01;//定时器0工作方式1TH0=0xff;//(65536-10)/256;//赋初值定时TL0=0xf7;//(65536—10)%256;//0。

一种基于MCS_51单片机的数字可调脉冲发生器的设计实现_虞立工

一种基于MCS_51单片机的数字可调脉冲发生器的设计实现_虞立工

虞立工(杭州华日电冰箱股份有限公司 杭州 310019)摘要:介绍了以MCS-51单片机为主控器,以MCP4561数字电位器为核心实现可调数字式脉 冲发生电路的设计。

该系统电路简单、可靠,脉冲信号频率、脉宽和幅值可调,输出波形平稳。

关键词:MCS-51单片机; 脉冲发生器; 数字电位器Abstract :In this paper, it introduces the design of a controllable digital pulse generator circuit which is based on MCS-51 single chip microcomputer as the main controller and MCP4561 digital potentiometer as the core. The result shows that it is of simplicity and reliability, and pulse frequency, pulse width and signal amplitude can be adjusted and the output waveform is smooth.Key words:MCS-51 single chip microcomputer; pulse generator; digital potentiometer引言脉冲信号发生器在工业应用、生物医学、家用电器控制等领域中,有着广泛的应用。

在控制步进电机运行 过程中,脉冲发生器可以发出脉冲信号,按照步进电机的结构特点,顺序分配脉冲,实现控制角位移、旋转速度、旋转方向。

大部分的脉冲信号发生器是利用定时电路产生脉冲,而频率和幅值都是用电位器进行调节。

而机械接触式的电位器可靠性和精度不高,而用单片机在软件方面实现数字可调又会耗费很多编程人员的很多时间和精力。

本文介绍采用Microchip 公司的MCP4561数字电位器,来代替机械接触式的电位器,用MCS-51单片机控制,实现输出脉冲信号的脉宽、频率和幅值可调。

(完整word版)单片机方波脉冲计数控制设计说明书

(完整word版)单片机方波脉冲计数控制设计说明书

桂林电子科技大学微机综合设计设计报告指导老师:吴兆华学生:fdb学号:1000150310目录一、设计题目 (2)二、设计内容与要求 (2)三、设计目的和意义 (2)四、设计任务分析 (2)五、系统硬件电路 (4)5。

1 电路原理图绘制 (7)5。

1。

1 电路图绘制要点 (7)5.1.2 硬件电路制作 (8)5。

2 硬件电路说明 (8)5.2.1 单片机基本知识 (8)5。

2.2 AT89S51单片机介绍 (10)5。

2。

3最小系统控制部分 (14)5。

2。

4 数码管显示电路部分 (17)六、软件设计 (20)6。

1程序流程图 (20)6.2程序源代码 (22)八、调试过程 (27)8。

1 硬件调试 (27)8。

1.1 静态调试 (27)8.1.2 动态调试 (27)8.2 软件调试 (28)8。

3 调试收获与改进意见 (29)九、设计总结 (29)十、参考文献 (31)一、设计题目用8031单片机控制可测方波1~100Hz,并显示每分钟计数的脉冲。

二、设计内容与要求设计方波脉冲控制显示系统,用51单片机控制输出方波输出,频率范围为1~100Hz,并用数码管显示每分钟计数的脉冲数和当前频率,用两个按键分别控制频率的增减,同时用一个复位键,可以快速回到起始状态。

三、设计目的和意义1、通过方波脉冲控制系统的设计,将单片机原理课上所学的知识融会贯通、加深理解。

培养独立设计、制作和调试单片机应用系统的能力,熟悉单片机应用系统的软硬件调试方法和系统的设计开发过程,为今后的工作实践活动夯实基础。

2、通过方波脉冲计数控制系统的设计,掌握51系列单片机的内部定时/计数器的功能和使用方法;掌握单片机外部中断的应用和程序的编程方法;掌握数码管的使用和编程方法。

通过设计方案分析、选择和设计,设计并搭制硬件电路,编写控制程序等一系列工作,掌握单片机应用的基本方法,更重要的是学会一种科学的解决问题的逻辑思维,和完成任务的方法.3、培养一个解决困难问题的积极心态,为今后在工作上奠定坚实的基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档