找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2775|回复: 2
打印 上一主题 下一主题
收起左侧

单片机LED不同频率闪烁 通过按键实现

[复制链接]
跳转到指定楼层
楼主
可以通过按键切换不同的闪烁频率

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define        uint unsigned int
  4. sbit LED=P3^7;
  5. sbit LED2=P3^6;
  6. uchar num=0,t=0,mode_num=0,data_H,data_L,stop_num=0;
  7. uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,
  8. 0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  9. void delay(uint k)                   //延时函数
  10. {
  11.         uint m,n;
  12.         for(m=0;m<k;m++)
  13.         {
  14.                 for(n=0;n<120;n++);
  15.         }
  16. }
  17. void Timer1() interrupt        3 //中断函数  中断方式3
  18. {
  19.         t++;
  20.         TH1=0x3C;  //计数器赋初值50ms
  21.         TL1=0xb0;
  22. }
  23. void T0_init()           //开中断
  24. {
  25.         TMOD=0x11;
  26.         TH1=0x3C;
  27.         TL1=0xb0;
  28.            ET1=1;                                                                                                                                                                                       
  29.         TR1=1;
  30.         EA=1;
  31.         EX0=1;
  32.         IT0=1;
  33.         EX1=1;
  34.         IT1=1;
  35. }
  36. void display(void)        //显示函数
  37. {
  38.         P1=0x01;
  39.         P2=tab[data_H];
  40.         delay(1);
  41.         P1=0x02;
  42.         P2=tab[data_L];
  43.         delay(1);

  44. }

  45. void dat_tim()
  46. {
  47.         switch(mode_num)
  48.         {
  49.                 case 1:
  50.                 {
  51.                         if(t==20)
  52.                         {
  53.                             LED2=0;
  54.                                 LED=~LED;
  55.                                 t=0;
  56.                                 if(LED==1)
  57.                                 {
  58.                                         num++;
  59.                                 }
  60.                         }
  61.                 }break;
  62.                 case 0:
  63.                 {
  64.                         if(t==2)
  65.                         {
  66.                                 LED=0;
  67.                                 LED2=~LED2;
  68.                                 if(LED2==1)
  69.                                 {
  70.                                         num++;
  71.                                 }
  72.                                 t=0;
  73.                         }
  74.                 }
  75.         }

  76. }
  77. void data_in(void)           //将a的值分割为个位和十位函数
  78. {
  79.         data_L=num%10;
  80.         data_H=num/10;
  81. }

  82. main()
  83. {
  84.         LED=0;
  85.         T0_init();
  86.         while(1)
  87.         {
  88.                 dat_tim();
  89.                 data_in();
  90.                 display();
  91.         }
  92. }
  93. void mode()interrupt 0
  94. {
  95.         mode_num++;
  96.         num=0;
  97.         if(mode_num>1)
  98.         {
  99.                 mode_num=0;
  100.         }
  101. }
  102. void stop()interrupt 2
  103. {
  104.         stop_num++;
  105.         if(stop_num>1)
  106.         {
  107.                 stop_num=0;
  108.         }
  109.         switch(stop_num)
  110.         {
  111.                 case 0:
  112.                 {
  113.                         TR1=1;
  114.                 }break;
  115.                 case 1:
  116.                 {
  117.                         TR1=0;
  118.                 }break;
  119.         }
  120. }
复制代码


下载:
LED不同频率闪烁.rar (49.64 KB, 下载次数: 16)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-2-12 16:08 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:255405 发表于 2017-12-7 19:40 | 只看该作者
这是能自主控制LED灯加减速吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表