雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕

硬件平台

  1. AT32A403A Board开发板

  2. 1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01

    在这里插入图片描述

产品介绍

推荐一个屏幕资料参考网站 http://www.lcdwiki.com/1.28inch_IPS_Module

在这里插入图片描述

  • 1.28寸圆形IPS彩屏,支持 RGB 65K色显示,显示色彩丰富
  • 240X240分辨率,显示清晰
  • IPS全视角面板,超宽可视范围
  • 采用4线制SPI串行总线,只需几个IO即可点亮
  • 提供丰富的Arduino、STM32、C51以及MSP430示例程序
  • 军工级工艺标准,长期稳定工作
  • 提供底层驱动技术支持

产品参数

名称参数
显示颜色RGB 65K 彩色
SKUMSP1281
尺寸1.28(inch)
面板材质TFT
驱动芯片GC9A01
分辨率240*240 (Pixel)
显示接口4-line SPI interface
有效显示区域(AA区)直径:32.40 (mm)
触摸屏类型无触摸屏
触摸IC无触摸IC
模块PCB底板尺寸38.03x45.80(mm)
视角全角度
工作温度-10℃~60℃
存储温度-20℃~70℃
工作电压3.3V

接口定义

序号模块引脚引脚说明
1GND液晶屏电源地
2VCC液晶屏电源正(3.3V/5V)
3SCL液晶屏SPI总线时钟信号
4SDA液晶屏SPI总线写数据信号
5RES液晶屏复位控制信号(低电平复位,模块有复位电路,该引脚可不接)
6DC液晶屏寄存器/数据选择控制信号(低电平:寄存器,高电平:数据)
7CS液晶屏片选控制信号(低电平使能)
8BLK液晶屏背光控制信号(高电平点亮,如不需要控制,请接3.3V)
模拟SPI移植LCD屏幕驱动
  1. 建立工程模板,添加相关驱动文件
 //lcd_gc9a01 硬件驱动层代码
 lcd_gc9a01.c
 lcd_gc9a01.h
 //lcd_gc9a01 软件应用层代码
 lcd_guic
 lcd_gui.h
 lcd_font.h
 //lcd_gc9a01 软件测试代码
 lcd_example.c
 lcd_example.h

在这里插入图片描述

  1. 配置引脚
    选择引脚,进入工程开始编写屏幕引脚初始化代码。为了方便后续移植,我在lcd_gc9a01.h处宏定义了每一个引脚,后续根据需要进行修改即可。
#define LCD_GPIO_PORT       GPIOD
#define LCD_GPIO_PORT_CLK   CRM_GPIOD_PERIPH_CLOCK

#define SCL_GPIO_PORT       GPIOD
#define SCL_GPIO_PIN        GPIO_PINS_8
#define SCL_GPIO_PORT_CLK   CRM_GPIOD_PERIPH_CLOCK

#define SDA_GPIO_PORT       GPIOD
#define SDA_GPIO_PIN        GPIO_PINS_9
#define SDA_GPIO_PORT_CLK   CRM_GPIOD_PERIPH_CLOCK

#define RES_GPIO_PORT       GPIOD
#define RES_GPIO_PIN        GPIO_PINS_10
#define RES_GPIO_PORT_CLK   CRM_GPIOD_PERIPH_CLOCK

#define DC_GPIO_PORT        GPIOD
#define DC_GPIO_PIN         GPIO_PINS_11
#define DC_GPIO_PORT_CLK    CRM_GPIOD_PERIPH_CLOCK

#define CS_GPIO_PORT        GPIOD
#define CS_GPIO_PIN         GPIO_PINS_12
#define CS_GPIO_PORT_CLK    CRM_GPIOD_PERIPH_CLOCK

#define BLK_GPIO_PORT        GPIOD
#define BLK_GPIO_PIN         GPIO_PINS_13
#define BLK_GPIO_PORT_CLK    CRM_GPIOD_PERIPH_CLOCK

  1. 屏幕GPIO端口初始化配置
