|
用51单片机的PWM控制实现LED增减光的仿真原理图(proteus工程文件可到本帖附件下载):
51单片机源程序:
- //---------------------------------------------------------------------
- //程序名:PWM7-2.c
- //程序功能:PWM控制LED增减光。
- //---------------------------------------------------------------------
- #include <reg51.h>
- sbit OUT=P2^7; //PWM输出
- sbit INC=P2^0; //增加亮度按钮K1接口
- sbit DEC=P2^1; //减小亮度按钮K2接口
-
- //--------------------------- 定时器0中断函数 ------------------------
- //频率
- void Timer0(void) interrupt 1 //定时器0中断
- {
- OUT=1; //关LED
- TL0=0;
- TR1=1; //打开脉宽定时
- }
- //-------------------------- 定时器1中断函数 -------------------------
- //脉宽
- void Timer1(void) interrupt 3 //定时器1中断
- {
- OUT=~OUT; //开LED
- TR1=0; //脉宽调节结束
- }
- //--------------------------- 消抖延时函数 ----------------------------
- delay()
- {
- unsigned int i;
- for(i=0;i<2000;i++);
- }
- //---------------------------- 定时器设置函数 ---------------------------
- INIT_TIMER()
- {
- TMOD=0x22; //设置T1、T0为模式2方式,自动重装
- TH1=0; //脉宽宽度
- TL1=0;
- TH0=0; //频率调节=0频率最低
- TL0=0;
- TR0=1; //启动T0定时
- EA=1; //允许总中断
- ET1=1; //允许定时器1中断
- ET0=1; //允许定时器0中断
- }
- //------------------------------- 主函数 -------------------------------
- main()
- {
-
- INIT_TIMER();
- // 无限循环
- while(1)
- {
- INC=1;DEC=1;
- if (INC==0)
- { delay();
- if (INC==0)
- {
- if (TH1<240) TH1++;
- }
- }
- else if (DEC==0)
- { delay();
- if (DEC==0)
- {
- if (TH1>0) TH1--;
- }
- }
复制代码
该系列源码包含有很多非常经典,代码风格十分规范,而且注释详细的单片机例程,还带仿真,对于MCU学习特别是初学者是很有帮助的,全部源码下载(共25个项目):http://www.51hei.com/bbs/dpj-79328-1.html
本例程下载(含proteus仿真工程文件与源码):
7-2单片机PWM控制LED增减光实验.rar
(31.54 KB, 下载次数: 148)
|
评分
-
查看全部评分
|