LED面板显示屏驱动芯片

news2024/11/20 2:33:09

一、基本概述

TM1638是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。

二、主要应用场合

主要适用于家电设备(智能热水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电表等数码管或LED显示设备。

三、管脚说明

DIO口输出数据时为N管开漏输出,在读键的时候需要外接1K-10K的上拉电阻。推荐10K的上拉

电阻。DIO在时钟的下降沿控制N管的动作,此时读数时不稳定,在时钟的上升沿读数才时稳定。

四、串行数据传输

读取和接收1个BIT都在时钟的上升沿操作。

1、读取数据时,从串行时钟CLK的第8个上升沿开始设置指令到CLK下降沿读数据之间需要一个等

待时间Twait(最小2μ S)。具体参数见时序特性表。

五、应用电路

1、VDD、GND之间滤波电容在PCB板布线应尽量靠近TM1638芯片放置,加强滤波效果。

2、连接在DIO、CLK、STB通讯口上三个100P电容可以降低对通讯口的干扰。

3、因蓝光数码管的导通压降压约为3V,因此TM1638供电应选用5V。

六、电气参数

极限参数(Ta = 25℃, Vss = 0 V)

正常工作范围(Ta = -20 ~ +70℃,Vss = 0 V)

电气特性(Ta = -20 ~ +70℃,VDD = 4.5 ~ 5.5 V, Vss = 0 V)

开关特性(Ta = -20 ~ +70℃,VDD = 4.5 ~ 5.5 V)

时序特性(Ta = -20 ~ +70℃,VDD = 4.5 ~ 5.5 V)

七、封装尺寸

基于stm32智能时钟的实践--- TM1638的运用

/**
 * @brief 给TM1638写入数据
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Byte(uint8_t byte) 
{
    uint8_t Count;
    for(Count = 0; Count < 8; Count++)
    {
        CLK_0();         //在时钟的上升沿写入数据
        if(byte & 0x01)
        {
            DIO_1(); 
        }
        else
        {
            DIO_0(); 
        }
        byte >>= 1;        //8位全部读取
        CLK_1();  		 //在时钟的上升沿写入数据
    }
}
 
/**
 * @brief 给TM1638写入数据(或者命令)
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Data(uint8_t data) //TM1638写数据函数
{
    STB_0();                         //片选,为低时开始处理信息
    TM1638_Write_Byte(data);
    STB_1();
}
 
void (*TM1638_Write_Cmd)(u8)=TM1638_Write_Data;//给函数起一个别名,函数指针
 
/**
 * @brief 写入地址加上数据
 * @param 
		addr-对应地址
		data-写入数据
 * @retval 
 */
void TM1638_Write_Addr_Byte(uint8_t addr,uint8_t data)
{
    STB_0();
    TM1638_Write_Byte(addr);        //STB 为低后的第一个字节作为指令
    TM1638_Write_Byte(data);
    STB_1();
}

这里一共有三个函数,其实就是写入一个字节的数据;代开片选写入一字节数据;打开片选写入2字节数据,分别是地址和参数.

/**
 * @brief TM1638读数据函数
 * @param
 * @retval 读取的8位数据
 */
unsigned char TM1638_Read(void) //读数据函数
{
    uint8_t i;
	uint8_t data,temp=0;
 
    TM1638_IO_INPUT();
    for(i=0; i<8; i++)
    {
        temp>>=1;
        CLK_0(); //CLK=0
        data = DIO_Read();  //读取DIO值
        if(data)
		{
			temp|=0x80; //按位或:与0或不变、与1或置1
        }
		CLK_1(); //CLK=1
    }
	TM1638_IO_OUTPUT();
    return temp;
}
 
/**
 * @brief TM1638读键扫数据函数
 * @param
 * @retval 读取的按键号,1~8
 */
unsigned char TM1638_ReadKey(void)  //TM1638读键扫数据函数
{
    unsigned char c[4],i,key_value=0;
 
    STB_0();  //STB=0,开始写命令
    TM1638_Write_Byte(0x42);  //普通模式,地址自动增加,读键扫数据
    for(i=0; i<4; i++)	
	{
		c[i]=TM1638_Read(); //读取键值
    }
	STB_1();  //STB=1,读键值结束
 
    //数据处理
    for(i=0; i<4; i++)
	{
        key_value|=(c[i]<<i);
    }
	for(i=0; i<8; i++)
	{
        if((0x01<<i)==key_value) break;
    }
	return (i+1);//返回按键值,与模块上的相对应
}

.c文件

#include "stm32f10x.h"   // Device header
#include "TM1638.h"
 
unsigned char TM1638_Arr_SEG[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, //共阴极数码管段码,不带小数点
                                 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
                                 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,  //共阴极数码管段码,带小数点
                                 0xFF,0xEF,0xF7,0xFC,0xB9,0xDE,0xF9,0xF1
                                }; //0~F,1亮0灭
 
//共阴极数码管段码,不带小数点,display函数用
unsigned char TM1638_Arr_SEG_Display[]= {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                                            0,   0,   0,   0,   0,   0,0x3F,0x06,0x5B,0x4F,//0-9
                                            0x66,0x6D,0x7D,0x07,0x7F,0x6F,   0,   0,   0,   0,
                                            0,   0,   0,0x77,0x7C,0x39,0x5E,0x79,0x71,   0
                                        };
 
uint8_t TM1638_Addr_SEG[8]= {0xC0,0xC2,0xC4,0xC6,0xC8,0xCA,0xCC,0xCE}; //模块从右到左的八个数码管
uint8_t TM1638_Addr_LED[8]= {0xC1,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF}; //模块从右到左的八个发光二极管
 
 
 
/**
 * @brief TM1638-GPIO初始化函数
 * @param
 * @retval 
 */
static void TM1638_GPIO_Config()
{
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_TIM1638_CMD(RCC_TM1638,ENABLE);  
	//将3只因脚全部设置为同样的推挽输出模式
    GPIO_InitStructure.GPIO_Pin = TM1638_GPIO_Pin; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(TM1638_GPIO, &GPIO_InitStructure); 
	STB_1();
	CLK_1();
	DIO_1();
}
void TM1638_IO_INPUT()
{
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_TIM1638_CMD(RCC_TM1638,ENABLE);  
	//将3只因脚全部设置为同样的推挽输出模式
    GPIO_InitStructure.GPIO_Pin = DIO; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(TM1638_GPIO, &GPIO_InitStructure); 	
}
void TM1638_IO_OUTPUT()
{
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_TIM1638_CMD(RCC_TM1638,ENABLE);  
	//将3只因脚全部设置为同样的推挽输出模式
    GPIO_InitStructure.GPIO_Pin = DIO; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(TM1638_GPIO, &GPIO_InitStructure); 
	DIO_1();	
}
/**
 * @brief TM1638初始化函数
 * @param
 * @retval 
 */
void TM1638_Init() 
{
    TM1638_GPIO_Config();
    TM1638_Clear();
}
 
/**
 * @brief 给TM1638写入数据
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Byte(uint8_t byte) 
{
    uint8_t Count;
    for(Count = 0; Count < 8; Count++)
    {
        CLK_0();         //在时钟的上升沿写入数据
        if(byte & 0x01)
        {
            DIO_1(); 
        }
        else
        {
            DIO_0(); 
        }
        byte >>= 1;        //8位全部读取
        CLK_1();  		 //在时钟的上升沿写入数据
    }
}
 
/**
 * @brief 给TM1638写入数据(或者命令)
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Data(uint8_t data) //TM1638写数据函数
{
    STB_0();                         //片选,为低时开始处理信息
    TM1638_Write_Byte(data);
    STB_1();
}
 
void (*TM1638_Write_Cmd)(u8)=TM1638_Write_Data;//给函数起一个别名,函数指针
 
/**
 * @brief 写入地址加上数据
 * @param 
		addr-对应地址
		data-写入数据
 * @retval 
 */
void TM1638_Write_Addr_Byte(uint8_t addr,uint8_t data)
{
    STB_0();
    TM1638_Write_Byte(addr);        //STB 为低后的第一个字节作为指令
    TM1638_Write_Byte(data);
    STB_1();
}
 
/**
 * @brief 在数码管上面显示数据
 * @param 
		data-写入数据
 * @retval 
 */
void TM1638_Display_Num(uint32_t data)
{
    unsigned int dataL=0,dataR=0;
    dataL=data/10000;
    dataR=data%10000;
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[0],TM1638_Arr_SEG[dataL/1000]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[1],TM1638_Arr_SEG[dataL%1000/100]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[2],TM1638_Arr_SEG[dataL%100/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[3],TM1638_Arr_SEG[dataL%10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[4],TM1638_Arr_SEG[dataR/1000]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[5],TM1638_Arr_SEG[dataR%1000/100]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[6],TM1638_Arr_SEG[dataR%100/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[7],TM1638_Arr_SEG[dataR%10]);
}
 
/**
 * @brief 在数码管上面显示温度
 * @param 
		data-写入数据
 * @retval 
 */
void TM1638_Display_Tmp(uint32_t data)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[0],TM1638_Arr_SEG[data/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[1],TM1638_Arr_SEG[data%10]);
}
 
/**
 * @brief 在数码管上面显示湿度
 * @param 
		data-写入数据
 * @retval 
 */
void TM1638_Display_Hum(uint32_t data)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[4],TM1638_Arr_SEG[data/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[5],TM1638_Arr_SEG[data%10]);
}
 
 
/**
 * @brief TM1638指定地址显示数码,0-F
 * @param 
		num-数码管位置12345678
		seg-字符0-F
		p-N/Y
 * @retval 
 */
void TM1638_Display_SEG(unsigned int num,unsigned char seg,PointState p)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[num-1],TM1638_Arr_SEG_Display[seg-32]|p);
}
 
/**
 * @brief TM1638指定LED亮灭
 * @param 
		num-LED位置
		light-OFF/ON
 * @retval 
 */
void TM1638_Display_LED(unsigned int num,LightState light)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_LED[num],light);
}
 
 
/**
 * @brief TM1638关闭指定数码管函数
 * @param serial-数码管序号1-8
 * @retval 
 */
void TM1638_SEG_Off(unsigned char num)  //TM1638关闭指定数码管函数
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[num-1],0x80);
}
 
/**
 * @brief TM1638读数据函数
 * @param
 * @retval 读取的8位数据
 */
unsigned char TM1638_Read(void) //读数据函数
{
    uint8_t i;
	uint8_t data,temp=0;
 
    TM1638_IO_INPUT();
    for(i=0; i<8; i++)
    {
        temp>>=1;
        CLK_0(); //CLK=0
        data = DIO_Read();  //读取DIO值
        if(data)
		{
			temp|=0x80; //按位或:与0或不变、与1或置1
        }
		CLK_1(); //CLK=1
    }
	TM1638_IO_OUTPUT();
    return temp;
}
 
/**
 * @brief TM1638读键扫数据函数
 * @param
 * @retval 读取的按键号,1~8
 */
unsigned char TM1638_ReadKey(void)  //TM1638读键扫数据函数
{
    unsigned char c[4],i,key_value=0;
 
    STB_0();  //STB=0,开始写命令
    TM1638_Write_Byte(0x42);  //普通模式,地址自动增加,读键扫数据
    for(i=0; i<4; i++)	
	{
		c[i]=TM1638_Read(); //读取键值
    }
	STB_1();  //STB=1,读键值结束
 
    //数据处理
    for(i=0; i<4; i++)
	{
        key_value|=(c[i]<<i);
    }
	for(i=0; i<8; i++)
	{
        if((0x01<<i)==key_value) break;
    }
	return (i+1);//返回按键值,与模块上的相对应
}
 
 
 
/**
 * @brief TM1638全清
 * @param 
 * @retval 
 */
void TM1638_Clear(void)
{
    uint8_t i;
    TM1638_Write_Data(0x44); //普通模式,固定地址,写数据到显示寄存器
    TM1638_Write_Data(0x88); //显示开,亮度第1级
    for(i=0; i<16; i++)
    {
        TM1638_Write_Addr_Byte(0XC0+i,0X00); //全地址写入0X00
    }
}

.h文件

#ifndef _TM1638_H_
#define _TM1638_H_
 
 
 
#include "stm32f10x.h"
 
typedef enum {N = 0x00, Y = 0x80} PointState; //是否带小数点 Y:带,N:不带
 
typedef enum {OFF = 0x00, ON = 0x01} LightState; //灯开关状态 On:开,Off:关
 
 
 
 
//TM1638引脚定义
#define STB 				GPIO_Pin_13
#define CLK 				GPIO_Pin_14
#define DIO 				GPIO_Pin_15
#define TM1638_GPIO 		GPIOB
#define TM1638_GPIO_Pin 	STB | CLK | DIO 
#define RCC_TM1638 			RCC_APB2Periph_GPIOB
#define RCC_TIM1638_CMD  	RCC_APB2PeriphClockCmd
 
//TM1638引脚的写入和读取函数定义
#define STB_0() GPIO_ResetBits(TM1638_GPIO,STB)
#define STB_1() GPIO_SetBits(TM1638_GPIO,STB)
#define CLK_0() GPIO_ResetBits(TM1638_GPIO,CLK)
#define CLK_1() GPIO_SetBits(TM1638_GPIO,CLK)
#define DIO_0() GPIO_ResetBits(TM1638_GPIO,DIO)
#define DIO_1() GPIO_SetBits(TM1638_GPIO,DIO)
#define DIO_Read() GPIO_ReadInputDataBit(TM1638_GPIO,DIO)
 
