嵌入式应用课程设计 LED 点阵屏和 LDC 屏幕的显示 大学编程作业(TUST 天津科技大学 2023 年)

本文主要是介绍嵌入式应用课程设计 LED 点阵屏和 LDC 屏幕的显示 大学编程作业(TUST 天津科技大学 2023 年),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

嵌入式应用课程设计 LED 点阵屏和 LDC 屏幕的显示 大学编程作业(TUST 天津科技大学 2023 年)

  • 嵌入式应用课程设计 LED 点阵屏和 LDC 屏幕的显示 大学编程作业(TUST 天津科技大学 2023 年)
    • 一、项目简介
    • 二、交流学习
  • 嵌入式应用课程设计报告
    • 【实验目的】
    • 【实验环境】
    • 【实验内容】
    • 【实验原理】
    • 【实验代码】
    • 【实验结果】
    • 【实验心得】

一、项目简介

本 LED 点阵屏和 LDC 屏幕的显示,我利用了实验室,采集了电压模拟量,实现了 A/D 转换,在 LED 点阵屏动态显示出了电压值,并滚动显示了实验者的学号和姓名;在 LED 显示的同时,在 LCD 屏上同步显示了采样数据。通过这次嵌入式应用课程设计的实践,我了解了 S3C2410 的芯片结构和特点,掌握了 I/O 接口编程方法,理解了键盘和 LED 点阵屏的接口原理,掌握了 LED 点阵屏控制的编程方法,并实现了键盘控制 LED 点阵屏的显示,为之后的嵌入式开发的深入学习打下了基础。

这个项目是我大三写的,现在回顾已经非常粗糙,分享出来一方面希望可以帮助初学者,另一方面希望能让同学们可以从目前大学中普遍毫无价值的形式主义作业中解脱出来,更加高效地学习优质计算机知识和主流编程技术,一起发扬开源精神,感受互联网技术的美好愿景。

二、交流学习

互联网开源精神需要大家一起互相交流学习,互相支持奉献。欢迎大家与我友好交流。

加我 QQ 好友获取所有项目源码和项目文档,感谢大家的支持!

嵌入式应用课程设计报告

【实验目的】

  1. 了解 S3C2410 的芯片结构和特点;
  2. 掌握 I/O 接口编程方法;
  3. 理解键盘和 LED 点阵屏的接口原理,掌握 LED 点阵屏控制的编程方法,并能实现键盘控制 LED 点阵屏的显示;
  4. 利用实验室,采集电压模拟量,实现 A/D 转换,在 LED 点阵屏动态显示出电压值,并滚动显示实验者的学号和姓名;
  5. 在 LED 显示的同时,在 LCD 屏上同步显示采样数据。

【实验环境】

  1. Embest Edukit-IV 实验平台, ULINK2 仿真器套件;
  2. Windows 系统 PC 机器;
  3. µVision IDE for ARM 集成开发环境,Windows 98/2000/NT/XP/10。

【实验内容】

  1. 设计 ARM 系统,完成 AD 数据采集和 LED 动态显示;
  2. 利用实验室,采集电压模拟量,实现 A/D 转换,在 LED 点阵屏动态显示出电压值,并滚动显示实验者的学号和姓名;在 LED 显示的同时,在 LCD 屏上同步显示采样数据。

【实验原理】

  1. 实验采用的是液晶屏幕是(LCD),按显示原理可以分为两种:STN 和 TFT。
    STN 液晶显示屏,使用的是 XY 轴交叉的单纯电极驱动方式,即 X、Y 轴由垂直与水平方向的驱动电极构成,水平方向驱动电压控制显示部分为亮或暗,垂直方向的电极则负责驱动液晶分子的显示。STN 液晶显示屏加上彩色滤光片,并将单色显示矩阵中的每一像素分成三个子像素,分别通过彩色滤光片显示红、绿、蓝三原色,也可以显示出色彩。单色液晶屏及灰度液晶屏都是 STN 液晶屏。
    TFT 彩色液晶屏:
    液晶屏的显示要求设计专门的驱动与显示控制电路。驱动电路包括提供液晶屏的驱动电源和液晶分子偏置电压,以及液晶显示屏的驱动逻辑。显示控制部分可由专门的硬件电路组成,也可以采用集成电路(IC)模块,比如 EPSON 的视频驱动器等;还可以使用处理器外围 LCD 控制模块。实 验板的驱动与显示系统包括 S3C2410X 片内外设 LCD 控制器、液晶显示屏的驱动逻辑以及外围驱动电路。

  2. S3C2410X LCD 控制器:
    LCD 控制器特点:
    S3C2410X 处理器集成了 LCD 控制器,主要功能是 S3C2410X LCD 控制器用于传输显示数据和 产生控制信号。它并支持屏幕水平和垂直滚动显示。数据的传送采用 DMA(直接内存访问)方式, 以达到最小的延迟。它可以支持多种液晶屏:
    STN LCD:
    支持 3 种类型的扫描方式:4 位单扫描,4 位双扫描和 8 位单扫描。
    支持单色,4 级灰度和 16 级灰度显示。
    支持 256 色和 4096 色彩色 STN LCD。
    支持多种屏幕大小。
    典型的实际屏幕大小是:640× 480,320× 240,160× 160 和其它最大虚拟屏幕占内存大小为 4M 字节 256 色模式下最大虚拟屏幕大小:4096× 1024, 2048× 2048, 1024× 4096 和其它。
    TFT LCD:
    支持 1,2,4 或 8bpp 彩色调色显示。
    支持 16bpp 和 24bpp 非调色真彩显示。
    在 24bpp 模式下,最多支持 16M 种颜色。
    支持多种屏幕大小。
    典型的实际屏幕大小是: 640× 480, 320× 240, 160× 160 和其它。
    最大虚拟屏幕占内存大小为 4M 字节。
    64K 色模式下最大虚拟屏幕大小:2048× 1024 和其它 LCD 控制器内部结构 LCD 控制器主要提供液晶屏显示数据的传送、时钟和各种信号的产生与控制功能。

  3. ADC 转化原理:
    实验中需要在计算机中处理各种检测的信号,就需要先将模拟信息转化为数字信息,这就是 A/D 转换。A/D 装换的一般过程就是取样、保持、量化和编码这四个步骤。一般取样和保持主要由采样保持器来完成,而量化编码就由 A/D 转换器完成。
    S3C2410x 处理器的 A/D 转换,处理器内部集成了采用近似比较算法(计数式)的 8 路 10 位 ADC,集成零比较器,内部产生比较时钟信号;支持软件使能休眠模式,以减少电源损耗。在处理器中的 A/D 转换器的使用,需要使用到两个寄存器即 ADC 控制寄存器 ADCCON、ADC 数据寄存器。

  4. 串口通信原理:
    在此次实验中需要使用到串口的通讯,而在 S3C2410X UART 单元提供三个独立的异步串行通信接口,皆可工作于中断和 DMA 模式。使用系统时钟最高波特率达 230.4Kbps,如果使用外部设备提供的时钟,可以达到更高的速率。每一个 UART 单元包含一个 16 字节的 FIFO,用于数据的接收和发送。 S3C2410X UART 支持可编程波特率,红外发送/接收,一个或两个停止位,5bit/6bit/ 7bit/8bit 数据宽度和奇偶校验。