void lcd_gpio_init(void)
{
  gpio_init_type gpio_init_struct;

  /* enable the gpioa clock */
  crm_periph_clock_enable(LCD_GPIO_PORT_CLK, TRUE);

  /* set default parameter */
  gpio_default_para_init(&gpio_init_struct);

  /* configure the gpio */
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = SDA_GPIO_PIN |SCL_GPIO_PIN|RES_GPIO_PIN|DC_GPIO_PIN|CS_GPIO_PIN|BLK_GPIO_PIN;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(LCD_GPIO_PORT, &gpio_init_struct);
    
}
  1. SPI 接口宏定义设置
#define	SPI_SCLK_SET    gpio_bits_set(SCL_GPIO_PORT,SCL_GPIO_PIN)
#define	SPI_SCLK_CLR    gpio_bits_reset(SCL_GPIO_PORT,SCL_GPIO_PIN)

#define	SPI_MOSI_SET    gpio_bits_set(SDA_GPIO_PORT,SDA_GPIO_PIN)
#define	SPI_MOSI_CLR    gpio_bits_reset(SDA_GPIO_PORT,SDA_GPIO_PIN)
   


#define	LCD_RES_SET     gpio_bits_set(RES_GPIO_PORT,RES_GPIO_PIN)
#define	LCD_RES_CLR     gpio_bits_reset(RES_GPIO_PORT,RES_GPIO_PIN)

#define	LCD_DC_SET      gpio_bits_set(DC_GPIO_PORT,DC_GPIO_PIN)
#define	LCD_DC_CLR      gpio_bits_reset(DC_GPIO_PORT,DC_GPIO_PIN)

#define	LCD_CS_SET      gpio_bits_set(CS_GPIO_PORT,CS_GPIO_PIN)
#define	LCD_CS_CLR      gpio_bits_reset(CS_GPIO_PORT,CS_GPIO_PIN)

#define	LCD_BLK_SET     gpio_bits_set(BLK_GPIO_PORT,BLK_GPIO_PIN) 
#define	LCD_BLK_CLR     gpio_bits_reset(BLK_GPIO_PORT,BLK_GPIO_PIN) 

  1. 软件SPI代码实现

    /*****************************************************************************
     * @name       :void  SPI_WriteByte(uint8_t Data)
     * @function   :Write a byte of data using STM32's Software SPI
     * @parameters :Data:Data to be written
     * @retvalue   :None
    ******************************************************************************/
    void SPI_WriteByte(uint8_t Data)
    {
    	unsigned char i=0;
    	for(i=8;i>0;i--)
    	{
    	  if(Data&0x80)	
    			SPI_MOSI_SET; //输出数据
        else
    		  SPI_MOSI_CLR;
          SPI_SCLK_CLR;       
          SPI_SCLK_SET;
          Data<<=1; 
    	}
    }
    
    /*****************************************************************************
     * @name       :void LCD_WR_REG(uint8_t data)
     * @function   :Write an 8-bit command to the LCD screen
     * @parameters :data:Command value to be written
     * @retvalue   :None
    ******************************************************************************/
    void LCD_WR_REG(uint8_t data)
    { 
       LCD_CS_CLR;     
       LCD_DC_CLR;	  
       SPI_WriteByte(data);
       LCD_CS_SET;	
    }
    
    /*****************************************************************************
     * @name       :void LCD_WR_DATA(uint8_t data)
     * @function   :Write an 8-bit data to the LCD screen
     * @parameters :data:data value to be written
     * @retvalue   :None
    ******************************************************************************/
    void LCD_WR_DATA(uint8_t data)
    {
       LCD_CS_CLR;
       LCD_DC_SET;
       SPI_WriteByte(data);
       LCD_CS_SET;
    }
    

    如果传输的数据位为1,则将SPI数据引脚拉高;传输的数据位为0,则将SPI数据引脚拉低。每次传输一个字节数据,高位在前,每个时钟上升沿传输1位数据。

  2. LCD初始化函数

/*****************************************************************************
* @name       :void LCD_Init(void)
* @date       :2018-08-09 
* @function   :Initialization LCD screen
* @parameters :None
* @retvalue   :None
******************************************************************************/	 	 
void LCD_Init(void)
{  
  lcd_gpio_init();								 
  LCD_RESET(); //LCD 复位
//************* GC9A01初始化**********//	
  LCD_WR_REG(0xEF);
  LCD_WR_REG(0xEB);
  LCD_WR_DATA(0x14); 
  
	LCD_WR_REG(0xFE);			 
  LCD_WR_REG(0xEF); 

  LCD_WR_REG(0xEB);	
  LCD_WR_DATA(0x14); 

  LCD_WR_REG(0x84);			
  LCD_WR_DATA(0x40); 

  LCD_WR_REG(0x85);			
  LCD_WR_DATA(0xFF); 

  LCD_WR_REG(0x86);			
  LCD_WR_DATA(0xFF); 

  LCD_WR_REG(0x87);			
  LCD_WR_DATA(0xFF);

  LCD_WR_REG(0x88);			
  LCD_WR_DATA(0x0A);

  LCD_WR_REG(0x89);			
  LCD_WR_DATA(0x21); 

  LCD_WR_REG(0x8A);			
  LCD_WR_DATA(0x00); 

  LCD_WR_REG(0x8B);			
  LCD_WR_DATA(0x80); 

  LCD_WR_REG(0x8C);			
  LCD_WR_DATA(0x01); 

  LCD_WR_REG(0x8D);			
  LCD_WR_DATA(0x01); 

  LCD_WR_REG(0x8E);			
  LCD_WR_DATA(0xFF); 

  LCD_WR_REG(0x8F);			
  LCD_WR_DATA(0xFF); 


  LCD_WR_REG(0xB6);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x20);

  LCD_WR_REG(0x36);
  LCD_WR_DATA(0x08);
  
  LCD_WR_REG(0x3A);			
  LCD_WR_DATA(0x05); 


  LCD_WR_REG(0x90);			
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x08); 

  LCD_WR_REG(0xBD);			
  LCD_WR_DATA(0x06);
  
  LCD_WR_REG(0xBC);			
  LCD_WR_DATA(0x00);	

  LCD_WR_REG(0xFF);			
  LCD_WR_DATA(0x60);
  LCD_WR_DATA(0x01);
  LCD_WR_DATA(0x04);

  LCD_WR_REG(0xC3);			
  LCD_WR_DATA(0x13);
  LCD_WR_REG(0xC4);			
  LCD_WR_DATA(0x13);

  LCD_WR_REG(0xC9);			
  LCD_WR_DATA(0x22);

  LCD_WR_REG(0xBE);			
  LCD_WR_DATA(0x11); 

  LCD_WR_REG(0xE1);			
  LCD_WR_DATA(0x10);
  LCD_WR_DATA(0x0E);

  LCD_WR_REG(0xDF);			
  LCD_WR_DATA(0x21);
  LCD_WR_DATA(0x0c);
  LCD_WR_DATA(0x02);

  LCD_WR_REG(0xF0);   
  LCD_WR_DATA(0x45);
  LCD_WR_DATA(0x09);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x26);
  LCD_WR_DATA(0x2A);

  LCD_WR_REG(0xF1);    
  LCD_WR_DATA(0x43);
  LCD_WR_DATA(0x70);
  LCD_WR_DATA(0x72);
  LCD_WR_DATA(0x36);
  LCD_WR_DATA(0x37);  
  LCD_WR_DATA(0x6F);


  LCD_WR_REG(0xF2);   
  LCD_WR_DATA(0x45);
  LCD_WR_DATA(0x09);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x26);
  LCD_WR_DATA(0x2A);

  LCD_WR_REG(0xF3);   
  LCD_WR_DATA(0x43);
  LCD_WR_DATA(0x70);
  LCD_WR_DATA(0x72);
  LCD_WR_DATA(0x36);
  LCD_WR_DATA(0x37); 
  LCD_WR_DATA(0x6F);

  LCD_WR_REG(0xED);	
  LCD_WR_DATA(0x1B); 
  LCD_WR_DATA(0x0B); 

  LCD_WR_REG(0xAE);			
  LCD_WR_DATA(0x77);
  
  LCD_WR_REG(0xCD);			
  LCD_WR_DATA(0x63);		


  LCD_WR_REG(0x70);			
  LCD_WR_DATA(0x07);
  LCD_WR_DATA(0x07);
  LCD_WR_DATA(0x04);
  LCD_WR_DATA(0x0E); 
  LCD_WR_DATA(0x0F); 
  LCD_WR_DATA(0x09);
  LCD_WR_DATA(0x07);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x03);

  LCD_WR_REG(0xE8);			
  LCD_WR_DATA(0x34);

  LCD_WR_REG(0x62);			
  LCD_WR_DATA(0x18);
  LCD_WR_DATA(0x0D);
  LCD_WR_DATA(0x71);
  LCD_WR_DATA(0xED);
  LCD_WR_DATA(0x70); 
  LCD_WR_DATA(0x70);
  LCD_WR_DATA(0x18);
  LCD_WR_DATA(0x0F);
  LCD_WR_DATA(0x71);
  LCD_WR_DATA(0xEF);
  LCD_WR_DATA(0x70); 
  LCD_WR_DATA(0x70);

  LCD_WR_REG(0x63);			
  LCD_WR_DATA(0x18);
  LCD_WR_DATA(0x11);
  LCD_WR_DATA(0x71);
  LCD_WR_DATA(0xF1);
  LCD_WR_DATA(0x70); 
  LCD_WR_DATA(0x70);
  LCD_WR_DATA(0x18);
  LCD_WR_DATA(0x13);
  LCD_WR_DATA(0x71);
  LCD_WR_DATA(0xF3);
  LCD_WR_DATA(0x70); 
  LCD_WR_DATA(0x70);

  LCD_WR_REG(0x64);			
  LCD_WR_DATA(0x28);
  LCD_WR_DATA(0x29);
  LCD_WR_DATA(0xF1);
  LCD_WR_DATA(0x01);
  LCD_WR_DATA(0xF1);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x07);

  LCD_WR_REG(0x66);			
  LCD_WR_DATA(0x3C);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0xCD);
  LCD_WR_DATA(0x67);
  LCD_WR_DATA(0x45);
  LCD_WR_DATA(0x45);
  LCD_WR_DATA(0x10);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);

  LCD_WR_REG(0x67);			
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x3C);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x01);
  LCD_WR_DATA(0x54);
  LCD_WR_DATA(0x10);
  LCD_WR_DATA(0x32);
  LCD_WR_DATA(0x98);

  LCD_WR_REG(0x74);			
  LCD_WR_DATA(0x10);	
  LCD_WR_DATA(0x85);	
  LCD_WR_DATA(0x80);
  LCD_WR_DATA(0x00); 
  LCD_WR_DATA(0x00); 
  LCD_WR_DATA(0x4E);
  LCD_WR_DATA(0x00);					
  
  LCD_WR_REG(0x98);			
  LCD_WR_DATA(0x3e);
  LCD_WR_DATA(0x07);

  LCD_WR_REG(0x35);	
  LCD_WR_REG(0x21);

  LCD_WR_REG(0x11); 
  delay_ms(120); 

  LCD_WR_REG(0x29); 	
  LCD_direction(USE_HORIZONTAL);//设置LCD显示方向
  LCD_BLK_SET;//点亮背光	 
  LCD_Clear(WHITE);//清全屏白色
}
  1. 驱动完整代码见仓库代码
    在这里插入图片描述
    在这里插入图片描述

