基于51单片机之两键控制LED(调光台灯)实验例程

发布者:DazzlingGaze最新更新时间:2014-12-26 来源: 51hei关键字:51单片机  两键控制  实验例程 手机看文章 扫描二维码
随时随地手机看文章
**************************  Copyright(C) CaKe  ****************************************
===================================================
==============**版权信息   : CaKen工作室                            ==============
==============**文件名     : main.c              ==============
==============**作者       : CaKen             ==============
==============**版本号     : V1.0              ==============
==============**时间       : 2014.08.23               ==============
==============**功能描述   : 16键电子琴实验测试         ==============
=================================================
*********************************************************
 
#include"reg52.h"
 
#define  CaKen_LED  P1             //设置LED连接的I/O组
 
#define  CaKen_PWM 501       //设置明亮的总级数(级数过大会出现闪烁)(值域:0~65535)
#define  CaKen_MAX 500       //设置最大亮度(值域:小于明亮总级数)
#define  CaKen_MIN 1       //设置最小亮度(值域:明亮大于等于1,小于最大亮度)
 
sbit     CaKen_KEY_ADD = P3^0;     //亮度加
sbit     CaKen_KEY_DEC = P3^1;        //亮度减
 
 
*********************************************************
函数名:延时程序
调  用:delay();
参  数:
返回值:
结  果:
备  注: 0.1ms延时程序(12MHz 10倍于51单片机速度时)
*********************************************************/
void delay (unsigned int a)
{
 unsigned char i;
   while( --a != 0)
   {
  for(i = 0; i < 12; i++);
   }         
}
 
 
*******************************************************
函数名:LED显示程序
调  用:Display();
参  数:CaKen
********************************************************/
 
