基于51单片机的可调PWM波程序

发布者:码上奇迹最新更新时间:2020-03-03 来源: 51hei关键字:51单片机  可调PWM波  定时器 手机看文章 扫描二维码
随时随地手机看文章

#include

#define uint unsigned int 

uint pp;

char num=2,dis;

sbit pwm=P1^0;

sbit s2=P3^4;

sbit s3=P3^5;


sbit dula=P2^6;

sbit wela=P2^7;


unsigned char code table[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,

0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};


void keyscan()

{

        if(s2==0)

        {

                while(!s2);

                num++;

                if(num==11)

                        num=10;

                dis=num;

        }

        if(s3==0)

        {

                while(!s3);

                num--;

                if(num==-1)

                        num=0;

                dis=num;

        }

}


void display(a)

{

   dula=0;

   P0=table[a];

   dula=1;

   dula=0;


   wela=0;

   P0=0xfe;

   wela=1;

   wela=0;   

}


void main()

{

        TMOD=0x01;                 //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。

        TR0=1;                         //打开定时器

        TH0=0Xff;                 //定时器设置,每隔100微秒发起一次中断。

        TL0=0Xa4;

        ET0=1;                         //开定时器0中断

        EA=1;                         //开总中断

        while(1)

        {

                keyscan();

                if((num!=0)&&(num!=10))        //对于占空比为0和100%这两种极端情况,最好分离出,单独考虑

                {

                        if(pp<=num)

                                pwm=1;

                        else

                                pwm=0;

                }

                else if(num==0)        //当占空比为0

                        pwm=0;

                else

                        pwm=1;

                if(pp==10)                //当占空比为100%

                        pp=0;

        display(num);//显示num当前值,占空比为num/10。

        }

}


void time0() interrupt 1

{        TH0=0Xff;

        TL0=0Xa4;

        pp++;

}


关键字:51单片机  可调PWM波  定时器 引用地址:基于51单片机的可调PWM波程序

上一篇:Keil C51单片机集成开发环境编程与调试教程
下一篇:51单片机串口发送字符事例

推荐阅读最新更新时间:2024-11-12 22:46

