51单片机入门_江协科技_25~26_OB记录的笔记_蜂鸣器教程
25. 蜂鸣器
-
25.1. 蜂鸣器介绍
•蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号
•蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器(开发板上用的无源蜂鸣器)
•有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
•无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

-
25.2. 驱动电路
-
三极管驱动

-
集成电路驱动,开发板ULN2003D,Proteus有器件,开发板BZ接P2^5引脚。

-
-
25.3. ULN2003

-
25.4. 键盘与音符对照
- 图片中所示为钢琴键盘一部分
- 中央c1b1为一组(低1音阶),7个白键,5个黑键,此图显示4组,c2b2为一组(低2音阶),cb为一组(正常音阶),CB为一组(高一音阶)
- c1右侧黑键为c1#,高半,也可表示为b d1,低半

-
25.5. 简谱-小星星,简单识谱

- 左上角1=C4/4,表示C调,每节4拍,每1/4拍为一个音符;
- 6 6 5 -,5右侧-表示5音占2个1/4拍,以下同理;
-
25.6. 简谱-天空之城

- 左上角1=D4/4表示D调,每节4拍,每1/4拍为一个音符;
- 假定一拍500ms,6 7带下划线代表6 7为一拍,一个音符就是250mm;
- 1上有一点表示高音阶,右侧有一点表示1.5拍为750ms;
- 77带上圆括号的表示这2个音符连音,即250ms+250ms=500ms;
-
25.7. 音符与频率对照

