久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3596|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

【基于STM32】Stduino-傳感器拓展(一)四位數(shù)碼管

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 Stduino 于 2020-8-22 17:20 編輯

從大部分開始,我們將介紹更多的電子元件。其中大多數(shù)大家可能并不熟悉,但是如果你把前面的 37 個(gè)傳感器都測(cè)試過了,這些對(duì)你來說不過是稍微復(fù)雜,繁瑣一些。
學(xué)習(xí)這些擴(kuò)展的電子元件,不需要從頭到尾學(xué)習(xí)一遍。就是在你需要用到它的時(shí)候,知道有這么個(gè)東西,然后再來看看就好。原理很簡(jiǎn)單,會(huì)用就行。
說明:
數(shù)碼管(七段顯示器)能夠顯示 0〜9 十個(gè)字符,生活中進(jìn)場(chǎng)在一些只需要顯示數(shù)字的地方出現(xiàn),例如電子秤,食堂刷卡終端,電梯樓層顯示等等。數(shù)碼管有多種型號(hào),其中顯示4 位數(shù)的為四位數(shù)碼管。


在講解四位數(shù)碼管之前,我們先介紹一位數(shù)碼管,也是最簡(jiǎn)單的一種。如下圖:

一位數(shù)碼管的數(shù)字共有七段,每一段實(shí)際是一獨(dú)立的 LED ,因此數(shù)碼管也被稱為七段數(shù)碼管。通過控制LED 輸入的高低電平控制亮滅,從而變化出0〜9 9 個(gè)字符(如下圖)。


共陽極,即七段 LED 公共同一個(gè)陽極,那么通過控制每一段是否接地來控制亮滅(接地,則電路導(dǎo)通,點(diǎn)亮;反之交替)。共波長(zhǎng),即七段LED 共享同一個(gè)波導(dǎo)接地,然后通過控制每一段輸入的高電平控制亮滅(如下圖)。

有一些數(shù)碼管帶有 IC ,能夠通過集成電路進(jìn)行控制。但是這個(gè)數(shù)碼管比較原始,一個(gè)七段數(shù)碼管需要更長(zhǎng)的IO 口,需要我們自己手動(dòng)寫每個(gè)一個(gè)字符的高配置。
四位數(shù)碼管就是集合了四個(gè)單位的數(shù)碼管,其也包括共陰型與共陽型兩種。我們知道七段數(shù)碼管需要插孔 IO 口,四位數(shù)碼管每個(gè)數(shù)碼管的數(shù)字不同,那么就需要進(jìn)行單獨(dú)控制。所以應(yīng)該需要32 個(gè)IO 口,顯然這會(huì)占用過多的端口。

實(shí)際,四位數(shù)碼管每只有一個(gè)數(shù)碼管顯示字形,其他三個(gè)數(shù)碼管斷電不顯示。四個(gè)數(shù)碼管依次循環(huán)顯示,當(dāng)頻率足夠大時(shí),人眼由于視覺殘留的緣故,就會(huì)覺得四個(gè)數(shù)碼管是同時(shí)點(diǎn)亮的,看到連續(xù)的顯示效果。這就好像,,每個(gè)幀都是不同的,但是播放的速度足夠快( 24 幀每秒),人眼就會(huì)覺得畫面動(dòng)起來了。
這樣,四位數(shù)碼管只需要連接 12 個(gè)插座。其中有時(shí)用來控制單位數(shù)碼管的8 個(gè)LED ,稱為段碼;另外四個(gè)用來控制選擇點(diǎn)亮和熄滅的數(shù)碼管(每次只有一個(gè)點(diǎn)亮)。



實(shí)驗(yàn)?zāi)康模?/strong>
點(diǎn)亮數(shù)碼管,并實(shí)時(shí)顯示程序運(yùn)行的時(shí)間(秒)。

器材:
Stduino納米/ UNO; 4 位數(shù)碼管;杜邦線;面包板; 220 Ω電阻

電路連接:


代碼展示:
int second = 0;
void setup()
{
  // put your setup code here, to run once:
    pinMode(1,OUTPUT);//A
    pinMode(2,OUTPUT);//B
    pinMode(3,OUTPUT);//C
    pinMode(4,OUTPUT);//D
    pinMode(5,OUTPUT);//E
    pinMode(6,OUTPUT);//F
    pinMode(7,OUTPUT);//G
    pinMode(8,OUTPUT);//DP
   
    pinMode(19,OUTPUT);//1
    pinMode(18,OUTPUT);//2
    pinMode(17,OUTPUT);//3
    pinMode(16,OUTPUT);//4
   
   
    digitalWrite(19,LOW);
    digitalWrite(18,LOW);
    digitalWrite(17,LOW);
    digitalWrite(16,LOW);

}


//void SevSegInit()
void showNum(int num, bool point=false)
    {   if(point)
        {
            digitalWrite(8,HIGH);//DP,TRUE
        }else{
            digitalWrite(8,LOW);//DP,FALSE
            }
        switch(num)
        {
            case 0:
                digitalWrite(1,HIGH);
                digitalWrite(2,HIGH);
                digitalWrite(3,HIGH);
                digitalWrite(4,HIGH);
                digitalWrite(5,HIGH);
                digitalWrite(6,HIGH);
                digitalWrite(7,LOW);
                break;
               
            case 1:
                digitalWrite(1,LOW);
                digitalWrite(2,HIGH);
                digitalWrite(3,HIGH);
                digitalWrite(4,LOW);
                digitalWrite(5,LOW);
                digitalWrite(6,LOW);
                digitalWrite(7,LOW);
                break;
               
            case 2:
                  //2
                digitalWrite(1,HIGH);//A
                digitalWrite(2,HIGH);//B
                digitalWrite(3,LOW);//C
                digitalWrite(4,HIGH);//D
                digitalWrite(5,HIGH);//E
                digitalWrite(6,LOW);//F
                digitalWrite(7,HIGH);//G
                break;
               
            case 3:
                  //3
                digitalWrite(1,HIGH);//A
                digitalWrite(2,HIGH);//B
                digitalWrite(3,HIGH);//C
                digitalWrite(4,HIGH);//D
                digitalWrite(5,LOW);//E
                digitalWrite(6,LOW);//F
                digitalWrite(7,HIGH);//G

        
                break;
               
            case 4:
                digitalWrite(1,LOW);//A
                digitalWrite(2,HIGH);//B
                digitalWrite(3,HIGH);//C
                digitalWrite(4,LOW);//D
                digitalWrite(5,LOW);//E
                digitalWrite(6,HIGH);//F
                digitalWrite(7,HIGH);//G
                break;
               
            case 5:
                digitalWrite(1,HIGH);//A
                digitalWrite(2,LOW);//B
                digitalWrite(3,HIGH);//C
                digitalWrite(4,HIGH);//D
                digitalWrite(5,LOW);//E
                digitalWrite(6,HIGH);//F
                digitalWrite(7,HIGH);//G
                break;
            case 6:
                digitalWrite(1,HIGH);//A
                digitalWrite(2,LOW);//B
                digitalWrite(3,HIGH);//C
                digitalWrite(4,HIGH);//D
                digitalWrite(5,HIGH);//E
                digitalWrite(6,HIGH);//F
                digitalWrite(7,HIGH);//G
                break;
            case 7:
                digitalWrite(1,HIGH);//A
                digitalWrite(2,HIGH);//B
                digitalWrite(3,HIGH);//C
                digitalWrite(4,LOW);//D
                digitalWrite(5,LOW);//E
                digitalWrite(6,LOW);//F
                digitalWrite(7,LOW);//G
                break;
            case 8:
                digitalWrite(1,HIGH);//A
                digitalWrite(2,HIGH);//B
                digitalWrite(3,HIGH);//C
                digitalWrite(4,HIGH);//D
                digitalWrite(5,HIGH);//E
                digitalWrite(6,HIGH);//F
                digitalWrite(7,HIGH);//G
                break;
            case 9:
                digitalWrite(1,HIGH);//A
                digitalWrite(2,HIGH);//B
                digitalWrite(3,HIGH);//C
                digitalWrite(4,HIGH);//D
                digitalWrite(5,LOW);//E
                digitalWrite(6,HIGH);//F
                digitalWrite(7,HIGH);//G
                break;
        }
    }