【实验代码】

  1. LED 项目:
    main.c:

    /*********************************************************************************************
    * File:	main.c
    * Author:	embest
    * Desc:	c main entry
    * History:
    *********************************************************************************************//*------------------------------------------------------------------------------------------*/
    /*	 								include files						 				    */
    /*------------------------------------------------------------------------------------------*/
    #include "2410lib.h"
    #include "sys_init.h"
    #include "fonts.h"
    #include "led16x16.h"extern char*adc_test(void);/*********************************************************************************************
    * name:		main
    * func:		c code entry
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    int main(void)
    {sys_init();						// Initial systemuart_printf("\n Please Look At The 16X16 LEDS\n");led_init(); 					// Initial led diplayfor(;;){char* voltage = adc_test();// 显示电压char_out(0,voltage);char_out(0,"V");// 显示学号姓名char_out(0," 20101330 DELM 19101307 lmz{hi ");}
    }
    

    adc_test.c:

    /*********************************************************************************************
    * File:		adc_test.c
    * Author:	embest
    * Desc:		ADC_Test
    * History:
    *********************************************************************************************//*------------------------------------------------------------------------------------------*/
    /*                                     include files	                                    */
    /*------------------------------------------------------------------------------------------*/
    #include "2410lib.h"
    #include "stdio.h"/*------------------------------------------------------------------------------------------*/
    /*                                     constants define                                     */
    /*------------------------------------------------------------------------------------------*/
    #define REQCNT 100
    #define ADC_FREQ 2500000
    #define LOOP 10000/*------------------------------------------------------------------------------------------*/
    /*                                    variables declare                                     */
    /*------------------------------------------------------------------------------------------*/
    volatile UINT8T unPreScaler;
    volatile char nEndTest;
    /*********************************************************************************************
    * name:		adc_test
    * func:		ADC convert test
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    #include "2410lib.h"
    #include "stdio.h"
    #include "stdlib.h"#define REQCNT 100
    #define ADC_FREQ 2500000
    #define LOOP 10000char* adc_test(void)
    {int i;UINT16T usConData;float usEndData;char* voltageString = (char*)malloc(8 * sizeof(char));unPreScaler = PCLK / ADC_FREQ - 1;rADCCON = (1 << 14) | (unPreScaler << 6) | (0 << 3) | (0 << 2) | (1 << 1);usConData = rADCDAT0 & 0x3FF;usEndData = usConData * 3.3000 / 0x3FF;snprintf(voltageString, 8, "%0.4f", usEndData);return voltageString;
    }
    

    fonts.c:

    /*********************************************************************************************
    * File:		fonts.c
    * Author:	embest
    * Desc:		DotLed_Test
    * History:
    *********************************************************************************************//*------------------------------------------------------------------------------------------*/
    /*	 								include files						 				    */
    /*------------------------------------------------------------------------------------------*/
    #include "fonts.h"// ------------------  ASCII字模的数据表 ------------------------ //
    // nAsciiDot[] 替换了部分英文字符为汉字
    unsigned char nAsciiDot[] =              // ASCII
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,  // -!-0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,  // -"-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C,  // -#-0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,0x18,0x18,0x7C,0xC6,0xC2,0xC0,0x7C,0x06,  // -$-0x86,0xC6,0x7C,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC2,0xC6,0x0C,0x18,  // -%-0x30,0x60,0xC6,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x76,0xDC,  // -&-0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,  // -'-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30,  // -(-0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C,  // -)-0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF,  // -*-0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,  // -+-0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -,-0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,  // ---0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -.-0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18,  // -/-0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6,  // -0-0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,  // -1-0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30,  // -2-0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06,  // -3-0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE,  // -4-0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E,  // -5-0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6,  // -6-0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18,  // -7-0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6,  // -8-0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06,  // -9-0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,  // -:-0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,  // -;-0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,  // -<-0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,  // -=-0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,  // ->-0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0x0C,0x18,0x18,  // -?-0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE,  // -@-0xDE,0xDC,0xC0,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,  // -A-0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66,  // -B-0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,  // -C-0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00,/*0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66,  // -D-0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00,*/0x00, 0x7e, 0x02, 0x02, 0x42, 0x24, 0x14, 0x08,  // -邓-0x08, 0x14, 0x14, 0x22, 0x42, 0x80, 0x00, 0x00,0x00, 0x7c, 0x44, 0x48, 0x48, 0x50, 0x48, 0x48,0x44, 0x44, 0x44, 0x68, 0x50, 0x40, 0x40, 0x40,/*0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,  // -E-0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,*/0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,  // -F-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xDE,  // -G-0xC6,0xC6,0x66,0x3A,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6,  // -H-0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,  // -I-0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x0C,  // -J-0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0xE6,0x66,0x6C,0x6C,0x78,0x78,  // -K-0x6C,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,/*0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60,  // -L-0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,*/0x7f, 0x04, 0x08, 0x1f, 0x28, 0x48, 0x8f, 0x00,  // -磊-0x7e, 0x10, 0x20, 0x7e, 0xa3, 0x22, 0x3e, 0x22,0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00,0xfe, 0x20, 0x40, 0xfc, 0x44, 0x44, 0x7c, 0x44,/*0x00,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,  // -M-0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,*/0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,  // -N-0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6,  // -O-0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60,  // -P-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,  // -Q-0xC6,0xD6,0xDE,0x7C,0x0C,0x0E,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C,  // -R-0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C,  // -S-0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,  // -T-0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,  // -U-0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,  // -V-0xC6,0x6C,0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,  // -W-0xD6,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x6C,0x38,0x38,  // -X-0x6C,0x6C,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,  // -Y-0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC6,0x86,0x0C,0x18,0x30,  // -Z-0x60,0xC2,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,  // -[-0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,  // -\-0x1C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,  // -]-0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,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,0xFF,0x00,0x00,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,  // -`-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C,  // -a-0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66,  // -b-0x66,0x66,0x66,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0,  // -c-0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x0C,0x0C,0x3C,0x6C,0xCC,  // -d-0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE,  // -e-0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,  // -f-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,  // -g-0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00,/*0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66,  // -h-0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,*/0x10, 0x10, 0x10, 0x13, 0xfc, 0x10, 0x31, 0x39,  // -杭-0x55, 0x55, 0x91, 0x11, 0x11, 0x12, 0x12, 0x14,0x80, 0x40, 0x40, 0xfc, 0x00, 0x00, 0xf0, 0x10,0x10, 0x10, 0x10, 0x12, 0x12, 0x12, 0x0e, 0x00,/*0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,  // -i-0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,*/0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,  // -j-0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78,  // -k-0x78,0x6C,0x66,0xE6,0x00,0x00,0x00,0x00,/*0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,  // -l-0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,*/0x01, 0x01, 0x7f, 0x03, 0x05, 0x09, 0x31, 0xc1,  // -李-0x0f, 0x00, 0x00, 0xff, 0x01, 0x01, 0x05, 0x02,0x00, 0x00, 0xfc, 0x80, 0x40, 0x20, 0x18, 0x06,0xe0, 0x40, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00,/*0x00,0x00,0x00,0x00,0x00,0xEC,0xFE,0xD6,  // -m-0xD6,0xD6,0xD6,0xD6,0x00,0x00,0x00,0x00,*/0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,  // -n-0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,  // -o-0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,  // -p-0x66,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,  // -q-0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x76,0x62,  // -r-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60,  // -s-0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x30,0xFC,0x30,0x30,  // -t-0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,  // -u-0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,  // -v-0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,  // -w-0xD6,0xD6,0xFE,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x6C,0x38,  // -x-0x38,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,  // -y-0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0xF8,0x00,/*0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18,  // -z-0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00,*/0x01, 0x01, 0x01, 0x01, 0x1f, 0x10, 0x1f, 0x10,  // -卓-0x1f, 0x11, 0x01, 0xff, 0x01, 0x01, 0x01, 0x01,0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10,0xf0, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,/*0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,  // -{-0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00,*/0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,  // -|-0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,  // -}-0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,  // -~-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };struct fonts_struct fonts[FONT_COUNT] = {{8,16,nAsciiDot,' ','~'},
    };
    
  2. LCD 项目:
    main.c:

    /*********************************************************************************************
    * File:	main.c
    * Author:	embest
    * Desc:	c main entry
    * History:
    *********************************************************************************************//*------------------------------------------------------------------------------------------*/
    /*	 								include files						 				    */
    /*------------------------------------------------------------------------------------------*/
    #include "2410lib.h"
    #include "sys_init.h"
    #include "fonts.h"
    #include "led16x16.h"extern void adc_test(void);
    extern void color_lcd_test(void);
    extern void lcd_init_app(void);
    /*********************************************************************************************
    * name:		main
    * func:		c code entry
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    int main(void)
    {sys_init();						// Initial systemuart_printf("\n Please Look At The 16X16 LEDS\n");led_init(); 					// Initial led diplaylcd_init_app();for(;;){adc_test();}
    }
    

    adc_test.c:

    /*********************************************************************************************
    * File:		adc_test.c
    * Author:	embest
    * Desc:		ADC_Test
    * History:
    *********************************************************************************************//*------------------------------------------------------------------------------------------*/
    /*                                     include files	                                    */
    /*------------------------------------------------------------------------------------------*/
    #include "2410lib.h"
    #include "sys_init.h"
    #include "fonts.h"
    #include "led16x16.h"
    #include <stdio.h>
    /*------------------------------------------------------------------------------------------*/
    /*                                     constants define                                     */
    /*------------------------------------------------------------------------------------------*/
    #define REQCNT 100
    #define ADC_FREQ 2500000
    #define LOOP 10000/*------------------------------------------------------------------------------------------*/
    /*                                    variables declare                                     */
    /*------------------------------------------------------------------------------------------*/
    volatile UINT8T unPreScaler1;
    volatile char nEndTest;extern void char_out(u8 font, u8 *str);
    extern void color_lcd_test(void);
    /*********************************************************************************************
    * name:		adc_test
    * func:		ADC convert test
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/void adc_test(void)
    {u8 str[7];int i,j;UINT16T usConData;float usEndData;char str1[20];uart_printf("\n ADC_IN Test\n");uart_printf(" ADC conv. freq. = %dHz\n",ADC_FREQ);unPreScaler1 = PCLK/ADC_FREQ - 1;// Enable prescaler,ain0,normal,start by readrADCCON=(1<<14)|(unPreScaler1<<6)|(0<<3)|(0<<2)|(1<<1);uart_printf(" Please adjust AIN0 value!\n");uart_printf(" The results of ADC are:\n");usConData=rADCDAT0&0x3FF;// Sample and show data by UARTfor(j = 0; j < 20; j++){while(!(rADCCON & 0x8000));usConData = rADCDAT0&0x3FF;usEndData = usConData * 3.3000 / 0x3FF;uart_printf(" %0.4f ",usEndData);sprintf(str1, "%.4f", usEndData);//char_out(0, (u8 *)str1);//char_out(0,"v   ");color_lcd_test();usEndData = usEndData - (int)usEndData;for(i = 0; i < 4; i++){usEndData = usEndData*10;usEndData = usEndData-(int)usEndData;}delay(10000);}uart_printf(" End.\n");}
    

    color_lcd_test.c:

    /*********************************************************************************************
    * File:	lcdapp.c
    * Author:	Embest
    * Desc:	LCD_Test
    * History:
    *********************************************************************************************//*------------------------------------------------------------------------------------------*/
    /*	 								include files						 				    */
    /*------------------------------------------------------------------------------------------*/
    #include <string.h>
    #include "2410lib.h"
    #include "lcdlib.h"
    #include "glib.h"
    #include "lcd.h"
    #include <math.h>
    #include <stdio.h>
    #include "sys_init.h"
    #include "fonts.h"
    #include "led16x16.h"/*------------------------------------------------------------------------------------------*/
    /*	 								constant define							 			    */
    /*------------------------------------------------------------------------------------------*/
    #define LCD_BUF_SIZE		(SCR_XSIZE_TFT_640480*SCR_YSIZE_TFT_640480/2)
    #define LCD_ACTIVE_BUFFER	(0x33800000)
    #define LCD_VIRTUAL_BUFFER  (0x33800000 + LCD_BUF_SIZE)
    #define LCD_D_OFF 			rGPCDAT &= ~(1 << 4);
    #define LCD_D_ON 			rGPCDAT |= (1 << 4);
    #define REQCNT 100
    #define ADC_FREQ 2500000
    #define LOOP 10000/*------------------------------------------------------------------------------------------*/
    /*	 								extern variables						 			    */
    /*------------------------------------------------------------------------------------------*/
    #ifdef BOARDTEST_EXH
    #undef BOARDTEST
    #endif#ifndef BOARDTEST
    volatile UINT8T unPreScaler;
    //volatile char nEndTest;
    extern void char_out(u8 font, u8 *str);
    extern void color_lcd_test(void);
    extern const UINT8T g_ucBitmap[][76800];
    extern UINT8T g_ucAscii8x16[];
    extern UINT8T g_auc_Ascii6x8[];
    extern UINT8T g_auc_hzk24[];
    #endif/*------------------------------------------------------------------------------------------*/
    /*	 								function declare                                        */
    /*------------------------------------------------------------------------------------------*/
    void Lcd_DspAscII6x8(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T * s);
    void Lcd_DspAscII8x16(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T * s);
    //void Lcd_DspHz12(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T *s);
    //void Lcd_DspHz16(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T *s);
    void Lcd_DspHz24(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T *s);
    //void Lcd_DspHz24s(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T *s);
    void Lcd_Draw_HLine(INT16T usX0, INT16T usX1, INT16T usY0, UINT16T ucColor, UINT16T usWidth);
    void Lcd_Draw_VLine (INT16T usY0, INT16T usY1, INT16T usX0, UINT16T ucColor, UINT16T usWidth);
    void lcd_clr(void);
    extern void Lcd_port_init(void);
    extern void Lcd_Port_Return(void);/*********************************************************************************************
    * name:		lcd_init_app
    * func:		lcd application initialization code
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void lcd_init_app()
    {Lcd_port_init();Lcd_Init(MODE_TFT_16BIT_800480);Glib_Init(MODE_TFT_16BIT_800480);Glib_ClearScr(0, MODE_TFT_16BIT_800480);Lcd_PowerEnable(0, 1);Lcd_EnvidOnOff(1);uart_printf(" [TFT 64K COLOR(16bit/1pixel) LCD TEST]\n");}/*********************************************************************************************
    * name:		lcd_init_app_end
    * func:		end lcd application initialization
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void lcd_init_app_end()
    {Lcd_EnvidOnOff(0);Lcd_Port_Return();
    }#ifndef BOARDTEST
    /*********************************************************************************************
    * name:		Lcd_DspHz24
    * func:		display 24x24 Chinese Symbol on Lcd
    * para:		UINT16T x0          --  x coordinate of start point
    *           UINT16T y0          --  y coordinate of start point
    *           UINT16T ForeColor --  foreground color of lcd
    *           UINT8T *s        --  string to display
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void Lcd_DspHz24(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T *s)
    {INT16T i,j,k,x,y,xx;UINT8T qm,wm;INT32T ulOffset;INT8T hzbuf[72];for(i = 0; i < strlen((const char*)s); i++){if(((UINT8T)(*(s+i))) < 161){break;}else{qm = *(s+i) - 176;                                  //161;wm = *(s+i + 1) - 161;ulOffset = (INT32T)(qm * 94 + wm) * 72;for (j = 0; j < 72; j ++){hzbuf[j] = g_auc_hzk24[ulOffset + j];}for(y = 0; y < 24; y++){for(x = 0; x < 24; x++){k = x % 8;if (hzbuf[y * 3 + x / 8]  & (0x80 >> k)){xx = x0 + x + i*12;PutPixel( xx, y + y0, (UINT16T)ForeColor);}}}i++;}}
    }
    #endif/*********************************************************************************************
    * name:		Lcd_DspAscII6x8()
    * func:		display 6x8 ASCII character string
    * para:		usX0,usY0 -- ASCII character string's start point coordinate
    *			ForeColor -- appointed color value
    *			pucChar   -- ASCII character string
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    #define XWIDTH 			6
    extern UINT8T g_ucAscii6x8[];
    void Lcd_DspAscII6x8(UINT16T usX0, UINT16T usY0,UINT16T ForeColor, UINT8T* pucChar)
    {UINT32T i,j;UINT8T  ucTemp;while( *pucChar != 0 ){for( i=0; i < 8; i++ ){ucTemp = g_ucAscii6x8[(*pucChar) * 8 + i];for( j = 0; j < 8; j++ ){if( (ucTemp & (0x80 >> j)) != 0 ){PutPixel(usX0 + i, usY0 + 8 - j, (UINT16T)ForeColor);}}}usX0 += XWIDTH;pucChar++;}
    }#ifndef BOARDTEST
    /*********************************************************************************************
    * name:		Lcd_DspAscII8X16
    * func:		display 8x16 AscII Symbol on Lcd
    * para:		UINT16T x0          --  x coordinate of start point
    *           UINT16T y0          --  y coordinate of start point
    *           UINT16T ForeColor --  foreground color of lcd
    *           UINT8T *s        --  string to display
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void Lcd_DspAscII8x16(UINT16T x0, UINT16T y0, UINT16T ForeColor, UINT8T * s)
    {INT16T i,j,k,x,y,xx;UINT8T qm;INT32T ulOffset;INT8T ywbuf[16];for(i = 0; i < strlen((const char*)s); i++){if((UINT8T)*(s+i) >= 161){return;}else{qm = *(s+i);ulOffset = (INT32T)(qm) * 16;for (j = 0; j < 16; j ++){ywbuf[j] = g_ucAscii8x16[ulOffset + j];}for(y = 0; y < 16; y++){for(x = 0; x < 8; x++){k = x % 8;if (ywbuf[y]  & (0x80 >> k)){xx = x0 + x + i*8;PutPixel( xx, y + y0, (UINT16T)ForeColor);}}}}}
    }
    #endif/*********************************************************************************************
    * name:		lcd_clr
    * func:		clear LCD screen
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void lcd_clr(void)
    {UINT32T i;UINT32T *pDisp = (UINT32T*)LCD_ACTIVE_BUFFER;for (i = 0; i < (SCR_XSIZE_CSTN * SCR_YSIZE_CSTN /4); i++){*pDisp = 0xffffffff;//ALLWHITE;}
    }/*********************************************************************************************
    * name:		lcd_clr_rect
    * func:		fill appointed area with appointed color
    * para:		usLeft,usTop,usRight,usBottom -- area's rectangle acme coordinate
    *			ucColor -- appointed color value
    * ret:		none
    * modify:
    * comment:	also as clear screen function
    *********************************************************************************************/
    void lcd_clr_rect(INT16T usLeft, INT16T usTop, INT16T usRight, INT16T usBottom, UINT16T ucColor)
    {UINT32T i, j;
    //	UINT8T *pDisp = (UINT8T*)LCD_ACTIVE_BUFFER;for (i = usLeft; i < usRight; i++)for (j = usTop; j < usBottom; j++){PutPixel(i,j,ucColor);//*(pDisp+i+j) = ucColor;}
    }/*********************************************************************************************
    * name:		Lcd_Draw_Box()
    * func:		Draw rectangle with appointed color
    * para:		usLeft,usTop,usRight,usBottom -- rectangle's acme coordinate
    *			ucColor -- appointed color value
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void Lcd_Draw_Box(INT16T usLeft, INT16T usTop, INT16T usRight, INT16T usBottom, UINT16T ucColor)
    {Lcd_Draw_HLine(usLeft, usRight,  usTop,    ucColor, 1);Lcd_Draw_HLine(usLeft, usRight,  usBottom, ucColor, 1);Lcd_Draw_VLine(usTop,  usBottom, usLeft,   ucColor, 1);Lcd_Draw_VLine(usTop,  usBottom, usRight,  ucColor, 1);
    }/*********************************************************************************************
    * name:		Lcd_Draw_Line()
    * func:		Draw line with appointed color
    * para:		usX0,usY0 -- line's start point coordinate
    *			usX1,usY1 -- line's end point coordinate
    *			ucColor -- appointed color value
    *			usWidth -- line's width
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************//*********************************************************************************************
    * name:		Lcd_Draw_HLine()
    * func:		Draw horizontal line with appointed color
    * para:		usX0,usY0 -- line's start point coordinate
    *			usX1 -- line's end point X-coordinate
    *			ucColor -- appointed color value
    *			usWidth -- line's width
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void Lcd_Draw_HLine(INT16T usX0, INT16T usX1, INT16T usY0, UINT16T ucColor, UINT16T usWidth)
    {INT16T usLen;if( usX1 < usX0 ){GUISWAP (usX1, usX0);}while( (usWidth--) > 0 ){usLen = usX1 - usX0 + 1;while( (usLen--) > 0 ){PutPixel(usX0 + usLen, usY0, ucColor);}usY0++;}
    }/*********************************************************************************************
    * name:		Lcd_Draw_VLine()
    * func:		Draw vertical line with appointed color
    * para:		usX0,usY0 -- line's start point coordinate
    *			usY1 -- line's end point Y-coordinate
    *			ucColor -- appointed color value
    *			usWidth -- line's width
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/
    void Lcd_Draw_VLine (INT16T usY0, INT16T usY1, INT16T usX0, UINT16T ucColor, UINT16T usWidth)
    {INT16T usLen;if( usY1 < usY0 ){GUISWAP (usY1, usY0);}while( (usWidth--) > 0 ){usLen = usY1 - usY0 + 1;while( (usLen--) > 0 ){PutPixel(usX0, usY0 + usLen, ucColor);}usX0++;}
    }/*********************************************************************************************
    * name:		color_lcd_test()
    * func:		LCD test function
    * para:		none
    * ret:		none
    * modify:
    * comment:
    *********************************************************************************************/int MapValue(float value, float inMin, float inMax, int outMin, int outMax)
    {// Perform the linear mappingreturn (outMax - ((value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin));
    }int ConvertValue(float value)
    {// Define the input rangefloat inMin = 0.0;float inMax = 3.5;// Define the output rangeint outMin = 100;int outMax = 400;// Map the value from the input range to the output rangereturn MapValue(value, inMin, inMax, outMin, outMax);
    }u8* float_to_string1(float number, u8* result, int precision) {
    sprintf((char*)result, "%.*f", precision, number);
    return result;
    }void color_lcd_test(void)
    {u8 str[7];char item[7];int i,j;UINT16T usConData;float usEndData;int temp = 200;Glib_FilledRectangle(5,5,795,475,WHITE);Glib_Line(60,10,60,400,BLACK);Glib_Line(60,400,750,400,BLACK);Lcd_DspHz24(75,420,BLACK,"邓磊");Lcd_DspAscII8x16(75,450,BLACK,"20101330");Lcd_DspHz24(250,420,BLACK,"李卓杭");Lcd_DspAscII8x16(250,450,BLACK,"19101307");Lcd_DspHz24(10,35,BLACK,"电压");Lcd_DspAscII8x16(55,35,BLACK,"(V)");Lcd_DspAscII8x16(30,20,BLACK,"3.3V");Lcd_DspAscII8x16(30,290,BLACK,"0.0V");Lcd_DspHz24(720,420,BLACK,"时间");Lcd_DspAscII8x16(765,420,BLACK,"(S)");unPreScaler = PCLK/ADC_FREQ - 1;// Enable prescaler,ain0,normal,start by readrADCCON=(1<<14)|(unPreScaler<<6)|(0<<3)|(0<<2)|(1<<1);uart_printf(" Please adjust AIN0 value!\n");uart_printf(" The results of ADC are:\n");usConData=rADCDAT0&0x3FF;for(j = 0; j < 2000000; j++){int preBoundary = 60+ ((j*5) % 690);int sufBoundary =65+ ((j*5) % 690);while(!(rADCCON & 0x8000));usConData = rADCDAT0&0x3FF;usEndData = usConData * 3.3000 / 0x3FF;//uart_printf(" %0.4f ",usEndData);float_to_string1(usEndData,str,4);Lcd_DspAscII8x16(30,750,BLACK,str);sprintf(item, "vol is %s V.", str);Lcd_DspAscII8x16(600,23,BLACK,item);delay(1000);Lcd_DspAscII8x16(600,23,WHITE,item);Glib_Line(preBoundary,temp,sufBoundary,ConvertValue(usEndData),BLACK);temp = ConvertValue(usEndData);if(preBoundary == 740){Glib_FilledRectangle(62,5,750,390,WHITE);}usEndData = usEndData - (int)usEndData;for(i = 0; i < 4; i++){usEndData = usEndData*10;usEndData = usEndData-(int)usEndData;}delay(1000);}
    }
    

【实验结果】

  1. LED 项目:

    LED 项目

    LED 项目

  2. LCD 项目:

    LED 项目

    LED 项目

【实验心得】

本次实验主要涉及了嵌入式系统开发的多方面知识,如芯片结构、I/O 接口编程、LCD 屏幕控制、ADC 转换、串口通信等。通过实验,我对 S3C2410 芯片的结构和特点有了更深入的理解,学会了使用 GPIO 口编程控制 LED 点阵屏的显示,掌握了 LCD 屏幕控制的编程方法,并能够实现在 LCD 屏上同步显示采样数据。同时,我还学习了 ADC 转换的原理和使用方法,实现了采集电压模拟量并在 LED 点阵屏上动态显示电压值和实验者的学号和姓名。在实验中,我也遇到了一些问题,如学号和姓名在 LED 屏幕上的滚动显示和 LCD 屏幕上的数据显示的同步问题,但通过不断地调试和修改代码,最终成功解决了这些问题。通过本次实验,我不仅掌握了嵌入式系统开发的基本知识和技能,还加深了对嵌入式系统的理解和应用。

这篇关于嵌入式应用课程设计 LED 点阵屏和 LDC 屏幕的显示 大学编程作业(TUST 天津科技大学 2023 年)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/269040

相关文章

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同