标题:
单片机按键调光代码 新人发个帖子记录一下
[打印本页]
作者:
K233
时间:
2019-6-29 18:06
标题:
单片机按键调光代码 新人发个帖子记录一下
利用PWM实现LED亮度调节,一个按键调亮、一个按键调暗,一个开关。下次开灯恢复上一次的亮度。
根据师傅的要求制作基于51单片机的模拟调光器。起初是觉得很难的,后面一点点的写下来就发现其实没有想象中的那么难。
单片机源程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P1^0;
sbit k2=P1^1;
sbit led=P0^0;
sbit k3=P1^2;
u16 count,value,timer1;
void delayms(u16 ms)
{
int i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void Timer1Init()
{
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
TH1 = 0xFF;
TL1 = 0xff; //1us
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void tiaoguang()
{
if(count>100)
{
count=0;
if(k1==0) //DIR控制增加
{
value++;
}
if(k2==0)
{
value--;
}
}
if(value>=990)
{
value=990;
}
if(value<=10)
{
value=10;
}
if(timer1>1000) //PWM周期为1000*1us
{
timer1=0;
}
if(timer1 <value)
{
led=1;
}
else
{
led=0;
}
}
void main()
{
u8 a;
Timer1Init(); //定时器1初始化
while(1)
{
if(k3==0)
{
delayms(10);
if(k3==1)
a++;
if(a>1)
a=0;
}
switch(a)
{
case(0): tiaoguang() ;break;//恢复亮度
case(1): led=0 ;break;//熄灭LED
}
}
}
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
{
TH1 = 0xFF;
TL1 = 0xff; //1us
timer1++;
count++;
}
复制代码
所有资料51hei提供下载:
按键调光代码.zip
(1.14 KB, 下载次数: 25)
2019-6-29 18:05 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
Link_Stark
时间:
2019-6-29 19:27
厉害了,代码已经拿走
作者:
tan61398
时间:
2019-7-1 13:37
正好需要,谢谢分享
作者:
tan61398
时间:
2019-7-1 13:38
正好需要,感谢分享
作者:
越南超级人类
时间:
2019-8-22 13:46
调不了。程序不能调光
作者:
越南超级人类
时间:
2019-8-22 13:55
我搞错了。程序是可以正常运行的,就是有闪动
作者:
247015164
时间:
2019-10-17 19:38
你好,你的程序我拿来测试了,但是不能关灯,不明白为什么。特此请教下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1