有一段烟雾识别的代码帮忙看看 讲讲其中的原理 1C

tic;
clear all;
close all;
clc;
A = aviinfo('byfwf.avi');
mov = VideoReader('byfwf.avi');
LEN = A.NumFrames;%得到视频的帧数
for i = 1 : LEN
b = read(mov, i);
imwrite(b, strcat('smoke', int2str(i), '.jpg'), 'jpg');
end
for x = 1 : LEN
pic = imread(strcat('smoke', int2str(x), '.jpg'));%读入一张图片
pic1 = pic;%pic1中存放的是处理过后的彩色图像
pic_hsv = rgb2hsv(pic);
s = size(pic1);
bw_pic = zeros(s(1), s(2));
for i = 1 : s(1)
for j = 1 : s(2)
if pic_hsv(i, j, 1) > 0.35 && pic_hsv(i, j, 1) < 0.65 && ...
pic_hsv(i, j, 2) > 0.06 && pic_hsv(i, j, 2) < 0.3 && ...
pic_hsv(i, j, 3) > 0.5 && pic_hsv(i, j, 3) <= 1;
pic1(i, j, 1) = 255;
pic1(i, j, 2 : 3) = 0;
end
if pic1(i, j, 1) == 255 && pic1(i, j, 2) == 0
bw_pic(i, j) = 1;
end
end
end
cov_bw_pic = 1 - bw_pic;
fill_pic = imfill(cov_bw_pic, 'holes');
fill_pic1 = 1 - fill_pic;
B_pic = bwboundaries(fill_pic1);%得到的是一个P×1的单元
ss = size(B_pic);%ss的值就是连通分量的数量
ss1 = size(B_pic{1, 1});%ss1是一个大小为m×2的矩阵
max = ss1(1);
for i = 2 : ss(1)%找到最大的连通区域的边界总个数
ss2 = size(B_pic{i, 1});
if ss2(1)> max
max = ss2(1);
end
end
%⑤…………………………将小于最大连通区域的连通分量边界赋零
for k = 1 : ss(1)%将小于最大连通区域的连通分量边界赋零,
%其作用就是将其余小的连通分量与边界隔开
Mid = B_pic{k, 1};
ss3 = size(Mid);
if ss3(1) < max
for i = 1 : ss3(1)
fill_pic1(Mid(i, 1), Mid(i, 2)) = 0;

end
end
end
%反转填充
cov_fill_pic1 = 1 - fill_pic1;
A_fill_pic = imfill(cov_fill_pic1, 'holes');%进行内部填充,再反变换回来,即得到所要求的区域
A_fill_pic1 = 1 - A_fill_pic;
B_pic1 = bwboundaries(A_fill_pic1);
sss = size(B_pic1);%sss的值就是连通分量的数量
for k = 1 : sss(1)%该循环作用是找到最大区域的边界,然后在原图像的对应位置上赋红
Mid = B_pic1{k};%Mid是一个m×2的矩阵,m就是边界点的数量
%ss4(1)表示边界点的数量,Mid(i, 1)和Mid(i, 2)表示边界点的坐标
ss4 = size(Mid);
if ss4(1) == max
for i = 1 : ss4(1)
pic(Mid(i, 1), Mid(i, 2), 1) = 255;

pic(Mid(i, 1), Mid(i, 2), 2 : 3) = 0;

end
end
end
imwrite(pic, strcat('lou_smoking', int2str(x), '.jpg'), 'jpg');
end
aviobj = avifile('lou_smoking.avi');%将处理后的图片连成视频文件
aviobj.fps = 25;%初始化视频文件的属性
aviobj.Quality = 100;
aviobj.compression = 'None';
for i = 1 : LEN
frame = imread(strcat('lou_smoking', int2str(i), '.jpg'));
aviobj = addframe(aviobj, uint8(frame));
end
aviobj=close(aviobj);%关闭aviobj的对象
toc;

qq_43654065
别打,我是酱油 你好,你那有完整的烟雾识别程序吗?
一年多之前 回复

2个回答

这个其实就是简单的分割出烟雾目标,然后进行区域连通,形成完整的烟雾区域

qq_33040075
qq_33040075 他是不是就是基于烟雾的颜色进行分割的?
大约 4 年之前 回复
qq_33040075
qq_33040075 他是不是就是基于烟雾的颜色进行分割的?
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
用stm32驱动了一个烟雾传感器

经过0.1v对应200ppm关系,换算出烟雾浓度为50ppm左右,正常吗?(测试环境在室内,一切正常)

Arduino 配合MQ-2烟雾传感器和LED灯实现烟雾报警器的程序怎么写?

