主頁 > 前端設計 > 第十一屆 藍橋杯 單片機設計與開發專案 省賽 程式設計試題及原始碼

第十一屆 藍橋杯 單片機設計與開發專案 省賽 程式設計試題及原始碼

2020-10-20 22:39:32 前端設計

一、試題

1、 基本要求

1.1 使用大賽組委會提供的國信長天單片機競賽實訓平臺,完成本試題的程式設計
與除錯,
1.2 選手在程式設計與除錯程序中,可參考組委會提供的“資源資料包”,
1.3 請注意: 程式撰寫、除錯完成后選手應通過考試系統提交完整、可編譯的 Keil
工程檔案,選手提交的工程檔案應是最終版本, 要求 Keil 工程檔案以準考證
號(8 位數字)命名, 工程檔案夾內應包含以準考證號命名的 hex 檔案,該 hex
檔案是成績評審的依據, 不符合以上檔案提交要求的作品將被評為零分或者被
酌情扣分,
1.4 請勿上傳與作品工程檔案無關的其它檔案,

2、 競賽板配置要求

2.1將 IAP15F2K61S2 單片機內部振蕩器頻率設定為 12MHz,
2.2鍵盤作業模式跳線 J5 配置為 BTN 按鍵模式,
2.3擴展方式跳線 J13 配置為 IO 模式,
2.4請注意: 選手需嚴格按照以上要求配置競賽板,撰寫和除錯程式, 不符合以上
配置要求的作品將被評為零分或者被酌情扣分,

3、 硬體框圖

在這里插入圖片描述

圖 1 系統硬體框圖

4、 功能描述

4.1基本功能

  1. 通過 DS18B20 完成溫度資料測量,
  2. 通過數碼管實作資料和引數界面的顯示,
  3. 通過按鍵實作界面切換、引數設定等功能,
  4. 通過 LED 指示燈實作狀態指示與報警輸出功能,
  5. 通過 PCF8591 完成 DAC 模擬電壓輸出功能,
    4.2設計要求
  6. 溫度資料重繪時間:≤0.5 秒
  7. 顯示界面切換時間:≤0.3 秒
  8. DAC 模擬電壓輸出回應時間:≤0.3 秒
  9. 溫度引數可調整范圍:
    ? 溫度上限引數 0 ≤ TMAX < 100
    ? 溫度下限引數 0 ≤ TMIN < 100
    4.3顯示功能
  10. 資料界面
    資料界面如圖 2 所示,顯示內容包括提示符 C 和通過 DS18B20 溫度傳感器
    采集到的溫度資料,溫度資料取整數,
    在這里插入圖片描述

圖 2 資料顯示界面
2) 引數界面如圖 3 所示,顯示內容包括提示符 P、溫度上限引數 TMAX和溫度下
限引數 TMIN,
在這里插入圖片描述