//用户层函数
void TM1638_Init(); //TM1638初始化函数
void TM1638_Display_Num(u32 data); //显示数字
void TM1638_Display_Tmp(uint32_t data);
void TM1638_Display_Hum(uint32_t data);
void TM1638_Display_SEG(unsigned int num,unsigned char seg,PointState p); //选择数码管显示0-F
void TM1638_Display_LED(unsigned int num,LightState light); //指定led亮灭
 
unsigned char TM1638_ReadKey(); //TM1638读键扫数据函数
void TM1638_SEG_Off(unsigned char num);  //TM1638关闭指定数码管函数
void TM1638_Clear(); //TM1638全清
 
//底层函数
void TM1638_Write_Byte(u8 byte); //TM1638单写数据,需要在函数外对STB操作
void TM1638_Write_Data(u8 data); //TM1638一个完整数据写入
void TM1638_Write_Addr_Byte(u8 addr,u8 data); //TM1638指定地址写入数据
unsigned char TM1638_Read(); //TM1638读数据函数
void TM1638_GPIO_Init(); //TM1638引脚初始化函数
extern void (*TM1638_Write_Cmd)(u8);//给函数起一个别名,函数指针
void TM1638_IO_INPUT();
void TM1638_IO_OUTPUT();
#endif
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode刷题:17.电话号码的字母组合

leetcode原题网页 题目描述&#xff1a;给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思路&#xff1a;使用vector&#x…

基于51单片机超市快递寄存自动柜设计源程序

一、系统方案 1、本设计采用这51单片机作为主控器。 2、存包&#xff0c;GSM短信取件码。 3、液晶1620显示。 4、矩阵键盘输入取件码&#xff0c;完成取包。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 /******************************…

#BUG SHOW# 深挖一个6年前的老“bug”

引言 最近参与了一个业务迁移的项目&#xff0c;需要把站点A迁移到站点B。不同的站点拥有各自独立的服务和数据库&#xff0c;可以说是毫无关联。为了兼容迁移过程中的存在的一部分特殊交易数据&#xff08;正向[支付]交易在站点A&#xff0c;但逆向[退款]操作在站点B操作&…

Oracle 最终抛弃了 Sun !

随着 Solaris 团队的彻底完蛋&#xff0c;看起来 Sun 微系统公司最终连块骨头都没剩下。 来自前 Sun 社区的消息表明&#xff0c;一月份的传闻&#xff08;Oracle 裁员 450 人&#xff09;成为了现实&#xff0c;上周五&#xff0c;Oracle 裁掉了 Solaris 和 SPARC 团队的核心员…

交换机的VRRP主备配置例子

拓朴如下&#xff1a; 主要配置如下&#xff1a; [S1] vlan batch 10 20 # interface Vlanif10ip address 10.1.1.1 255.255.255.0vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface Vlanif20ip address 13.1.1…

QT visual stdio加载动态库报错126问题

报错126是找不到指定的模块 QT 查看构建目录&#xff0c;将依赖的动态库放到该目录下即可成功 visual stdio将依赖的动态库放到运行目录 在vs中使用导出类的动态库时&#xff0c;不但需要将对应的.dll放到对应的目录下&#xff0c;还需要将该动态库对应的.lib添加到如下配置才…

ChatGLM-6B下载安装

ChatGLM-6B下载安装 项目指向 想把模型下载本地微调 通过官网指引需要先下载git-lfs #Linux 下载安装 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs git lfs install如果是docker中的虚拟机…

物流单打印模板下载,佳易王物流托运单打印软件

物流单打印模板下载&#xff0c;佳易王物流托运单打印软件 上图是常用的物流单打印模板&#xff0c;佳易王物流单打印软件打印格式可以根据需要定制更改。 软件特色&#xff1a; 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff…

Halcon [fill_up_shape],[close_circle],[dilation_circle]和[shape_trans]图像处理时填充区别

文章目录 文章专栏前言两者的区别fill_up_shapeshape_transclose_circledilation_circle 总结 文章专栏 我的Halcon开发 CSDN专栏 前言 本文用的案例是&#xff1a;Example: %HALCONEXAMPLES%/hdevelop/Applications/Completeness-Check/ball.hdev 两者的区别 [shape_trans]是…

【LLM】chatglm3的agent应用和微调实践

