久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求指導 利用4個按鍵設置兩個4位數到24C01的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:123917 發表于 2024-10-27 14:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求一個51單片機利用4個按鍵設置兩個4位數到24C01的程序,設置1:0-9999,設置2:0-9999
設置1和2都存于24C01,然后單片機讀取這兩個設置值到單片機內。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1109793 發表于 2024-10-27 16:35 | 只看該作者
三個鍵就夠了吧,四個能方便點?
回復

使用道具 舉報

板凳
ID:161164 發表于 2024-10-27 18:41 | 只看該作者
下面是一個簡單的51單片機程序示例,演示如何使用4個按鍵設置兩個4位數并將其存儲到24C01 EEPROM中。程序包括按鍵掃描、數值設置、存儲到EEPROM和讀取的功能。

### 硬件連接
1. **按鍵**:假設使用4個按鍵(K1, K2, K3, K4)分別用于增加、減少、選擇設置1或設置2。
2. **24C01**:通過I2C接口連接到51單片機。

### 程序示例

```c
#include <reg51.h>
#include <intrins.h>

#define SCL P1_0  // I2C SCL
#define SDA P1_1  // I2C SDA

unsigned int setting1 = 0;  // 設置1
unsigned int setting2 = 0;  // 設置2
bit selectSetting = 0;      // 選擇設置,0:設置1, 1:設置2

// I2C延時函數
void I2C_Delay(void) {
    unsigned char i;
    for (i = 0; i < 100; i++);
}

// I2C啟動
void I2C_Start(void) {
    SDA = 1;
    SCL = 1;
    I2C_Delay();
    SDA = 0;
    I2C_Delay();
    SCL = 0;
}

// I2C停止
void I2C_Stop(void) {
    SCL = 0;
    SDA = 0;
    I2C_Delay();
    SCL = 1;
    I2C_Delay();
    SDA = 1;
}

// I2C發送字節
void I2C_Send_Byte(unsigned char byte) {
    unsigned char i;
    for (i = 0; i < 8; i++) {
        SDA = (byte & 0x80) ? 1 : 0;  // 發送高位
        I2C_Delay();
        SCL = 1;  // 時鐘上升
        I2C_Delay();
        SCL = 0;  // 時鐘下降
        byte <<= 1;  // 左移
    }
    // 發送ACK
    SDA = 1;  // 釋放SDA
    I2C_Delay();
    SCL = 1;  // 時鐘上升
    I2C_Delay();
    SCL = 0;  // 時鐘下降
}

// 寫入24C01
void EEPROM_Write(unsigned char addr, unsigned char data) {
    I2C_Start();
    I2C_Send_Byte(0xA0);  // 設備地址
    I2C_Send_Byte(addr);   // 地址
    I2C_Send_Byte(data);   // 數據
    I2C_Stop();
}

// 讀取24C01
unsigned char EEPROM_Read(unsigned char addr) {
    unsigned char data;
    I2C_Start();
    I2C_Send_Byte(0xA0);  // 設備地址
    I2C_Send_Byte(addr);   // 地址
    I2C_Start();            // 重啟
    I2C_Send_Byte(0xA1);   // 讀命令
    // 讀取數據
    SDA = 1;  // 設置SDA為高
    I2C_Delay();
    SCL = 1;  // 時鐘上升
    I2C_Delay();
    data = SDA;  // 讀取數據
    SCL = 0;  // 時鐘下降
    I2C_Stop();
    return data;
}

// 按鍵掃描
unsigned char Key_Scan(void) {
    if (P3_0 == 0) return 1;  // K1
    if (P3_1 == 0) return 2;  // K2
    if (P3_2 == 0) return 3;  // K3
    if (P3_3 == 0) return 4;  // K4
    return 0;  // 無按鍵按下
}

// 主程序
void main(void) {
    unsigned char key;
   
    while (1) {
        key = Key_Scan();
        
        if (key == 1) { // K1: 增加當前設置
            if (selectSetting == 0) {
                if (setting1 < 9999) setting1++;
            } else {
                if (setting2 < 9999) setting2++;
            }
        }

        if (key == 2) { // K2: 減少當前設置
            if (selectSetting == 0) {
                if (setting1 > 0) setting1--;
            } else {
                if (setting2 > 0) setting2--;
            }
        }

        if (key == 3) { // K3: 切換設置
            selectSetting = !selectSetting; // 切換設置
        }

        if (key == 4) { // K4: 存儲設置到EEPROM
            EEPROM_Write(0x00, setting1 >> 8);    // 存儲高位
            EEPROM_Write(0x01, setting1 & 0xFF);  // 存儲低位
            EEPROM_Write(0x02, setting2 >> 8);    // 存儲高位
            EEPROM_Write(0x03, setting2 & 0xFF);  // 存儲低位
        }

        // 讀取設置值
        setting1 = (EEPROM_Read(0x00) << 8) | EEPROM_Read(0x01);
        setting2 = (EEPROM_Read(0x02) << 8) | EEPROM_Read(0x03);
    }
}
```

### 代碼說明
1. **I2C 接口**:定義了 I2C 通信的相關函數,包括啟動、停止、發送字節、寫入和讀取 EEPROM。
2. **按鍵掃描**:通過 `Key_Scan` 函數檢測按鍵狀態。
3. **設置數值**:根據按鍵的不同,增加、減少或切換當前設置,設置值范圍為 0 到 9999。
4. **存儲到 EEPROM**:按下 K4 按鍵時,將當前設置保存到 24C01 中。
5. **讀取 EEPROM**:讀取存儲的設置值,并更新到 `setting1` 和 `setting2` 變量中。

### 使用說明
- 確保連接了適當的按鍵和 EEPROM。
- 根據需要調整 I2C 接口引腳和按鍵連接。
- 此代碼為基礎示例,實際使用時可能需要根據具體硬件進行調整。
回復

使用道具 舉報

地板
ID:1109793 發表于 2024-10-27 19:06 | 只看該作者
我覺得這樣更好用,按一下K1,設置1,K2移位,K3+K4-,再按K1設置2,再按K1保存。
從0+到9999時間還是挺長的。要是999還行。
回復

使用道具 舉報

5#
ID:123917 發表于 2024-10-28 00:21 | 只看該作者
lkc8210 發表于 2024-10-27 18:41
下面是一個簡單的51單片機程序示例,演示如何使用4個按鍵設置兩個4位數并將其存儲到24C01 EEPROM中。程序包 ...

非常感謝,得空我試試
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男女免费网站 | 国产中文字幕网 | 精品国产女人 | 日韩激情网 | 美女张开腿露出尿口 | 97视频网站 | 日本激情视频网 | 久久91| 在线成人av | 中文字幕电影在线观看 | 中文字幕在线播放第一页 | 日韩另类视频 | 男女免费网站 | 国产免费让你躁在线视频 | 日韩欧美亚洲 | 毛片在线免费播放 | 亚洲精品乱码久久久久久按摩 | 九九热re| 美日韩中文字幕 | 亚洲精品电影网在线观看 | 天天综合国产 | 久久成人一区 | 精品亚洲国产成av人片传媒 | 日韩av福利在线观看 | 中文字幕精品一区二区三区精品 | 天天干狠狠操 | 精品视频一区二区三区在线观看 | 色欧美综合 | 伊人二区| 99精品久久久 | 国内精品视频在线观看 | 国产免费色| 一级片网址 | 久久久久久国产一区二区三区 | 天天天操 | 午夜视频网站 | 欧美国产日韩精品 | h漫在线观看 | 欧美一级特黄aaa大片在线观看 | 中文字幕av网 | 日韩综合在线播放 |