圖 3 引數設定界面
4.4按鍵功能

  1. 按鍵功能說明
    ? S4: 定義為“界面切換”按鍵,按下 S4 按鍵,切換選擇資料顯示界
    面和引數設定界面,3 / 3
    ? S5:定義為“引數切換” 按鍵,按下 S5 按鍵,切換選擇溫度上限參
    數 TMAX和溫度下限引數 TMIN,
    ? S6:定義為“加” 按鍵, 按下 S6 按鍵,當前選擇的溫度引數增加 1℃,
    ? S7:定義為“減”按鍵,按下 S7 按鍵,當前選擇的溫度引數減少 1℃,
  2. 按鍵功能設計要求
    ? 按鍵 S6 和按鍵 S7 的加、 減功能僅在引數設定界面有效,
    ? 合理設定引數邊界范圍, 防止出現引數越界和邏輯錯誤,
    ? 每次從資料界面切換到引數界面,默認當前選擇的引數是溫度下限參
    數 TMIN,
    ? 通過 S4 按鍵,從引數設定界面退出,進入資料顯示界面時,需要進行
    必要的引數合理性檢查( TMAX≥TMIN);若設定的引數合理,引數生效,
    進入資料界面;反之, 自動恢復進入引數設定界面前的有效引數, 進
    入資料界面,
    4.5DAC 輸出功能
  3. 當前溫度 T > TMAX時,控制 DAC 輸出 4.0V,
  4. 當前溫度 TMIN ≤ T ≤ TMAX時,控制 DAC 輸出 3.0V,
  5. 當前溫度 T < TMIN時,控制 DAC 輸出 2.0V,
    4.6LED 指示燈功能
  6. 當前溫度滿足 T > TMAX,指示燈 L1 點亮,否則熄滅,
  7. 當前溫度滿足 TMIN ≤ T ≤ TMAX,指示燈 L2 點亮,否則熄滅,
  8. 當前溫度滿足 T < TMIN,指示燈 L3 點亮,否則熄滅,
  9. 如出現錯誤的引數設定操作,指示燈 L4 點亮,直至下一次正確的引數設
    置后,指示燈熄滅,
    4.7初始狀態說明
  10. 初始狀態上電默認處于資料顯示界面,
  11. 默認引數
    ? 溫度上限引數 TMAX = 30℃
    ? 溫度下限引數 TMIN = 20℃

二、原始碼(有瑕疵)

1、main.c

#include<STC15F2K60S2.H>
#include"onewire.h"
#include"iic.h"

#define uchar unsigned char
#define uint unsigned int
	
void delayms(uint ms);
void Select573(char channel);	
void allinit();
void display1();
void display2();
void display3();
void display4();
void keyscan();
void work_key();
void work_led();
void work_dac();

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xFF,0xc6,0x8c};
uchar code dot[]={0x40,0x79,0x24,0x30,0x19,0x12,0x20,0x78,0x00,0x10};//&0x7f
uchar yi,er,san,si,wu,liu,qi,ba;

int temper;
bit mode=0;
bit choose=1;
char tmax;
char tmin;
char tomax;
char tomin;

void main()
{
	allinit();
	temper=temperature_rd_F();
	tmax=30;
	tmin=20;
	while(1)
	{
		work_key();
		work_led();
		work_dac();
		display1();
		display2();
		display3();
		display4();
		keyscan();
	}
}

void work_key()
{
	if(mode==0)
	{
		yi=12;
		er=11;san=11;si=11;wu=11;liu=11;
		qi=temper/10;ba=temper%10;
	}
	else
	{
		yi=13;
		er=11;san=11;
		si=tmax/10;wu=tmax%10;
		liu=11;
		qi=tmin/10;ba=tmin%10;
	}
}

void work_led()
{
	Select573(4);
	if(tmax<tmin)
	{
		P03=0;
		P00=1;P01=1;P02=1;
	}
	else P03=1;
	if(tmax>=tmin)
	{
		if(temper>tmax)P00=0;
		else P00=1;
		if(temper<tmin)P02=0;
		else P02=1;
		if(temper<tmax&&temper>tmin)P01=0;
		else P01=1;
	}
	Select573(0);
}

void work_dac()
{
	if(temper>tmax)
		AD_write(0x40,204);
	if(temper<tmin)
		AD_write(0x40,102);
	if(temper<tmax&&temper>tmin)
		AD_write(0x40,153);
	if(tmax<tmin)
		AD_write(0x40,0);
}

void delayms(uint ms)
{
	uint i,j;
	for(i=ms;i>0;i--)
		for(j=845;j>0;j--);
}

void Select573(char channel)
{
	switch(channel)
	{
		case 4:
			P2=(P2&0x1f)|0x80;
		break;
		case 5:
			P2=(P2&0x1f)|0xa0;
		break;
		case 6:
			P2=(P2&0x1f)|0xc0;
		break;
		case 7:
			P2=(P2&0x1f)|0xe0;
		break;
		case 0:
			P2=(P2&0x1f)|0x00;
		break;
	}
}