void setNum(int num)
    {
        
        int d0=num%10;
        int d1=(num%100)/10;
        int d2=(num/100)%10;
        int d3=num/1000;
        
        
        int add=250;
        
        digitalWrite(19,LOW);
        for(int i=add;i--;i<0)
        {
        showNum(d3);
        }
        digitalWrite(19,HIGH);
        
        digitalWrite(18,LOW);
        for(int i=add;i--;i<0)
        {
        showNum(d2);
        }
        digitalWrite(18,HIGH);
        
        digitalWrite(17,LOW);
        for(int i=add;i--;i<0)
        {
        showNum(d1);
        }
        digitalWrite(17,HIGH);
        
        digitalWrite(16,LOW);
        for(int i=add;i--;i<0)
        {
        showNum(d0);
        }
        digitalWrite(16,HIGH);
        
    }
   
void loop()
{
  // put your main code here, to run repeatedly:
    setNum(second);
    second=millis()/1000;
   
}

實(shí)驗(yàn)效果:




Stduino IDE是一款面向32位處理器快速入門學(xué)習(xí)的集成開發(fā)平臺(tái),目前已經(jīng)支持Arduino_Core_STM32框架,集聚快捷、高效、免費(fèi)、開源、易得于一身,軟件還集成了GDB調(diào)試功能。IDE當(dāng)前支持的功能有:

    GDB調(diào)試
    封裝庫下載安裝
    代碼自動(dòng)補(bǔ)全提示
    中英文模式
    UTF-8\GBK編碼格式
    代碼快速格式化
    SWD\串口程序下載&調(diào)試(已驗(yàn)證)
    DFU程序下載方式(待驗(yàn)證)
    USB HID程序下載方式(待驗(yàn)證)
    maple DFU程序下載方式(待驗(yàn)證)
    maple DFU2程序下載方式(待驗(yàn)證)
    MassStorage程序下載方式(待驗(yàn)證)

更多功能細(xì)節(jié)請(qǐng)點(diǎn)擊圖片上水印顯示的網(wǎng)址進(jìn)行了解

已經(jīng)支持的芯片&板型列表:

    Stduino UNO&Nano
    Nucleo 144 boards
    Nucleo 64 boards
    Nucleo 32 boards
    Discovery boards
    Eval boards
    STM32MP1 series coprocessor boards
    Generic STM32F0 boards
    Generic STM32F1 boards
    Generic STM32F3 boards
    Generic STM32F4 boards
    Generic STM32H7 boards
    Generic STM32L0 boards
    3D printer boards
    LoRa boards
    Electronic Speed Controller boards
    Generic flight controllers
    Garatronics boards
    Midatronics boards

更多功能集成正在進(jìn)行中~


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级大片 | 亚洲第一天堂无码专区 | 免费看一区二区三区 | 波多野吉衣久久 | www.亚洲视频.com | 成人字幕网zmw | 国产精品高潮呻吟久久av野狼 | 亚洲日本欧美日韩高观看 | 午夜精品久久久久久久久久久久 | 超碰成人免费 | 羞羞视频在线观看免费观看 | 日日草夜夜草 | 欧美精品一区二区三区在线播放 | 久久亚洲二区 | 狠狠干狠狠操 | 国产日韩欧美二区 | 国产精品九九视频 | 91xxx在线观看| 久草视频2 | www.国产| 久久黄色| 日韩综合网 | 亚洲视频www | 亚洲一本 | 在线看av网址| 欧美看片| 97伦理最新伦理 | 中文字幕在线视频免费观看 | 一级片免费视频 | 日日骑| 黄网站涩免费蜜桃网站 | 亚洲精品美女视频 | 日韩电影一区二区三区 | 新超碰97 | 91久久精品国产91久久性色tv | 欧美日韩毛片 | 黄色免费三级 | 中文字幕免费视频 | 最新高清无码专区 | 黄色一级免费观看 | 日韩av成人在线 |