标题:
注释详细的51单片机pwm调光代码
[打印本页]
作者:
z6509103
时间:
2019-5-18 14:59
标题:
注释详细的51单片机pwm调光代码
单片机pwm调光源程序如下:
/*-----------------------------------------------
名称:PWM调光
修改:无
内容:通过PWM(脉宽调制)调节LED的亮度
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
void Delay(unsigned int t); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned int CYCLE=1000,PWM_LOW=0;//定义周期并赋值
while (1) //主循环
{
LED0=1;
Delay(60000); //特意加延时,可以看到熄灭的过程
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低
//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
LED0=0; //点亮LED
Delay(PWM_LOW);//延时长度,600次循环中从1加至599
LED0=1; //熄灭LED
Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1
}
LED0=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //与逐渐变亮相反的过程
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
//主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
复制代码
所有资料51hei提供下载:
15-PWM调光.zip
(20.94 KB, 下载次数: 165)
2019-5-18 14:59 上传
点击文件名下载附件
pwm调光
下载积分: 黑币 -5
作者:
jizhouheng
时间:
2020-6-4 00:48
这个程序我觉得是很标准的写法,容易读。感谢。
作者:
doctorshi
时间:
2020-12-31 08:03
借鉴一下,做了个九档调光电路,数码管显示。
作者:
rsx9583
时间:
2020-12-31 10:14
有点意思,做单纯的PWM还是思路不错的,没搞计时器,最简单的。
作者:
人人学会单片机
时间:
2020-12-31 11:37
#include "STC89.H" //头文件包含
#include <intrins.h> //头文件包含
typedef unsigned char u8; //重新定义数据类型名
typedef unsigned short u16; //重新定义数据类型名
typedef unsigned long u32; //重新定义数据类型名
sbit PWM_OUT=P2^1;
u8 idata PWM_Write_Byte[3]=0;
// 定时器0初始化 晶振11059200,12T,输出50Hz的PWM,占空比0~255
// 定时器初值为:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
//***************************祁绪电子 2020年5月***
void PWM_Init(void)
{
TMOD &= 0xF0; //配置定时器工作模式
TMOD |= 0x02; //配置定时器工作模式 8位自动重装模式
TL0 = 0xB8;; //定时器初值
TH0 = 0xB8; //定时器重装初值
TR0 = 1; //启动定时器0
ET0=1; //允许定时器0申请中断
EA=1; //中断总闸闭合
}
//定时器0的CPU处理函数,位置任意写都行
//****************************祁绪电子 2020年5月***
void PWM_Display_timer0() interrupt 1
{
static u8 pwm_t=0; //局部变量,不丢失数据
if(pwm_t<PWM_Write_Byte[0])
{
PWM_OUT=1;
}
else PWM_OUT=0;
pwm_t++;
}
// PWM 数模变换数据分配
//**************************祁绪电子 2020年5月***
void PWM_Allot()
{
static u8 kkk=0;
static u8 count=0;
count++;
if(count>100)
{
count=0;
kkk++;
PWM_Write_Byte[0]=kkk; //kkk为占空比自动增加
PWM_Write_Byte[1]=10;
PWM_Write_Byte[2]=10;
}
}
void main() //主函数
{
PWM_Init();
while(1) //主函数大循环
{
PWM_Allot();
}
}
作者:
chjchj816
时间:
2020-12-31 14:36
程序很标准的写法 注释得详细
作者:
人人学会单片机
时间:
2020-12-31 15:21
STC89单片机 定时器做PWM程序
http://www.51hei.com/bbs/dpj-200820-1.html
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1