慎用51单片机中的RET指令
题目:已知有四个按键依次连接单片机中的P3口的0到3的IO口,有四个LED灯连接P1的0到3 IO口,写一程序,满足以下条件:当按下按一个按键,对应的LED会发亮,比如 按下P3.0的按键,连接P1.0的LED就发亮。y 以下是我同学编写的程序: org 0000h mov P1,#0ffh loop: jnb P3.0,led1;* jnb P3.1,led2;* jnb P3.2,led3;* jnb P3.3,led4;* ljmp loop led1: clr P1.0 ret led2: clr P1.1 ret led3: clr P1.2 ret led4: clr P1.3 ret end 程序的意图是,制造
[单片机]
51单片机C中关于.c文件和.h文件
1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明; 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。 2)h文件里应该有什么 常量,结构,类型定义,函数,变量申明。 3)h文件不应该有什么 变量定义, 函数定义。 4)extern问题 对于变量需要extern; 对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。 5)include包含问题 虽然申明和类型定义可以重复,不过推荐使用条件编译。 #ifndef _FILENAME_H, #define _FILENAME_H ……
[单片机]
51单片机输出方波问题
一:NOTE 今天分享一个题目,有关51单片机输出方波的问题,好了,进入正题 二:题目 已知8051单片机的时钟频率为6MHZ,通过定时器1的工作方式1在P1^1引脚输出一个1KHZ占空比为60%的矩形波。 三:分析题目 1、首先第一个条件,时钟频率6MHZ,从这里我们可以得出它的时钟周期为1/f=2us 2、第二个条件,定时器1,工作方式1,那么对应TMOD寄存器也就是0x10。 3、第三个条件,输出一个1KHZ占空比60%,这里其实有两个条件,第一个输出1KHZ,他告诉我们输出的波形周期是1/f=1ms,然后是占空比,推出高电平为1ms*60%=600us,那么低电平就是400us,到这里,题目所有条件都分析完毕
[单片机]
<font color='red'>51单片机</font>输出方波问题
555定时器芯片实现单片机看门狗电路
1、程序跑飞现象 随着单片机在能源领域中的广泛应用,单片机的抗干扰问题越来越突出,煤矿井下环境一般比较恶劣,这便会为单片机控制系统带来各种干扰,以致系统不能正常工作。单片机应用系统的抗干扰性能主要取决于硬件的抗干扰设计,但软件 抗干扰设计作为硬件抗干扰的完善和补充,作用也非常重要,因为大量的干扰通常并不能影响系统内硬件的运作,却常会使系统的软件无法正常运行,单片机应用的一个突出问题,便是单片机运行过程中经常出现的程序跑飞现象。 在单片机系统中,因为干扰的原因,在非预期的情况下,使得程序计数器PC 的值发生随机的变化,从而使得程序的流向指向不确定区域,这便是程序的跑飞。程序跑飞后或者会使指令的地址码和操作码发生改变,PC 把操作数当作
[单片机]
555<font color='red'>定时器</font>芯片实现单片机看门狗电路
51单片机抢答器设计
任务描述 某企业承担了某抢答比赛抢答器系统的设计,要求如下:①可同时供3名选手参加比赛,他们的编号分别是1、2、3,每名选手各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是S1、S2、S3。②给主持人设置两个控制开关“START”和”END”,用来控制系统中抢答的开始和结束。③抢答器具有数据所存、显示和声音提示的功能。抢答开始前,若有选手按动抢答按钮,视为违规,要显示其编号,并长响蜂鸣器;抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号,同时蜂鸣器给出音响提示,此外,要封锁输入电路,禁止其他选手抢答。优先抢答选手的编号将一直保存到主持人将系统清零为止。 硬件电路图 元件清单 C
[单片机]
<font color='red'>51单片机</font>抢答器设计
stm32定时器概述
stm32的定时器分3类:基本定时器、通用定时器和高级定时器,其中通用定时器分两组:(TIM2-TIM5)和(TIM9-TIM14)。 基本定时器(TIM6、TIM7) 功能:基本定时和驱动DAC 16位自动重装递增计数器 16位可编程预分频器 频率:84MHz 中断源:计数器上溢更新中断 通用定时器(TIM9到TIM14) 16位自动重装递增计数器 16位可编程预分频器 TIM9和TIM12有两路单通道,其余TIM10、11、13、14都有一路单通道 多定时器互联同步 中断源:更新、输入捕获、输出比较 TIM9和TIM12 时钟源:内部时钟、外部时钟(外部输入引脚TIx)、定时器互同步时钟 常用功能模式:基本
[单片机]
stm32<font color='red'>定时器</font>概述
51单片机 (6)串口中断通信+定时器2串口中断
51单片机默认使用定时器1作为串口通信的波特率发生器、定时器1中断通信,串口与定时器1冲突,在遇到定时器不够用的时候可以用定时器2 #include reg52.h void DelayMs(unsigned int i); void SerialInit(); void SendByte(unsigned char sbyte); void SendString(unsigned char *pstr); void main(void) { SerialInit(); while(1); //注:必需要无限循环 } /* //单片
[单片机]
使用STM32的单个普通定时器产生4路不同频率的方波
1)设置计数器为向上计数模式,将自动重装载寄存器设置为0xFFFF;这样计数器会循环计数。 2)每个定时器通道设置为输出比较模式,并设置比较匹配时对应的输出管脚翻转输出。 3)按照输出波形的半波周期计算出一个数值称作Half_Cyc。例如:定时器的时钟频率是72MHz,需要产生3456Hz的方波,则Half_Cyc = 72M/(3456*2) = 41667;如需要产生200kHz的方波,则Half_Cyc = 72M/(200k*2) = 180。 4)设置每个通道在输出比较匹配时产生中断,在中断中将比较寄存器的数值读出并加上Half_Cyc的数值,如果计算出的数值超过16位则舍弃超出的部分,再把这个新的数值写回相
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved