当前位置: 首页 > news >正文

开发电子商务网站和开发新闻类网站什么异同yellow在线高清完整免费版

开发电子商务网站和开发新闻类网站什么异同,yellow在线高清完整免费版,网站建设分录怎么开,网名设计在线生成器为了在STM32103CBT6微控制器上通过SPI接口驱动ST7789 LCD显示屏并显示柬埔寨文#xff0c;我们需要完成以下几个步骤#xff1a; 初始化硬件#xff1a;配置STM32的GPIO和SPI外设。编写LCD驱动代码#xff1a;实现ST7789的基本操作函数。处理字符集#xff1a;加载支持Ca…为了在STM32103CBT6微控制器上通过SPI接口驱动ST7789 LCD显示屏并显示柬埔寨文我们需要完成以下几个步骤 初始化硬件配置STM32的GPIO和SPI外设。编写LCD驱动代码实现ST7789的基本操作函数。处理字符集加载支持Cambodia字体的数据并将其转换为屏幕上的像素点。显示文本编写函数来将字符串渲染到LCD上。 下面是一个完整的示例代码展示了如何在STM32103CBT6上通过SPI接口驱动ST7789 LCD显示屏并显示“សួស្តី”意思是“你好”。 硬件准备 STM32F103CBT6开发板ST7789VW LCD显示屏 软件准备 STM32CubeMX用于初始化外设配置STM32CubeIDE用于编写代码 示例代码 1. 使用STM32CubeMX配置项目 使用STM32CubeMX生成初始化代码。以下是关键配置 SPI1: Mode - Master, Data Size - 8 Bits, Clock Polarity - High, Clock Phase - 2 Edge, NSS - Software, Baud Rate Prescaler - 256 (1 MHz), First Bit - MSB, CRC Calculation - DisableGPIO: PA5 - SCK (SPI1_SCK)PA6 - MISO (SPI1_MISO)PA7 - MOSI (SPI1_MOSI)PB1 - RST (Reset Pin)PB0 - DC (Data/Command Control Pin)PE1 - CS (Chip Select Pin) 2. 编写LCD驱动代码 创建一个文件lcd_st7789.h和lcd_st7789.c来包含ST7789的基本操作函数。 lcd_st7789.h #ifndef LCD_ST7789_H_ #define LCD_ST7789_H_#include stm32f1xx_hal.hvoid LCD_Init(void); void LCD_SetCursor(uint16_t x, uint16_t y); void LCD_WritePixel(uint16_t color); void LCD_FillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color);#endif /* LCD_ST7789_H_ */ lcd_st7789.c #include lcd_st7789.h #include main.h#define LCD_WIDTH 240 #define LCD_HEIGHT 240static SPI_HandleTypeDef hspi1;void LCD_Reset(void) {HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);HAL_Delay(10);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);HAL_Delay(10); }void LCD_Command(uint8_t cmd) {HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);HAL_SPI_Transmit(hspi1, cmd, 1, 100); }void LCD_Data(uint8_t data) {HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);HAL_SPI_Transmit(hspi1, data, 1, 100); }void LCD_Init(void) {hspi1.Instance SPI1;hspi1.Init.Mode SPI_MODE_MASTER;hspi1.Init.Direction SPI_DIRECTION_2LINES;hspi1.Init.DataSize SPI_DATASIZE_8BIT;hspi1.Init.CLKPolarity SPI_POLARITY_HIGH;hspi1.Init.CLKPhase SPI_PHASE_2EDGE;hspi1.Init.NSS SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_256;hspi1.Init.FirstBit SPI_FIRSTBIT_MSB;hspi1.Init.TIMode SPI_TIMODE_DISABLE;hspi1.Init.CRCCalculation SPI_CRCCALCULATION_DISABLE;hspi1.Init.CRCPolynomial 10;if (HAL_SPI_Init(hspi1) ! HAL_OK) {// Initialization ErrorError_Handler();}LCD_Reset();LCD_Command(0x11); // Sleep OutHAL_Delay(120);LCD_Command(0xB1);LCD_Data(0x01);LCD_Data(0x2C);LCD_Data(0x2D);LCD_Command(0xB2);LCD_Data(0x01);LCD_Data(0x2C);LCD_Data(0x2D);LCD_Command(0xB3);LCD_Data(0x01);LCD_Data(0x2C);LCD_Data(0x2D);LCD_Data(0x01);LCD_Data(0x2C);LCD_Data(0x2D);LCD_Command(0xB4);LCD_Data(0x07);LCD_Command(0xC0);LCD_Data(0xA2);LCD_Data(0x02);LCD_Data(0x84);LCD_Command(0xC1);LCD_Data(0xC5);LCD_Command(0xC2);LCD_Data(0x0A);LCD_Data(0x00);LCD_Command(0xC3);LCD_Data(0x8A);LCD_Data(0x2A);LCD_Command(0xC4);LCD_Data(0x8A);LCD_Data(0xEE);LCD_Command(0xC5);LCD_Data(0x0E);LCD_Command(0xE0);LCD_Data(0xF0);LCD_Data(0x09);LCD_Data(0x0B);LCD_Data(0x06);LCD_Data(0x04);LCD_Data(0x15);LCD_Data(0x07);LCD_Data(0x31);LCD_Data(0xD8);LCD_Data(0x4D);LCD_Data(0x40);LCD_Data(0x15);LCD_Data(0x12);LCD_Data(0x12);LCD_Data(0x18);LCD_Command(0xE1);LCD_Data(0xF0);LCD_Data(0x09);LCD_Data(0x0B);LCD_Data(0x06);LCD_Data(0x04);LCD_Data(0x15);LCD_Data(0x07);LCD_Data(0x31);LCD_Data(0xD8);LCD_Data(0x4D);LCD_Data(0x40);LCD_Data(0x15);LCD_Data(0x12);LCD_Data(0x12);LCD_Data(0x18);LCD_Command(0x21); // Inversion OnLCD_Command(0x11); // Sleep OutHAL_Delay(120);LCD_Command(0x29); // Display On }void LCD_SetCursor(uint16_t x, uint16_t y) {LCD_Command(0x2A);LCD_Data((x 8) 0xFF);LCD_Data(x 0xFF);LCD_Data(((x 1) 8) 0xFF);LCD_Data((x 1) 0xFF);LCD_Command(0x2B);LCD_Data((y 8) 0xFF);LCD_Data(y 0xFF);LCD_Data(((y 1) 8) 0xFF);LCD_Data((y 1) 0xFF);LCD_Command(0x2C); }void LCD_WritePixel(uint16_t color) {uint8_t data[] {color 8, color 0xFF};HAL_SPI_Transmit(hspi1, data, 2, 100); }void LCD_FillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) {LCD_SetCursor(x, y);for (uint16_t i 0; i h; i) {for (uint16_t j 0; j w; j) {LCD_WritePixel(color);}} } 3. 处理字符集 创建一个文件font.h和font.c来包含Cambodia字体的数据。 font.h #ifndef FONT_H_ #define FONT_H_#include stdint.hextern const uint8_t cambodia_font[];typedef struct {uint16_t unicode;uint8_t width;uint8_t height;uint8_t data[]; } FontChar;const FontChar* GetFontChar(uint16_t unicode);#endif /* FONT_H_ */ font.c 这个文件包含了Cambodia字体的数据。这里假设你已经有了这样的数据。 #include font.hconst uint8_t cambodia_font[] {// Cambodian font data in a specific format// Example entry for Unicode U1780 (ក)0x17, 0x80, 0x08, 0x08,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// Add more characters as needed0x00, 0x00 // End marker };const FontChar* GetFontChar(uint16_t unicode) {for (int i 0; ; i) {if (cambodia_font[i * 5] (unicode 8) cambodia_font[i * 5 1] (unicode 0xFF)) {static FontChar fc;fc.unicode unicode;fc.width cambodia_font[i * 5 2];fc.height cambodia_font[i * 5 3];fc.data cambodia_font[i * 5 4];return fc;}if (cambodia_font[i * 5] 0 cambodia_font[i * 5 1] 0)break;}return NULL; } 4. 显示文本 在main.c中调用上述库函数来显示文本 #include main.h #include lcd_st7789.h #include font.h#define SCREEN_WIDTH 240 #define SCREEN_HEIGHT 240void DrawString(uint16_t x, uint16_t y, const char* str) {while (*str) {uint32_t c *(uint8_t*)str;if ((c 0xE0) 0xC0) { // Two-byte UTF-8 characterc (c 0x1F) 6;c | (*(uint8_t*)str 0x3F);} else if ((c 0xF0) 0xE0) { // Three-byte UTF-8 characterc (c 0x0F) 12;c | (*(uint8_t*)str 0x3F) 6;c | (*(uint8_t*)str 0x3F);}const FontChar* fc GetFontChar(c);if (fc) {LCD_SetCursor(x, y);for (int h 0; h fc-height; h) {for (int w 0; w fc-width; w) {uint8_t pixel fc-data[h * fc-width w];LCD_WritePixel(pixel ? 0xFFFF : 0x0000); // White background black text}x fc-width;}y fc-height;}} }int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_SPI1_UART_Init();LCD_Init();LCD_FillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0x0000); // Clear screen with blackDrawString(10, 10, សួស្តី);while (1) {// Main loop} }void SystemClock_Config(void) {RCC_OscInitTypeDef RCC_OscInitStruct {0};RCC_ClkInitTypeDef RCC_ClkInitStruct {0};RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL RCC_PLL_MUL9;if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK) {Error_Handler();}RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_2) ! HAL_OK) {Error_Handler();} }static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);GPIO_InitStruct.Pin GPIO_PIN_0;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOE, GPIO_InitStruct); }static void MX_SPI1_UART_Init(void) {hspi1.Instance SPI1;hspi1.Init.Mode SPI_MODE_MASTER;hspi1.Init.Direction SPI_DIRECTION_2LINES;hspi1.Init.DataSize SPI_DATASIZE_8BIT;hspi1.Init.CLKPolarity SPI_POLARITY_HIGH;hspi1.Init.CLKPhase SPI_PHASE_2EDGE;hspi1.Init.NSS SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_256;hspi1.Init.FirstBit SPI_FIRSTBIT_MSB;hspi1.Init.TIMode SPI_TIMODE_DISABLE;hspi1.Init.CRCCalculation SPI_CRCCALCULATION_DISABLE;hspi1.Init.CRCPolynomial 10;if (HAL_SPI_Init(hspi1) ! HAL_OK) {Error_Handler();} }void Error_Handler(void) {while (1) {// User can add his own implementation to report the HAL error return state} } 这段代码包括了所有必要的部分来初始化STM32F103CBT6、配置SPI接口、初始化ST7789 LCD显示屏并显示“សួស្តី”。你需要确保cambodia_font数组包含足够的Cambodia字体数据并根据实际情况调整字体数据的格式和查找逻辑。
http://www.dnsts.com.cn/news/257609.html

相关文章:

  • 天猫网站建设基本情况最便宜的购物软件
  • 具有口碑的柳州网站建设公司做家庭影院的有哪些网站
  • 河北省住建和城乡建设厅网站首页广州网站制作怎么选
  • 如何判断网站是否被百度降权景区网站建设策划
  • 乌兰浩特网站制作织梦xml网站地图
  • 怎么收录网站建设项目
  • 白云做网站要多少钱wordpress 简单企业主题
  • 中山自助建站系统wordpress建博客网站吗
  • 自建网站步骤模板王网页模板
  • 做新闻类网站wordpress百家号模版
  • 做一个网站需要多长时间备案的网站换空间
  • 互站网wordpress文章空两格
  • 常德市住房和城乡建设局网站南京网站建设网站设计
  • 北京医疗机构网站前置审批需要的材料有哪些深圳做企业网站的公司推荐
  • 建设网站可选择的方案电商网站建设怎么样
  • 可以货代从哪些网站开发客户简洁的网站地图模板
  • 网站建设收费标准不一巴中微小网站建设案例
  • 临海市建设局官网站专门做辅助的网站
  • 公司网站方案福田我要做网站优化比较好
  • 巨腾外贸网站建设公司怎么做无损mp3下载网站
  • 有域名了 怎么做网站使用WordPress做论坛
  • 东莞市专注网站建设怎么样厦门企业网站建设补贴
  • 网页设计和网站建设是同一回事吗开网站买自己做的东西
  • 成都家具企业网站建设湖南岳阳网站开发网络公司
  • 最权威的网站推广设计为企业做贡献
  • 舒兰网站建设开展农业信息网站建设工作总结
  • 肥城市住房和城乡建设厅网站做货代在上面网站找客户比较多
  • 杭州 电子商务网站建设 网络服务微网站开发平台 开源
  • 给自己的网站做关键词流程制作图片视频的软件
  • c2c网站的特点及主要功能杭州高端网站设计