.align x 指令作用的直观解释。

 

.align x 指令作用的直观解释。

align.jpg


.align x 之后的第一条指令以地址边界x对齐,其间跨越的部分用nop(机器指令0x90)来填充。

 

import sys import serial from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QSlider, QLabel from PySide6.QtCore import Qt, QTimer class SerialControlApp(QWidget): def __init__(self): super().__init__() self.initUI() self.serial = None self.timer = QTimer() self.timer.timeout.connect(self.check_serial_ports) self.timer.start(1000) # NOTE: 每1秒检查一次串口 def initUI(self): self.setWindowTitle('串口控制界面') self.setGeometry(100, 100, 1200, 800) # NOTE: 调整窗口大小以适应横屏布局 # 串口参数设置 self.port_label = QLabel('串口号: 未连接') self.baudrate_label = QLabel('波特率: 9600') self.connect_button = QPushButton('连接') self.connect_button.clicked.connect(self.connect_serial) # 摇杆控制 self.joystick_label = QLabel('摇杆控制') self.joystick_label.setAlignment(Qt.AlignCenter) self.joystick_label.setStyleSheet('border: 1px solid black; padding: 10px;') # 滑动条控制 self.slider_label = QLabel('速度控制') self.slider = QSlider(Qt.Vertical) self.slider.setMinimum(50) self.slider.setMaximum(255) self.slider.setFixedWidth(100) # NOTE: 增加滑动条宽度,方便拖动 self.slider.valueChanged.connect(self.send_speed) # 布局 hbox = QHBoxLayout() vbox_left = QVBoxLayout() vbox_left.addWidget(self.joystick_label) vbox_left.addWidget(self.connect_button) vbox_left.addWidget(self.port_label) vbox_left.addWidget(self.baudrate_label) vbox_right = QVBoxLayout() vbox_right.addWidget(self.slider_label) vbox_right.addWidget(self.slider) hbox.addLayout(vbox_left) hbox.addLayout(vbox_right) self.setLayout(hbox) # 摇杆事件处理 self.joystick_label.mousePressEvent = self.joystick_press self.joystick_label.mouseReleaseEvent = self.joystick_release def connect_serial(self): try: self.serial = serial.Serial('COM1', 9600) self.connect_button.setText('已连接') self.port_label.setText('串口号: COM1') except Exception as e: self.connect_button.setText('连接失败') self.port_label.setText('串口号: 未连接') def send_speed(self, value): if self.serial: self.serial.write(f'SPEED {value}'.encode()) def joystick_press(self, event): if self.serial: x = event.pos().x() y = event.pos().y() if x < 100: self.serial.write(b'A') elif x > 200: self.serial.write(b'D') elif y < 100: self.serial.write(b'W') elif y > 200: self.serial.write(b'S') def joystick_release(self, event): if self.serial: self.serial.write(b'X') def check_serial_ports(self): # NOTE: 自动检测串口并更新UI ports = serial.tools.list_ports.comports() if ports: self.port_label.setText(f'串口号: {ports[0].device}') else: self.port_label.setText('串口号: 未连接') if __name__ == '__main__': app = QApplication(sys.argv) ex = SerialControlApp() ex.show() sys.exit(app.exec()) 整体布局左边摇杆,右边滑动条。当有串口接入时自动识别,整体横屏布局
最新发布
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值