wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 732|回復: 9
打印 上一主題 下一主題
收起左側

這個代碼不能編譯,應該怎樣修改

[復制鏈接]
跳轉到指定樓層
樓主
ID:72649 發表于 2025-10-31 18:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

#include "STC8G.H"

// 系統時鐘頻率定義(根據實際晶振頻率修改)
#define FOSC 24000000L  // 24MHz

// 全局變量
unsigned int timer1_count = 0;
bit p00_state = 0;

// 引腳映射結構體
struct PinMapping {
    bit* input_pin;     // 輸入引腳
    bit* output_pin1;   // 輸出引腳1  
    bit* output_pin2;   // 輸出引腳2
};

// 函數聲明
void GPIO_Init(void);
void Timer0_Init(void);
void Timer1_Init(void);
void Delay3s(void);
void ProcessInputChannels(void);

void main()
{
    GPIO_Init();        // 初始化GPIO
    Timer0_Init();      // 初始化定時器0(用于延時)
    Timer1_Init();      // 初始化定時器1(用于P00閃爍)
   
    EA = 1;             // 開啟總中斷
   
    while(1)
    {
        // 處理P1口輸入通道
        ProcessInputChannels();
    }
}

// 定時器1中斷服務函數 - 用于P00閃爍
void Timer1_ISR() interrupt 3
{
    // 重裝定時器初值(1ms)
    TH1 = (65536 - FOSC/12/1000) >> 8;
    TL1 = (65536 - FOSC/12/1000) & 0xFF;
   
    timer1_count++;
    if(timer1_count >= 500)  // 500ms到達
    {
        timer1_count = 0;
        p00_state = ~p00_state;  // 狀態取反
        P00 = p00_state;         // 設置P00輸出
    }
}

void GPIO_Init(void)
{
    // P0口設置,P00設置為推挽輸出[citation:6]
    P0M0 = 0x01;  // 0000 0001 - P0.0推挽輸出
    P0M1 = 0x00;
   
    // P1口設置為準雙向模式(輸入)[citation:10]
    P1M0 = 0x00;
    P1M1 = 0x00;
   
    // P2口設置為推挽輸出模式
    P2M0 = 0xFF;  // 1111 1111 - 推挽輸出
    P2M1 = 0x00;
   
    // P3口設置為推挽輸出模式
    P3M0 = 0xFF;  // 1111 1111 - 推挽輸出  
    P3M1 = 0x00;
   
    // P5口設置,P54設置為推挽輸出
    P5M0 = 0x10;  // 0001 0000 - P5.4推挽輸出
    P5M1 = 0x00;
   
    // 初始化所有輸出引腳為低電平
    P00 = 0;
    P2 = 0x00;
    P3 = 0x00;
    P54 = 0;
}

// 定時器0初始化(用于延時函數)
void Timer0_Init(void)
{
    AUXR &= 0x7F;       // 定時器時鐘12T模式
    TMOD &= 0xF0;       // 設置定時器0模式
    TMOD |= 0x01;       // 定時器0工作模式1:16位定時器[citation:1]
}

// 定時器1初始化(用于P00閃爍)
void Timer1_Init(void)
{
    TMOD &= 0x0F;       // 設置定時器1模式
    TMOD |= 0x10;       // 定時器1工作模式1:16位定時器
   
    // 設置1ms定時初值
    TH1 = (65536 - FOSC/12/1000) >> 8;
    TL1 = (65536 - FOSC/12/1000) & 0xFF;
   
    TF1 = 0;            // 清除中斷標志
    TR1 = 1;            // 啟動定時器1
    ET1 = 1;            // 使能定時器1中斷
}

// 處理輸入通道函數
void ProcessInputChannels(void)
{
    // 檢測每個輸入通道
    if(P10 == 0) { Delay3s(); P20 = 1; P32 = 1; } else { P20 = 0; P32 = 0; }
    if(P11 == 0) { Delay3s(); P21 = 1; P33 = 1; } else { P21 = 0; P33 = 0; }
    if(P12 == 0) { Delay3s(); P22 = 1; P34 = 1; } else { P22 = 0; P34 = 0; }
    if(P13 == 0) { Delay3s(); P23 = 1; P35 = 1; } else { P23 = 0; P35 = 0; }
    if(P14 == 0) { Delay3s(); P24 = 1; P36 = 1; } else { P24 = 0; P36 = 0; }
    if(P15 == 0) { Delay3s(); P25 = 1; P37 = 1; } else { P25 = 0; P37 = 0; }
    if(P16 == 0) { Delay3s(); P26 = 1; P54 = 1; } else { P26 = 0; P54 = 0; }
    if(P17 == 0) { Delay3s(); P27 = 1; P30 = 1; } else { P27 = 0; P30 = 0; }
}