void allinit()
{
	Select573(4);
	P0=0xff;
	Select573(5);
	P0=0x00;
	Select573(6);
	P0=0xff;
	Select573(7);
	P0=0xff;
	Select573(0);
}

void display1()
{
	Select573(6);
	P0=0x01;
	Select573(7);
	P0=tab[yi];
	delayms(1);
	
	Select573(6);
	P0=0x02;
	Select573(7);
	P0=tab[er];
	delayms(1);
}

void display2()
{
	Select573(6);
	P0=0x04;
	Select573(7);
	P0=tab[san];
	delayms(1);
	
	Select573(6);
	P0=0x08;
	Select573(7);
	P0=tab[si];
	delayms(1);
}

void display3()
{
	Select573(6);
	P0=0x10;
	Select573(7);
	P0=tab[wu];
	delayms(1);
	
	Select573(6);
	P0=0x20;
	Select573(7);
	P0=tab[liu];
	delayms(1);
}

void display4()
{
	Select573(6);
	P0=0x40;
	Select573(7);
	P0=tab[qi];
	delayms(1);
	
	Select573(6);
	P0=0x80;
	Select573(7);
	P0=tab[ba];
	delayms(1);
	
	Select573(6);
	P0=0xff;
	Select573(7);
	P0=0xff;
}

void keyscan()
{
	if(P33==0)
	{//S4
		delayms(5);
		if(P33==0)
		{
			if(mode==0)
			{
				mode=1;
				tomax=tmax;
				tomin=tmin;
			}
			else if(mode==1)
			{
				mode=0;
				if(tmax<tmin)
				{
					tmax=tomax;
					tmin=tomin;
				}
			}
		}
		while(!P33);
	}
		
	if(P32==0)
	{//S5
		delayms(5);
		if(P32==0)
		{
			if(mode==1)
			{
				if(choose==0)choose=1;
				else if(choose==1)choose=0;	
			}
		}
		while(!P32);
	}
		
	if(P31==0)
	{//S6
		delayms(5);
		if(P31==0)
		{
			if(mode==1)
			{
				if(choose==0)
				{
					if(tmax<99)tmax++;
				}
				else if(choose==1)
				{
					if(tmin<99)tmin++;
				}
			}

		}
		while(!P31);
	}
	
	if(P30==0)
	{//S7
		delayms(5);
		if(P30==0)
		{
			if(mode==1)
			{
				if(choose==0)
				{
					if(tmax>0)tmax--;
					
				}
				else if(choose==1)
				{
					if(tmin>0)tmin--;
				}
		}
		while(!P30);
	  }
	}
}

2、icc.c

/*
  程式說明: IIC總線驅動程式
  軟體環境: Keil uVision 4.10 
  硬體環境: CT107單片機綜合實訓平臺 8051,12MHz
  日    期: 2011-8-9
*/

#include "reg52.h"
#include "intrins.h"

#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}    


#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1

//總線引腳定義
sbit SDA = P2^1;  /* 資料線 */
sbit SCL = P2^0;  /* 時鐘線 */


//總線啟動條件
void IIC_Start(void)
{
	SDA = 1;
	SCL = 1;
	somenop;
	SDA = 0;
	somenop;
	SCL = 0;	
}

//總線停止條件
void IIC_Stop(void)
{
	SDA = 0;
	SCL = 1;
	somenop;
	SDA = 1;
}

//應答位控制
void IIC_Ack(bit ackbit)
{
	if(ackbit) 
	{	
		SDA = 0;
	}
	else 
	{
		SDA = 1;
	}
	somenop;
	SCL = 1;
	somenop;
	SCL = 0;
	SDA = 1; 
	somenop;
}

//等待應答
bit IIC_WaitAck(void)
{
	SDA = 1;
	somenop;
	SCL = 1;
	somenop;
	if(SDA)    
	{   
		SCL = 0;
		IIC_Stop();
		return 0;
	}
	else  
	{ 
		SCL = 0;
		return 1;
	}
}