void Display(unsigned int CaKen) //显示程序(50ms的PWM宽度)
{
   CaKen_LED=0x00;                 //LED小灯亮
 delay(CaKen);                 //延时a的长度
 CaKen_LED=0xff;                 //LED小灯灭
 delay(CaKen_PWM-CaKen);         //延时总PWM长度减a
}
 
 
********************************************************
函数名:main
备  注:
********************************************************/
void main()
{
  unsigned int k=1;     //初始化LED的亮度 
  while(1)
   {  
      Display(k);
      if(CaKen_KEY_ADD==0)      //如果按键按下则继续
       {
         delay(20);        //消抖 延时20mS
         if(CaKen_KEY_ADD==0)     //如果按键按下则继续
   {
     k++;
     if(k>CaKen_MAX)
      {
        k=CaKen_MAX;
      }
   }
       }
 
    if(CaKen_KEY_DEC==0)   //如果按键按下则继续
        {       
         delay(20);     //消抖 延时20mS
         if(CaKen_KEY_DEC==0)  //如果按键按下则继续
    {
       k--;
      if(k
       {
         k=CaKen_MIN;
     
       }
    }
       }
   }
}
 
=====================================================
 -------------------      CaKen工作室  原创作品     --------------------
 -------------------            CaKen工作室  版权所有       --------------------
======================================================
关键字:51单片机  两键控制  实验例程 引用地址:基于51单片机之两键控制LED(调光台灯)实验例程

上一篇:基于AT89C513lA的惯性测量组件系统设计
下一篇:基于51单片机之外部中断实验

推荐阅读最新更新时间:2024-03-16 13:49

51单片机控制SL811HS的USB主机底层驱动
引言 基于USB接口的设备使用方便,性价比高,因此在人们的工作和生活中得到了广泛的应用,如U盘,移动硬盘,光驱,USB摄像头,USB鼠标键盘等,同时,51系列单片机以其成熟的技术和高性价比吸引了大量国内用户,被广泛应用于测控和自动化领域,因此,如果在51单片机系统中增加USB主机接口,实现对USB从机设备的控制,则该单片机系统可以充分利用现有的各种USB从机设备,大大扩展单片机系统功能。 本设计实现了在51单片机系统中增加USB主机功能,采用普通51单片机外接专用USB接口芯片的方案,这种方案虽然会使系统传输速度受到限制,而且在稳定性有所欠缺,但此方案设计灵活性高,且易于移植,为低成本产品的开发提供了广阔前景,设计中采用51单
[应用]
51单片机条件转移指令
条件转移指令是指在满足一定条件时进行相对转移。 判A内容是否为0转移指令 JZ rel JNZ rel 第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。因此这第指令我们可以这样理解:JZ 标号。即转移到标号处。下面举一例说明: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值
[单片机]
<font color='red'>51单片机</font>条件转移指令
51单片机基础实验例程
代码来源见代码注释。 实验1:点亮第一个LED /************************************************************************************** * 点亮第一个LED实验 * 实现现象:下载程序后D1指示灯点亮 注意事项:无 ***************************************************************************************/ #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 sbit led=P2^0
[单片机]
<font color='red'>51单片机</font>基础<font color='red'>实验</font><font color='red'>例程</font>
51单片机系列知识2--存储器(1)
一、存储器 0(《51单片机原理与实践》高卫东、辛友顺、韩颜正编著.北京航天航空大学出版社) △ 存储器组织(51系类单片机) 程序存储器 片内程序存储器(根据型号不同有1KB、2KB、4KB、8KB、32KB、64 KB) 片外程序存储器(最大可扩展到64 KB) 数据存储器 片内数据存储器 低128单元 工作寄存器区0~1FH 位寻址区20H~2FH 用户RAM区30H~7FH—用于堆栈、数据缓冲 高128单元—特殊功能寄存器离散地分布在这一区域,51系类单片机有21SFR 8
[单片机]
<font color='red'>51单片机</font>系列知识2--存储器(1)
51单片机的i2c多字节的读写24c02
使用Keil的编译环境下载,确实能够下载,但是入口的地址是如下黄色的那行显示所示,如果单步执行(F11)或全速运行(F5),程序始终在原位置不动(0x1FFF4252),如果强制的将PC指针的值和SP的值修改为0x8000000与0x2000000,然后在点击运行,则能够跑到main()函数,再全速运行,能够看到客户板子上的LED灯的闪烁。 但是如果不强制修改PC和SP指针的值,则程序不执行。 所以问题就变成为什么程序下载进去后的地址是0x1FFF4252?0x1FFF4252又是什么地址呢?查阅相应的手册,发现0x1FFF4252是处在了Systemmemory区域。 用万用表测量了客户板上的Boot0引脚的电平,发现电平
[单片机]
<font color='red'>51单片机</font>的i2c多字节的读写24c02
51单片机之动态数码管的实现
1.为什么是动态的? 1.采用了发光管的余晖和人眼的视觉暂留效应,使人看到好像各位数码管都在同时显示 2.特点: 1.同样是利用了138译码器对高低电平进行操作 2. 动态显示将所有的数码管的段选线并联,采用循环的方式对每一位进行操作 3.关于138译码器 输出高低电频是有着一定规律的 如果是110(LSA,LSB,LSC),则为L3为低电平;(反向二进制) 同时,要注意看真值表(X为任意值,L为低电平,H为高电平) 4.关于怎样实现动态的具体操作 1.使用数组来时数码管实现输出数字 2.使用for循环来时函数进行循环操作 3.使用switch case函数实现不同字段的选择 4
[单片机]
<font color='red'>51单片机</font>之动态数码管的实现
51单片机入门——(新)简易数字时钟
设计要求 实现正确稳定地显示小时(两位数)、分钟(两位数)、秒钟(两位数),同时数码管应无闪烁问题。 通过按键分别实现时、分信息的调整,方便用户对时间的校准。 加入闹铃功能在(本设计中用LED代替)。 原理图 按键部分介绍 key1用于切换时分秒的加减。例:第一次按下后,按key2key3时“秒”加减,第二次按下后,按key2key3时“分”加减,第三次按下后,按key2key3时“时”加减,第四次按下后,按key2key3不起作用,依次循环。 key2用于加。 key3用于减。 key4用于切换时间显示和闹钟显示切换。 代码解析 mian.c #include reg52.h #includ
[单片机]
<font color='red'>51单片机</font>入门——(新)简易数字时钟
80C51单片机中断的编程使用方法介绍
1、单片机中断: 找了一张 80C51 单片机的图如下: 其中,在 P3.2、P3.3 的位置,即 12 ,13 引脚处,标有 INT0 和 INT1,那两个引脚就是外部中断的输入。上面一个横杠代表低电平有效,给 P3.2、P3.3 赋值 0,就可以运行已经写好的中断服务程序。具体怎么用,还要熟悉一些中断寄存器的使用。 2、中断寄存器: (1)、IE (Interrupt Enable):中断允许控制寄存器 EA (IE.7):EA=0 时,所有中断禁止(即不允许中断) EA=1 时,各中断的产生由个别的允许位决定 ET2 (IE.5):定时器 2 溢出中断允许(8052 用,博主用的 STC89C54RD+ 也有) ES
[单片机]
80C<font color='red'>51单片机</font>中断的编程使用方法介绍
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved