久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
求指導 利用4個按鍵設置兩個4位數到24C01的程序
[打印本頁]
作者:
wjfw
時間:
2024-10-27 14:15
標題:
求指導 利用4個按鍵設置兩個4位數到24C01的程序
求一個51單片機利用4個按鍵設置兩個4位數到24C01的程序,設置1:0-9999,設置2:0-9999
設置1和2都存于24C01,然后單片機讀取這兩個設置值到單片機內。
作者:
xiaobendan001
時間:
2024-10-27 16:35
三個鍵就夠了吧,四個能方便點?
作者:
lkc8210
時間:
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 接口引腳和按鍵連接。
- 此代碼為基礎示例,實際使用時可能需要根據具體硬件進行調整。
作者:
xiaobendan001
時間:
2024-10-27 19:06
我覺得這樣更好用,按一下K1,設置1,K2移位,K3+K4-,再按K1設置2,再按K1保存。
從0+到9999時間還是挺長的。要是999還行。
作者:
wjfw
時間:
2024-10-28 00:21
lkc8210 發表于 2024-10-27 18:41
下面是一個簡單的51單片機程序示例,演示如何使用4個按鍵設置兩個4位數并將其存儲到24C01 EEPROM中。程序包 ...
非常感謝,得空我試試
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一区二区三区av
|
亚洲乱码一区二区三区在线观看
|
亚洲精品一区二区在线观看
|
亚洲高清在线
|
国产一区欧美一区
|
91精品国产91久久久久久最新
|
亚洲三区视频
|
国产精品视屏
|
国产一区二区精品在线
|
久久精品亚洲欧美日韩精品中文字幕
|
日韩成人av在线
|
国产一区精品在线
|
аⅴ资源新版在线天堂
|
日韩av免费在线电影
|
国产乱码一区
|
精品久久久久久久人人人人传媒
|
日韩a v在线免费观看
|
久久精品国产亚洲
|
人人干人人草
|
97国产精品视频人人做人人爱
|
天天干.com
|
日韩精品成人免费观看视频
|
婷婷综合色
|
久久综合伊人一区二区三
|
中文字幕一区二区三区四区五区
|
99精品国产一区二区三区
|
91精品国产91久久久久久
|
亚洲高清在线
|
国产成人综合一区二区三区
|
精品一区二区三区中文字幕
|
欧美综合自拍
|
亚洲a在线观看
|
国产精品完整版
|
欧美高清视频在线观看
|
久草在线免费资源
|
国产精品区二区三区日本
|
日韩成人影院
|
久国产精品
|
国产一区二区精品在线
|
污片在线免费观看
|
中文字幕一级
|