这个程序哪里不对?请教各位大神,我是个文科小女生,完全不会写程序。。。。 int led = 12 void setup() { // put your setup code here, to run once: pinMode=(led,output) } void loop() { // put your main code here, to run repeatedly: int val = analogRead(0); //如果大于400则以10ms的间隔闪烁 if(val > 400){ blinkLED(10); }else if(val > 300 && val < 400){ //如果大于300,小于400则以100ms的间隔闪烁 blinkLED(100); }else if(val < 300 && val > 200){ blinkLED(1000); }else{ //否则关闭 digitalWrite(led, LOW); } } //闪烁函数 unsigned int blinkLED(int period){ unsigned long time = millis(); unsigned int signal; if((time / period) % 2 == 0){ digitalWrite(led, HIGH); }else{ digitalWrite(led, LOW); } }

想用jq做一个抽烟机不断把下面的烟雾连续不断往上抽的效果

想做一个抽烟机不断把下面的烟雾连续不断往上抽的效果,自己写了一下发现总会卡一下不知道为什么总会一卡一卡的往上走,不是连续的往上走,jq版本是jquery-1.10.1.min.js ``` <style> .ipro_pic {width:308px; height:242px; position:relative;} .ipro_pic .h1 img {width:308px; height:242px;} .ipro_pic .h2 {width:308px; height:88px; overflow:hidden; position:absolute; bottom:0; left:0;} .ipro_pic .h2 img {position:absolute; top:0px; left:-50px;} </style> ``` ``` <div class="ipro_pic"> <div class="h1"><img src="images/cate1.jpg" /></div> <div class="h2"><img src="images/yanwu.png" /></div> </div> ``` ``` <script> function yanwu() { var div = $('.ipro_pic .h2 img'); if(div.css("top")=="-284px") { div.css("top","0px"); yanwu(); } else { div.animate({top:'-284px'},1000,yanwu); } } yanwu(); </script> ``` 附上图片: ![图片说明](https://img-ask.csdn.net/upload/201610/26/1477484449_19624.jpg) 烟雾 ![图片说明](https://img-ask.csdn.net/upload/201610/26/1477484602_268307.png)

求解释程序,基于gsm烟雾防盗报警

#include<reg52.h> #include <intrins.h> #include <absacc.h> //头文件 #define uint unsigned int #define uchar unsigned char //宏定义 //按键 sbit key1=P3^2; //布防 sbit key2=P3^3; //撤防 sbit key3=P3^4; //紧急报警 sbit BUZZ=P0^4; //蜂鸣器 sbit rsd=P2^4; //热释电输入 sbit yanwu=P2^5; sbit LED_B=P2^3; //布防指示灯 sbit LED_S=P2^0; //发送消息指示灯 uchar code PhoneNO[] ="15046397767"; //接受号码 uchar code somebody[] ="67094EBA8FDB5165FF0C8BF76CE8610F3002"; //有人进入,请注意。 uchar code somebody1[] ="70DF96FE6D535EA68FC79AD8FF0C8BF76CE8610F3002"; //烟雾浓度过高,请注意。 uchar code somebody2[] ="67094EBA8FDB5165FF0C70DF96FE6D535EA68FC79AD8FF0C8BF76CE8610F3002"; //有人进入,烟雾浓度过高,请注意。 uint TIME_50ms=0; //计时的最小分辨率50ms uint time_continue; uchar TIME_ALAM=0; bit flag=0,flag_BF=0; bit flag_time_start=0; bit again=0; bit flag_alam; bit SOS; bit flag_continue; bit into_BF=0; void delay(uint z)//延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void Uart_init() { TMOD= 0X20; //T1 方式2 ,8位 自动重装 TH1=0Xfd; TL1=0Xfd; //9600 TR1=1; // 定时器1启动 SM0=0; // 设置串口的工作模式 SM1=1; //方式1 REN=0; // 允许串口接收数据 ES=0; // 串口中断应许 EA=1; // 开启中断 } void SendASC(uchar d) { SBUF=d; while(!TI); TI=0; } void SendString(uchar *str) { while(*str) { SendASC(*str) ; str++; //delay_uart(1); } } void TIME() { if(flag==0) { delay(50); TIME_50ms++; if(TIME_50ms%10==0) LED_B=!LED_B; if(TIME_50ms>=400) { TIME_50ms=0; flag_BF=1; LED_B=0; flag_time_start=0; again=1; } } else { delay(50); TIME_50ms++; if(TIME_50ms%10==0) { LED_B=!LED_B; if(flag_alam==1) { if(flag_continue==0) { flag_continue=1; time_continue=TIME_50ms; } BUZZ=!BUZZ; if(TIME_50ms>=time_continue+100) { BUZZ=1; flag_continue=0; flag_alam=0; time_continue=0; } } } if(TIME_50ms>=1200) { LED_B=0; TIME_50ms=0; flag_time_start=0; again=1; } } } //按键扫描函数 void keyscan() { if(key1==0&&flag_BF==0)//布防 { delay(5);//延时 if(key1==0) { LED_B=0; flag=0; flag_time_start=1; } while(key1==0); } if(flag_time_start==1) { TIME(); } if(key2==0) { delay(5);//撤防 if(key2==0) { BUZZ=1; //关闭蜂鸣器 flag_alam=0; flag_BF=0; flag=0; flag_time_start=0; LED_S=1; LED_B=1; } while(key2==0); } if(key3==0) { delay(5); if(key3==0) { SOS=1; flag_alam=1; } while(key3==0); } } void GSM_work() { unsigned char send_number; if((rsd==0||yanwu==0)&&flag_BF==1) flag_alam=1; if(((rsd==0||yanwu==0)&&flag_BF==1&&again==1)||SOS==1) { LED_S=0; BUZZ=1; SendString("AT+CMGF=1\r\n"); delay(200); SendString("AT+CSCS=\"UCS2\"\r\n"); delay(200); SendString("AT+CSMP=17,0,2,25\r\n"); delay(200); SendString("AT+CMGS="); //信息发送指令 AT+CMGS=// SendASC('"'); for(send_number=0;send_number<11;send_number++) { SendASC('0'); SendASC('0'); SendASC('3'); SendASC(PhoneNO[send_number]); } SendASC('"'); SendASC('\r'); //发送回车指令// SendASC('\n'); //发送换行指令// delay(200); if(rsd==0&&yanwu==1) SendString(somebody); else if(rsd==1&&yanwu==0) SendString(somebody1); else if((rsd==0&&yanwu==0)||SOS==1) SendString(somebody2); delay(200); SendASC(0x1a); if(SOS==0) { again=0; flag_time_start=1; flag_alam=1; } else if(SOS==1&&flag_time_start==1) { TIME_50ms=0; flag_BF=1; LED_B=0; flag_time_start=0; again=1; } delay(2000); LED_S=1; SOS=0; flag=1; } } void main() { Uart_init(); while(1) { keyscan(); GSM_work(); } }

stc89c52转为iap15w4k58s4

我想要做一个烟雾报警器,但是成品使用的是stc89c52,比赛要求改用iap15w4k58s4,请各位大神看看怎么处理。

求推荐烟雾或温度报警器,可接入自己写的物联网平台!!!

需要提供通讯协议,报警触发后可在平台页面上显示,需要可二次开发的

传感器是直接返回一个值吗?还是只是高低电平

传感器是直接返回一个值吗?还是只是高低电平比如说MQ-2-135-3-7-9烟雾空气敏洒精氢一氧化碳可燃液化传感器模块探头 下面是他的程序,如果转成stm32单片机要怎么做,求大佬回答? ![图片说明](https://img-ask.csdn.net/upload/201911/29/1574956988_840931.jpg) ![图片说明](https://img-ask.csdn.net/upload/201911/29/1574956833_202858.jpg)

mega2560的串口数据只显示一次

烟雾和火焰传感器在串口显示模拟值,只能显示一次,但是单独的代码程序都没有问题 ``` #include <SPI.h> #include <RFID.h> #include "U8glib.h" #include <dht11.h> #include <DS1302.h> #include <stdio.h> #include <string.h> //温湿度传感器定义 dht11 DHT11; #define DHT11PIN 2 //显示屏定义 U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); char str[0]; // 用于在OLED上显示时间 char oled_buf[50]; //定义门禁 RFID rfid(53,5); //原扇区A密码,16个扇区,每个扇区密码6Byte unsigned char sectorKeyA[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; unsigned char blockAddr = 4; char strn[MAX_LEN]; const int R = 37; const int G = 38; const int B = 39; const int NR = 40; const int NG = 41; const int NB = 42; namespace { const int kCePin = 8; // 复位引脚 const int kIoPin = 6; // 数据引脚 const int kSclkPin = 7; // 时钟引脚 DS1302 rtc(kCePin, kIoPin, kSclkPin); void printTime() { // 从模块获得当前时间 Time t = rtc.time(); // 格式化时间数据 snprintf(oled_buf, sizeof(oled_buf), "%02d:%02d:%02d", t.hr, t.min, t.sec); } } // namespace /*void init_oled(){ if ( u8g.getMode() == U8G_MODE_R3G3B2 ) u8g.setColorIndex(255); // white else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) u8g.setColorIndex(3); // max intensity else if ( u8g.getMode() == U8G_MODE_BW ) u8g.setColorIndex(1); // pixel on u8g.setFont(u8g_font_6x10); u8g.setFontRefHeightExtendedText(); u8g.setDefaultForegroundColor(); u8g.setFontPosTop(); }*/ void setup() { Serial.begin(9600); //init_oled(); rtc.writeProtect(false); rtc.halt(false); pinMode(A0,INPUT); pinMode(A1,INPUT);//模拟口输入模式 pinMode(B,OUTPUT); pinMode(G,OUTPUT); pinMode(R,OUTPUT);//状态指示灯 pinMode(NB,OUTPUT); pinMode(NG,OUTPUT); pinMode(NR,OUTPUT);//门禁指示灯 } void loop() { //烟雾传感器 Serial.println(analogRead(A0),DEC); /*if(analogRead(A0) > 200) { digitalWrite(R,HIGH); }*/ //火焰传感器 Serial.println(analogRead(A1),DEC);//串口发送火焰传感器模拟量 //delay(500); /*if(analogRead(A1) > 200) { digitalWrite(R,HIGH); } else { digitalWrite(G,HIGH); }*/ //温湿度 DHT11.read(DHT11PIN); float h = DHT11.humidity; float t = DHT11.temperature; //显示屏 u8g.firstPage(); //OLED左上角为0,0 ;字符定位为 左下角 firstPage标志图像循环开始 do { u8g.setFont(u8g_font_unifont); u8g.drawStr( 0, 10, "Hum="); //显示 H= u8g.drawStr( 50, 10, dtostrf(h, 5, 2, str)); u8g.drawStr( 100, 10, "%"); u8g.drawStr( 0, 30, "Tem="); //显示 T= u8g.drawStr( 50, 30, dtostrf(t, 5, 2, str)); u8g.drawStr( 100, 30, "oC"); u8g.drawStr( 0, 50, "Time="); u8g.drawStr( 50, 50, oled_buf); } while( u8g.nextPage() );//nextPage标志图像循环结束 delay(500); printTime(); delay(500); //nfc门禁 digitalWrite(NB,HIGH); rfid.init(); if (rfid.isCard()) { //读取标签卡的序列号 if (rfid.readCardSerial()) { //选卡,可返回卡容量(锁定卡片防止多数读取),去掉本行将连续读卡 rfid.selectTag(rfid.serNum); //读卡 if (rfid.auth(PICC_AUTHENT1A, blockAddr , sectorKeyA, rfid.serNum) == MI_OK) //认证 { //读数据 if ( rfid.read(blockAddr, strn) == MI_OK) { if( strcmp(strn,"manager") == 0 ) { digitalWrite(NB,LOW); digitalWrite(NG,HIGH); delay(2000); digitalWrite(NG,LOW); } else { digitalWrite(NB,LOW); digitalWrite(NR,HIGH); delay(2000); digitalWrite(NR,LOW); } } else { digitalWrite(NB,LOW); digitalWrite(NR,HIGH); delay(2000); digitalWrite(NR,LOW); } } } } rfid.halt(); } ```

c#做逃生演练系统的一些问题

想做一个教室着火逃生演练系统,就是不知道烟雾扩散从某一点开始扩散的方法怎么写,没有点思绪,还有就是当学生发现着火从位置站起来,到跑出教室门口怎么写,求指示

proteus 仿真 ds18b20 温度始终显示27.9 然后我的按钮也失灵,求能教我怎么做

![图片说明](https://img-ask.csdn.net/upload/201805/14/1526269677_709702.png)我尝试了并行三个温度传感器 但是温度一直显示不对,然后试了下只编程一个 也是27.9不知道为什么 然后我自己做的按钮,编程好像也有点问题,求会做的教我,追加悬赏80 /******************************************* 函数名称:DS18B20_Reset 功 能:对DS18B20进行复位初始化操作 参 数:无 返回值 :初始化状态标志:0--失败,1--成功 ********************************************/ uchar DS18B20_Reset(void) { uchar Error=0; P1DIR = 0xff; _DINT(); P1OUT = 0x00; DelayNus(500); P1OUT = 0xff; DelayNus(55); P1DIR = 0x00; _NOP(); if(P1IN == 0x00) { Error = 1; //初始化成功 } else { Error = 0; //初始化失败 } P1DIR = 0xff; //设置为输出,并MCU给出高电平 P1OUT = 0xff; _EINT(); DelayNus(400); return Error; } //总线读取一个数据位 uchar DS18B20_ReadDQ(void) { uchar DQ_S=0; P1OUT = 0x00; //8个DQ 线全部设置为低电平 DelayNus(6); P1OUT = 0xff; DelayNus(8); P1DIR = 0x00; //准备读取 _NOP(); //延时待总线准备好数据 DQ_S = P1IN; //一次性读取8条DQ线的数据状态 DelayNus(45); P1DIR = 0xff; P1OUT = 0xff; //恢复端口电平 DelayNus(10); //延时 return DQ_S; //返回读取的值 } //写数据 void DS18B20_WriteByte(uchar Com) { uchar i; _DINT(); for(i=0;i<8;i++) { P1DIR = 0xff; P1OUT = 0x00; DelayNus(6); if (Com&0x01) { P1OUT = 0xff; } else { P1OUT = 0x00; } Com = Com>>1; DelayNus(50); P1OUT = 0xff; DelayNus(10); } _EINT(); } // 录入两位数据 void DS18B20_Read2Byte(void) { uint i; for(i=0;i<16;i++) { Read_buf_8ch[i]=DS18B20_ReadDQ(); } } //启动温度转换 void DS18B20_Conver(void) { DS18B20_WriteByte(0xcc); DS18B20_WriteByte(0x44); } //读取温度值 void DS18B20_ReadTemp(void) { uchar i; char j,k; uchar Mask; do { i = DS18B20_Reset(); } while(i); DS18B20_Conver(); DelayNus(60000); do { i = DS18B20_Reset(); } while(i); DS18B20_WriteByte(0xcc); DS18B20_WriteByte(0xbe); DS18B20_Read2Byte(); for(j=16;j>0;j--) { Mask=0x01; for(k=0;k<3;k++) { uiData[k] = uiData[k]<<1; if(Read_buf_8ch[j-1]&Mask) uiData[k]++; Mask = Mask<<1; } } } //将十一位二进制数转换成六位整形数据 void Disp_Numb(uint temper) { uchar i; for(i = 0;i < 6;i++) dN[i] = 0; if(temper & BIT0) { dN[0] = 5; dN[1] = 2; dN[2] = 6; } if(temper&BIT1) { dN[1] += 5; dN[2] += 2; dN[3] += 1; } if(temper & BIT2) { dN[2] += 5; dN[3] += 2; if(dN[2] >= 10) { dN[2] -= 10; dN[3] += 1; } } if(temper&BIT3) { dN[3] += 5; } if(temper & BIT4) { dN[4] += 1; } if(temper & BIT5) { dN[4] += 2; } if(temper & BIT6) { dN[4] += 4; } if(temper & BIT7) { dN[4] += 8; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } } if(temper & BIT8) { dN[4] += 6; dN[5] += 1; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } } if(temper & BIT9) { dN[4] += 2; dN[5] += 3; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } } if(temper & BITA) { dN[4] += 4; dN[5] += 6; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } if(dN[5] >= 10) { dN[5] -= 10; } } } //显示当前温度 void Disp_TEM(void) { char Bai,Shi,Ge; //定义变量 Disp_Numb(Cur_TMP1); Bai=dN[5]; Shi=dN[4]; Ge =dN[3]; Disp_EN(1,6,table1[Bai]); Disp_EN(1,7,table1[Shi]); Disp_EN(1,8,table1[11]); Disp_EN(1,9,table1[Ge]); DelayNus(100); Disp_Numb(Cur_TMP2); Bai=dN[5]; Shi=dN[4]; Ge =dN[3]; Disp_EN(2,6,table1[Bai]); Disp_EN(2,7,table1[Shi]); Disp_EN(2,8,table1[11]); Disp_EN(2,9,table1[Ge]); DelayNus(100); Disp_Numb(Cur_TMP3); Bai=dN[5]; Shi=dN[4]; Ge =dN[3]; Disp_EN(3,8,table1[Bai]); Disp_EN(3,9,table1[Shi]); Disp_EN(3,10,table1[11]); Disp_EN(3,11,table1[Ge]); DelayNus(100); } //按键检测 uchar Keyscan() { uchar temp,key; P2DIR=0x00; temp=P2IN; if (temp==0x01) { DelayNus(10); if (temp==0x01) key=1; } if (temp==0x02) { DelayNus(10); if (temp==0x02) key=2; } if (temp==0x04) { DelayNus(10); if (temp==0x03) key=3; } else { DelayNus(10); } return key; } //主程序 int main(void) { WDTCTL=WDTPW+WDTHOLD; BCSCTL1 &= ~XT2OFF; _EINT();//打开全局中断 TACTL |= TASSEL_2 + ID_3; Ini_Lcd(); while(1) { GDWZ(); DS18B20_ReadTemp(); Cur_TMP1=uiData[0]; Cur_TMP2=uiData[1]; Cur_TMP3=uiData[2]; Disp_TEM(); key_number=Keyscan(); if (key_number==1) { if(Cur_TMP1<=10) { P3DIR = 0x05; P3OUT = BIT0+BIT2; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[10]); } if(Cur_TMP1>10&&Cur_TMP1<20) { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } else { P3DIR = 0x03; P3OUT = BIT0+BIT1; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[9]); } } if(key_number==2) { if(Cur_TMP1<=20) { P3DIR = 0x05; P3OUT = BIT0+BIT2; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[10]); } if(Cur_TMP1>20&&Cur_TMP1<30) { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } else { P3DIR = 0x03; P3OUT = BIT0+BIT1; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[9]); } } if (key_number==3) { if(Cur_TMP1<=30) { P3DIR = 0x05; P3OUT = BIT0+BIT2; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[10]); } if(Cur_TMP1>30&&Cur_TMP1<40) { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } else { P3DIR = 0x03; P3OUT = BIT0+BIT1; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[9]); } } else { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } Delay_Nms(1000); Clear_LCD(); } }

keil编译时 error C141: syntax error near ')'

简单的烟雾报警程序中先是缺少了lcd1602的头文件 我从网上找了添加了后发现有错误 求大神帮我解答一下疑问 谢谢了 /******************************** FILE NAME: lcd1602.c CHIP TYPE: AT89C51 CLOCK FREQUENCY: 12MHZ IDE: VSMStudio COMPILER: IAR for 8051 TIME: September 2010 ********************************/ #include "reg52.h" #include "intrins.h" // Define P3 pins #define DATA_BUS (P0) #define RS (P2_bit.P2_0) #define RW (P2_bit.P2_1) #define E (P2_bit.P2_2) // Define new types typedef unsigned char uchar; typedef unsigned int uint; // Function Prototypes void check_busy(void); void write_command(uchar com); void write_data(uchar data); void LCD_init(void); void string(uchar ad ,uchar *s); void lcd_test(void); void delay(uint); void main(void) { LCD_init(); while(1) { string(0x80,"Have a nice day!"); string(0xC0," Proteus VSM"); delay(100); write_command(0x01); delay(100); } } /******************************************* LCD1602 Driver mapped as IO peripheral *******************************************/ // Delay void delay(uint j) { uchar i = 60; for(; j>0; j--) { while(--i); i = 59; while(--i); i = 60; } } // Test the Busy bit void check_busy(void) { do { DATA_BUS = 0xff; E = 0; RS = 0; RW = 1; E = 1; __no_operation(); } while(DATA_BUS & 0x80); E = 0; } // Write a command void write_command(uchar com) { check_busy(); E = 0; RS = 0; RW = 0; DATA_BUS = com; E = 1; __no_operation(); E = 0; delay(1); } // Write Data void write_data(uchar data) { check_busy(); E = 0; RS = 1; RW = 0; DATA_BUS = data; E = 1; __no_operation(); E = 0; delay(1); } // Initialize LCD controller void LCD_init(void) { write_command(0x38); // 8-bits, 2 lines, 7x5 dots write_command(0x0C); // no cursor, no blink, enable display write_command(0x06); // auto-increment on write_command(0x01); // clear screen delay(1); } // Display a string void string(uchar ad, uchar *s) { write_command(ad); while(*s>0) { write_data(*s++); delay(100); } }

跪求以下zigbee程序协调器S1在哪部分控制电机转动?急急急急急急

/********************************************************************* * INCLUDES */ #include "OSAL.h" #include "AF.h" #include "ZDApp.h" #include "ZDObject.h" #include "ZDProfile.h" #include "GenericApp.h" #include "DebugTrace.h" #if !defined( WIN32 ) #include "OnBoard.h" #endif /* HAL */ #include "hal_lcd.h" #include "hal_led.h" #include "hal_key.h" #include "hal_uart.h" /* RTOS */ #if defined( IAR_ARMCM3_LM ) #include "RTOS_App.h" #endif /********************************************************************* * MACROS */ #define LIGHT P0_5 //定义P0.5口为光敏控制端 #define SMOKE P0_6 //定义P0.6口为烟雾控制端 #define LED P1_0 #define A1 P1_4 //定义步进电机连接端口 #define B1 P1_5 #define C1 P1_6 #define D1 P1_7 #define uchar unsigned char #define uint unsigned int uint8 motorstatus,CS,CCS,Cmotorstatus; uchar phasecw[4] ={0x80,0x40,0x20,0x10};//正转 电机导通相序 D-C-B-A uchar phaseccw[4]={0x10,0x20,0x40,0x80};//反转 电机导通相序 A-B-C-D static void MotorData(uchar data); static void MotorCW(void); static void MotorCCW(void); static void MotorStop(void); static void InitIO(void); static void Delay_MS(uint Time);// ms延时 uint8 AppTitle[] = "ALD2530 Motor"; //应用程序名称 uint8 LedState = 0; uint8 ucEdDir = 0; //终端1为正转 2为反转 uint8 ucDirection = 1; //1为正转 2为反转 uint8 ucSpeed = 2; //速度2-10之间 uint8 DataBuf[3]; uint8 count,Ccount; /********************************************************************* * MACROS */ /********************************************************************* * CONSTANTS */ /********************************************************************* * TYPEDEFS */ /********************************************************************* * GLOBAL VARIABLES */ // This list should be filled with Application specific Cluster IDs. const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] = { GENERICAPP_zigbee1 }; const SimpleDescriptionFormat_t GenericApp_SimpleDesc = { GENERICAPP_ENDPOINT, // int Endpoint; GENERICAPP_PROFID, // uint16 AppProfId[2]; GENERICAPP_DEVICEID, // uint16 AppDeviceId[2]; GENERICAPP_DEVICE_VERSION, // int AppDevVer:4; GENERICAPP_FLAGS, // int AppFlags:4; GENERICAPP_MAX_CLUSTERS, // byte AppNumInClusters; (cId_t *)GenericApp_ClusterList, // byte *pAppInClusterList; GENERICAPP_MAX_CLUSTERS, // byte AppNumInClusters; (cId_t *)GenericApp_ClusterList // byte *pAppInClusterList; }; // This is the Endpoint/Interface description. It is defined here, but // filled-in in GenericApp_Init(). Another way to go would be to fill // in the structure here and make it a "const" (in code space). The // way it's defined in this sample app it is define in RAM. endPointDesc_t GenericApp_epDesc; /********************************************************************* * EXTERNAL VARIABLES */ /********************************************************************* * EXTERNAL FUNCTIONS */ /********************************************************************* * LOCAL VARIABLES */ byte GenericApp_TaskID; // Task ID for internal task/event processing // This variable will be received when // GenericApp_Init() is called. devStates_t GenericApp_NwkState; byte GenericApp_TransID; // This is the unique message ID (counter) afAddrType_t GenericApp_DstAddr; /********************************************************************* * LOCAL FUNCTIONS */ static void GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg ); static void GenericApp_HandleKeys( byte shift, byte keys ); static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt ); static void GenericApp_SendTheMessage( void ); #if defined( IAR_ARMCM3_LM ) static void GenericApp_ProcessRtosMessage( void ); #endif #define LED P1_2 /********************************************************************* * NETWORK LAYER CALLBACKS */ /********************************************************************* * PUBLIC FUNCTIONS */ void GenericApp_Init( uint8 task_id ) { GenericApp_TaskID = task_id; GenericApp_NwkState = DEV_INIT; GenericApp_TransID = 0; InitIO(); //初始化电机IO引脚 P0DIR&=~(1<<5|1<<6);//P05 P06输入 P1DIR|=0X01;//P10输出 motorstatus=0;//电机状态标志0 //Cmotorstatus=1; // Device hardware initialization can be added here or in main() (Zmain.c). // If the hardware is application specific - add it here. // If the hardware is other parts of the device add it in main(). //以下三句,是设置终端向协调器单播 GenericApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; GenericApp_DstAddr.endPoint = GENERICAPP_ENDPOINT; GenericApp_DstAddr.addr.shortAddr = 0x0000; // Fill out the endpoint description. GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT; GenericApp_epDesc.task_id = &GenericApp_TaskID; GenericApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc; GenericApp_epDesc.latencyReq = noLatencyReqs; // Register the endpoint description with the AF afRegister( &GenericApp_epDesc ); // Register for all key events - This app will handle all key events RegisterForKeys( GenericApp_TaskID ); // Update the display #if defined ( LCD_SUPPORTED ) HalLcdWriteString( "GenericApp", HAL_LCD_LINE_1 ); #endif ZDO_RegisterForZDOMsg( GenericApp_TaskID, End_Device_Bind_rsp ); ZDO_RegisterForZDOMsg( GenericApp_TaskID, Match_Desc_rsp ); #if defined( IAR_ARMCM3_LM ) // Register this task with RTOS task initiator RTOS_RegisterApp( task_id, GENERICAPP_RTOS_MSG_EVT ); #endif } uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events ) { uint8 i; afIncomingMSGPacket_t *MSGpkt; afDataConfirm_t *afDataConfirm; // Data Confirmation message fields byte sentEP; ZStatus_t sentStatus; byte sentTransID; // This should match the value sent (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID ); while ( MSGpkt ) { switch ( MSGpkt->hdr.event ) { case ZDO_CB_MSG: GenericApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt ); break; case KEY_CHANGE://此处是按键事件函数是S1按键按下触发的事件,主要是实现光敏的控制 GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );//按键触发函数执行 break; case AF_DATA_CONFIRM_CMD: // This message is received as a confirmation of a data packet sent. // The status is of ZStatus_t type [defined in ZComDef.h] // The message fields are defined in AF.h afDataConfirm = (afDataConfirm_t *)MSGpkt; sentEP = afDataConfirm->endpoint; sentStatus = afDataConfirm->hdr.status; sentTransID = afDataConfirm->transID; (void)sentEP; (void)sentTransID; // Action taken when confirmation is received. if ( sentStatus != ZSuccess ) { // The data wasn't delivered -- Do something } break; case AF_INCOMING_MSG_CMD://有数据接收到,所触发的函数事件 GenericApp_MessageMSGCB( MSGpkt );//接收到协调器发来的数据,并进行执行。 break; case ZDO_STATE_CHANGE: GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status); if ( (GenericApp_NwkState == DEV_ZB_COORD) || (GenericApp_NwkState == DEV_ROUTER) || (GenericApp_NwkState == DEV_END_DEVICE) ) { // Start sending "the" message in a regular interval. osal_start_timerEx( GenericApp_TaskID, GENERICAPP_SEND_MSG_EVT, GENERICAPP_SEND_MSG_TIMEOUT ); } break; default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); // Next MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); }

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

sql语句 异常 Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your

在我们开发的工程中,有时候会报 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ------ 这种异常 不用多想,肯定是我们的sql语句出现问题,下面...

浪潮集团 往年的软件类 笔试题 比较详细的哦

浪潮集团 往年的软件类 笔试题 比较详细的哦

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

I2c串口通信实现加速度传感器和FPGA的交流

此代码能实现加速度传感器与FPGA之间的交流,从而测出运动物体的加速度。

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

eclipseme 1.7.9

eclipse 出了新的eclipseme插件,官方有下载,但特慢,我都下了大半天(可能自己网速差)。有急需要的朋友可以下哦。。。

Spring Boot -01- 快速入门篇(图文教程)

Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费! 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot...

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

最简单的倍频verilog程序(Quartus II)

一个工程文件 几段简单的代码 一个输入一个输出(50Mhz倍频到100Mhz)

计算机组成原理实验教程

西北工业大学计算机组成原理实验课唐都仪器实验帮助,同实验指导书。分为运算器,存储器,控制器,模型计算机,输入输出系统5个章节

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

基于RSA通信密钥分发的加密通信

基于RSA通信密钥分发的加密通信,采用pycrypto中的RSA、AES模块实现

不同变质程度煤尘爆炸残留气体特征研究

为分析不同变质程度煤尘爆炸残留气体成分的特征规律,利用水平管道煤尘爆炸实验装置进行了贫瘦煤、肥煤、气煤、长焰煤4种不同变质程度的煤尘爆炸实验,研究了不同变质程度煤尘爆炸后气体残留物含量的差异,并对气体

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

jsp+servlet入门项目实例

jsp+servlet实现班级信息管理项目

winfrom中嵌套html,跟html的交互

winfrom中嵌套html,跟html的交互,源码就在里面一看就懂,很简单

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

python实现数字水印添加与提取及鲁棒性测试(GUI,基于DCT,含测试图片)

由python写的GUI,可以实现数字水印的添加与提取,提取是根据添加系数的相关性,实现了盲提取。含有两种攻击测试方法(高斯低通滤波、高斯白噪声)。基于python2.7,watermark.py为主

Xshell6完美破解版,亲测可用

Xshell6破解版,亲测可用,分享给大家。直接解压即可使用

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

程序员的算法通关课:知己知彼(第一季)

【超实用课程内容】 程序员对于算法一直又爱又恨!特别是在求职面试时,算法类问题绝对是不可逃避的提问点!本门课程作为算法面试系列的第一季,会从“知己知彼”的角度,聊聊关于算法面试的那些事~ 【哪些人适合学习这门课程?】 求职中的开发者,对于面试算法阶段缺少经验 想了解实际工作中算法相关知识 在职程序员,算法基础薄弱,急需充电 【超人气讲师】 孙秀洋&nbsp;| 服务器端工程师 硕士毕业于哈工大计算机科学与技术专业,ACM亚洲区赛铜奖获得者,先后在腾讯和百度从事一线技术研发,对算法和后端技术有深刻见解。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27272 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程无限观看时长,但是大家可以抓紧时间学习后一起讨论哦~

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

ThinkPHP6.0完全开发手册-03201220.pdf

ThinkPHP6快速入门,php必备

MySQL数据库从入门到实战应用

限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利2:购课后添加学习助手(微信号:csdn590),按消息提示即可领取编程大礼包! 为什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。 本课程包含3大模块:&nbsp; 一、基础篇: 主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。 二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。 &nbsp;

packer-ng-2.0.1_v3signig.jar

将打包工具packer-ng-plugin升级支持将v3签名的apk生成多渠道包。 详情请查阅:https://blog.csdn.net/liuyu0915/article/details/9051

相关热词 c#分级显示数据 c# 不区分大小写替换 c#中调用就java c#正则表达式 验证小数 c# vscode 配置 c#三维数组能存多少数据 c# 新建excel c#多个文本框 c#怎么创建tcp通讯 c# mvc 电子病例
立即提问