PPT中的图片整理为如下表格:
| 音符 | 频率计算 | 频率/2 | 频率/2的取整 | 备注 |
|---|---|---|---|---|
| 低音1 | 261.6255653 | 130.8127827 | 131 | |
| 低音1# | 277.182631 | 138.5913155 | 139 | |
| 低音2 | 293.6647679 | 146.832384 | 147 | |
| 低音2# | 311.1269837 | 155.5634919 | 156 | |
| 低音3 | 329.6275569 | 164.8137785 | 165 | |
| 低音4 | 349.2282314 | 174.6141157 | 175 | |
| 低音4# | 369.9944227 | 184.9972114 | 185 | |
| 低音5 | 391.995436 | 195.997718 | 196 | 440/2^(2/12) |
| 低音5# | 415.3046976 | 207.6523488 | 208 | 440/2^(1/12) |
| 低音6 | 440 | 220 | 220 | 基准频率 |
| 低音6# | 466.1637615 | 233.0818808 | 233 | 440*2^(1/12) |
| 低音7 | 493.8833013 | 246.9416506 | 247 | 440*2^(2/12) |
| 中音1 | 523.2511306 | 261.6255653 | 262 | |
| 中音1# | 554.365262 | 277.182631 | 277 | |
| 中音2 | 587.3295358 | 293.6647679 | 294 | |
| 中音2# | 622.2539674 | 311.1269837 | 311 | |
| 中音3 | 659.2551138 | 329.6275569 | 330 | |
| 中音4 | 698.4564629 | 349.2282314 | 349 | |
| 中音4# | 739.9888454 | 369.9944227 | 370 | |
| 中音5 | 783.990872 | 391.995436 | 392 | |
| 中音5# | 830.6093952 | 415.3046976 | 415 | |
| 中音6 | 880 | 440 | 440 | |
| 中音6# | 932.327523 | 466.1637615 | 466 | |
| 中音7 | 987.7666025 | 493.8833013 | 494 | |
| 高音1 | 1046.502261 | 523.2511306 | 523 | |
| 高音1# | 1108.730524 | 554.365262 | 554 | |
| 高音2 | 1174.659072 | 587.3295358 | 587 | |
| 高音2# | 1244.507935 | 622.2539674 | 622 | |
| 高音3 | 1318.510228 | 659.2551138 | 659 | |
| 高音4 | 1396.912926 | 698.4564629 | 698 | |
| 高音4# | 1479.977691 | 739.9888454 | 740 | |
| 高音5 | 1567.981744 | 783.990872 | 784 | |
| 高音5# | 1661.21879 | 830.6093952 | 831 | |
| 高音6 | 1760 | 880 | 880 | |
| 高音6# | 1864.655046 | 932.327523 | 932 | |
| 高音7 | 1975.533205 | 987.7666025 | 988 |
26. 蜂鸣器播放提示音&音乐
- 26.1. 第一个测试程序功能是实现4个独立按键在按下并松开后,8位数码管显示相应的按键的数值1~4,没有按下的时候显示0,需要用到之前的模块程序Four_Key(针对独立按键操作)以及nixietube(针对8位数码管显示)
- 26.2. 程序定义蜂鸣器的引脚P25,貌似按照开发板原理图P15不正确,实物开发板蜂鸣器不响,因为蜂鸣器有声音需要500Hz左右的频率,周期2ms,因此定义Buzzer每隔1ms切换一次高低电平并持续1ms即可模拟周期2ms(500Hz)的蜂鸣器声音频率;
- 26.3. Proteus中暂时还么有找到仿真无源蜂鸣器的方法,暂时只能放上程序,用实物开发板进行测试;
#include <REGX52.h>
#include "delay_xms.h"
#include "Four_Key.h"
#include "nixietube.h"sbit Buzzer=P2^5;
unsigned char KeyNum;
unsigned int i;void main()
{NixieTube(1,0);while(1){KeyNum=Four_Key();if(KeyNum){for(i=0;i<500;i++){Buzzer=!Buzzer;delay_xms(1);}NixieTube(1,KeyNum);}}}
nixietube数码管显示程序的后2句需要注释掉,因为目前测试程序数码管为静态显示,无需刷新;
#include <REGX52.H> //因为该程序调用<REGX52.H>所以要添加
#include "delay_xms.h" //因为该程序调用<delay_xms.h>所以要添加unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void NixieTube(unsigned char Location,Number)
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];//数码管消影,因为位选-段选-位选-段选,段选数据与位选穿位导致//delay_xms(1); //数码管稳定显示1ms;蜂鸣器提示音实验无需延时//P0=0x00;//清零;蜂鸣器提示音实验无需清零,静态显示
}
- 26.4. 在上述程序基础上对程序进行模块化处理,生成一个Buzzer.c与Buzzer.h的模块化程序;
#include <REGX52.H>
#include <INTRINS.H>sbit Buzzer=P2^5; //蜂鸣器端口
/*** @brief 蜂鸣器延时函数,延时500us* @param 无* @retval 无*/void Buzzer_Delay500us(void) //@12.000MHz
{unsigned char data i;_nop_();i = 247;while (--i);
}/*** @brief 蜂鸣器鸣响函数* @param ms发声的时长毫秒* @retval 无*/void Buzzer_Time(unsigned int ms)
{unsigned int i;for(i=0;i<ms*2;i++){Buzzer=!Buzzer;Buzzer_Delay500us();}}
Buzzer.h的文件如下
#ifndef _BUZZER_H_
#define _BUZZER_H_ void Buzzer_Time(unsigned int ms); //调用函数使蜂鸣器响ms毫秒#endif
main.c程序修改如下:
#include <REGX52.h>
#include "Four_Key.h"
#include "nixietube.h"
#include "Buzzer.h"unsigned char KeyNum;void main()
{NixieTube(1,0);while(1){KeyNum=Four_Key();if(KeyNum){Buzzer_Time(100);NixieTube(1,KeyNum);}}}
- 26.5. 因为不同的声音频率对应不同的音符,以440Hz基础频率举例,对应的频率周期为2272us,如采用中断溢出切换Buzzer的高低电平输出声音频率,需要以1/2频率周期进行高低电位翻转,中断溢出值65536-1/2周期1136计算出中断溢出值64400
| 音符 | 频率Hz | 频率取整 | 周期us | 1/2周期us | 1/2周期取整 | 中断溢出值 | 中断溢出计算 |
|---|---|---|---|---|---|---|---|
| 1 | 261.6255653 | 262 | 3816.793893 | 1908.396947 | 1908 | 65536 | 63628 |
| 1# | 277.182631 | 277 | 3610.108303 | 1805.054152 | 1805 | 65536 | 63731 |
| 2 | 293.6647679 | 294 | 3401.360544 | 1700.680272 | 1701 | 65536 | 63835 |
| 2# | 311.1269837 | 311 | 3215.434084 | 1607.717042 | 1608 | 65536 | 63928 |
| 3 | 329.6275569 | 330 | 3030.30303 | 1515.151515 | 1515 | 65536 | 64021 |
| 4 | 349.2282314 | 349 | 2865.329513 | 1432.664756 | 1433 | 65536 | 64103 |
| 4# | 369.9944227 | 370 | 2702.702703 | 1351.351351 | 1351 | 65536 | 64185 |
| 5 | 391.995436 | 392 | 2551.020408 | 1275.510204 | 1276 | 65536 | 64260 |
| 5# | 415.3046976 | 415 | 2409.638554 | 1204.819277 | 1205 | 65536 | 64331 |
| 6 | 440 | 440 | 2272.727273 | 1136.363636 | 1136 | 65536 | 64400 |
| 6# | 466.1637615 | 466 | 2145.922747 | 1072.961373 | 1073 | 65536 | 64463 |
| 7 | 493.8833013 | 494 | 2024.291498 | 1012.145749 | 1012 | 65536 | 64524 |
| 1 | 523.2511306 | 523 | 1912.045889 | 956.0229446 | 956 | 65536 | 64580 |
| 1# | 554.365262 | 554 | 1805.054152 | 902.5270758 | 903 | 65536 | 64633 |
| 2 | 587.3295358 | 587 | 1703.577513 | 851.7887564 | 852 | 65536 | 64684 |
| 2# | 622.2539674 | 622 | 1607.717042 | 803.8585209 | 804 | 65536 | 64732 |
| 3 | 659.2551138 | 659 | 1517.450683 | 758.7253414 | 759 | 65536 | 64777 |
| 4 | 698.4564629 | 698 | 1432.664756 | 716.3323782 | 716 | 65536 | 64820 |
| 4# | 739.9888454 | 740 | 1351.351351 | 675.6756757 | 676 | 65536 | 64860 |
| 5 | 783.990872 | 784 | 1275.510204 | 637.755102 | 638 | 65536 | 64898 |
| 5# | 830.6093952 | 831 | 1203.369434 | 601.6847172 | 602 | 65536 | 64934 |
| 6 | 880 | 880 | 1136.363636 | 568.1818182 | 568 | 65536 | 64968 |
| 6# | 932.327523 | 932 | 1072.961373 | 536.4806867 | 536 | 65536 | 65000 |
| 7 | 987.7666025 | 988 | 1012.145749 | 506.0728745 | 506 | 65536 | 65030 |
| 1 | 1046.502261 | 1047 | 955.1098376 | 477.5549188 | 478 | 65536 | 65058 |
| 1# | 1108.730524 | 1109 | 901.7132552 | 450.8566276 | 451 | 65536 | 65085 |
| 2 | 1174.659072 | 1175 | 851.0638298 | 425.5319149 | 426 | 65536 | 65110 |
| 2# | 1244.507935 | 1245 | 803.2128514 | 401.6064257 | 402 | 65536 | 65134 |
| 3 | 1318.510228 | 1319 | 758.1501137 | 379.0750569 | 379 | 65536 | 65157 |
| 4 | 1396.912926 | 1397 | 715.8196135 | 357.9098067 | 358 | 65536 | 65178 |
| 4# | 1479.977691 | 1480 | 675.6756757 | 337.8378378 | 338 | 65536 | 65198 |
| 5 | 1567.981744 | 1568 | 637.755102 | 318.877551 | 319 | 65536 | 65217 |
| 5# | 1661.21879 | 1661 | 602.0469597 | 301.0234798 | 301 | 65536 | 65235 |
| 6 | 1760 | 1760 | 568.1818182 | 284.0909091 | 284 | 65536 | 65252 |
| 6# | 1864.655046 | 1865 | 536.1930295 | 268.0965147 | 268 | 65536 | 65268 |
| 7 | 1975.533205 | 1976 | 506.0728745 | 253.0364372 | 253 | 65536 | 65283 |
- 26.6. 中断定时器模块程序里面的如下两句只是设置定时器的第一次初始化的初始值,后续不调用
TL0 = 0x18; //设置定时初始值TH0 = 0xFC; //设置定时初始值
- 26.7. 测试将音符做成数组并测试
#include <REGX52.h>
#include "delay_xms.h"
#include "TimeR0.h"sbit Buzzer=P2^5;
unsigned int FreqTable[]={63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,};void main()
{TimeR0_Init();while(1){}}void TimeR0_Routine() interrupt 1 //中断子函数
{TL0=FreqTable[0]%256; //设置定时初始值TH0=FreqTable[0]/256; //设置定时初始值Buzzer=!Buzzer;
}
- 26.8. 在上述程序基础上,结合简谱的小星星,SPEED定义500为正常速度,250速度加快;
#include <REGX52.h>
#include "delay_xms.h"
#include "TimeR0.h"sbit Buzzer=P2^5;#define SPEED 250 //定义speed便于调速unsigned int FreqTable[]={0,63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,};//定义0位数据为休止符unsigned char Music[]={13,4,13,4,20,4,20,4,22,4,22,4,20,8,0,4, //0为休止符18,4,18,4,17,4,17,4,15,4,15,4,13,8,0xff, //终止判断}; //定义1/16音符时长为基准时长定义为1,后续以此为基准unsigned char FreqSelect,MusicSelect;
void main()
{TimeR0_Init();while(1){if(Music[MusicSelect]!=0xff){FreqSelect=Music[MusicSelect];MusicSelect++;delay_xms(SPEED/4*Music[MusicSelect]);MusicSelect++;TR0=0;delay_xms(5);TR0=1;}else{MusicSelect=0;}}}void TimeR0_Routine() interrupt 1 //中断子函数
{if(FreqTable[FreqSelect]){TL0=FreqTable[FreqSelect]%256; //设置定时初始值TH0=FreqTable[FreqSelect]/256; //设置定时初始值Buzzer=!Buzzer;}
}
相关文章:
51单片机入门_江协科技_25~26_OB记录的笔记_蜂鸣器教程
25. 蜂鸣器 25.1. 蜂鸣器介绍 •蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号 •蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器(开发板上用的无源蜂鸣器) •有源蜂鸣器:内部自带振荡源&a…...
新能源汽车电池包为什么不通用,车主怎么用电才算对?
一提起新能源车,大部分人可能知道电动汽车,实际上新能源车的种类是比较多的,这里边也包括了插电式混动汽车、纯电汽车、燃料电池汽车,其中插电混动里还包括了串联式、并联式、混联式,每种汽车都各有优缺点,…...
[C语言]——柔性数组
目录 一.柔性数组的特点 二.柔性数组的使用 三.柔性数组的优势 C99中,结构体中的最后⼀个元素允许是未知大小的数组,这就叫做『柔性数组』成员。 typedef struct st_type //typedef可以不写 { int i;int a[0];//柔性数组成员 }type_a; 有些编译器会…...
密码学 总结
群 环 域 群 group G是一个集合,在此集合上定义代数运算*,若满足下列公理,则称G为群。 1.封闭性 a ∈ G , b ∈ G a\in G,b\in G a∈G,b∈G> a ∗ b ∈ G a*b\in G a∗b∈G 2.G中有恒等元素e,使得任何元素与e运算均为元素本…...
尚硅谷html5+css3(1)html相关知识
1.基本标签: <h1>最大的标题字号 <h2>二号标题字号 <p>换行 2.根标签<html> 包括<head>和<body> <html><head><title>title</title><body>body</body></head> </html> 3…...
苍穹外卖11(Apache ECharts前端统计,营业额统计,用户统计,订单统计,销量排名Top10)
目录 一、Apache ECharts【前端】 1. 介绍 2. 入门案例 二、营业额统计 1. 需求分析和设计 1 产品原型 2 业务规则 3 接口设计 2. 代码开发 3. 功能测试 三、用户统计 1. 需求分析和设计 1 产品原型 2 业务规则 3 接口设计 2. 代码开发 3. 功能测试 四、订单统…...
大商创多用户商城系统 多处SQL注入漏洞复现
0x01 产品简介 大商创多用户商城系统是一个功能强大、灵活多变的新零售电商系统服务商。该系统支持平台自营和商家入驻,实现多元化经营模式,能够全面整合供应商、生产商、经销商和消费者等产业链资源,提高产品多样性,加快资金流动速度,并有助于减少不必要的成本输出。 0…...
美团一面4/9
面的时候自我感觉良好,复盘感觉答的一坨。。 0怎么比较两个对象 0Integer 不使用new会自动装箱,返回提前创建的。使用new就创建新对象。 1.Object类有什么方法 java中Object类中有哪些常用方法以及作用_java中object的方法有什么用-CSDN博客 2.hash…...
ubuntu下NTFS分区无法访问挂载-解决办法!
Ubuntu系统下,有的时候发现,挂载的NTFS文件系统硬盘无法访问。点击弹出类似问题: Error mounting /dev/sda1 at /media/root/新加卷: Command-line mount -t "ntfs" -o "uhelperudisks2,nodev,nosuid,uid0,gid0" "/…...
如何在 Ubuntu 14.04 上使用 Rsyslog、Logstash 和 Elasticsearch 实现日志集中管理
Elastic 的一篇文章 介绍 理解组织生成的数百万条日志行可能是一个艰巨的挑战。一方面,这些日志行提供了对应用程序性能、服务器性能指标和安全性的视图。另一方面,日志管理和分析可能非常耗时,这可能会阻碍对这些日益必要的服务的采用。 …...
mapbox 工作问题暂时记录
mapbox 工作问题暂时记录 mapbox样式修改1.2.3.4. mapbox样式修改 1. mapbox直接用class名无法修改样式, 可以添加 :deep 来修改样式 2. map.value.getStyle().layers这行代码可以获取页面中所有图层,可以判断图层id来做相应操作 3. map.value.setLayoutProperty(layer.id…...
Linux、Docker、Brew、Nginx常用命令
Linux、Docker、Brew、Nginx常用命令 Linuxvi编辑器文件操作文件夹操作磁盘操作 DockerBrewNginx参考 Linux vi编辑器 Vi有三种模式。命令模式、输入模式、尾行模式,简单的关系如下: i -- 切换到输入模式,在光标当前位置开始输入文本。&a…...
【Spring实战项目】SpringBoot3整合WebSocket+拦截器实现登录验证!从原理到实战
🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…...
第二证券|政策利好不断,工业母机概念爆发,华东数控等涨停
工业母机概念10日盘中大幅走高,截至发稿,恒进感应、宏德股份、华东重机、华东数控等涨停,凯腾精工涨超20%,创世纪涨逾11%,华辰配备、盘古智能涨超9%,博亚精工涨逾8%。 音讯面上,工业和信息化部…...
Thinkphp5萤火商城B2C小程序源码
源码介绍 Thinkphp5萤火商城B2C小程序源码,是一款开源的电商系统,为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发,执行效率、扩展性、稳定性值得信赖。 环境要求 Nginx/Apache/IIS PHP5.4 MySQL5.1 建议使用环境ÿ…...
PostgreSQL介绍
PostgreSQL是一个高度先进的对象关系型数据库管理系(ORDBMS),其起源可以追溯到1986年,最初是加州大学伯克利分校计算机系的一个项目,名为POSTGRES。它是从Ingres项目演变而来的,目的是克服当时关系数据库系…...
简析数据安全保护策略中的十个核心要素
数据显示,全球企业组织每年在数据安全防护上投入的资金已经超过千亿美元,但数据安全威胁态势依然严峻,其原因在于企业将更多资源投入到数据安全能力建设时,却忽视了这些工作本身的科学性与合理性。因此,企业在实施数据…...
Python+Django+Html河道垃圾识别网页系统
程序示例精选 PythonDjangoHtml河道垃圾识别网页系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoHtml河道垃圾识别网页系统》编写代码,代码整洁,规…...
BUUCTF:BUU UPLOAD COURSE 1[WriteUP]
构造一句话PHP木马 <?php eval(system($_POST[shell])); ?> 利用eval函数解析$shell的值使得服务器执行system命令 eval函数是无法直接执行命令的,只能把字符串当作php代码解析 这里我们构造的木马是POST的方式上传,那就用MaxHacKBar来执行 …...
从零开始学习:如何使用Selenium和Python进行自动化测试?
安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