// 3秒延時函數
void Delay3s(void)
{
    unsigned int i;
    unsigned long timer_val;
   
    // 計算50ms的定時初值
    timer_val = 65536 - FOSC/12/20; // 50ms初值
   
    for(i = 0; i < 60; i++)  // 60次×50ms = 3000ms = 3秒
    {
        TH0 = timer_val >> 8;
        TL0 = timer_val & 0xFF;
        
        TF0 = 0;
        TR0 = 1;
        while(!TF0);    // 等待定時器溢出
        TR0 = 0;
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1133081 發表于 2025-11-1 08:00 | 只看該作者
Keil編譯報錯  C165: 'input_pin': ptr to bit
樓主在論壇混了10年不應該寫出這么低級的代碼?看不出要實現什么功能。
回復

使用道具 舉報

板凳
ID:235200 發表于 2025-11-1 10:29 | 只看該作者
編譯后都會有錯誤提示,根據提示去修改就行了
回復

使用道具 舉報

地板
ID:72649 發表于 2025-11-2 19:28 來自觸屏版 | 只看該作者
csmyldl 發表于 2025-11-1 10:29
編譯后都會有錯誤提示,根據提示去修改就行了

應該怎樣修改呢?
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
6#
ID:1162413 發表于 2025-11-3 09:19 | 只看該作者
可以去博客上搜搜或者問問豆包,希望能幫到你
回復

使用道具 舉報

7#
ID:844772 發表于 2025-11-3 09:27 | 只看該作者
hjx5548 發表于 2025-11-2 19:28
應該怎樣修改呢?

bit 不能定義指針,但程序也沒用這個結構,不如刪除算了。還有這個延時要不要考慮修改一下。
回復

使用道具 舉報

8#
ID:814322 發表于 2025-11-3 15:52 | 只看該作者
Keil 的 c51 幫助文檔:

The following restrictions apply to bit variables and bit declarations:

A bit cannot be declared as a pointer. For example:
bit *ptr;         /* invalid */
An array of type bit is invalid. For example:
bit ware [5];     /* invalid */
Functions that disable interrupts (#pragma disable) and functions that are declared using an explicit register bank (using n) cannot return a bit value. The Cx51 Compiler generates an error message for functions of this type that attempt to return a bit type.
回復

使用道具 舉報

9#
ID:1146065 發表于 2025-11-4 15:38 | 只看該作者
Delay3s函數阻塞中斷,導致定時器 1 閃爍異常改為void Delay3s(void) {     unsigned int i;     unsigned long timer_val;     // 修正50ms初值計算(24MHz時:24000000*50/12000 = 100000,65536-100000會溢出,實際應使用方式2)     // 正確方式:50ms = 50000us,每次計數時間12/24000000 = 0.5us,需計數100000次,超過16位最大65535,因此需改用定時器自動重裝載或分段計時     // 此處簡化為每次20ms,循環150次(20*150=3000ms)     timer_val = 65536 - (FOSC/12/50); // 20ms初值(24MHz時:24000000/12/50=40000,65536-40000=25536)     for(i = 0; i < 150; i++)     {         TH0 = timer_val >> 8;         TL0 = timer_val & 0xFF;         TF0 = 0;         TR0 = 1;         while(!TF0);         TR0 = 0;     } }
回復

使用道具 舉報

10#
ID:1137639 發表于 2025-11-8 23:05 | 只看該作者
#include "STC8G.H"

// 系統時鐘頻率定義(24MHz,與實際晶振匹配)
#define FOSC 24000000L
// 定時器1定時1ms的初值宏定義(避免重復計算)
#define TIMER1_1MS_VAL (65536 - FOSC/12/1000)
// 定時器0定時10ms的初值宏定義(16位定時器最大計數65536,避免溢出)
#define TIMER0_10MS_VAL (65536 - FOSC/12/100)

// 顯式定義引腳(STC8G需明確sbit映射,避免編譯識別失敗)
sbit P00 = P0^0;    // P0.0 輸出引腳(閃爍用)
sbit P54 = P5^4;    // P5.4 輸出引腳
// P1口輸入引腳定義(增強代碼可讀性,避免直接寫P10等易混淆)
sbit IN_P10 = P1^0;
sbit IN_P11 = P1^1;
sbit IN_P12 = P1^2;
sbit IN_P13 = P1^3;
sbit IN_P14 = P1^4;
sbit IN_P15 = P1^5;
sbit IN_P16 = P1^6;
sbit IN_P17 = P1^7;
// P2口輸出引腳定義
sbit OUT_P20 = P2^0;
sbit OUT_P21 = P2^1;
sbit OUT_P22 = P2^2;
sbit OUT_P23 = P2^3;
sbit OUT_P24 = P2^4;
sbit OUT_P25 = P2^5;
sbit OUT_P26 = P2^6;
sbit OUT_P27 = P2^7;
// P3口輸出引腳定義
sbit OUT_P30 = P3^0;
sbit OUT_P32 = P3^2;
sbit OUT_P33 = P3^3;
sbit OUT_P34 = P3^4;
sbit OUT_P35 = P3^5;
sbit OUT_P36 = P3^6;
sbit OUT_P37 = P3^7;

// 全局變量(中斷中操作的變量建議加volatile,確保編譯器不優化)
volatile unsigned int timer1_count = 0;
bit p00_state = 0;

// 函數聲明
void GPIO_Init(void);
void Timer0_Init(void);
void Timer1_Init(void);
void Delay3s(void);
void ProcessInputChannels(void);

void main()
{
    GPIO_Init();        // 初始化GPIO
    Timer0_Init();      // 初始化定時器0(用于3秒延時)
    Timer1_Init();      // 初始化定時器1(用于P00閃爍)
   
    EA = 1;             // 開啟總中斷
   
    while(1)
    {
        ProcessInputChannels();  // 處理P1口輸入通道
    }
}

// 定時器1中斷服務函數 - P00每500ms閃爍一次
void Timer1_ISR() interrupt 3
{
    TH1 = (unsigned char)(TIMER1_1MS_VAL >> 8);  // 重裝高8位
    TL1 = (unsigned char)(TIMER1_1MS_VAL & 0xFF); // 重裝低8位
   
    timer1_count++;
    if(timer1_count >= 500)  // 累計500ms,翻轉狀態
    {
        timer1_count = 0;
        p00_state = ~p00_state;
        P00 = p00_state;
    }
}

// GPIO初始化:明確各端口工作模式
void GPIO_Init(void)
{
    // P0.0:推挽輸出(閃爍LED)
    P0M0 = 0x01;  // P0M0對應推挽輸出,僅P0.0置1
    P0M1 = 0x00;  // P0M1對應高阻輸入,全置0
   
    // P1口:準雙向輸入(默認模式,無需額外配置,保持P1M0/P1M1全0)
    P1M0 = 0x00;
    P1M1 = 0x00;
   
    // P2口:全推挽輸出
    P2M0 = 0xFF;
    P2M1 = 0x00;
   
    // P3口:全推挽輸出
    P3M0 = 0xFF;
    P3M1 = 0x00;
   
    // P5.4:推挽輸出
    P5M0 = 0x10;  // P5.4對應bit4,置1
    P5M1 = 0x00;
   
    // 初始化所有輸出引腳為低電平
    P00 = 0;
    P2 = 0x00;
    P3 = 0x00;
    P54 = 0;
}

// 定時器0初始化:16位模式,用于3秒延時函數
void Timer0_Init(void)
{
    AUXR &= 0x7F;       // 定時器0時鐘為12T模式(與STC8G默認一致)
    TMOD &= 0xF0;       // 清除定時器0模式
    TMOD |= 0x01;       // 定時器0工作模式1(16位定時器,無自動重裝)
    TF0 = 0;            // 清除溢出標志
}

// 定時器1初始化:16位模式+中斷,用于P00閃爍
void Timer1_Init(void)
{
    AUXR &= 0x7F;       // 定時器1時鐘為12T模式
    TMOD &= 0x0F;       // 清除定時器1模式
    TMOD |= 0x10;       // 定時器1工作模式1(16位定時器)
   
    TH1 = (unsigned char)(TIMER1_1MS_VAL >> 8);
    TL1 = (unsigned char)(TIMER1_1MS_VAL & 0xFF);
   
    TF1 = 0;            // 清除溢出標志
    TR1 = 1;            // 啟動定時器1
    ET1 = 1;            // 使能定時器1中斷
}

// 3秒延時函數:基于定時器0的10ms定時,循環300次(10ms×300=3000ms)
void Delay3s(void)
{
    unsigned int i;
    for(i = 0; i < 300; i++)  // 300次×10ms=3秒
    {
        TH0 = (unsigned char)(TIMER0_10MS_VAL >> 8);  // 重裝高8位
        TL0 = (unsigned char)(TIMER0_10MS_VAL & 0xFF); // 重裝低8位
        TF0 = 0;            // 清除溢出標志
        TR0 = 1;            // 啟動定時器0
        while(!TF0);        // 等待定時結束(10ms)
        TR0 = 0;            // 停止定時器0
    }
}

// 輸入通道處理:檢測P1口輸入,控制對應輸出引腳
void ProcessInputChannels(void)
{
    // 檢測P1.0輸入(低電平有效),控制P2.0和P3.2
    if(IN_P10 == 0) { Delay3s(); OUT_P20 = 1; OUT_P32 = 1; }
    else { OUT_P20 = 0; OUT_P32 = 0; }
   
    if(IN_P11 == 0) { Delay3s(); OUT_P21 = 1; OUT_P33 = 1; }
    else { OUT_P21 = 0; OUT_P33 = 0; }
   
    if(IN_P12 == 0) { Delay3s(); OUT_P22 = 1; OUT_P34 = 1; }
    else { OUT_P22 = 0; OUT_P34 = 0; }
   
    if(IN_P13 == 0) { Delay3s(); OUT_P23 = 1; OUT_P35 = 1; }
    else { OUT_P23 = 0; OUT_P35 = 0; }
   
    if(IN_P14 == 0) { Delay3s(); OUT_P24 = 1; OUT_P36 = 1; }
    else { OUT_P24 = 0; OUT_P36 = 0; }
   
    if(IN_P15 == 0) { Delay3s(); OUT_P25 = 1; OUT_P37 = 1; }
    else { OUT_P25 = 0; OUT_P37 = 0; }
   
    if(IN_P16 == 0) { Delay3s(); OUT_P26 = 1; P54 = 1; }
    else { OUT_P26 = 0; P54 = 0; }
   
    if(IN_P17 == 0) { Delay3s(); OUT_P27 = 1; OUT_P30 = 1; }
    else { OUT_P27 = 0; OUT_P30 = 0; }
}刪除非法的PinMapping結構體STC8G 的引腳(如 P00、P10)是 SFR(特殊功能寄存器)的位,不允許用bit*指針指向(編譯器會報 “非法指針類型” 錯誤),且該結構體未實際使用,直接刪除即可。
顯式定義sbit引腳原代碼直接使用P00、P54等,部分編譯器可能因 “未明確映射” 報錯,添加sbit定義后,編譯器能準確識別引腳歸屬(如sbit P00 = P0^0),同時用IN_XXX/OUT_XXX命名區分輸入輸出,提升可讀性。
修正定時器 0 初值溢出問題原Delay3s函數中,FOSC/12/20 = 24000000/12/20 = 100000,而 16 位定時器最大計數為 65536,導致timer_val = 65536 - 100000得到負數,編譯時會報 “數值溢出” 或運行時定時異常。修改為10ms 定時(FOSC/12/100 = 20000),TIMER0_10MS_VAL = 65536 - 20000 = 45536(未溢出),再循環 300 次實現 3 秒延時,既解決編譯報錯,又保證定時精度。
優化代碼可讀性與兼容性用宏定義封裝定時器初值(TIMER1_1MS_VAL、TIMER0_10MS_VAL),避免重復計算;中斷中操作的timer1_count添加volatile關鍵字,防止編譯器優化導致閃爍異常。
編譯驗證
編譯器:Keil C51、STC-ISP 自帶編譯器均可直接編譯。
核心功能:P00 每 500ms 閃爍一次;P1 口某引腳接低電平時,對應 P2/P3/P5 引腳輸出高電平(延時 3 秒后保持),松開后恢復低電平,完全符合原設計邏輯。
回復

使用道具 舉報

11#
ID:1137639 發表于 2025-11-9 17:18 | 只看該作者
代碼存在的問題
延時函數沖突:Delay3s() 中使用定時器 0 時未關閉總中斷,可能與定時器 1 中斷沖突,導致定時不準。
輸入檢測邏輯缺陷:直接通過 if(P1x == 0) 判斷按鍵,未做消抖處理,易受干擾誤觸發。
輸出狀態異常:輸入引腳恢復高電平時立即關閉輸出,未考慮實際應用中需保持輸出一段時間的需求(如報警持續)。
定時器初值計算:未考慮晶振頻率與 12T 模式的匹配精度,可能導致定時偏差。
以下是修改后的代碼
  1. #include "STC8G.H"

  2. // 系統時鐘頻率定義(24MHz)
  3. #define FOSC 24000000UL  
  4. // 定時器0定時50ms的初值(12T模式)
  5. #define TIMER0_50MS (65536UL - (FOSC / 12UL / 20UL))

  6. // 全局變量
  7. unsigned int timer1_count = 0;  // 定時器1計數
  8. bit p00_state = 0;             // P00閃爍狀態

  9. // 函數聲明
  10. void GPIO_Init(void);
  11. void Timer0_Init(void);
  12. void Timer1_Init(void);
  13. void Delay3s(void);
  14. unsigned char KeyScan(unsigned char pin);  // 按鍵掃描(帶消抖)
  15. void ProcessInputChannels(void);

  16. void main()
  17. {
  18.     GPIO_Init();        // 初始化GPIO
  19.     Timer0_Init();      // 初始化定時器0(用于延時)
  20.     Timer1_Init();      // 初始化定時器1(用于P00閃爍)
  21.    
  22.     EA = 1;             // 開啟總中斷
  23.    
  24.     while(1)
  25.     {
  26.         ProcessInputChannels();  // 處理輸入通道
  27.     }
  28. }

  29. // 定時器1中斷服務函數 - 控制P00每500ms閃爍
  30. void Timer1_ISR() interrupt 3
  31. {
  32.     // 重裝1ms定時初值(24MHz晶振)
  33.     TH1 = (unsigned char)(TIMER0_50MS >> 8);  // 復用計算值,簡化代碼
  34.     TL1 = (unsigned char)TIMER0_50MS;
  35.    
  36.     if(++timer1_count >= 500)  // 累計1ms*500=500ms
  37.     {
  38.         timer1_count = 0;
  39.         p00_state = ~p00_state;
  40.         P00 = p00_state;       // 更新P00輸出
  41.     }
  42. }

  43. // GPIO初始化
  44. void GPIO_Init(void)
  45. {
  46.     // P0.0推挽輸出(閃爍指示燈)
  47.     P0M0 = 0x01;  // P00推挽輸出
  48.     P0M1 = 0x00;
  49.    
  50.     // P1口準雙向輸入(按鍵輸入)
  51.     P1M0 = 0x00;  // 準雙向模式(默認高電平,外部下拉有效)
  52.     P1M1 = 0x00;
  53.    
  54.     // P2、P3口推挽輸出(控制信號)
  55.     P2M0 = 0xFF;  // P2全推挽輸出
  56.     P2M1 = 0x00;
  57.     P3M0 = 0xFF;  // P3全推挽輸出
  58.     P3M1 = 0x00;
  59.    
  60.     // P5.4推挽輸出
  61.     P5M0 = 0x10;  // P54推挽輸出
  62.     P5M1 = 0x00;
  63.    
  64.     // 初始化輸出為低電平
  65.     P00 = 0;
  66.     P2 = 0x00;
  67.     P3 = 0x00;
  68.     P54 = 0;
  69. }

  70. // 定時器0初始化(用于精確延時)
  71. void Timer0_Init(void)
  72. {
  73.     AUXR &= 0x7F;       // 定時器0使用12T模式
  74.     TMOD &= 0xF0;       // 清除定時器0配置
  75.     TMOD |= 0x01;       // 16位定時模式
  76.     TF0 = 0;            // 清除溢出標志
  77. }

  78. // 定時器1初始化(用于P00閃爍定時)
  79. void Timer1_Init(void)
  80. {
  81.     AUXR &= 0xBF;       // 定時器1使用12T模式
  82.     TMOD &= 0x0F;       // 清除定時器1配置
  83.     TMOD |= 0x10;       // 16位定時模式
  84.    
  85.     // 初始化1ms定時
  86.     TH1 = (unsigned char)(TIMER0_50MS >> 8);
  87.     TL1 = (unsigned char)TIMER0_50MS;
  88.    
  89.     TF1 = 0;            // 清除溢出標志
  90.     ET1 = 1;            // 使能定時器1中斷
  91.     TR1 = 1;            // 啟動定時器1
  92. }

  93. // 按鍵掃描函數(帶消抖,返回1表示按下)
  94. unsigned char KeyScan(unsigned char pin)
  95. {
  96.     static unsigned char key_state = 1;  // 按鍵狀態(1:未按,0:按下)
  97.     static unsigned char key_cnt = 0;    // 消抖計數
  98.    
  99.     // 讀取當前引腳狀態(低電平表示按下)
  100.     bit current = (pin == 0) ? 0 : 1;
  101.    
  102.     if(current != key_state)
  103.     {
  104.         key_cnt++;
  105.         if(key_cnt >= 10)  // 連續10次檢測一致(約10ms,消抖)
  106.         {
  107.             key_state = current;
  108.             key_cnt = 0;
  109.         }
  110.     }
  111.     else
  112.     {
  113.         key_cnt = 0;  // 狀態一致則清零計數
  114.     }
  115.    
  116.     return (key_state == 0) ? 1 : 0;  // 返回1表示按鍵按下
  117. }

  118. // 處理輸入通道(根據P1口輸入控制輸出)
  119. void ProcessInputChannels(void)
  120. {
  121.     // 檢測P1.0輸入,按下時P2.0和P3.2輸出高電平,松開后保持3秒再關閉
  122.     static bit p10_flag = 0;
  123.     if(KeyScan(P10))
  124.     {
  125.         P20 = 1;
  126.         P32 = 1;
  127.         p10_flag = 1;  // 標記按鍵已按下
  128.     }
  129.     else if(p10_flag)
  130.     {
  131.         Delay3s();     // 松開后延遲3秒關閉
  132.         P20 = 0;
  133.         P32 = 0;
  134.         p10_flag = 0;  // 清除標記
  135.     }

  136.     // 檢測P1.1輸入,控制P2.1和P3.3
  137.     static bit p11_flag = 0;
  138.     if(KeyScan(P11))
  139.     {
  140.         P21 = 1;
  141.         P33 = 1;
  142.         p11_flag = 1;
  143.     }
  144.     else if(p11_flag)
  145.     {
  146.         Delay3s();
  147.         P21 = 0;
  148.         P33 = 0;
  149.         p11_flag = 0;
  150.     }

  151.     // 檢測P1.2輸入,控制P2.2和P3.4
  152.     static bit p12_flag = 0;
  153.     if(KeyScan(P12))
  154.     {
  155.         P22 = 1;
  156.         P34 = 1;
  157.         p12_flag = 1;
  158.     }
  159.     else if(p12_flag)
  160.     {
  161.         Delay3s();
  162.         P22 = 0;
  163.         P34 = 0;
  164.         p12_flag = 0;
  165.     }

  166.     // 檢測P1.3輸入,控制P2.3和P3.5
  167.     static bit p13_flag = 0;
  168.     if(KeyScan(P13))
  169.     {
  170.         P23 = 1;
  171.         P35 = 1;
  172.         p13_flag = 1;
  173.     }
  174.     else if(p13_flag)
  175.     {
  176.         Delay3s();
  177.         P23 = 0;
  178.         P35 = 0;
  179.         p13_flag = 0;
  180.     }

  181.     // 檢測P1.4輸入,控制P2.4和P3.6
  182.     static bit p14_flag = 0;
  183.     if(KeyScan(P14))
  184.     {
  185.         P24 = 1;
  186.         P36 = 1;
  187.         p14_flag = 1;
  188.     }
  189.     else if(p14_flag)
  190.     {
  191.         Delay3s();
  192.         P24 = 0;
  193.         P36 = 0;
  194.         p14_flag = 0;
  195.     }

  196.     // 檢測P1.5輸入,控制P2.5和P3.7
  197.     static bit p15_flag = 0;
  198.     if(KeyScan(P15))
  199.     {
  200.         P25 = 1;
  201.         P37 = 1;
  202.         p15_flag = 1;
  203.     }
  204.     else if(p15_flag)
  205.     {
  206.         Delay3s();
  207.         P25 = 0;
  208.         P37 = 0;
  209.         p15_flag = 0;
  210.     }

  211.     // 檢測P1.6輸入,控制P2.6和P5.4
  212.     static bit p16_flag = 0;
  213.     if(KeyScan(P16))
  214.     {
  215.         P26 = 1;
  216.         P54 = 1;
  217.         p16_flag = 1;
  218.     }
  219.     else if(p16_flag)
  220.     {
  221.         Delay3s();
  222.         P26 = 0;
  223.         P54 = 0;
  224.         p16_flag = 0;
  225.     }

  226.     // 檢測P1.7輸入,控制P2.7和P3.0
  227.     static bit p17_flag = 0;
  228.     if(KeyScan(P17))
  229.     {
  230.         P27 = 1;
  231.         P30 = 1;
  232.         p17_flag = 1;
  233.     }
  234.     else if(p17_flag)
  235.     {
  236.         Delay3s();
  237.         P27 = 0;
  238.         P30 = 0;
  239.         p17_flag = 0;
  240.     }
  241. }

  242. // 3秒延時函數(關閉中斷避免干擾)
  243. void Delay3s(void)
  244. {
  245.     unsigned char i;
  246.     EA = 0;  // 關閉總中斷,確保延時精準
  247.    
  248.     for(i = 0; i < 60; i++)  // 60 * 50ms = 3000ms
  249.     {
  250.         TH0 = (unsigned char)(TIMER0_50MS >> 8);
  251.         TL0 = (unsigned char)TIMER0_50MS;
  252.         TF0 = 0;
  253.         TR0 = 1;         // 啟動定時器0
  254.         while(!TF0);     // 等待50ms溢出
  255.         TR0 = 0;         // 停止定時器0
  256.     }
  257.    
  258.     EA = 1;  // 恢復總中斷
  259. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
国产黑丝在线观看| 8mav模特福利视频在线观看| 日韩aaaaa| 亚洲一区二区不卡视频| 91精品国产91久久| 欧美精品丝袜久久久中文字幕| 成人午夜精品在线| 91精品国产91久久综合| 国产伊人久久| 999国产在线视频| 18av视频| 欧美gay1069大粗吊| 中文字幕在线播放av| 日本aaa视频| av无码精品一区二区三区| 欧美福利精品| 国产精品第二页| 俺也去精品视频在线观看| 在线不卡免费av| 亚洲成av人片一区二区梦乃| 久久综合色播五月| 丝袜a∨在线一区二区三区不卡| 在线成人动漫av| 91成人在线| а√天堂8资源在线官网| 亚洲精品少妇久久久久久| 国产大学生粉嫩无套流白浆| 亚洲卡一卡二卡三| 国产成人无码av| 中文乱码字幕高清一区二区| 手机在线播放av| 久久国产乱子伦免费精品| 婷婷精品国产一区二区三区日韩| 国产免费一区二区三区在线观看| 美女精品久久久| 国产一区二区三区在线视频| 欧美成人精精品一区二区频| 欧美性生活大片免费观看网址| 国产精品美女一区二区三区| 床上的激情91.| 狠狠色狠狠色综合| 蜜桃一区二区三区在线观看| 99精品国产在热久久| 久久五月天小说| 一区二区三区视频免费观看| 视频二区欧美| 精品三级国产| 国产精品欧美一区二区三区不卡| 成人美女大片| 538视频在线| 在线免费观看的av| 国产在线激情视频| 欧美成人性生活视频| 国产在线资源| 美女毛片在线看| 五丁香在线视频| 天堂а在线中文在线无限看推荐| 国产呻吟对白刺激无套视频在线| 肥女人的一级毛片| 四虎国产精品成人免费4hu| 盗摄女厕thunder| 成年人深夜福利| 2色视频网站| 妞干网2018| av一卡二卡| 成人伦理视频网站| 九色视频一区| 免费男女羞羞的视频网站主页在线观看| 免费福利片在线观看| 黄色漫画在线免费观看| 中文字幕www| 美女av网站| 日本天堂影院在线视频| 国产尤物视频在线| 免费成人黄色| f2c人成在线观看免费视频| 日产福利视频在线观看| 日韩精品三区| 另类视频一区二区三区| 欧美久久香蕉| 欧美日韩中文一区二区| 亚洲a一区二区三区| 正在播放日韩欧美一页| 亚洲人妖在线| 老司机精品视频导航| 国产91丝袜在线播放九色| av网站一区二区三区| 久久精品视频一区二区三区| 亚洲综合福利| 欧美色女视频| 雨宫琴音一区二区在线| 日韩中文字幕区一区有砖一区| 久久国产精品72免费观看| 国产宾馆实践打屁股91| 久久久久青草大香线综合精品| 国产精品家庭影院| 色狠狠桃花综合| 日韩欧美中文一区| 少妇精69xxtheporn| 91av福利视频| 国产高清精品一区| 日本精品福利视频| 在线免费观看av的网站| 日本aaa视频| 久久精品视频9| 国产精品久久久久久免费播放| 先锋资源一区| 999www成人| 依依成人在线| 亚洲乱码精品久久久久..| 手机看片一区二区三区| 成人亚洲欧美激情在线电影| 黄色漫画在线免费观看| 尤物在线视频| 亚洲毛片在线免费| 日韩三级在线| 老司机一区二区| 成人免费小视频| 欧美精品日韩一区| 久久精品亚洲94久久精品| 国产精品夜间视频香蕉| 伊人久久大香线蕉午夜av| 杨幂毛片午夜性生毛片| 中文字幕免费视频| 五月天中文字幕| 国产porny蝌蚪视频| 四虎影视在线播放| 精品网站在线| 中文在线日韩| 97久久超碰精品国产| 欧美性猛交xxxx乱大交| 国产亚洲精品久久久久久777| 国产成人高清激情视频在线观看 | 中文字幕xxx| 97人妻一区二区精品视频| av中文字幕网| 青檬在线电视剧在线观看| yellow在线观看网址| 国产成人精品一区二区免费看京 | 色系列之999| 亚洲a在线播放| 水蜜桃色314在线观看| 白丝女仆被免费网站| 亚洲一级黄色大片| 免费看岛国视频在线观看| 自拍视频在线免费观看| 综合欧美亚洲| 日韩1区2区3区| 亚洲一区二区在线视频| 亚洲欧美中文另类| 亚洲www永久成人夜色| 久久综合久久色| 久久久久久久极品内射| 欧美人与动性xxxxx杂性| 蜜桃视频在线入口www| 91欧美日韩在线| 麻豆免费看一区二区三区| 亚瑟在线精品视频| 九九热这里只有精品免费看| 亚洲国产欧美日韩| 法国空姐电影在线观看| 五月婷婷狠狠干| 久草视频在线看| 999久久久久久久久6666| 精品在线观看视频| 欧美日韩色一区| 国产精品美女在线| 国产无套内射久久久国产| 日韩美女一级片| 成年人网站在线观看免费| av资源亚洲| 久久成人在线| 91九色最新地址| 国产精品久久久av| 九色91popny| 国产亚洲欧美日韩高清| 国产乱xxⅹxx国语对白| 亚洲最大的免费视频网站| 日韩精品欧美精品| 欧美人与禽zozo性伦| 国产美女直播视频一区| 国内精品国产三级国产aⅴ久| 99久久精品国产一区色| 在线电影av| 国产亚洲一区二区三区不卡| 亚洲国产经典视频| 久久久999国产精品| 超薄肉色丝袜足j调教99| 黄色激情视频在线观看| 天天色天天草天天射| 久久99成人| 99久久国产综合精品麻豆| 亚洲人成免费电影| 国产成人8x视频一区二区 | 亚洲香肠在线观看| 第四色成人网| 99re热这里只有精品视频| 91精品国产综合久久精品| 国产精品久久久久久久av大片| 玩弄japan白嫩少妇hd| 自拍偷拍校园春色| 香蕉视频在线观看免费| 亚洲大片精品免费| 亚洲精品免费电影| 欧美中文在线免费| 99热这里只有精品2| 美女把尿口扒开让男人桶在线观看 | 久久经典视频| 你懂的国产精品| 婷婷开心激情综合| 国产女精品视频网站免费| 精产国品一区二区三区| 在线观看精品视频看看播放| xx欧美xxx| 成人v精品蜜桃久久一区| 精品国产区一区二区三区在线观看 | 96视频在线观看欧美| 99视频有精品| 久久国产精品电影| 浓精h攵女乱爱av| 亚洲伦片免费看| 成人免费看视频网站| 国产传媒日韩欧美成人| 久久精品国产v日韩v亚洲| 人妻精品无码一区二区三区 | 久久精品综合视频| 污视频网站入口| 欧美1区二区| 亚洲一二三四区| 3d动漫啪啪精品一区二区免费 | av之家在线观看| 亚洲AV无码一区二区三区少妇| 色帝国亚洲欧美在线| 久久99精品国产麻豆婷婷| 亚洲人成在线观看网站高清| 欧美亚洲另类色图| 影音先锋男人看片资源站| 日韩欧国产精品一区综合无码| 国产婷婷色一区二区三区在线| 欧美尤物巨大精品爽| 日本少妇毛茸茸| 爽死777影院| 久久久久久久久久久9不雅视频| 欧美日韩中字一区| 亚洲精品国产精品国自产观看| 中文区中文字幕免费看| 男人添女人下部高潮视频在线观看| 国产精品亚洲成人| 97久久精品人搡人人玩| 亚洲一区二区自偷自拍| 一级片在线视频| 久久中文精品| 日韩中文字幕不卡视频| 国产精品嫩草69影院| hd100%videos日本| 午夜精彩国产免费不卡不顿大片| 亚洲第一精品自拍| 五月婷婷狠狠操| 网站在线观看你懂的| 久久久影院免费| 欧美r级在线观看| 久久久久久久久久福利| 高清视频国产| 91成人精品视频| 亚洲精品视频久久| 天天av天天操| www.亚洲| 日韩高清一区二区| 久久免费视频在线观看| 日韩一区二区三区四区视频| gogogo高清在线观看免费完整版| 成人黄页在线观看| 亚洲自拍高清视频网站| 日韩免费av网站| 欧美色999| 狠狠躁18三区二区一区| 亚洲一区二区在线免费观看| 天天干天天草天天射| 亚洲成aⅴ人片久久青草影院| 91精品国产色综合久久ai换脸 | 日韩免费av一区二区三区| 亚洲国产日韩在线观看| 91大神精品| 在线不卡中文字幕| 国产成年人视频网站| 国产视频三区| 国产精品一区免费视频| 国产日韩欧美视频在线| 99re热视频| 51精品国产| 精品动漫一区二区三区在线观看| 操人视频免费看| 三级网站在线| 成人h动漫精品| 久久久久久a亚洲欧洲aⅴ| 午夜视频免费在线| 欧美一区二区三区激情视频| 国产一区二区三区在线视频| 日韩一区二区a片免费观看| 国产黄大片在线观看画质优化| 综合久久国产九一剧情麻豆| 米仓穗香在线观看| 少妇性色午夜淫片aaa播放| 美女诱惑黄网站一区| 国产精品毛片a∨一区二区三区|国| 中文字幕一区在线播放| 蜜桃精品一区二区三区| 亚洲福利在线视频| 国产1区2区在线观看| 国产va在线视频| 精品视频一区二区三区免费| 女王人厕视频2ⅴk| aaa在线观看| 亚洲黄色尤物视频| 日韩av综合在线观看| 美女av网站| 久久这里只精品最新地址| 视频一区二区三| 嫩草视频在线免费观看| 国模无码大尺度一区二区三区| 国产精成人品localhost| 久久综合香蕉| 免费精品视频| 动漫美女被爆操久久久| 中文字幕在线久热精品| 视频一区视频二区中文| 国产精品一区二区三区免费| 精品一成人岛国片在线观看| 欧美aaa在线| 鲁丝一区鲁丝二区鲁丝三区| 99re6在线视频精品免费| 美女视频网站黄色亚洲| 美女精品国产| 天天干天天舔| 日本一区二区三区高清不卡| 国产原创中文在线观看| 青青草视频在线免费观看| 亚洲国产成人porn| 性xxxxxxxxx| 欧美办公室脚交xxxx| 欧美一二三区精品| 男人av资源站| 99国产精品久久一区二区三区| 一区二区三区视频免费| 日韩精品成人免费观看视频| 成人无号精品一区二区三区| 日本欧美爱爱爱| 天堂中文在线免费观看| 麻豆精品一区二区| 亚洲三级一区| 佐山爱痴汉视频一区二区三区| 一区二区三区在线观看欧美| 亚洲一区二区三区三州| 亚洲美女炮图| 在线日韩日本国产亚洲| 亚洲天堂久久久久| 夜夜嗨一区二区| 欧美欧美一区二区| 嫩草影院官网| 黄色精品在线看| 午夜在线观看一区| 国语精品视频| 97视频免费看| 中文字幕国产视频| av一本久道久久综合久久鬼色| 日本精品一区二区三区四区| 99福利在线| 日韩高清欧美高清| 欧美成人精品网站| 亚洲综合99| 伊人久久大香线蕉综合75| 欧美日韩免费做爰大片| 欧美精品成人一区二区三区四区| 五月天av网站| 欧美电影《轻佻寡妇》| 国产精品一区二区你懂得| 成年人福利视频| 婷婷开心久久网| 国产67194| 久久久久蜜桃| 欧美二区三区在线| 亚洲美女电影在线| 欧美酷刑日本凌虐凌虐| 中国一级免费毛片| 亚洲视频一区| 黄色免费高清视频| av片哪里在线观看| 亚洲一区二区久久久| 亚洲精品福利网站| 不卡的av电影在线观看| 在线观看视频你懂得| 欧美久久亚洲| 成人做爰www免费看视频网站| 天天伊人狠狠| 色一情一乱一乱一91av| 日韩精品在线免费看| 一区二区三区四区五区精品视频 | 色婷婷综合视频| 成人黄页毛片网站| 性高潮免费视频|