Processing 控制 51 单片机点阵屏显示电梯楼层
使用 Processing 控制 51 单片机点阵屏显示电梯楼层
本项目使用 Processing 发送指令控制 51 单片机,通过 8x8 点阵屏显示电梯楼层。点击 Processing 中的楼层按钮,点阵屏数字会从当前楼层滚动到目标楼层。
一、项目概述
本项目包含两个部分:
- Processing 发送程序: 在 Processing 中绘制九层楼的电梯按钮图,用户点击按钮后,发送对应楼层信息给单片机。
- 单片机接收程序: 单片机接收来自 Processing 的楼层信息,并控制 8x8 点阵屏显示该楼层数字,实现从当前楼层到目标楼层的数字滚动效果。
二、程序实现
1. Processing 发送程序
import processing.serial.*;
Serial serialPort;
void setup() {
size(400, 400);
serialPort = new Serial(this, 'COM3', 9600); // 这里的串口号和波特率需要根据实际情况修改
}
void draw() {
background(255);
fill(0);
textSize(20);
text('请选择楼层:', 50, 50);
// 绘制九层楼的电梯按钮图
for (int i = 1; i <= 9; i++) {
rect(50 + (i - 1) * 40, 100, 30, 30);
textSize(15);
text(i, 63 + (i - 1) * 40, 120);
}
}
void mousePressed() {
// 根据鼠标点击的位置计算出对应的楼层
int floor = (mouseX - 50) / 40 + 1;
// 发送楼层信息给单片机
serialPort.write(floor);
}
2. 单片机接收程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LATCH = P1^0;
sbit SCLK = P1^1;
sbit DIN = P1^2;
void delay(uint ms) {
uint i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void hc595_send_byte(uchar dat) {
uchar i;
for (i = 0; i < 8; i++) {
SCLK = 0;
DIN = dat & 0x80;
dat <<= 1;
SCLK = 1;
}
}
void hc595_send_data(uchar dat[], uchar len) {
uchar i;
for (i = 0; i < len; i++) {
LATCH = 0;
hc595_send_byte(dat[i]);
LATCH = 1;
delay(1);
}
}
void main() {
uchar floor = 1;
uchar dat[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
while (1) {
if (RI) {
floor = SBUF;
RI = 0;
// 将数字滚动到指定的楼层
uchar i, j;
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
dat[j] <<= 1;
if (i == 7 && j == 7) {
dat[j] |= floor;
}
}
hc595_send_data(dat, 8);
delay(50);
}
}
}
}
三、注意事项
- 确保 Processing 发送程序中的串口号和波特率与单片机接收程序一致。
- 单片机接收程序使用 74HC595 芯片控制 8x8 点阵屏,需要根据实际情况修改芯片引脚和接线。
- 当前的数字滚动效果只是简单地向左移动,实际应用中可以根据需要进行修改。
四、总结
本项目演示了如何使用 Processing 控制 51 单片机,通过点阵屏显示电梯楼层。通过简单的串口通讯,可以实现 Processing 与单片机之间的数据交互,并完成相应的功能。
原文地址: https://www.cveoy.top/t/topic/k57Q 著作权归作者所有。请勿转载和采集!