屏幕测试

  1. 主程序
#include "main.h"

/**
  * @brief  main function.
  * @param  none
  * @retval none
  */
int main(void)
{
//  unsigned char count_num; 
  system_clock_config();
  at32_board_init();
  uart_print_init(115200);
  module_smg_gpio_iint();
  LCD_Init();
  /* output a message on hyperterminal using printf function */
  //printf("usart printf example: retarget the c library printf function to the usart\r\n");
  printf("Hardware_Init [ok] \r\n");
  printf("at_start_a403a board testing 2024-02-13\r\n");
  printf("at_start_a403a board module softspi lcd \r\n");
 
  
  while(1)
  {
       printf("lcd_example_test [start] \r\n");
       main_test(); 		   
	   menu_test();			   
       English_Font_test();     
       Chinese_Font_test();    
   
       printf("lcd_example_test [end] \r\n"); 
  }
}

  1. 测试效果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/455505.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.3.13 C++

思维导图 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace…

微信小程序一次性订阅requestSubscribeMessage授权和操作详解

一次性订阅&#xff1a;用户订阅一次发一次通知 一、授权 — requestSubscribeMessage Taro.requestSubscribeMessage({tmplIds: [], // 需要订阅的消息模板的id的集合success (res) {console.log("同意授权", res)},fail(res) {console.log(拒绝授权, res)}})点击或…

【Hibernate-Validate】常用注解

常用注解: NotNull:被注释的元素(任何元素)必须不为 nul, 集合为空也是可以的。NotEmpty:用来校验字符串、集合、map、数组不能为null或也不能为空(字符串传入空格也不可以)(集合需至少包含一个元素)NotBlank:被注释的字符串的必须非空&#xff0c;空格也不行&#xff0c;空字…

在ubuntu20通过docker部署zabbix6

部署Zabbix 6.x服务器在Ubuntu 20.04 LTS系统上使用Docker的方式可以简化安装过程并实现容器化管理。以下是一个简化的步骤指南&#xff1a; 步骤1&#xff1a;安装Docker和Docker Compose 确保你的Ubuntu系统已经安装了Docker和Docker Compose。如果没有&#xff0c;请执行以…

下载指定版本的pytorch

下载网址&#xff1a;https://download.pytorch.org/whl/torch_stable.html 参考博客网址&#xff1a;https://blog.csdn.net/wusuoweiieq/article/details/132773977

2 配置虚拟机

1.打开VM&#xff0c;主页的界面如下&#xff0c;点击"创建新的虚拟机" 2.选择“自定义&#xff08;高级&#xff09;”&#xff0c;然后点击下一步&#xff0c;如下图所示&#xff1a; 3.下图直接点击“下一步” 4.下图的界面上&#xff0c;注意&#xff0c;不要选择…

蓝桥杯-质因数问题

约数&#xff0c;又称因数&#xff1a;a % b 0,则b称为a的约数&#xff0c;包括1和a。 例如4的正约数有&#xff1a;1、2、4。6的正约数有&#xff1a;1、2、3、6。质因数&#xff1a; 质因数&#xff08;素因数或质因子&#xff09;在数论里是指能整除给定正整数&#xff08;…

从零开始学习深度学习库-2:反向传播

欢迎来到本系列的第二篇文章&#xff0c;我们将从头开始构建一个深度学习库。 本博客系列的代码可以在这个Github仓库中找到。 上一篇文章 在上一篇文章中&#xff08;链接见这里&#xff09;&#xff0c;我们实现了线性层和常见的激活函数&#xff0c;并成功构建了神经网络的…

浅谈HTTP 和 HTTPS (中间人问题)

前言 由于之前的文章已经介绍过了HTTP , 这篇文章介绍 HTTPS 相对于 HTTP 做出的改进 开门见山: HTTPS 是对 HTTP 的加强版 主要是对一些关键信息 进行了加密 一.两种加密方式 1.对称加密 公钥 明文 密文 密文 公钥 明文 2.非对称加密 举个例子就好比 小区邮箱 提供一…

Python学习笔记-Flask实现简单的投票程序