note 知识库和微调并不是冲突的&#xff0c;它们是两种相辅相成的行业解决方案。开发者可以同时使用两种方案来优化模型。例如&#xff1a; 使用微调的技术微调ChatGLM3-6B大模型模拟客服的回答的语气和基础的客服思维。接着&#xff0c;外挂知识库将最新的问答数据外挂给Chat…

vue2-006——使用脚手架搭建vue2项目+项目结构分析

一、创建项目&#xff1a;vue create 项目名 D:\EnyiWang\Documents\myStudy\vue>vue create vue_testVue CLI v5.0.8 ? Please pick a preset: Default ([Vue 2] babel, eslint)Vue CLI v5.0.8 ✨ Creating project in D:\EnyiWang\Documents\myStudy\vue\vue_test. &am…

批量按顺序1、2、3...重命名所有文件夹里的文件

最新&#xff1a; 最快方法&#xff1a;先用这个教程http://文件重命名1,2......nhttps://jingyan.baidu.com/article/495ba841281b7079b20ede2c.html再用这个教程去空格&#xff1a;利用批处理去掉文件名中的空格-百度经验 (baidu.com) 以下为原回答 注意文件名有空格会失败…

张弛声音变现课,惊悚电影配音篇

在提供惊悚片的声音配音服务时&#xff0c;配音员旨在制造一种让观众的心率加快、情绪紧张的气氛。惊悚片侧重于心理层面的紧张和预期的恐怖&#xff0c;声音在塑造这种心理效应中起到了至关重要的作用。演员需通过对声音的精细雕琢和调整来强化电影的悬念和紧迫感。以下是为惊…

SIM卡结构及上电流程详解

SIM卡结构及上电流程详解 1. sim卡概述1.1 什么是SIM卡1.2 Sim卡的作用 2. Sim卡的主要功能2.1存储数据2.2 PIN码保护2.3 用户身份鉴权2.4 Sim卡中的保密算法及密钥2.5 SIM卡的类型2.6 Sim卡物理接口2.7 SIM卡内部结构2.8 SIM卡文件结构2.9 常用的文件操作2.9.1 常用的有如下操…

Java基础(第九期):Java中的集合 ArrayList 集合的增删改查 Java实现学生信息管理系统

⚠️Java基础专栏 文章目录 ⚠ Java基础最后一期&#xff08;第九期&#xff09;到此结束 Java中的集合一、什么是集合二、ArrayList2.1 ArrayList介绍2.2ArrayList使用2.3 ArrayList添加add&#xff08;&#xff09;方法add&#xff08;index&#xff0c;E element&#xff0…

《微信小程序开发从入门到实战》学习二十九

3.4 开发参与投票页面 3.4.4 使用label组件扩大单击区域 radio组件的单击区域很小&#xff0c;只有文字左侧的圆圈可以点击&#xff0c;实际使用者一般会期望点击文字也可以选中选项&#xff0c;用label组件包含radio组件&#xff0c;就可以实现点击文字也可以选项。 label组…

基于WSL2+Docker+VScode搭建机器学习(深度学习)开发环境

基于WSL2DockerVScode搭建机器学习(深度学习)开发环境 内容概述&#xff1a;由于最近配发了新的工作电脑但不想装双系统&#xff0c;因此通过本博文来记录基于Windows子系统WSLDocker搭建机器学习与深度学习开发环境的流程步骤&#xff0c;同时记录该过程中所遇到的相关问题及解…

上新!2023年汉字小达人市级比赛在线模拟题增加2个刷题试卷

各位小学三年级到五年级的上海学霸孩子们&#xff0c;刚刚结束了上海小学生古诗文大会的复赛&#xff0c;就紧锣密鼓地全身心投入到上海小学生汉字小达人的市级比赛的备赛中了。 为了助各位孩子一臂之力&#xff0c;我把在线模拟题进行了更新&#xff0c;新增了两个可以刷题的试…

安卓用SQLite数据库存储数据

什么是SQLite&#xff1f; SQLite是安卓中的轻量级内置数据库&#xff0c;不需要设置用户名和密码就可以使用。资源占用较少&#xff0c;运算速度也比较快。 SQLite支持&#xff1a;null&#xff08;空&#xff09;、integer&#xff08;整形&#xff09;、real&#xff08;小…

深度学习第二天:RNN循环神经网络

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 介绍 记忆功能对比展现 任务描述 导入库 处理数据 前馈神经网络 循环神经网络 编译与训练模型 模型预测 可能的问题 梯度消失 梯…