找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2295|回復: 2
收起左側(cè)

單片機手電程序(長按開關(guān)機,短按換擋)

[復制鏈接]
ID:91521 發(fā)表于 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)        //如果狀態(tài)不處于關(guān)機狀態(tài),則執(zhí)行關(guān)機
  31.             {
  32.                 key_code = 0;
  33.                 change_flag = 0;
  34.             }
  35.             else
  36.             {
  37.                 key_code = 1;         //如果已經(jīng)在關(guān)機狀態(tài)則執(zhí)行開機
  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:              //初始關(guān)機狀態(tài)
  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. }
復制代碼


評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:229641 發(fā)表于 2022-1-23 17:29 來自觸屏版 | 顯示全部樓層
這是哪家的單片機芯片?
回復

使用道具 舉報

ID:91521 發(fā)表于 2022-1-24 18:45 | 顯示全部樓層
AVR單片機,AT tiny13a
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表