1.导入flask包 from flask import Flask,jsonify,abort,make_response,request,render_template 2.初始化 Flask 应用: app Flask(__name__) 3. 定义投票种类 data [{id:0,name:劳动节,num:0},{id:1,name:国庆节,num:0},{id:2,name:春节,num:0} ] 4.app.route(/index): …

2024考研计算机考研复试-每日重点(第二十期)

公众号“准研计算机复试”&#xff0c;超全大佬复试资料&#xff0c;保姆级复试&#xff0c;80%的题目都是上岸大佬提供的。 研宝们&#xff0c;App更新啦&#xff01; 计算机组成原理&#xff1a; 10.☆什么是数据存储的大端模式和小端模式&#xff1f; 大端模式&#xff1a;数…

github拉取项目找不到前端代码

今天从github上拉取了一个项目&#xff0c;使用docker部署在了服务器上&#xff0c; 代码正常运行&#xff0c;但是想在下载的项目中找前端代码遇到了问题&#xff0c;项目结构中的template模板只有一个页面&#xff0c;于是查看nginx配置文件 查看index.html 引入了一些js文件…

EasyRecovery恢复电脑丢失数据怎么样?

电脑是我们大家熟悉并且常用的数据存储设备&#xff0c;也是综合性非常强的数据处理设备。对于电脑设备来讲&#xff0c;最主要的数据存储介质是硬盘&#xff0c;电脑硬盘被划分成多个分区&#xff0c;在电脑上表现为C盘&#xff0c;E盘等&#xff0c;用来保存系统文件以及其他…

easyrecovery破解版百度云(含Mac/Win版)以及EasyRecovery可以恢复哪些设备

软件介绍 当不小心将回收站的文件删除了怎么办&#xff1f;想找回但是不知道怎么找回需要的数据文件&#xff1f;别担心今天小编就为大家介绍一款非常专业的电脑数据文件恢复工具&#xff0c;easyrecovery14是由Ontrack专为电脑用户推出的一款专业的数据恢复软件&…

IT廉连看——Uniapp——模板语法

IT廉连看——Uniapp——模板语法 众所周知&#xff0c;Uniapp是使用vue.js框架开发出来的&#xff0c;所以说它可以使用vue中的语法和指令来开发我们的项目。如果没有学习过vue的话开发起来会比较吃力&#xff0c;所以这节课就带大家学习几个常用的vue知识。如果有学习过vue&a…

【编码魔法师系列_结构型5】外观模式(Facade Pattern)

学会设计模式&#xff0c;你就可以像拥有魔法一样&#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们&#xff08;GoF&#xff09;凝聚出来的最佳实践&#xff0c;可以提高代码的可读性、可维护性和可重用性&#xff0c;从而让我们的开发效率更高。通…

改三行代码就发了SCI一区?基于全面学习策略的Jaya算法!学会你也可以!CEC2017效果极佳!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原始Jaya算法 改进Jaya算法策略详解&…

基于Verilog的简易CPU设计

前言 本篇文章将简单讲解CPU之间各部分的功能及接线&#xff0c;并提供Verilog模拟CPU的各个组成部分。该CPU可以完成一些操作&#xff0c;如&#xff1a;加减法&#xff0c;与或&#xff0c;指令跳转等&#xff0c;最后提供testbench用于测试该CPU的工作情况是否符合预期。 C…

keycloak18.0.0==前后端分离项目中使用,前端react后端springboot

配置keycloak 启动keycloak18 新建一个realm,名字叫test1 新建两个client&#xff0c;一个用于前端&#xff0c;一个用于后端 第一个 react http://localhost:8081/auth/realms/test1/react/ 第二个 backend-service 在两个client下分别创建role testRole backend-servic…

CF575H Bots 题解 组合数学

Bots&#xff08;波特&#xff09; 传送门 Sasha and Ira are two best friends. But they aren’t just friends, they are software engineers and experts in artificial intelligence. They are developing an algorithm for two bots playing a two-player game. The ga…