美工做的好的网站,资讯网站优化排名,深圳企业网站建设维护,市场seo是什么意思与上位机通信 在天问中编程#xff0c;通过分支判断来接收 PyQt 的传递的信号#xff0c;进而控制单片机的点灯操作。 环境说明 该内容仅针对我自己学习的开发板做的笔记#xff0c;在实际开发中需要针对目标电路板的原理图进行针对性研究。 芯片#xff1a;STC8H8K64U烧录…与上位机通信 在天问中编程通过分支判断来接收 PyQt 的传递的信号进而控制单片机的点灯操作。 环境说明 该内容仅针对我自己学习的开发板做的笔记在实际开发中需要针对目标电路板的原理图进行针对性研究。 芯片STC8H8K64U烧录软件stc-isp-v6.92G编码工具天问
引脚说明
P0_0蜂鸣器按频率发音1高0低P0_1电动马达0停1动P5_3小蓝灯0灭1亮P2_71 号 LED 灯0亮1灭P2_62 号 LED 灯0亮1灭P1_53 号 LED 灯0亮1灭P1_44 号 LED 灯0亮1灭P2_35 号 LED 灯0亮1灭P2_26 号 LED 灯0亮1灭P2_17 号 LED 灯0亮1灭P2_08 号 LED 灯0亮1灭P5_11 号按键0按下1弹起P5_22 号按键0按下1弹起P5_33 号按键0按下1弹起P5_44 号按键0按下1弹起P3_4矩阵键盘第 1 行引脚P3_5矩阵键盘第 2 行引脚P4_0矩阵键盘第 3 行引脚P4_1矩阵键盘第 4 行引脚P0_3矩阵键盘第 1 列引脚P0_6矩阵键盘第 2 列引脚P0_7矩阵键盘第 3 列引脚P1_7矩阵键盘第 4 列引脚
天问代码
#include STC8HX.h
uint32 sys_clk 24000000;//设置PWM、定时器、串口、EEPROM频率参数
#include lib/twen_board.h
#include lib/UART.h
#include lib/wmath.h
#include stdio.h#define SIZE 8int8 incr 1;
uint8 rec 0;
uint8 index 0;
uint8 isLoop 0;
uint32 INTERVAL 800;void putchar(char c) {if (c \n) {uart_putchar(UART_1, 0x0d);uart_putchar(UART_1, 0x0a);} else {uart_putchar(UART_1, (uint8)c);}
}void switchOffAll() {// 1:P2_7// 2:P2_6// 3:P1_5// 4:P1_4// 5:P2_3// 6:P2_2// 7:P2_1// 8:P2_0P2_7 1, P2_6 1, P1_5 1, P1_4 1;P2_3 1, P2_2 1, P2_1 1, P2_0 1;
}void setup() {twen_board_init();//天问51初始化uart_init(UART_1, UART1_RX_P30, UART1_TX_P31, 115200, TIM_1);//初始化串口P1M10x00;P1M00xff;//推挽输出P2M10x00;P2M00xff;//推挽输出randomSeed(1);switchOffAll();
}// 需求6
//
// 随机点亮1, 2, 3, 4, 5, 6, 7, 8任意一个LED灯
void randomSwitchOn6() {index random(0, 7 1); // 生成[0, 7] 内的整数printf_small(index %d, index);switch(index) {case 0: P2_7 0; break; case 1: P2_6 0; break;case 2: P1_5 0; break; case 3: P1_4 0; break;case 4: P2_3 0; break; case 5: P2_2 0; break;case 6: P2_1 0; break; case 7: P2_0 0; break; }delay(INTERVAL);switchOffAll();delay(INTERVAL);
}// 需求7
//
// 随机点亮1, 3, 5, 7任意一个LED灯
void randomSwitchOn7() {// 0 1 2 3// 1 3 5 7index random(0, 3 1);// 生成[0, 3] 内的整数printf_small(index %d, index);switch(index) {case 0: P2_7 0; break; case 1: P1_5 0; break;case 2: P2_3 0; break; case 3: P2_1 0; break; }delay(INTERVAL);switchOffAll();delay(INTERVAL);
}// 需求8
//
// 如果串口接收到0x1: 1, 2, 3, 4, 5, 6, 7, 8 走马灯亮
// 则调用 marquee(0, 1, 0);
// 如果串口接收到0x2: 8, 7, 6, 5, 4, 3, 2, 1 走马灯亮
// 则调用 marquee(7, -1, 0);
// 如果串口接收到0x31, 3, 5, 7 号灯依次流水点亮
// 则调用 marquee(0, 2, 1);
// 如果串口接收到0x48, 6, 4, 2 号灯依次流水点亮
// 则调用 marquee(7, -2, 1);
void marquee8(uint8 start, int incr, uint8 isFlowing) {switchOffAll();delay(INTERVAL);index start;while(index SIZE index -1) {if(isFlowing 0) {switchOffAll();}switch(index) {case 0: P2_7 0; break; case 1: P2_6 0; break;case 2: P1_5 0; break; case 3: P1_4 0; break;case 4: P2_3 0; break; case 5: P2_2 0; break;case 6: P2_1 0; break; case 7: P2_0 0; break; }index incr;delay(INTERVAL);}if(isFlowing 0) {switchOffAll();}
}// 需求9
//
// 如果串口接收到0x1: 1, 2, 3, 4, 5, 6, 7, 8 走马灯亮
// 则调用 marquee(0, 1, 0);
// 如果串口接收到0x2: 8, 7, 6, 5, 4, 3, 2, 1 走马灯亮
// 则调用 marquee(7, -1, 0);
// 如果串口接收到0x31, 3, 5, 7 号灯依次流水点亮
// 则调用 marquee(0, 2, 1);
// 如果串口接收到0x48, 6, 4, 2 号灯依次流水点亮
// 则调用 marquee(7, -2, 1);
void marquee9(uint8 start, int incr, uint8 isFlowing) {switchOffAll();delay(INTERVAL);index start;while(index SIZE index -1) {if(isFlowing 0) {switchOffAll();}switch(index) {case 0: P2_7 0; break; case 1: P2_6 0; break;case 2: P1_5 0; break; case 3: P1_4 0; break;case 4: P2_3 0; break; case 5: P2_2 0; break;case 6: P2_1 0; break; case 7: P2_0 0; break; }index incr;delay(INTERVAL);}switchOffAll();
}// 自定义相遇灯
void meetYou() {int i 0;while(i 30) {switchOffAll();switch(index) {case 0: P2_7 0; P2_0 0; break;case 1: P2_6 0; P2_1 0; break;case 2: P1_5 0; P2_2 0; break;case 3: P1_4 0; P2_3 0; break;}if(index 2) {incr -1;} else if(index 1) {incr 1;}index incr;delay(INTERVAL);if(isLoop) {// 如果需要死循环则手动置零默认跑 30 次i 0;}i;}switchOffAll();
}void loop() {if(UART1_GET_RX_FLAG) {UART1_CLEAR_RX_FLAG;rec SBUF;// uart_putchar(UART_1, rec);//串口单个字符输出// uart_putstr(UART_1, rec);//字符串输出// printf_small(rec %d, rec);if(rec 0x00) {// 0x00 专用于用于测试通路uart_putstr(UART_1, OK);} // 自定义相遇灯else if(rec 0x01) {uart_putstr(UART_1, meet you);meetYou();}// 需求9的分支else if(rec 0x5B) {uart_putstr(UART_1, 需求9的0x1);marquee9(0, 1, 1);} else if (rec 0x5C) {uart_putstr(UART_1, 需求9的0x2);marquee9(1, 1, 1);} else if (rec 0x5D) {uart_putstr(UART_1, 需求9的0x3);marquee9(2, 1, 1);} else if (rec 0x5E) {uart_putstr(UART_1, 需求9的0x4);marquee9(3, 1, 1);} else if (rec 0x5F) {uart_putstr(UART_1, 需求9的0x5);marquee9(4, 1, 1);} else if (rec 0x60) {uart_putstr(UART_1, 需求9的0x6);marquee9(5, 1, 1);} else if (rec 0x61) {uart_putstr(UART_1, 需求9的0x7);marquee9(6, 1, 1);} else if (rec 0x62) {uart_putstr(UART_1, 需求9的0x8);marquee9(7, 1, 1);}// 需求8的分支else if (rec 0x51) {uart_putstr(UART_1, 需求8的0x1);marquee8(0, 1, 0);} else if (rec 0x52) {uart_putstr(UART_1, 需求8的0x2);marquee8(7, -1, 0);} else if (rec 0x53) {uart_putstr(UART_1, 需求8的0x3);marquee8(0, 2, 1);} else if (rec 0x54) {uart_putstr(UART_1, 需求8的0x4);marquee8(7, -2, 1);// 需求7的分支} else if (rec 0x46) {uart_putstr(UART_1, 需求7);randomSwitchOn7();// 需求6的分支} else if (rec 0x3C) {uart_putstr(UART_1, 需求6);randomSwitchOn6();} else {uart_putstr(UART_1, unknown command!);}}
}void main(void) {setup();while(1){loop();}
}上位机代码 from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
import sys
import serial
from serial.tools import list_portsBUTTONS [(需求9的0x1, lambda : send(91)), (需求9的0x2, lambda : send(92)),(需求9的0x3, lambda : send(93)), (需求9的0x4, lambda : send(94)),(需求9的0x5, lambda : send(95)), (需求9的0x6, lambda : send(96)),(需求9的0x7, lambda : send(97)), (需求9的0x8, lambda : send(98)),(需求8的0x1, lambda : send(81)), (需求8的0x2, lambda : send(82)),(需求8的0x3, lambda : send(83)), (需求8的0x4, lambda : send(84)),(需求7, lambda : send(70)), (需求6, lambda : send(60)),(我的相遇灯, lambda : send(1))
]
发送 int 数据到串口
num 的取值如下所示
0x5B:需求9的0x1
0x5C:需求9的0x2
0x5D:需求9的0x3
0x5E:需求9的0x4
0x5F:需求9的0x5
0x60:需求9的0x6
0x61:需求9的0x7
0x62:需求9的0x8
0x51:需求8的0x1
0x52:需求8的0x2
0x53:需求8的0x3
0x54:需求8的0x4
0x46:需求7
0x3C:需求6
0x01:我的相遇灯def send(num:int 0):ports [(p.device, p.description) for p in list_ports.comports()]port [x[0] for x in ports if USB-SERIAL in x[1]]port port[0] if len(port) else Noneif not port:print(找不到 USB 串口)exit()ser serial.Serial(portport, baudrate115200, timeout1200)if not ser or not ser.is_open:print(Serial port is not open.)ser.write(num.to_bytes(length8, byteorderlittle, signedFalse))ser.flush()info ser.read(2)ser.close()if(info):print(info)# 1.创建应用程序
app QApplication(sys.argv)# 2.创建窗口
w QWidget()
y 0
# 修改窗口标题
w.setWindowTitle(串口信号发送客户端)
for bs in BUTTONS:btn QPushButton()btn.move(0, y)btn.setText(bs[0])btn.clicked.connect(bs[1])btn.setParent(w)y 30# 3.显示窗口
w.show()
sys.exit(app.exec())