找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2193|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:91521 發(fā)表于 2022-1-23 15:39 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  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)機(jī)狀態(tài),則執(zhí)行關(guān)機(jī)
  31.             {
  32.                 key_code = 0;
  33.                 change_flag = 0;
  34.             }
  35.             else
  36.             {
  37.                 key_code = 1;         //如果已經(jīng)在關(guān)機(jī)狀態(tài)則執(zhí)行開機(jī)
  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)機(jī)狀態(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. }
復(fù)制代碼


評(píng)分

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

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:229641 發(fā)表于 2022-1-23 17:29 來自手機(jī) | 只看該作者
這是哪家的單片機(jī)芯片?
回復(fù)

使用道具 舉報(bào)

板凳
ID:91521 發(fā)表于 2022-1-24 18:45 | 只看該作者
AVR單片機(jī),AT tiny13a
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表