| AI8051U, LCD12864, 播放BadApple 超简单 
 实现原理:
 使用AIapp-ISP软件中的CDC/串口发送文件,将图片发送到单片机,单片机进行显示
 代码
 
 复制代码    while(1)
    {
        for(i=0;i<16;i++){
            USB_SendData("h",1);
            usb_OUT_done();      //接收
            while(!bUsbOutReady);//等接收数据
            memcpy(gImage_picture1 + (i * 64),UsbOutBuffer,OutNumber);//拷贝
        }
        LCDClear();
        DisplayImage(gImage_picture1);
    }
 代码解释:复制代码import cv2
output_path = 'badapple_128_64.bin'  # 输出文件的路径和文件名称
video_path = 'badapple_320240_xvid.mp4'  # 视频
interval = 2  # 帧率间隔 越大画面越流畅 所占内存越大
bytes_data = []
if __name__ == '__main__':
    video_capture = cv2.VideoCapture(video_path)  # 读取视频文件
    video_capture.set(cv2.CAP_PROP_POS_FRAMES, 50 - 1)  # 跳过开头50帧
    i = 0  # 视频帧数
    j = 0  # 截取帧数
    while True:
        success, frame = video_capture.read()
        if success:
            i += 1
            if i % interval == 0:  # 判断帧率间隔保存帧
                j += 1
                print('正在处理第 %s 帧' % j)
                frame = cv2.resize(frame, (128, 64), interpolation=cv2.INTER_LINEAR)
                gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                _, binary_frame = cv2.threshold(gray_frame, 127, 255, cv2.THRESH_BINARY)
                # 将二值化图像转换为一维数组 从左到右 从上到下
                flat_binary = binary_frame.flatten()
                # 将像素值转换为一维的0和1序列
                binary_string = ''.join(['1' if pixel == 255 else '0' for pixel in flat_binary])
                for i in range(0, len(binary_string), 8):
                    byte = binary_string[i:i + 8]
                    bytes_data.append(int(byte, 2))
        else:
            print('转换成功,开始写入文件')
            # 将字节列表转换为字节对象
            binary_data = bytes(bytes_data)
            with open(output_path, 'wb') as f:
                f.write(binary_data)
                f.close()
            print('已生成%s帧' % j)
            break
 单片机通过虚拟串口接收一帧图像,为啥有个 for(i=0;i<16;i++) ?
 因为官方给的串口有限制64字节
 
 一帧1024字节,所以分成16次传输复制代码BYTE xdata UsbInBuffer[64];
BYTE xdata UsbOutBuffer[64];
 Python代码作用就是取一帧画面,变成黑白的,然后从左到右,从上到下,白的是1,黑的是0,写到一个名为“badapple_128_64.bin”的文件。
 这个文件用HEX编辑器打开就是这样
 
   
 CDC/串口发送文件如何用?
 
 很简单,选好文件点发送就行
 
   
 我们使用应答发送,就是单片机发个68,电脑就发64个字节的数据
 也就是 68 是数据请求命令     64 是每个数据包的大小(字节)
 
   
 然后串口波特率自己看着选 没事 我选10000000都能用
 实际效果:
 
 
 
 
 
 |