久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

STM32F103驅(qū)動(dòng)TM1637數(shù)碼管顯示:協(xié)議、時(shí)序與實(shí)戰(zhàn)指南

STM32F103驅(qū)動(dòng)TM1637數(shù)碼管顯示:協(xié)議、時(shí)序與實(shí)戰(zhàn)指南 前幾天幫朋友弄一個(gè)恒溫箱控制器他手上正好有一塊STM32F103最小系統(tǒng)板和一個(gè)TM1637四位數(shù)碼管模塊讓我?guī)退由巷@示溫度。說(shuō)實(shí)話這類屏幕方案我平時(shí)用OLED比較多但TM1637在工業(yè)小儀表、桌面時(shí)鐘、溫控器、充電器顯示面板這些場(chǎng)景里實(shí)在太常見(jiàn)了成本低、驅(qū)動(dòng)簡(jiǎn)單、占用引腳少非常適合STM32F103這種資源不算富裕的MCU。我用了大概十分鐘就把硬件接好二十分鐘把驅(qū)動(dòng)代碼寫完調(diào)通整個(gè)過(guò)程比想象中順很多。這篇東西我把思路從頭到尾整理一遍包括TM1637模塊的通信協(xié)議、STM32F103的GPIO模擬時(shí)序、如何在main函數(shù)里封裝出實(shí)用的顯示接口以及我實(shí)測(cè)中踩過(guò)的幾個(gè)坑。不管你是剛?cè)腴T單片機(jī)還是想快速搭一個(gè)數(shù)碼管顯示功能照著做都能跑起來(lái)。1. 項(xiàng)目背景與模塊選型思路1.1 為什么用TM1637而不是直接驅(qū)動(dòng)數(shù)碼管很多初學(xué)者看到數(shù)碼管第一反應(yīng)是“直接用單片機(jī)引腳點(diǎn)亮不就行了”。確實(shí)單個(gè)一位數(shù)碼管要顯示0到9至少需要8個(gè)段選引腳如果帶小數(shù)點(diǎn)就是8段再加上位選總引腳數(shù)一下就上去了。STM32F103雖然引腳多但如果你同時(shí)要接按鍵、傳感器、串口、PWM引腳根本不夠分而且動(dòng)態(tài)掃描還需要CPU不斷刷新處理其他事情時(shí)很容易導(dǎo)致顯示閃爍。TM1637這顆芯片最聰明的地方在于它把數(shù)碼管的段選和位選全部接管了單片機(jī)只需要兩根IO線——一個(gè)時(shí)鐘CLK一個(gè)數(shù)據(jù)DIO——就能控制4位甚至6位數(shù)碼管。內(nèi)部自帶顯存和譯碼電路你告訴它“第一位顯示5第二位顯示8”它自己完成動(dòng)態(tài)掃描CPU完全不用操心刷新頻率。對(duì)STM32F103來(lái)說(shuō)GPIO模擬兩根線的時(shí)序毫無(wú)壓力比用硬件I2C還省事。這顆芯片還有個(gè)細(xì)節(jié)值得說(shuō)它內(nèi)部集成了鍵盤掃描功能最多可以接8個(gè)按鍵。很多溫控器產(chǎn)品就是用一個(gè)TM1637同時(shí)搞定數(shù)碼管顯示和按鍵輸入PCB布線和單片機(jī)資源開(kāi)銷都省到極致。1.2 TM1637、74HC595、直接驅(qū)動(dòng)的取舍我做過(guò)的項(xiàng)目里數(shù)碼管驅(qū)動(dòng)方案基本跑不出下面這幾種這里直接給結(jié)論方案占用引腳顯示位數(shù)CPU負(fù)擔(dān)成本適用場(chǎng)景單片機(jī)直接驅(qū)動(dòng)動(dòng)態(tài)掃描12~16個(gè)4~8位高需頻繁刷新最低引腳充裕、簡(jiǎn)單實(shí)驗(yàn)74HC595串轉(zhuǎn)并3個(gè)8位以上中仍需動(dòng)態(tài)掃描很低數(shù)碼管位數(shù)多、要求低成本TM1637驅(qū)動(dòng)芯片2個(gè)4~6位極低芯片自動(dòng)掃描低4位數(shù)碼管、溫控器、桌面時(shí)鐘MAX7219驅(qū)動(dòng)芯片3個(gè)SPI接口8位極低較高8位以上顯示、需要亮度調(diào)節(jié)我的建議很明確如果只顯示4位數(shù)字TM1637是綜合體驗(yàn)最好的選擇模塊價(jià)格幾塊錢代碼量也不大。如果是做8位以上的大屏顯示或者需要精確控制某一位的單獨(dú)開(kāi)關(guān)那老老實(shí)實(shí)上74HC595或者M(jìn)AX7219。2. TM1637模塊工作原理與通信協(xié)議2.1 硬件結(jié)構(gòu)與時(shí)序基礎(chǔ)TM1637外觀上是個(gè)SOP20封裝的芯片市面上常見(jiàn)的四位數(shù)碼管模塊大多直接把芯片貼在一小塊PCB背面正面是共陰數(shù)碼管留出4個(gè)引腳VCC、GND、CLK、DIO。VCC我實(shí)測(cè)3.3V和5V都能正常工作STM32F103的IO輸出高電平是3.3VTM1637的邏輯高電平閾值大約2.0V所以直接用3.3V供電、用GPIO直連CLK和DIO沒(méi)有任何電平匹配問(wèn)題。這里有個(gè)非常關(guān)鍵的細(xì)節(jié)TM1637的DIO引腳不是純粹的雙向IO它是開(kāi)漏輸出結(jié)構(gòu)芯片內(nèi)部有上拉電阻但上拉能力比較弱。所以我們?cè)赟TM32F103初始化GPIO時(shí)DIO必須配置為開(kāi)漏輸出模式而且必須開(kāi)啟內(nèi)部上拉。提示如果你把DIO配置成推挽輸出通信大概率仍然能工作但一旦TM1637拉低DIO表示應(yīng)答時(shí)兩邊就會(huì)發(fā)生電平?jīng)_突輕則數(shù)據(jù)錯(cuò)亂重則長(zhǎng)期工作后GPIO口損壞。開(kāi)漏加外部上拉才是最穩(wěn)妥的做法。時(shí)序上TM1637是一種類I2C但不完全兼容I2C的協(xié)議。它的基本單位是8位數(shù)據(jù)從最低位開(kāi)始傳輸。CLK為高時(shí)DIO上的電平就是有效數(shù)據(jù)CLK下降沿寫入數(shù)據(jù)。每次傳輸8位之后第9個(gè)CLK時(shí)鐘周期用于應(yīng)答——注意這里的應(yīng)答是DIO被從機(jī)拉低跟I2C的應(yīng)答方向一致但電平極性稍有差異實(shí)際用的時(shí)候直接模擬“發(fā)完8位后釋放DIO檢測(cè)它是否為低電平”就能通過(guò)。我把完整時(shí)序歸納成下面幾個(gè)環(huán)節(jié)起始信號(hào)CLK高電平時(shí)DIO由高變低數(shù)據(jù)寫入每個(gè)CLK下降沿前先設(shè)置好DIO電平然后拉低CLK應(yīng)答檢測(cè)在第8個(gè)數(shù)據(jù)位之后釋放DIO產(chǎn)生第9個(gè)下降沿讀DIO是否被拉低停止信號(hào)CLK高電平時(shí)DIO由低變高2.2 命令格式與顯存映射TM1637的命令按其功能分成三類每一條都是單獨(dú)發(fā)送的一字節(jié)數(shù)據(jù)命令設(shè)置比如“寫數(shù)據(jù)到顯示寄存器”“讀按鍵掃描值”最常用的是0x40含義是自動(dòng)地址遞增方式寫顯存地址命令設(shè)置指定接下來(lái)從哪一位顯存開(kāi)始寫地址范圍是0xC0到0xC5對(duì)應(yīng)從左邊數(shù)第1位到第6位顯示控制命令高四位是固定1000接下來(lái)是亮度等級(jí)最低位是開(kāi)關(guān)控制。比如0x8F表示開(kāi)顯示且亮度最大0x88表示關(guān)顯示0x8A是亮度最低但保持顯示這里要注意一下很多模塊背面標(biāo)注的是4位數(shù)碼管這時(shí)有效地址只有0xC0到0xC3四個(gè)。但TM1637芯片最多支持6位所以如果你手上是6位模塊地址就可以寫到0xC5。數(shù)據(jù)寫入的流程是這樣的發(fā)送起始信號(hào)發(fā)送0x40告訴芯片“我要寫顯存”發(fā)送停止信號(hào)再次發(fā)送起始信號(hào)發(fā)送地址0xC0連續(xù)發(fā)送N個(gè)字節(jié)的段碼數(shù)據(jù)芯片內(nèi)部地址自動(dòng)遞增發(fā)送停止信號(hào)發(fā)送起始信號(hào)發(fā)送顯示控制命令比如0x8F發(fā)送停止信號(hào)很多人第一次寫代碼容易漏掉第8到第10步結(jié)果是數(shù)據(jù)全部寫進(jìn)顯存了但芯片顯示控制位還處于關(guān)閉狀態(tài)數(shù)碼管就是死活不亮。這個(gè)問(wèn)題我后面還會(huì)在問(wèn)題排查里專門提。3. STM32F103驅(qū)動(dòng)程序設(shè)計(jì)3.1 引腳分配與GPIO初始化我的接線方案非常直接選用PA0和PA1這兩個(gè)引腳理由是它們默認(rèn)就是普通GPIO不涉及JTAG、串口下載、ADC等復(fù)用功能改起來(lái)不會(huì)影響調(diào)試器的連接。模塊引腳STM32F103引腳備注VCC3.3V模塊內(nèi)部邏輯供電與MCU同電源GNDGND共地必須保證CLKPA0推挽輸出DIOPA1開(kāi)漏輸出并啟用內(nèi)部上拉這里說(shuō)明一下為什么CLK用推挽而DIO用開(kāi)漏。CLK始終由單片機(jī)主動(dòng)驅(qū)動(dòng)方向不會(huì)變推挽輸出能提供更強(qiáng)的驅(qū)動(dòng)能力上升沿更陡峭在長(zhǎng)線連接時(shí)抗干擾性更好。DIO需要雙向傳輸必須開(kāi)漏加外部上拉這是硬件層面決定的不是代碼習(xí)慣問(wèn)題。GPIO初始化代碼直接用標(biāo)準(zhǔn)外設(shè)庫(kù)寫void TM1637_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // CLK 推挽輸出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // DIO 開(kāi)漏輸出內(nèi)部上拉 GPIO_InitStructure.GPIO_Pin GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_0); // CLK 默認(rèn)高 GPIO_SetBits(GPIOA, GPIO_Pin_1); // DIO 默認(rèn)高釋放總線 }初始化完成之后DIO默認(rèn)狀態(tài)是高電平等于釋放了總線。接下來(lái)就可以寫底層時(shí)序函數(shù)了。我建議把時(shí)鐘延時(shí)放在GPIO翻轉(zhuǎn)之間而不是用死循環(huán)的delay()這樣代碼在不同主頻下都有更好的可移植性。我用的是SysTick微秒級(jí)延時(shí)函數(shù)STM32F103跑72MHz時(shí)每翻轉(zhuǎn)一次引腳之后延時(shí)5微秒就非常穩(wěn)定。這個(gè)速度不算快但絕對(duì)夠用數(shù)碼管刷新不需要高頻操作。3.2 用模擬時(shí)序?qū)崿F(xiàn)通信底層核心函數(shù)就四個(gè)起始信號(hào)、停止信號(hào)、寫一個(gè)字節(jié)并讀應(yīng)答、發(fā)送命令。我先把代碼放出來(lái)然后逐行解釋。#define TM1637_CLK_HIGH() GPIO_SetBits(GPIOA, GPIO_Pin_0) #define TM1637_CLK_LOW() GPIO_ResetBits(GPIOA, GPIO_Pin_0) #define TM1637_DIO_HIGH() GPIO_SetBits(GPIOA, GPIO_Pin_1) #define TM1637_DIO_LOW() GPIO_ResetBits(GPIOA, GPIO_Pin_1) static void TM1637_Delay(void) { delay_us(5); } void TM1637_Start(void) { TM1637_DIO_HIGH(); TM1637_CLK_HIGH(); TM1637_Delay(); TM1637_DIO_LOW(); TM1637_Delay(); TM1637_CLK_LOW(); TM1637_Delay(); } void TM1637_Stop(void) { TM1637_CLK_LOW(); TM1637_DIO_LOW(); TM1637_Delay(); TM1637_CLK_HIGH(); TM1637_Delay(); TM1637_DIO_HIGH(); TM1637_Delay(); } uint8_t TM1637_WriteByte(uint8_t data) { uint8_t i; uint8_t ack 0; for (i 0; i 8; i) { // 先拉低CLK再改變DIO避免數(shù)據(jù)在時(shí)鐘高電平時(shí)跳變 TM1637_CLK_LOW(); if (data 0x01) { TM1637_DIO_HIGH(); } else { TM1637_DIO_LOW(); } TM1637_Delay(); TM1637_CLK_HIGH(); TM1637_Delay(); data 1; } // 第9個(gè)時(shí)鐘釋放DIO讀取應(yīng)答 TM1637_CLK_LOW(); TM1637_Delay(); TM1637_DIO_HIGH(); // 釋放總線切換為輸入態(tài) TM1637_Delay(); TM1637_CLK_HIGH(); TM1637_Delay(); if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) 0) { ack 1; } else { ack 0; } TM1637_CLK_LOW(); TM1637_Delay(); return ack; }這個(gè)代碼里有幾個(gè)地方必須強(qiáng)調(diào)。第一寫數(shù)據(jù)之前必須先拉低CLK這時(shí)候DIO的變化不會(huì)被芯片誤判為起始信號(hào)因?yàn)槠鹗夹盘?hào)的判定條件是CLK高電平時(shí)DIO由高變低。第二數(shù)據(jù)是從最低位開(kāi)始發(fā)的所以if (data 0x01)然后右移這個(gè)順序千萬(wàn)別反了反了顯示出來(lái)的數(shù)字完全是亂的。第三第9個(gè)時(shí)鐘采樣應(yīng)答之前DIO要先釋放為高阻狀態(tài)然后才拉高CLK這樣才能在CLK高電平期間穩(wěn)定讀到DIO的電平。如果順序搞反可能在CLK上升沿瞬間DIO還沒(méi)被釋放讀到的永遠(yuǎn)是自己的高電平。有的模塊上TM1637沒(méi)有接應(yīng)答上拉電阻或者DIO開(kāi)漏后上拉不夠強(qiáng)的時(shí)候讀應(yīng)答可能不穩(wěn)定。處理方法是如果應(yīng)答檢測(cè)失敗可以不理會(huì)它繼續(xù)往下發(fā)數(shù)據(jù)。因?yàn)閷?shí)際工作中寫顯存很少出現(xiàn)尋址錯(cuò)誤只要時(shí)序?qū)?shù)據(jù)就能進(jìn)去。我在代碼里把應(yīng)答結(jié)果返回出來(lái)但上層調(diào)用時(shí)只做打印提示不阻塞流程。3.3 段碼表與顯示函數(shù)封裝TM1637內(nèi)部不負(fù)責(zé)把ASCII字符或數(shù)字轉(zhuǎn)換成段碼它只負(fù)責(zé)把顯存里的8位數(shù)據(jù)對(duì)應(yīng)到數(shù)碼管的a到g段和小數(shù)點(diǎn)。所以我們需要自己維護(hù)一張段碼表。共陰數(shù)碼管段碼表如下位序是從最低位開(kāi)始依次是a、b、c、d、e、f、g、dpconst uint8_t TM1637_SegTable[] { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x77, // A 0x7C, // b 0x39, // C 0x5E, // d 0x79, // E 0x71, // F 0x00, // 熄滅 0x80, // 小數(shù)點(diǎn) };為什么0是0x3F從最低位開(kāi)始a段1、b段1、c段1、d段1、e段1、f段1、g段0合起來(lái)就是0b00111111也就是0x3F。如果你手頭的數(shù)碼管是共陽(yáng)或者段序引腳不一致這個(gè)表要重新推導(dǎo)不要直接抄。接下來(lái)寫顯示函數(shù)。我的設(shè)計(jì)思路很簡(jiǎn)單調(diào)用方向某個(gè)位置寫入一個(gè)字符或數(shù)字底層自動(dòng)更新顯存。先封裝一個(gè)單字節(jié)寫顯存接口void TM1637_WriteData(uint8_t addr, uint8_t data) { TM1637_Start(); TM1637_WriteByte(0x40); // 數(shù)據(jù)命令自動(dòng)地址遞增寫顯存 TM1637_Stop(); TM1637_Start(); TM1637_WriteByte(0xC0 | addr); // 地址命令 TM1637_WriteByte(data); // 段碼數(shù)據(jù) TM1637_Stop(); TM1637_Start(); TM1637_WriteByte(0x8F); // 顯示控制開(kāi)顯示最大亮度 TM1637_Stop(); }有人可能會(huì)問(wèn)為什么不一次把所有位的數(shù)據(jù)連續(xù)寫完非要一位一位寫如果每次寫一位都發(fā)一遍0x40和0x8F效率確實(shí)低對(duì)數(shù)碼管這種低頻設(shè)備來(lái)說(shuō)1ms和10ms的差異根本看不出來(lái)所以怎么簡(jiǎn)潔怎么來(lái)。如果你有性能潔癖可以改成批量寫void TM1637_DisplayFull(uint8_t *seg_data, uint8_t len) { uint8_t i; TM1637_Start(); TM1637_WriteByte(0x40); TM1637_Stop(); TM1637_Start(); TM1637_WriteByte(0xC0); for (i 0; i len; i) { TM1637_WriteByte(seg_data[i]); } TM1637_Stop(); TM1637_Start(); TM1637_WriteByte(0x8F); TM1637_Stop(); }批量寫入方式的優(yōu)勢(shì)是只通過(guò)一次START和STOP就完成整段顯存更新中間地址自動(dòng)遞增不會(huì)出現(xiàn)多位數(shù)據(jù)之間閃爍的問(wèn)題。不過(guò)我在實(shí)際項(xiàng)目里更喜歡一個(gè)更直觀的接口直接傳入要顯示的4個(gè)數(shù)字和小數(shù)點(diǎn)標(biāo)志void TM1637_DisplayNumber(int16_t num, uint8_t dot_pos) { uint8_t buf[4]; uint8_t i; if (num 0) { num -num; buf[0] TM1637_SegTable[16]; // 負(fù)號(hào)我沒(méi)放進(jìn)去需要自己加 } buf[0] TM1637_SegTable[(num / 1000) % 10]; buf[1] TM1637_SegTable[(num / 100) % 10]; buf[2] TM1637_SegTable[(num / 10) % 10]; buf[3] TM1637_SegTable[num % 10]; if (dot_pos 4) { buf[dot_pos] | 0x80; // 加上小數(shù)點(diǎn)段 } TM1637_DisplayFull(buf, 4); }注意buf[dot_pos] | 0x80是把該位段碼的最高位置1這樣就在對(duì)應(yīng)數(shù)碼管上點(diǎn)亮小數(shù)點(diǎn)。如果你的溫控器需要顯示25.6這種格式就把小數(shù)點(diǎn)位設(shè)為1。3.4 擴(kuò)展功能時(shí)鐘顯示與按鍵掃描既然是做溫控器我順手把時(shí)鐘顯示也實(shí)現(xiàn)了。利用TM1637可以顯示4位數(shù)字的特點(diǎn)用HH:MM格式顯示時(shí)間冒號(hào)用一個(gè)特制的段碼點(diǎn)亮數(shù)碼管中間的兩個(gè)小數(shù)點(diǎn)。不過(guò)四位數(shù)碼管中間沒(méi)有冒號(hào)燈實(shí)際表現(xiàn)是第二位和第三位之間沒(méi)有分隔比較丑。更好的做法是直接用小數(shù)點(diǎn)當(dāng)冒號(hào)把dot_pos設(shè)為1讓第二位的小數(shù)點(diǎn)常亮模擬冒號(hào)效果。這是我實(shí)測(cè)下來(lái)顏值最高的方案。TM1637的按鍵掃描功能也很實(shí)用。芯片支持最多8個(gè)按鍵通過(guò)DIO讀取。掃描時(shí)序跟寫數(shù)據(jù)類似但需要發(fā)送0x42讀按鍵命令然后連續(xù)讀取兩個(gè)字節(jié)的按鍵狀態(tài)。硬件上按鍵一端接DIO另一端接GND或VCC不同接法讀到的鍵值不同。這一塊我在本文不多展開(kāi)后面如果大家有興趣我可以單獨(dú)寫一篇。4. 實(shí)測(cè)中遇到的坑與排查指南4.1 數(shù)碼管不亮或亮度異常的排查先說(shuō)最常見(jiàn)的情況代碼燒進(jìn)去了段碼也寫進(jìn)去了但數(shù)碼管就是不亮。我從實(shí)踐中總結(jié)了一個(gè)排查順序一步步來(lái)基本都能解決。第一步查供電。TM1637模塊的VCC必須和STM32F103共用一個(gè)電源域我見(jiàn)過(guò)有人在面包板上用電腦USB單獨(dú)給模塊供電結(jié)果兩邊GND沒(méi)接在一起導(dǎo)致通信電平完全無(wú)效。第二步測(cè)CLK和DIO的靜態(tài)電平正常情況下空閑時(shí)兩個(gè)引腳都應(yīng)該是高電平如果CLK是0V大概率是GPIO配置成開(kāi)漏并且沒(méi)開(kāi)上拉了。第三步量TM1637的VCC引腳如果模塊上自帶穩(wěn)壓芯片電壓應(yīng)該穩(wěn)定在3.3V或者5V。如果供電都正常但還是不亮那就要懷疑是不是忘了發(fā)顯示控制命令。很多人寫完數(shù)據(jù)命令和地址命令就結(jié)束了顯存里明明有數(shù)據(jù)芯片顯示控制寄存器卻是關(guān)閉狀態(tài)。顯示控制命令0x8F的最后一位必須是1如果是0x88無(wú)論顯存怎么寫都不會(huì)亮。還有一個(gè)亮度相關(guān)的坑。TM1637的亮度調(diào)節(jié)范圍是0x88到0x8F低三位表示亮度等級(jí)。實(shí)際測(cè)試下來(lái)亮度等級(jí)0和1在室內(nèi)光線下基本看不出來(lái)但功耗差別不小。如果你做低功耗設(shè)備可以把亮度等級(jí)設(shè)為1肉眼觀察依然清晰電流能省下幾百微安。4.2 顯示亂碼和數(shù)字錯(cuò)位的深層原因顯示亂碼比較常見(jiàn)的原因有三個(gè)我分別說(shuō)一下。第一個(gè)原因是段碼表不匹配。如果你手頭的數(shù)碼管段序跟我的表不一致顯示出來(lái)的字符就會(huì)亂掉。最簡(jiǎn)單的方法是寫一個(gè)自檢程序讓每一位依次點(diǎn)亮a到g和dp段觀察實(shí)際發(fā)光順序再反推段碼表。這個(gè)自檢代碼非常簡(jiǎn)單for (i 0; i 8; i) { seg 0x01 i; TM1637_WriteData(0, seg); delay_ms(300); }第二個(gè)原因是通信時(shí)序太快。很多STM32F103代碼是從Arduino移植過(guò)來(lái)的Arduino的digitalWrite本身就慢換成STM32后GPIO翻轉(zhuǎn)速度可能快了幾十倍時(shí)序余量不足就會(huì)隨機(jī)出錯(cuò)。解法很簡(jiǎn)單在兩個(gè)引腳翻轉(zhuǎn)之間加3到5微秒延時(shí)把速度降下來(lái)。TM1637芯片本身就不是高規(guī)格器件給它一點(diǎn)余量。第三個(gè)原因是我實(shí)際遇到的一個(gè)很詭異的現(xiàn)象明明寫的是0xC0開(kāi)始的首地址但顯示內(nèi)容整體偏移了一位。排查后發(fā)現(xiàn)是DIO引腳在讀取應(yīng)答時(shí)切換輸入輸出狀態(tài)沒(méi)切干凈導(dǎo)致第9個(gè)時(shí)鐘的應(yīng)答位實(shí)際影響了下一次數(shù)據(jù)寫入。解決方法是每次TM1637_WriteByte結(jié)束時(shí)顯式把DIO設(shè)置為輸出高電平確??偩€回到確定狀態(tài)。我建一個(gè)常見(jiàn)問(wèn)題速查表方便收藏現(xiàn)象可能原因處理辦法完全不亮未發(fā)送顯示控制命令寫入0x8F開(kāi)顯示完全不亮通信線接反CLK和DIO交換檢查接線按順序單色亮測(cè)試完全不亮模塊供電電壓異常檢查VCC與GND與MCU共地?cái)?shù)字亂碼段碼表不匹配用自檢程序反推段碼數(shù)字亂碼時(shí)序過(guò)快引腳翻轉(zhuǎn)間加延時(shí)亮度不均勻某一位接觸不良重新插拔或補(bǔ)焊對(duì)應(yīng)位顯示內(nèi)容錯(cuò)位應(yīng)答檢測(cè)干擾總線狀態(tài)寫完后強(qiáng)制DIO輸出高4.3 硬件連接上的注意事項(xiàng)TM1637模塊和STM32F103之間連線盡量短我測(cè)試過(guò)超過(guò)20厘米的杜邦線在72MHz主頻下會(huì)出現(xiàn)偶發(fā)通信失敗縮短到10厘米以內(nèi)就穩(wěn)定了。如果你必須長(zhǎng)距離走線可以把CLK和DIO的驅(qū)動(dòng)速度降下來(lái)延時(shí)從5微秒加大到20微秒犧牲一點(diǎn)刷新率換穩(wěn)定性。模塊供電建議單獨(dú)對(duì)VCC腳加一個(gè)0.1微法去耦電容位置越靠近模塊越好。如果模塊和STM32F103之間還有其他大功率負(fù)載比如繼電器、電機(jī)驅(qū)動(dòng)一定要在電源入口做好濾波否則數(shù)碼管顯示會(huì)出現(xiàn)亮度抖動(dòng)的現(xiàn)象。我懷疑這跟TM1637內(nèi)部上電時(shí)序和電源紋波有關(guān)實(shí)測(cè)加電容后問(wèn)題明顯改善。還有一點(diǎn)STM32F103開(kāi)發(fā)板上如果接到了5V的VIN引腳而模塊VCC接到了3.3V兩邊電平不一樣需要仔細(xì)確認(rèn)。我上面用的方案是模塊VCC接3.3VCLK和DIO直連沒(méi)有任何電平轉(zhuǎn)換問(wèn)題。如果你手頭只有5V供電的TM1637模塊那需要確認(rèn)模塊上的電平轉(zhuǎn)換電路是否存在否則最好用兩個(gè)電阻分壓或者加一個(gè)電平轉(zhuǎn)換芯片。5. 實(shí)操過(guò)程與完整例程5.1 從接線到跑通的完整流程我把自己調(diào)試的完整流程記錄在這里照著做基本一次點(diǎn)亮。第一步準(zhǔn)備器材。STM32F103最小系統(tǒng)板一塊、TM1637四位數(shù)碼管模塊一個(gè)、面包板一塊、杜邦線四根。我用的是國(guó)產(chǎn)最小系統(tǒng)板STM32F103C8T6主頻72MHz標(biāo)準(zhǔn)外設(shè)庫(kù)工程。第二步接線。按前面表格把模塊引腳和STM32F103連好。VCC接3.3VGND接GNDCLK接PA0DIO接PA1。建議先接電源再接信號(hào)線避免插拔信號(hào)線時(shí)產(chǎn)生瞬態(tài)電平損壞GPIO。第三步創(chuàng)建工程。新建一個(gè)標(biāo)準(zhǔn)外設(shè)庫(kù)工程把system_stm32f10x.c和TM1637.c加進(jìn)去。main函數(shù)里先初始化systick再調(diào)用TM1637_GPIO_Init最后循環(huán)顯示一組數(shù)字。第四步燒錄驗(yàn)證。我把完整main函數(shù)貼出來(lái)方便直接測(cè)試#include stm32f10x.h #include delay.h #include TM1637.h int main(void) { uint8_t i; uint8_t test_data[4]; Delay_Init(); TM1637_GPIO_Init(); // 開(kāi)機(jī)自檢依次顯示0到9 for (i 0; i 10; i) { test_data[0] TM1637_SegTable[i]; test_data[1] TM1637_SegTable[9 - i]; test_data[2] TM1637_SegTable[i]; test_data[3] TM1637_SegTable[9 - i]; TM1637_DisplayFull(test_data, 4); Delay_Ms(200); } // 正式顯示1234 test_data[0] TM1637_SegTable[1]; test_data[1] TM1637_SegTable[2]; test_data[2] TM1637_SegTable[3]; test_data[3] TM1637_SegTable[4]; TM1637_DisplayFull(test_data, 4); while (1) { } }第五步觀察現(xiàn)象。正常情況是數(shù)碼管自檢階段依次顯示0到9的交替組合最后穩(wěn)定顯示1234。如果亂碼、偏移或者不亮參考上一節(jié)的排查表。5.2 代碼工程化的一些建議如果你不只是做個(gè)實(shí)驗(yàn)而是要做正式產(chǎn)品代碼結(jié)構(gòu)需要調(diào)整。我把TM1637的驅(qū)動(dòng)單獨(dú)封裝成TM1637.c和TM1637.h對(duì)外只暴露四個(gè)函數(shù)TM1637_Init、TM1637_DisplayNumber、TM1637_DisplayString、TM1637_SetBrightness。上層應(yīng)用完全不關(guān)心TM1637的時(shí)序細(xì)節(jié)想換顯示模塊的時(shí)候只改驅(qū)動(dòng)層不用動(dòng)業(yè)務(wù)邏輯。TM1637.h內(nèi)容如下#ifndef __TM1637_H #define __TM1637_H #include stm32f10x.h #define TM1637_ADDR_START 0xC0 #define TM1637_CMD_DATA 0x40 #define TM1637_CMD_CTRL 0x8F void TM1637_GPIO_Init(void); void TM1637_DisplayNumber(int16_t num, uint8_t dot_pos); void TM1637_DisplayString(const char *str); void TM1637_SetBrightness(uint8_t brightness); #endifTM1637_DisplayString可以用來(lái)顯示“8888”“HELP”“OFFS”這類簡(jiǎn)單字符我通常用它做故障提示。比如傳感器讀取異常時(shí)顯示“Err”比看串口日志直觀得多。5.3 在FreeRTOS里使用TM1637的注意點(diǎn)最近幫人移植了一個(gè)FreeRTOS的溫控工程里面也用了TM1637。這種情況下要特別小心一個(gè)坑模擬時(shí)序函數(shù)如果被打斷顯示數(shù)據(jù)會(huì)損壞。假設(shè)高優(yōu)先級(jí)任務(wù)正在執(zhí)行TM1637的數(shù)據(jù)寫入突然被定時(shí)器任務(wù)搶占時(shí)鐘線停在半中間等一會(huì)兒高優(yōu)先級(jí)任務(wù)回來(lái)后繼續(xù)翻轉(zhuǎn)引腳TM1637可能已經(jīng)把中間狀態(tài)誤判成停止或起始信號(hào)最終顯示亂碼。解決辦法有兩個(gè)方向。第一個(gè)是給TM1637驅(qū)動(dòng)加臨界區(qū)保護(hù)在TM1637_Start和TM1637_Stop之間關(guān)中斷。代碼很簡(jiǎn)單void TM1637_DisplayNumber(int16_t num, uint8_t dot_pos) { __disable_irq(); // 計(jì)算段碼并寫入 __enable_irq(); }但是要控制臨界區(qū)時(shí)間不能太長(zhǎng)。我的實(shí)測(cè)值是顯示4位數(shù)字完整寫入需要大約1毫秒這個(gè)時(shí)間對(duì)絕大多數(shù)實(shí)時(shí)系統(tǒng)來(lái)說(shuō)都可以接受但如果系統(tǒng)里有對(duì)時(shí)序要求極高的外設(shè)比如1ms中斷的PWM控制你就要小心了。第二個(gè)方案是做一個(gè)顯存緩沖區(qū)和刷新任務(wù)顯示刷新由低優(yōu)先級(jí)任務(wù)周期執(zhí)行其他任務(wù)只修改緩沖區(qū)不直接操作IO。這個(gè)方案更優(yōu)雅也是產(chǎn)品級(jí)的做法。底層顯示任務(wù)每次獲取緩沖區(qū)快照后用一個(gè)完整的不被打斷的時(shí)序把數(shù)據(jù)刷到TM1637。優(yōu)先級(jí)怎么設(shè)置我建議刷新任務(wù)優(yōu)先級(jí)設(shè)在中等偏下因?yàn)閿?shù)碼管顯示偶爾延遲幾十毫秒用戶根本感知不到但高優(yōu)先級(jí)任務(wù)被搶占了可能導(dǎo)致控制邏輯抖動(dòng)。實(shí)際項(xiàng)目中我把顯示任務(wù)放在osPriorityLow控制任務(wù)放在osPriorityHigh跑了一整晚沒(méi)出現(xiàn)顯示異常。6. 個(gè)人實(shí)操中的一些體會(huì)這段時(shí)間反復(fù)調(diào)TM1637有幾個(gè)體會(huì)特別想分享。第一很多單片機(jī)通信問(wèn)題都不是協(xié)議太復(fù)雜而是電平狀態(tài)沒(méi)搞對(duì)。TM1637的DIO要求開(kāi)漏加上拉和標(biāo)準(zhǔn)I2C的SDA思路一模一樣把這個(gè)細(xì)節(jié)刻在腦子里以后遇到任何開(kāi)漏總線都不會(huì)犯低級(jí)錯(cuò)誤。第二調(diào)試數(shù)碼管顯示時(shí)不要一上來(lái)就寫完整業(yè)務(wù)邏輯先用一個(gè)固定數(shù)據(jù)自檢確認(rèn)硬件通路沒(méi)問(wèn)題再往上疊代碼排錯(cuò)效率高得多。另外我建議有條件的備一個(gè)邏輯分析儀哪怕是二三十塊錢的簡(jiǎn)易版也行??床ㄐ文苤苯哟_認(rèn)起始信號(hào)、數(shù)據(jù)位、應(yīng)答位是不是符合預(yù)期比人眼盯著數(shù)碼管猜亂碼原因快得多。我之前有一次通訊時(shí)好時(shí)壞用邏輯分析儀一看才發(fā)現(xiàn)是CLK下降沿之后DIO還沒(méi)穩(wěn)定時(shí)序窗口太窄加延時(shí)后立刻解決。TM1637作為一顆老芯片性能和功能談不上驚艷但穩(wěn)定、便宜、資料多在溫控器、儀表、家電面板這些對(duì)成本敏感的領(lǐng)域依然活躍。STM32F103驅(qū)動(dòng)它代碼量很小哪怕新手跟著這篇文章操作大概一晚上也能跑通。以后再做顯示功能時(shí)我推薦你在預(yù)算和引腳都寬裕時(shí)試試OLED在追求簡(jiǎn)單實(shí)用時(shí)直接選TM1637兩者各有各的用武之地。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩无码AB| 亚欧国产无码精品在线| 蜜桃臀av一区二区| 两性色网| 少妇大屁屁| 亚洲无吗在线视频| 亚洲日本天堂| 婷婷午夜成人色中色| 久久111| 97超碰碰| 亚洲视频一二区| 神马久久久久久伦理片| 天堂综合| 99综合| 大香蕉性欧美| 色婷婷影视| 欧美人人曰人人操人人射射| 成人久久久精品| 亚洲精品视频在线| 亚洲色图欧美一区二区不卡| 中文字幕高清精品一区| 国产亚洲色婷婷99精品91| 岛国大片国产| 黄页av| 成人影 天天操 亚洲| 精品九九| 欧美色网络| 久久av色| 九九碰九九爱97超碰| 很很操在线| 日日干日日操五月天伦理视频| 日韩熟女无码| 熟女91网| 亚洲。日韩。欧美| 人人澡人人爽人人精品| 熟妇人妻一区二区 | 精品人妻一区二区三区在| 自拍亚洲综合| 高凊专区人人操| 久久精品国产亚洲AV片多多| 人人操人人肉久久精品| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 情侣开房子拍 日韩无码 女的很漂亮| 13小男生GAY自慰脱裤子| 大香蕉伊然在亚洲91| 日本不卡码黄色| 9久综合网| 少妇高潮对白在线观看| 91在线视频国产网站| 久久精品无码专区| 嗯嗯啊啊啊好爽| 精品乱码在线观看| 九九AV| 永久免费av无码网站国产app| 国产精品乱码久久久| 中文字幕成人乱码熟女精品国50 | 欧美综合色综合| 最新欧美色网| 成人精品视频一区二区| 欧美在线l亚洲| 久久久久一本一区二区青青蜜月| 中文字幕日本久久| 99久久精品国产高潮| 国产小u女在线观看| 婷婷深爱五月| 狠狠狠一区二区三区| 激情久久久| 亚欧高清在线| 久久av成人无码免费| 超97在线精品视频| 婷婷五月天社区| 色婷婷香蕉| 国产女性无套 免费观看| 欧美日本国产日韩激情视频| 99色| 男女香蕉一区二区| 久久精品国内Av熟女高清| 你懂的在线观看区国产| 精品视频一区二区| 国产精品黄色三级av| 日本精品无码三级网站| 婷婷色一区| 啊啊啊啊啊啊啊国| 精品免费1| 色性欧美| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 唐山老熟妇露脸啪啪叫| 人妻少妇视频在线播放| 日韩精品一区二区三区四虎影视| 花野真衣| 在线电影亚洲色图| 久久欲| 久热这里| 东京热,男人的天堂| 视频在线中文字幕| 色综合一本| 麻豆啪啪啪视频| 91九久| www.成人无码| 精品免费视频国产一区| 国产精品嫩草影院午夜两性| 国产无套粉嫩白浆在| 天天看天天综合成人网| 久操电影网| 在线观看不卡一区二区三区| 亚洲 一区二区 自拍| 偷拍 亚洲| 欧美玖玖爱免费玖玖| 女人天堂av在线播放| 熟女视频久久| 中文字幕诱惑制服人妻丝袜美丝袜美 | 亚洲综合欧美| 精品久久久九九九孕妇| 91欧美网| 色情综合网| 北条麻妃性愛视频| 日韩精彩视频| 日熟女| 伊人青青一区成人视频在线观看区| av草草在线电影| 国产精品分类在线观看| 色婷婷综合久久久久中文一区二区| 自拍亚洲综合| 91强热人妻| 久久久久ab| 久久精品店| 日本精品第一视频在'| 2000亚洲男人天堂| 18禁精品网站在线看| 校园春色综合| 天天干天天操天天操夜夜操天天操| 天天插天天操| 骚鸭AV| 蜜乳av首页| 九久9热| 九九九精品美女| 五月丁香婷婷综合网| 精品中文一区二区| 97国产成人精品免费视频| 欧亚成人在线视频| 三级激情网站| 少妇高潮喷水无套久久久久久| 五月天丁香| 日韩91网| 精品国产网站| 亚洲另类小说卡通动漫| 麻豆传媒一区二区在线观看| 成视频在线观看免费看| 国产60页| 99久久99九九99九九九| 欧美性色网| 二色av| 日日躁夜夜躁狠狠躁超爽| 大香蕉婷婷| 99中文字幕| 欧美激情中文字幕另类小说| 人妻天天爽夜夜爽2| 立川理惠无码一区二区| 青青草国产欧美非洲黑人| 久久久久骚| 岛国1区2区3区在线观看| 中文字幕人妻色偷偷久久皮| 亚洲日韩美国人妻| 少妇综合| 人妻黑丝袜电影| 一区在线国产播放| 日本孕妇一区二区视频操逼免费看 | 97国产高清视频在线观看| 亚洲欧美综合图片| 91女网站| 日韩国产中文字幕| 偷拍亚洲熟女视频播放| 一二三区精品视频| 久久久久久久久久久久久久久乱码 | 强奸乱伦Av网| 国产高清亚洲日韩一区| 97超碰免费人人性爱| 青娱乐久久艹| 亚洲在线网站| 国产日本顶级一区二区三区| 超碰97男人| 成人三级片无码| 欧美亚洲小说| 欧美白嫩女HD| 操逼网免费无码视频| 精品熟女呻吟久久91| 丝袜视频一区二区在线播放国产中文| 激情自拍 校园春色| 男女性感激情网站| 丝袜美腿av女优在线| 新精精品久久精品| 青青草视频在线观看一区二区| 玖玖玖玖精品国产剧情| 欧美高清18A片| 欧美色图另类图片| 国产伊人精品在线| 亚洲少妇激情一区二区三区| 91美女視頻| 91人妻视频在线| 女人高潮抽搐喷水视频网站| 丰满人妻av一区二区三区| 国产精品福利资源在线尤物| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 中文字幕一区av| 日韩精品人妻一| 后入国产| 91性色| 欲香欲色综合天天伊人| 丝袜喷水在线| 熟女人妻av在线资源,黄色的资源| 国产精品一级特黄aaa大片在线观看 | 综合一区中亚洲国产成人综合精品| 伊人久久综合影院精品久久久 | 1024人妻| 超碰亚洲97| 亚洲色啪| 色综合色色| 怡红院一区二区熟女人妻| 2018天天干在线视频| 啪啪啪东京| 色九九久九九| 99精品九九九九九九| 狠狠干妹子| 九9热伊人| 黄色一区三区| 色香网| 人妻夜爽夜夜爽| 囯产精品强| 日本加勒比无码专区一二三| 淫纸中9区| 久久久久久久91| 九九五月天| 操一对老熟妇爽上天视频| 床戏久久久av一区二区麻豆| 九九九久久久W精品| 91痴汉| 久操电影网| 超碰97国产欧美| 精品人妻丰满熟妇一区二区三| 亚洲人妻精品一区二区| 秋霞Av理论一级在线| 99精品国产户外露出| 精品国产av一区二区三区四区入口 | 18禁精品网站在线看| 在线综合色| 亚洲av无线观看| 静品嫩模一区二区| 东北女人的毛片| 青久久| 男女国产精品| 女欧美一区二三区| 黑人无码一区二区| 强上我不卡卡| 欧美在线综合| 小视频国产| 人妻熟女av国产网站| 激情五月综合网| 成人综合色网| 亚洲精品黑丝| 强奸乱伦 亚洲一区| 99精品视频在线观看免费| 操操啪| 色999偷自拍拍| 超碰97导航| 人人爱人人乐人人操| 久久久久国产精品喷潮免费观看臀| 九九RE视频在线精品| 玖玖蜜臀资源网| 中文字幕诱惑制服人妻丝袜美丝袜美| 欧美乱伦专区| 久久HD| 午夜福利在线视频1000| 欧美不卡五十路| 夜夜影视四色| 日日橹狠狠爱欧美超碰| 日韩精品资源专区二区| 综合激情五月丁香| 加勒比综合a∨| 久久久久久精| 亚洲午夜AV| 伊人国产视频| a亚洲欧美色欲| 亚洲国产日韩欧美熟妇在线| 夜夜高潮夜夜爽国产伦精品| 日本一区二区成人在线| 美女裸体麻豆天美蜜桃91| 人妻精品一区二区| www网站黄| 天美欧美国产| 手机在线A片| 久草综合京东| 亚洲本色精品一区二区久久| 午夜免费视频1000| 久久精品国产97欧美精品亚洲 | 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 五月色综合| 色五月AV在线| 黄片无码在线制服| 一级黄碟| 蜜乳AV一区二区三区四| 久久久久久久六六| 嫩草影院在线观看精品 | 久久9精品视频| AV九九| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 韩三级a视频在线观看 | 97se亚洲| 黄污污污污| 午夜九九| 欧美精品二区视频在线| 人妻在线臀日韩| 啊啊啊好多水| 国产suv精品一区二区四| 国产精品美女久久久久久网站| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 久久久久久久人妻| 久久这里只有精品9| 无码免费一区二区三区啪啪| 91天堂| 国色天香av| 女人综合网| 台欧久久精品视频| 婷婷在线视频在线观看| 天堂亚洲精品久久老牛| 久久激情视频| a片在线播放| 伊人丝袜美腿高跟在线观看高清| 欧美不卡二区| 久久精品无码专区| 国产午夜福利视频在线| 性色av蜜臀av色欲aV| 久久妇| 亚洲天堂 视频你懂的| 亚洲春色欧美| 天天综合香 ld视频| 日韩高清黄片| 久操免费电影| 日本啊啊啊啊啊视频| 国产欧美精选自拍一区| 99久久久| 久久精品一区| 90后性网国产欧美| 亚洲无线观看久久| 变态另类专区| #NAME?| 欧洲特黄毛片免费看欧洲毛片| 老熟女熟妇| 欧美性巨大╳╳╳╳╳高跟鞋| 日韩97超碰| 狠狠干精品一二三四五六2022| 精品亚洲国产成人精品| 99久久国产精品免费高潮| 欧美91久久久久| 91女在线观看| 黄色av一区二区在线| 天天日天天操天天射河南省| 人妻美腿丝袜日韩| av亚洲天堂资源网站| www.久久久久| 欧美一区二区福利在线| 欧美综合自拍| 黄色成年| 爱丝福利| 劲爆欧美人妖三区91| 亚洲夜色在线| 狠狠五月天| 不卡一区二区日本视频| 夜夜操美女| 啊啊啊免费视频| 加勒比av网| 国产亚洲色婷婷99精品91| 美女尤物福利视频| 六月婷婷五月丁香| 思思热免费视频观看| 操操操五月天婷婷丁香影院| 秋霞 色色| 大香蕉狠狠爱| 18精品一二区| 国产熟女自拍| 久久亚洲日韩国产欧| 超碰地址97| 快点操死我| 98一区二区精品| 在线观看国产黄色| 免费视频a级毛片免费视频| 高清国产性猛交xxxx乱大交| 久久中文字幕一区不卡| 国产黄色剧情影片麻豆免费播放| 亚洲91在线| 欧美激情区| 九九热只有精品| 99re在线视频这里只有精品| 久久人妻少妇| 南澳成人一级片在线播放| 男人的天堂三级| 久久久久久久9最新免费视频观看| 亚洲少妇在线影音| 亚洲的天堂网| 午夜久久久| 日本国产二线女色| 好属操| 亚洲色图一区二区三区| 丰满少妇一区二区三区免费看| 大鸡巴久久| 国产熟女无套内射| 亚欧高清| 无码操逼网| 亚洲强奸乱伦影视网| 国产 亚洲 丝袜 制服| 一本一道vs波多野结衣| 久久9视频| 激情第四色| 久久人人妻| 欧美另类自拍| 天天久久久久久| 蜜臀久久久99久久久久| 黄片国产精品一区二区| 强免费黄色网址| 亚洲熟妇自偷自拍另欧美| 日本不卡码黄色| 中国黄色特级精品一区二区三区片| 97精品视频在线播放| 精品人妻av区天天看片| 蜜乳AV免费观看| 爽极品影院| 亚洲欧美国产中文视频| 欧美aaaaaaa| 国产精品亚洲免费| 99爱久久视频频| 人妻熟女一区二区| 97在线视频免费| 美女写真| 97久久超碰国产网站| 久久久免费视频18| 国产丝袜美女在线一区| 国产免费一区二区在线A片视频| 亚洲国产精品久久久久婷婷青年| 伊人午夜福利视频| 国产三级在线现体验区| 欧美激情综合| 美女网站黄页| 日韩一级性爱无码| 综合色图亚洲欧美| 亚洲女优有码无码高清| 国产av波波国产精品| 亚洲色图在线视频| 欧美亚洲韩国视频十五区 | 亚洲欧洲国产综合av| 啊嗯好大视频在线观看| 深夜视频| www.久久久久| 亚洲图片偷拍欧美| 思思热免费在线视频| 欧美九九爱| 亚洲天在线| 能在线播放的国产三级| 久久爽爽精品| 无码人妻精品一区二区三区99不卡| 色婷五月| 骚熟女AV网| 无码人妻丰满热妇又大又粗| 91久久久老司机| 亚洲不卡三级手机播放| 少妇免费视频| 久久久一区二区三区四区五区| www色日本| 欧美第二页午夜| 在线一道啪| 91精品丝袜久久久久久无码人妻| 精品一区二区国产日韩| 超碰人妻久久人妻中文97| 欧亚日韩一区在线| 强奸少妇AV导航网| 懂色Av| 欧美熟爽综合| 97亚洲欧美| 亚洲情色91| 欧美在线91| 男人的天堂2019AV| 精品久久久久久中文字幕视频免费| 免费观看欧美日韩操逼视频| 天天做天天爱| 中文高清一区二区的| 精品国产乱码久久久久久蜜臀| 五月天婷婷基地| 熟妇人妻丰满久久久久久久无码| 骚逼高潮久久精品| 天天看天天日| 国产美女精品| 国产美女mm131爽爽爽爽| 污电影在线观看| 黄片在线免费在线观看| 天堂综合网| 欧美一区二区在线资源| 强奸国产精品视频| 天天情欲宗合网| 亚洲日韩成人性爱视频| 欧美激情内射| 国产欧美美女免费观看视频| 18禁止看精品中文字幕| 亚州色图片在线色| 91啪啪视频| 屁股久久久久久久久久| 伊人国产视频| 亚洲各类熟们中文字幕| 中文字幕蜜乳av| 歐美性天天| 欧美日韩操逼嗦吊| 91情色| 试看福利| 99热这里只有精品99| 91久久久亚洲| 欧美在线|亚洲| 日韩pv中文| 久久成人午夜精品影院 | 国产精品又黄又猛又粗| 色臀aV| 人妻天堂综合网| 欧美性爱无码一区二区三区| 欧美宗合网| 美国久久一二三四| 婷婷性爱| 欧美性爱1080p| 天天伊人| 中文字幕欧洲有码| 啊啊啊啊啊在线视频| 熟女人妻一区二区三区| 欧美片第一页| 青青五月天| 97爱b| 91天天日| 精品一区二区久久| 亚洲日韩AV视色| 操我无码| 欧美一区二区三区入口| 免费AV中文网在线观看| 久久97视频| 狠色婷婷久久一区二区三区_| 久久久久骚| 激情五月天视频| 岛国大片在线观看网站入口| 无遮挡男女激烈动态图| 亚洲中文字幕一区二区| 久久久精品视频欧州站| 久久久久元码视频| 久久色一区二区| 毛片中心9视频99| 开心五月激情网| 精品黑人一区二区| 久久九九视频九九视频| 久久亚洲欧美中文字幕国语| 成人精品在线免费视频| 欧美在线啊啊| 男人的天堂免费| 99热这里都是精品| 青青草原av| 97在线观看免费| 九99久久| 白嫩91在线亚洲| 91老熟女91老女人| 97资源站久久| 综合天天。| 天海翼久久| 亚洲精品蜜桃久久久久久久| 中美日韩毛片| 亚洲国产一级中文综合久久天堂在线免费观看| 盗摄 精品 另类 一区| 久草五月| 久久人妻办公室视频| 亚洲无码99| 婷婷六月天| 精品一区二区3区| 校园春色 男人天堂| 天天添天天干电影| 精品久久久久瑟瑟| 亚洲AV不卡在线观看尤物| 中文字幕日韩人妻视频一区二区三区交换夫妻| 伊人一区二区三区| 综合网亚洲1| 亚洲成人AB| 色香欲综合| AAAA级日本片免费视频| 欧 美 自 拍 偷 拍| 亚洲成人av电影在线| 8050午夜少妇无码| 亚洲日韩一区电影| 黄色小说亚洲| 亚洲中亚日激情视频| 中文字幕青青草| 人妻夜夜爽天天爽三区麻豆AV网站| 四虎国产精品永久在线囯在线| 偷拍三区| 色色五月婷婷| 99精品热| 久草毛片| 精品国模无码| 日韩乱插| 国产性刺激| 超碰一区二区| 天天日天天操天天射河南省| 国产精品自拍欧美在线| 99色悠悠| 自拍视频一区在线观看| 激情综合五| 97欧美精品综合| 黑人粗大V S日韩女优视频| 男女啊啊啊| 小日子操bb在线看| 丁香六月综合激情| 大乔未久88一区| 天天肏天天干| 久操视频资源站公开| AV天天综合| 日夜尻逼网| 另类图片欧美激情综合| 国产激情久久久| 伊人991| 中文久久| 五月丁香激情综合网| 狠狠图片青青草| 天美传媒婬乱在| 国产精品自在线发布| WWW4虎| 麻豆色99999| 强奸乱伦大香蕉| 日本一区二区三区精品| 日日骚一区二区三区| 丰满人妻一区二区三区四区| 艳美熟妇先锋一二三区| 天天色综合影视网| 久久精品国产亚洲AV片多多| 四虎免费看黄| 熟妇综合一区二区三区| 日本99热| 狠久久| 亚洲中文字母在线播放| a片亚洲一本通视频| 亚洲伊人久久综合97| 伊人影院中文字幕| 亚洲资源站| 丁香五月综合| 欧美综合网站999| 无码高清专| 偷拍五区| 中国乱伦一区二区| 人妻激情在线视频| 日韩人妻 中文字幕| 老司机久久| 国产日韩在线播放av| 欧美性爱一内片一区二区三区| 精品视频一二三中文| 91啪啪| 91色欧美| 午夜免费视频1000| 免费成人自拍视频在线| 欧美三级一级| 亚洲国产成人7777| 激情综合av| 精品久久久久av影院| 青青欧美| 日本精品高清一二区一本到| 欧美日韩不卡传媒| 九九热在线视频| 屁股久久久久久| 亚洲免费精品一区| 欧美一区二区三区四区综合| 久久精品人妻一区二区| 亚洲一区二区性爱电影| 97亚洲自在精品在线观看| 综合色啪| 97久久久久| 狠狠操夜夜操蜜桃视频三区| 中文乱码字幕观看| 精品一区二区三区最新| 黄色片,com| 国内外毛片在线观看| 五月综合色| 国产内射爽爽大片| 嗯嗯啊好大| 中文字幕123| 欧美草草高清日韩视频| 无码免费一区二区三区啪啪| 日韩精品资源专区二区| 亚洲性图91| 日韩AV熟女乱伦| 欧美色图亚洲激情| 久久鲁夜| 久久草在线综合视频| 97亚洲在线| m欧洲一级午老| 欧美黄色大香蕉一区二区| 国产精品播放| 欧美一级专区免费大片| 五月丁香六月激情| 丰满人妻一区二区三区性色| 欧美精品亚洲精品日韩传电影| 大香蕉啪啪啪| 亚欧免费| 久久久性爱| 精品久久大胆人体| 农村妇女一级二级三级视频| 国产又色又粗又黄又爽| 国产精品夜夜夜| 国产av青草| av一区二区三区 中文| 天天视频黄| 日韩AV噜噜噜一区二区三区四区| 2025亚洲男人天堂| 九九综合色| 人人看欧美性爱| 日韩大香蕉| 久久久神马影院| 成人综合视频久久| 亚洲综合97中文网| 中日高清无码操逼视频| 啪啪视频亚洲第一| 亚洲人成在线放东京热| 亚洲成人在线乱码色午夜| 亚洲吊色| 天天综合网91入口| 欧美日韩超碰在线| 色狠狠综合| 久久久无码av精| 无码 黑人一区二区三区| 97精品免费| 91亚洲网站| 日韩Va亚洲va欧美Ⅴa久久| 九月伊人中文字幕| 怡春院久久| 亚洲清纯唯美| 美美91成人国产精品欧美精品久久久久久久| 丝袜 亚洲 偷拍| 不卡免费av在线播放| 免费精品中文字幕| A级毛片在线看免费| 亚洲情色综合| 欧美性暴力| 91欧美网| 男人天堂2030| 久久啊啊| 另类图片天天影视| 日日摸天天爽夜夜欢| 欧美精品庄| 午夜九九九九九九| 伊人麻豆传媒| 国产97视频| 成人久久久| 97超碰中文在线| 欧美色999| 日韩国产精品人妻无码久久久| 欧美日韩中文字幕人妻| 欧美日韩在线小说 | 超碰 另类 欧美| 黄色成品网站| 久久只有精品一区二区三区| 国产性刺激| 久久久国产精品人妻丝袜| 91电影色诱| 欧美大战久久久伊人| 91爱欧美| 高精欧美色| 欧美色偷偷| 亚洲国产精品无码AV久久久| 国产女人高潮嗷嗷嗷叫小说 | 亚洲丝袜色图| 情色五月天网| 日本熟妇自慰性高潮一区二区三区| 天天爱综合网| 色色九区| 欧美真人抽搐一进一出gif| 无码外流操逼视频| 97欧美性爱| 日本久久99| 极品粉嫩一区二区| 国产第二页| 综合亚洲网| 天天插网| 日韩人妻播放| a久久| 安徽熟妇视频| 91操人| 婷婷五月丁香五月| 国产传媒美日韩av| 欧美综合亚洲| 亚洲色欧美| 久久精品高清AV| 六月婷婷激情| 一区,二区,三区视频| 99精品综合久久久久五月天| 免费观看一区| 少妇高潮对白在线观看| 久久精品小视频| 色婷婷淫色网| 狠狠91| 中国国国产一级特黄毛片| 一品道视频一区二区三区| 91精品国久久久久久无码| 大逼色网站| 97在线精品观看视频| 日韩人妻大香蕉| 欧美在线视频播放| 色婷婷国产精品一区在线观看| 在线观看色视频| 久久秀这里有精品| 97超色| 第四色奇米影视777| 五月天婷婷小说| 97视频www| 3PAV乱伦视频| 五月婷婷影院| 伊人午夜福利视频| 成人性爱AV在线免费观看| 色九月| 97视频在线视频| 日本精品一级二级三级| 色婷婷狠狠| 91九色首页| 亚洲精品国产专区在线观看| 91精品无码久久久久久久| 福利视频一区二区微拍| 欧美美女自慰一区二区三区| 欧美成人精品一区二区男人蜜臀| 久久久久亚洲Av无码专区老牛影视| 爆操无码| 天美欧美国产| 久久久性| 九九亚洲| 国产蜜臀精品一区二区尤物| 五月丁香拍拍激情综合三级| 免费9 1久久| 精品福利| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 一,爱啪啪,在线免费视频| 刺激性视频黄页| 色香欲综合| 亚洲AV免费在线| 麻豆a'v电影| 亚洲导航深夜福利| 天天综合网入口~91| 91国产操逼视频| 人妻加勒比东京热| 久草新在线| 日韩三级一区 | 超碰97玖玖爱| 免费看黄片现成| 夜夜高潮夜夜爽| 美女裸体无遮挡永久免费观看网站| 亚洲天堂中文字幕无码男同| 欧美日韩传媒| 久久禁| 久久精品高清AV| 豆1无夜无码| 欧美极度丰满熟妇hd| 视频黄站| 六月丁香久久| 91亚洲欧洲| 亚洲91亚洲| 成人免费看吃奶视频网站| 美欧老女人97| 久久‘黄片视频| 自拍啪啪视频| 五月丁香六月激情| 东京热一区二区中文字幕| 亚洲色图a| 国产精品69人妻无码久久久| 午夜操操操| 亚洲 91 在线| 久久日韩精品一区二区| 人妻内射一区二区在线视频| 中文字幕成人理论在线| 欧美日韩亚洲少妇寂寞影院正在播放 | 特污免视频| 国产亚洲性生活视频播放| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 中文字幕 国产 精品 | 中文字幕在线播放2中文字幕在线观看2| 96精品久久| 自拍丝袜美腿人妻| 黄色欧美性爱视频| 男人久久天堂| 极品后入免费视频| 日韩999| 亚欧高清| 亚洲脚交| 桃色六月天| 一区三区啪啪| 亚洲av性爱电影| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 久干网| 五月天综合在线| 日韩无码视频黄色| 久草色在线观看| 亚洲美欧999| 日韩无码专区| 午夜乱轮操逼视频免费看| 国产中文字幕在线| 另类av天堂| 久久国产视频性吧 | 99无码视频| 亚洲精品三区在线观看| 久久激情网| 四虎国产精品永久地址入口| 2020中文字幕在线观看| 极品色电影院| 国产农村妇女精品1区二区| 久久露脸国产老熟女| 欧美偷拍区| 91青青草| 97中文字幕一区| 久草男人天堂| 日日夜夜骚| 午夜大香蕉| 亚洲高清无码在线桃色| 麻豆国产97在线| 久久久久久999| 偷拍片久久| 色情亚洲日本成人| 激情四射婷婷四五月天| 亚洲日本韩国在线| 亚洲最大成人a毛毛片| 内射夫妻三片| 国产品精品自在在线午夜免费| 日本幼女18+| 精品美女人人干| 日韩78m视频| 欧美综合第一| 日本精品人妻少妇一区二区| 一区二区你上我| 天天色播| 综合激情婷婷| 久9热| 亚洲福利中文字幕在线| yellow网站免费观看日韩高清无码| 天天草天天日| 东京热天堂网| 欧美日韩97| 久久久久久九| 91操熟女| 日本精品一区二区三区四区的功能| 99re久久| 亚洲欧美伦综合| 99re久久| 久久久久九九九| 亚洲在线欧美| 国产精品视频内谢女人| 一区在线精品中文字幕| 97国产人人| 亚洲婷婷综合网| 乱伦熟女专区| 福利操逼| 强奸乱伦资源| 亚洲精品成人激情在线| 桃花色涩综合影院| 可以免费观看的AV| 久久精品欧美一区蜜桃| 色女网日韩| 色天使大香蕉| 使劲用力艹少妇视频一区二区| 91老熟女老女人国产老太| 日本熟妇色熟妇在线视频播放| 欧美日本不卡| 人妻激情视频| 91精片| 中文字幕日韩电影人妻| 日韩欧美午夜视频在线| 色色色99| 老熟女91av| 欧美日韩亚洲五月天婷婷| 久久是精品| 亚洲狠| 波多野结衣AV无码一区| 欧美不卡二区| 午夜一区| av婷婷色网| 久噜噜| 青青草大香蕉视频| 天天视频黄| 老女人碰碰在线碰碰视频| 碰人碰碰人人开房人肉| 激情欧美97| 韩三级a视频在线观看| 夜色AV无码手机在线影院| 日韩人妻少妇 一区二区三区| 欧美专利1区2区3区4区5区免费| 精品999日本| 97操b| 日本一区视频在线观看| 六月丁香啪啪| 99精品网站| 精品国产乱码久久久| 精品美女久久久久| 狼人久草| 中文幕97| 国产精品国产精品国产| 性久久| 国语人妻精彩刺激| 大香蕉92| 手机看片91人妻| 亚洲AV无码乱码在线观看性色| 大香蕉伊人网WWWn0n| 成人日本片久久久蜜桃| 亚洲天堂五月天国产| 亚洲黄色影视| 2026国产精品视频| 国产强奸乱伦无码视频| 欧美日韩第一页| 中文字幕97色| 呦呦一区| 久久99综合| 亚洲色情在线影视| 欧美精品精品一区二区| 成人日韩欧美| 婷婷久草| 天天色天天干天天爱| 中文伊人大香蕉视频| 国产精品另类一区大香蕉| 久久久精品电影| 日本有码久久| 色97欧美| 久久鲁干| 黑人与人妻| 最新av网站在线观看| 久热伊人99re| 丰满人妻一区二区三区免费 | 91精品国久久久久久无码| 亚洲欧美另类激情小说| 久久婷综合| 国产日产欧产美韩系列麻豆免费| 国产一区自拍欧美日韩| 蜜桃中文字日产乱幕4区| 亚州男人天堂| 婷婷五月影院| 精品国产乱码久久久| 综合自拍| 视频在线观看青青99国产| 东北丰满熟女国产一区| 91夜夜蜜桃臀1区2区3区| 国产1024在线播放| 天天看片天天爽| 色婷婷国产精品一区在线观看| 爽爽淫人网| 综合第一页| 超碰三级秋霞| 亚洲AV无码乱码| 麻豆精品久久久久久久| 日本精品五区| 91人妻超碰| 日韩欧美性爱电影在线观看| 人妻精品综合中文字幕在线 | 日韩操呦呦影院在线观看| 日韩黄片影院| 亚熟hd视频在线| 亚洲日韩美女中文字幕乱| 国产丸一视频| 亚洲国产无码精品首页久久久| 久久精品国产97欧美精品亚洲 | 欧美一区二区三区不卡高清视频| 91久久国产综合久久| 久久大黄片| 欧美曰韩国产精品| 日本欧美一区二区三区免费| 国产外初女出血视频| 婷婷伊人网| 亚洲少妇在线观看| 乱理日韩中文| 亚洲第一黄色av网站| 天天日天天干天天摸天天操| 色色国产| 综合伊人激情| 操91| 五月婷婷激情综合| 亚洲国产一级黄色视频| 欧美国产成人在线| 亚洲图片偷拍视频区| 人人操人人摸超碰| 91麻豆天美传媒HD| 人人摸人人干人人拍97| 亚洲高清色综合| 大香蕉十区| 亚洲操逼视频网站| 97超碰色色| 色制服丝袜夫妻av一区| 国内精品伊人久久久久影院会| 亚洲天堂2020| 亚洲国内精品成人不卡| 五月丁香大香蕉| 国产精品99精品视频网站| 啊啊啊啊在线播放| 天天综合色电影| 欧美一级久久久久久久大片动画| 欧美性第1页| 欧美日本久久精品一区| 国产精品免费视频人成| 男女啪啪网站免费视频| 日本精品九九九| 大香蕉色十月| 51一区二区三区| 91老熟女| 夜夜嗨一区二区三区三州加勒比 | 久九九九九九九九热| 中文字幕乱码人妻一区二区三区,99精品| 亚洲AV无线| 蜜臀一区二区三区在线 | 蜜乳性色无码专日粉嫩骚逼AV| 亚洲成人ab| 欧美色综合图片| 五月天春色激情网| 日韩中文字幕在线视频观看| 欧美不卡在线一区二区| 这里都是精品| 日韩欧美水蜜桃人妻| 天天综合网国产| 久久久久久国产无码精品| 国产免费黄色一级大片| 97精品人妻一二三四| 久久久久久久久久久久黄色 | av凤凰久久久| 国产成人无码a| 亚洲情欲| 99999国产| 日本一级不卡一二区| 九九亚洲精品| 青青操97| 野狼激情网| 九九久久99| 亚洲第一成人影院色播| 看大黄色大片原件| 国产一区二区免费福利片| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 日日天天久久啊啊aaa| 亚洲男人的天堂亚洲| 亚洲日韩成人性爱视频| 亚洲无码免费看| 国产美女销魂在线观看不卡| 国产一国产一级毛片古装| 久久久性爱| 婷婷丁香人妻 | 久久亚洲一区二区色婷婷| 69丨亚洲丨精品丨入口免费播放| 农村妇女一级二级三级视频| 东北操逼| 日韩欧亚中文在线| 国产高清不卡视频| 欧美日韩人人精品| 麻豆蜜桃视频在线观看| 久久久一级| 青青草日韩无码| 激情文学网伊人| 成人夜夜爽| 人妻久热在线| 蜜臀av中字字幕网站| 欧美日韩国产中文精品字幕自在自线,| 婷婷丁香五月综合| 啊啊啊啊一区| 97亚洲综合电影| 人妻日日夜夜精品| 日韩av熟女一区二区三区成人| 欧美亚洲丝袜美女电影| 欧美日韩少妇色情| 嗯嗯啊好大|