找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1501|回复: 2
收起左侧

单片机手电程序(长按开关机,短按换挡)

[复制链接]
ID:91521 发表于 2022-1-23 15:39 | 显示全部楼层 |阅读模式
  1. #include <tiny13a.h>
  2. #include <delay.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. #define key PINB.1

  6. //#define LED PORTB.0

  7. uchar key_code = 0;
  8. uchar time_counter = 0;

  9. bit change_flag = 0;

  10. void key_scan(void)
  11. {
  12.     if(key)
  13.     {                                                
  14.         if((time_counter > 3) && (time_counter < 100))//短按
  15.         {
  16.             if(change_flag)
  17.             {
  18.                 key_code++;
  19.                 if(key_code == 5) key_code = 1;
  20.             }
  21.         }
  22.         time_counter = 0;
  23.     }   
  24.     else   
  25.     {  
  26.         time_counter++;
  27.         delay_ms(10);  
  28.         if(time_counter == 100)//长按
  29.         {
  30.             if (key_code != 0)        //如果状态不处于关机状态,则执行关机
  31.             {
  32.                 key_code = 0;
  33.                 change_flag = 0;
  34.             }
  35.             else
  36.             {
  37.                 key_code = 1;         //如果已经在关机状态则执行开机
  38.                 change_flag = 1;
  39.             }
  40.         }
  41.         if(time_counter > 100)
  42.             time_counter = 101;   
  43.     }
  44. }

  45. void main(void)
  46. {
  47. // Input/Output Ports initialization
  48. // Port B initialization
  49. // Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out
  50. DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
  51. // State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=P Bit0=0
  52. PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);

  53. TCCR0A=0x03;
  54. TCCR0B=0x01;

  55.     while (1)
  56.     {
  57.         key_scan();

  58.         switch (key_code)
  59.         {
  60.             case 0x00:              //初始关机状态
  61.                 TCCR0A=0x03;
  62.                 PORTB.0 = 1;
  63.                 break;
  64.             case 0x01:
  65.                 TCCR0A=0x83;
  66.                 OCR0A = 0x19;       //10%亮度
  67.                 break;
  68.             case 0x02:
  69.                 OCR0A = 0x40;       //25%亮度
  70.                 break;
  71.             case 0x03:
  72.                 OCR0A = 0x80;       //50%亮度
  73.                 break;
  74.             case 0x04:
  75.                 OCR0A = 0xc0;       //75%亮度
  76.                 break;                  
  77.             default:
  78.                 break;
  79.         }   
  80.     }
  81. }
复制代码


评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:229641 发表于 2022-1-23 17:29 来自手机 | 显示全部楼层
这是哪家的单片机芯片?
回复

使用道具 举报

ID:91521 发表于 2022-1-24 18:45 | 显示全部楼层
AVR单片机,AT tiny13a
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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