//通過I2C總線發送資料
void IIC_SendByte(unsigned char byt)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{   
		if(byt&0x80) 
		{	
			SDA = 1;
		}
		else 
		{
			SDA = 0;
		}
		somenop;
		SCL = 1;
		byt <<= 1;
		somenop;
		SCL = 0;
	}
}

//從I2C總線上接收資料
unsigned char IIC_RecByte(void)
{
	unsigned char da;
	unsigned char i;
	
	for(i=0;i<8;i++)
	{   
		SCL = 1;
		somenop;
		da <<= 1;
		if(SDA) 
		da |= 0x01;
		SCL = 0;
		somenop;
	}
	return da;
}

unsigned char AD_get(unsigned char add)
{
	unsigned char temp;
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();	
	IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	temp=IIC_RecByte();
	IIC_Stop();
	return temp;
}

void AD_write(unsigned char add,unsigned char dat)
{
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
}


unsigned char EEPROM_get(unsigned char add)
{
	unsigned char temp;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();	
	IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	temp=IIC_RecByte();
	IIC_Stop();
	return temp;
}

void EEPROM_write(unsigned char add,unsigned char dat)
{
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_Stop();
}

3、onewire.c

/*
  程式說明: 單總線驅動程式
  軟體環境: Keil uVision 4.10 
  硬體環境: CT107單片機綜合實訓平臺(外部晶振12MHz) STC89C52RC單片機
  日    期: 2011-8-9
*/
#include "reg52.h"

sbit DQ = P1^4;  //單總線介面

//單總線延時函式
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
	char i;
	while(t--)
	{
		for(i=12;i>0;i--);
	}
}

//通過單總線向DS18B20寫一個位元組
void Write_DS18B20(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay_OneWire(5);
		DQ = 1;
		dat >>= 1;
	}
	Delay_OneWire(5);
}

//從DS18B20讀取一個位元組
unsigned char Read_DS18B20(void)
{
	unsigned char i;
	unsigned char dat;
  
	for(i=0;i<8;i++)
	{
		DQ = 0;
		dat >>= 1;
		DQ = 1;
		if(DQ)
		{
			dat |= 0x80;
		}	    
		Delay_OneWire(5);
	}
	return dat;
}

//DS18B20設備初始化
bit init_ds18b20(void)
{
  	bit initflag = 0;
  	
  	DQ = 1;
  	Delay_OneWire(12);
  	DQ = 0;
  	Delay_OneWire(80);
  	DQ = 1;
  	Delay_OneWire(10); 
    initflag = DQ;     
  	Delay_OneWire(5);
  
  	return initflag;
}

unsigned char temperature_rd(void)
{
	unsigned char low,high;
	unsigned char temp;
	init_ds18b20();
	Write_DS18B20(0XCC);
	Write_DS18B20(0X44);
	Delay_OneWire(200);
	
	init_ds18b20();
	Write_DS18B20(0XCC);
	Write_DS18B20(0XBE);
	low=Read_DS18B20();
	high=Read_DS18B20();
	temp=high<<4;
	temp|=low>>4;
	return temp;
}

float temperature_rd_F(void)
{
	unsigned char low,high;
	unsigned int temp;
	float temperature;
	init_ds18b20();
	Write_DS18B20(0XCC);
	Write_DS18B20(0X44);
	Delay_OneWire(200);
	
	init_ds18b20();
	Write_DS18B20(0XCC);
	Write_DS18B20(0XBE);
	low=Read_DS18B20();
	high=Read_DS18B20();
	temp=high&0x0f;
	temp<<=8;
	temp|=low;
	temperature=temp*0.0625;
	return temperature;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/182890.html

標籤:其他

上一篇:linux內核驅動框架撰寫及編譯

下一篇:C語言:數組元素個數固定的最值輸出

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more