proteus与keil Cx51的单片机仿真(定时器应用2)

发布者:堕落的猫最新更新时间:2015-12-25 来源: eefocus关键字:proteus  keil  Cx51  单片机仿真  定时器 手机看文章 扫描二维码
随时随地手机看文章
使用定时器产生PWM波调节P0和P2口VD的亮度,当按下K01时,VD亮度减小,当按下K02时,VD亮度增加,设P0和P2口低高电平灯亮,反之灯灭。

电路图:



C程序:

#include
#include
sbit K01=P1^4; //增加键
sbit K02=P1^5; //减少键
sbit BEEP=P3^7;//蜂鸣器
unsigned char PWM=0x7f;//赋初值
void Beep();
void delayms(unsigned char ms);
void delay(unsigned t);
void main()
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
TMOD=0x21;
TH0=0xfc;//1ms延时常数12M
TL0=0x18;//频率调节
TH1=PWM;//脉宽调节
TL1=0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
while(1)
{
do{if(PWM!=0xff){PWM++;delayms(10);}
else Beep();}while(K01==0);//K01按下,亮度变暗
do{if(PWM!=0x01){PWM--;delayms(10);}
else Beep();}while(K02==0);//K02按下,亮度变亮
} }
void timer0() interrupt 1 //定时器0中断服务程序
{
TR1=0;
TH0=0xfc;
TL0=0x66;
TH1=PWM;
TR1=1;
P0=0x00;
P2=0x00; //启动输出
}
void timer1() interrupt 3//定时器1中断服务程序
{TR1=0;P0=0xff;P2=0xff;}//结束输出
void Beep()//蜂鸣器子程序
{unsigned char i;
for(i=0;i<100;i++){delay(100);BEEP=!BEEP;}//Beep取反
BEEP=1;delayms(100);//关闭蜂鸣器,并延时
}
void delay(unsigned char t){while(t--);}//延时子程序1
void delayms(unsigned char ms)//延时子程序2
{unsigned char i; while(ms--){for(i=0;i<120;i++);}}


关键字:proteus  keil  Cx51  单片机仿真  定时器 引用地址:proteus与keil Cx51的单片机仿真(定时器应用2)

上一篇:proteus与keil Cx51的单片机仿真(定时器应用1)
下一篇:proteus与keil Cx51的单片机仿真(串行通信口)

推荐阅读最新更新时间:2024-03-16 14:41

STM32之高级定时器互补输出
#include stm32f10x.h /* RCC时钟配置 */ void RCC_config(void) { ErrorStatus HSEStartUpStatus; /* RCC寄存器设置为默认配置 */ RCC_DeInit(); /* 打开外部高速时钟 */ RCC_HSEConfig(RCC_HSE_ON); /* 等待外部高速时钟稳定 */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* 设置HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /*
[单片机]
基于MCS-51单片机使用定时器编写时钟程序(汇编)
1、仔细想想还不错的思路 用定时器写一个时钟程序,想想都觉得头大。撇开其他花里胡哨的功能,先从最基本的时间显示开始吧,剩下的以后再说。 我们一般希望的是时钟能不停地计时,在需要的时候调用显示来显示当前时间,同时也可以干其他事,所以当然不能用延时来写,不然这个时钟除了只能显示时间之外就是个废物了。 我们希望每定时到一秒的时候来个中断,在中断里使存储里的时间序列加一秒(时间序列以时分秒各一个字节的方式存储)。51单片机定时器0方式1的最大定时时间是216=65536μs,也就是大约65ms出头。但我们可以每50ms来一次中断,中断到第20次的时候时间序列加一秒;或者每20ms来一次中断,到第50次的时候时间序列加一秒。一般来说
[单片机]
基于MCS-51<font color='red'>单片机</font>使用<font color='red'>定时器</font>编写时钟程序(汇编)
AVR单片机定时器输出PWM的设计及注意问题
  一、定时/计数器PWM设计要点   根据PWM的特点,在使用ATmega128的定时/计数器设计输出PWM时应注意以下几点:   1.首先应根据实际的情况,确定需要输出的PWM频率范围,这个频率与控制的对象有关。如输出PWM波用于控制灯的亮度,由于人眼不能分辨42Hz以上的频率,所以PWM的频率应高于42Hz,否则人眼会察觉到灯的闪烁。   2.然后根据需要PWM的频率范围确定ATmega128定时/计数器的PWM工作方式。AVR定时/计数器的PWM模式可以分成快速PWM和频率(相位)调整PWM两大类。   3.快速PWM可以的到比较高频率的PWM输出,但占空比的调节精度稍微差一些。此时计数器仅工作在单程正向计数方式,
[单片机]
STM32单片机简易定时器PWM输出
由于RCC- CFGR时钟配置寄存器中 APB1设置为2分频,所以TIM3就是其倍频==72M 上次我发表的STM32单片机自带PWM输出实验大家可以参考学习: http://www.51hei.com/mcu/2123.html ,这次是用定时器产生的pwm. //----------------------------------定时器-----------time.c----------- #include time.h void time_init(u16 arr,u16 psc) { RCC- APB1ENR|=1 1; //TIM2定时器时钟使能 TIM3- ARR=arr; //设置重装
[单片机]
STM32<font color='red'>单片机</font>简易<font color='red'>定时器</font>PWM输出
STM32-(23):定时器TIM(实验)
定时器实验: 透过配置定时器相关寄存器的配置,实现定时器2每1S中断一次,通过数码管将时间实时的显示出来。 用到的函数功能如下: (1) 利用TIM_Delnit()函数将Timer设置为默认缺省值; (2) TIM_InternalClockConfig()选择TIMx来设置内部时钟源; (3) TIM_Perscaler来设置预分频系数; (4) TlM_CIockDivision来设置时钟分割; (5) TIM_CounterMode来设置计数器模式; (6) TIM_Period来设置自动装入的值; (7) TIM_ARRPerloadConfig()来设置是否使用预装载缓冲器; (8) TIM_ITConfig()来开启
[单片机]
STM32-(23):<font color='red'>定时器</font>TIM(实验)
51单片机学习笔记———7.按键法配置定时器
如果用延时函数来对按键进行检测的话,会消耗单片机的内存,不是很好,于是我们有以下方法: unsigned char cnt1 = 0XFF; cnt1 = (cnt1 1)|KEY1; if(cnt1!=0x00) { KeyLock = 0; } else if (KeyLock==0) { KeyNum = 1; KeyLock = 1;//防止按键触发 }
[单片机]
STM32的高级定时器里面死区的概念
“死区”的概念 PWM 脉宽调制 在电力电子中,最常用的就是整流和逆变。这就需要用到整流桥和逆变桥。以两电平为例,每个桥臂上有两个电力电子器件,比如IGBT。这两个IGBT不能同时导通,否则就会出现短路的情况。因此,设计带死区的PWM波可以防止上下两个器件同时导通。也就是说,当一个器件导通后关闭,再经过一段死区,这时才能让另一个导通。 死区,简单解释 通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。 死区就是在
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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