标题:
基于51单片机实现不同按键输出不同占空比,从而达到调光作用
[打印本页]
作者:
周鹏
时间:
2016-10-14 19:26
标题:
基于51单片机实现不同按键输出不同占空比,从而达到调光作用
输出0v~5v不同占空比,从而实现多级调光,此程序硬件电路还必须配合SGD1011芯片使用,单片机输出不同脉冲信号,控制SGD1011输出电流大小,从而控制不同亮度的灯管。后续会把电容触摸调光,上传至51黑电子论坛论坛,资源共享。本压缩包附有multisim/protues仿真和程序/SGD1011芯片规格介绍书。我也找了好长时间才找到这个SGD1011资料,现分享。谢谢!
0.png
(26.94 KB, 下载次数: 112)
下载附件
2016-10-16 14:34 上传
单片机源程序:
#include<reg51.h> //程序是基于KEIL-C51编写,引入8051头文件
#define uint unsigned int
#define uchar unsigned char
sbit P37=P3^7;
sbit k1=P1^0; //开、关
sbit k2=P1^1; //一档
sbit k3=P1^2; //二挡
sbit k4=P1^3; //三挡
sbit k5=P1^4; //四挡
sbit k6=P1^5; //五档
unsigned int scale=10; //占空比控制变量
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
timer0() interrupt 1 //定时器0中断程序
{
static unsigned int tt ; //tt用来保存当前时间在一个时钟周期的位置
tt++; //每中断一次,即每经过250us,tt的值自加1
if(tt==10) //中断10次定时2.5ms,
{
tt=0; //使tt=0,开始新的周期,达到循环的效果
P37=0; //点亮LED
}
if(scale==tt) //如果占空比与中断次数相同时,此时输出高电平
P37=1; //熄灭LED灯
/*
前面的程序是将占空比设置成了10个等级,scale=1时维持高电平的时间
是1/10个PWM周期(这里是2.5ms),因为scale<=tt的时间段是低电平点亮LED灯的,
scale>=tt的时间是熄灭LED灯的,通过改变一个周期内高低电平维持的时间长短
就可以控制LED灯的亮度或者是电机的转速了,这就是PWM的工作原理
*/
}
void keyscan()
{
if(k1==0)
{
delay(10);
if(k1==0)
{
scale=10;
while(!k1);
}
}
if(k2==0)
{
delay(10);
if(k2==0)
{
scale=8;
while(!k2);
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
scale=6;
while(!k3);
}
}
if(k4==0)
{
delay(10);
if(k4==0)
{
scale=4;
while(!k4);
}
}
if(k5==0)
{
delay(10);
if(k5==0)
{
scale=2;
while(!k5);
}
}
if(k6==0)
{
delay(10);
if(k6==0)
{
scale=0;
while(!k6);
}
}
}
/*void display()
{
keyscan();
}*/
void main(void)
{
unsigned int n; //延时循环变量
TMOD=0x02; //定时器0,工作模式2(0000 0010),8位定时
TH0=0x06; //定时250us(12M晶振)
TL0=0x06; //预置值
TR0=1; //启动定时器0
ET0=1; //启动定时器0中断
EA=1; //开启总中断
while(1)
{
keyscan();
// for(n=0;n<50000;n++) //延时一段时间
// {
// scale=6; //占空比控制变量加一
// if(scale==10) scale=0; //达到循环的效果
// }
}
}
复制代码
0.png
(58.18 KB, 下载次数: 93)
下载附件
2016-10-16 14:34 上传
所有资料打包下载:
IC触摸6键调光程序 硬件仿真.rar
(785.5 KB, 下载次数: 49)
2016-10-14 19:23 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
gdx
时间:
2018-8-28 19:37
谢谢楼主的分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1