嵌入式应用课程设计 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、总结1、获取屏幕放缩比例from

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

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

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal