本比如运用首要完成功用,一个按键,操控LED台灯的亮度。上电默许关机,榜首次按下,LED全亮,第2次按下,LED亮58%,第三次按下,LED亮47%,第四次按下,LED亮9%。
本例中首要运用模仿PWM进行LED亮度操控。因为考虑本钱,所以运用价格低廉,功用单一的单片机(没有中止功用)。所以全部靠模仿。选用 PIC16F505,其实能够用12F508或许12F509,横竖8脚的单片机都能够用。RC4接按键,RC2接LED(能够经过扩流去驱动更大概率的 LED负载)。
程序如下:
}
运用timer1(uint y)这个函数实践上很好的处理了,运用按键操控PWM调光,RGB突变等多种状况的转跳。
#include
__CONFIG(0X034);
#define uchar unsigned char
#define uint unsigned int
#define uchar unsigned char
#define uint unsigned int
uint a,q;
void delay0(uint x)//延时函数1
{
uint c,d;
for(c=x;c>0;c–)
for(d=110;d>0;d–);
}
void delay4(uint w)//延时函数2
{
uint f,e;
for(f=w;f>0;f–)
for(e=10;e>0;e–);
}
void scan()//按键扫描函数,此函数实践带了按键长击和短击功用,本比如用了按键的短击(便是很正常的操作按键)
{
while(!RC4)//假如有键被按下
{
delay4(2);
q++;//变量q自加1
}
if(q>5)//假如q大于5,阐明有键按下,并且是短击一次
{
{
RC3=1;
delay4(50);
RC3=0;
//////////这3句是驱动一个有源蜂鸣器,意思是每按一次键,蜂鸣器响一声,小家电里常见的操作。
q=0;
a++;//a是散转的变量,a=1,2,3,4代表按键按下了几回。
}
}
void timer1(uint y)//此函数式本程序的魂灵,她具有了2个功用,榜首:模仿PWM的脉宽能够用过y的值改动,意思是改动y的值就能够改 变LED亮度。第二,在PWM工作方式中,一起还检测是否有按键按下,然后跳转到下一个功用。
{
uint k;
for(k=y;k>0;k–)
{
if(RC4==0)
{
a=2;
}
}
}
void timer2(uint n)//同上
{
uint m;
for(m=n;m>0;m–)
{
if(RC4==0)
{
a=3;
}
}
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/318299.html