有100人阅读过
一个在线的计算DMX512灯具地址DIP拨码方法的工具
发布于2025/07/18 更新于2025/07/18
[ 教程仅保证更新时有效,请自行测试。]
发布于2025/07/18 更新于2025/07/18
[ 教程仅保证更新时有效,请自行测试。]
[ 教程仅保证更新时有效,请自行测试。]
可以本地直接用浏览器打开使用,实现DMX512灯具地址《-》DIP拨码 互转。
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>DMX512 拨码设置工具</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body { font-family: sans-serif; padding: 2rem; background-color: #f0f0f0; margin: 0; } h1 { font-size: 1.5rem; margin-bottom: 1rem; text-align: center; } h3 { font-size: 1rem; text-align: center; } .controls { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 1rem; margin-bottom: 2rem; } input[type="number"] { padding: 0.5rem; width: 120px; font-size: 1rem; } button { padding: 0.5rem 1rem; font-size: 1rem; } .switches { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; } .switch { display: flex; flex-direction: column; align-items: center; font-size: 0.875rem; cursor: pointer; } .bit-value { margin-bottom: 0.25rem; font-weight: bold; } .dip { width: 30px; height: 60px; border: 2px solid #333; border-radius: 4px; position: relative; background-color: #fff; box-shadow: 2px 2px 4px rgba(0,0,0,0.2); } .dip.on::before, .dip.off::before { content: ''; position: absolute; left: 5px; right: 5px; height: 20px; border-radius: 2px; } .dip.on::before { background-color: #28a745; bottom: 5px; } .dip.off::before { background-color: #dc3545; top: 5px; } .dip.inverted.on::before { top: 5px; bottom: auto; } .dip.inverted.off::before { top: auto; bottom: 5px; } .label { margin-top: 0.5rem; } .invert-button-wrapper { display: flex; justify-content: center; width: 100%; margin-top: 1rem; } @media (max-width: 600px) { .dip { width: 24px; height: 48px; } .bit-value, .label { font-size: 0.75rem; } } </style> </head> <body> <h1>DMX512 地址拨码计算工具</h1> <div> <label> 输入地址 (1-512): <input type="number" id="dmxAddress" min="1" max="512" value="1"> </label> </div> <div id="switches"></div> <h3>默认向下拨为1(ON)</h3> <div> <button id="invertButton">反转开关方向</button> </div> <script> const addressInput = document.getElementById('dmxAddress'); const switchesDiv = document.getElementById('switches'); const invertButton = document.getElementById('invertButton'); let currentAddress = 1; let bits = []; let isInverted = false; // 默认不反转,即向下为ON function calculateAddressFromBits() { let addr = 0; for (let i = 0; i < bits.length; i++) { if (bits[i]) addr += Math.pow(2, i); } return addr; } function renderSwitches() { switchesDiv.innerHTML = ''; for (let i = 0; i < 9; i++) { const wrapper = document.createElement('div'); wrapper.className = 'switch'; wrapper.dataset.index = i; const bitVal = document.createElement('div'); bitVal.className = 'bit-value'; bitVal.textContent = Math.pow(2, i); const dip = document.createElement('div'); dip.className = 'dip ' + (bits[i] ? 'on' : 'off'); if (isInverted) { dip.classList.add('inverted'); } const label = document.createElement('div'); label.className = 'label'; label.textContent = i + 1; wrapper.appendChild(bitVal); wrapper.appendChild(dip); wrapper.appendChild(label); wrapper.addEventListener('click', () => { bits[i] = bits[i] ? 0 : 1; addressInput.value = calculateAddressFromBits(); renderSwitches(); }); switchesDiv.appendChild(wrapper); } } function updateSwitches(address) { currentAddress = address; bits = []; for (let i = 0; i < 9; i++) { bits[i] = (address >> i) & 1; } renderSwitches(); } addressInput.addEventListener('input', () => { let value = parseInt(addressInput.value); if (isNaN(value) || value < 1 || value > 512) return; updateSwitches(value); }); invertButton.addEventListener('click', () => { isInverted = !isInverted; renderSwitches(); }); updateSwitches(1); </script> </body> </html>
文章对你有帮助吗?
- 一般[0]
- 很赞[0]
- 没用[0]
- 垃圾[0]
- 无语[0]