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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3614|回復: 0
打印 上一主題 下一主題
收起左側

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

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

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


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

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


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

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

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



實驗目的:
點亮數碼管,并實時顯示程序運行的時間(秒)。

器材:
Stduino納米/ UNO; 4 位數碼管;杜邦線;面包板; 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;
   
}

實驗效果:




Stduino IDE是一款面向32位處理器快速入門學習的集成開發平臺,目前已經支持Arduino_Core_STM32框架,集聚快捷、高效、免費、開源、易得于一身,軟件還集成了GDB調試功能。IDE當前支持的功能有:

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

更多功能細節請點擊圖片上水印顯示的網址進行了解

已經支持的芯片&板型列表:

    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

更多功能集成正在進行中~


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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区久久久久 | 亚洲人成在线观看 | av中文字幕在线观看 | 精品视频一区二区三区在线观看 | 99九九视频 | 国产九九九九 | 中国美女一级黄色片 | 国产精品一区二区久久 | 国产一区二区三区在线看 | 日韩成人在线播放 | 在线观看国产视频 | 在线一区视频 | 伊人导航| 国产精品久久久久久久7电影 | 欧美在线一区二区视频 | 超碰人人在线 | 亚洲一区二区精品视频 | 在线国产一区二区 | 欧美一级欧美三级在线观看 | 久久精品女人天堂av | 在线视频一区二区三区 | 亚洲人成网亚洲欧洲无码 | 亚洲不卡在线观看 | 黄色一级大片在线免费看产 | 日韩亚洲视频 | 精品成人免费一区二区在线播放 | 操人视频在线观看 | 欧美一区在线视频 | 网站国产| 国产精品一区二区三区99 | 国产视频中文字幕 | 亚洲欧洲在线观看视频 | 精品国产乱码久久久久久88av | 国产精品精品久久久 | 中文字幕第100页 | 人人cao | 99精品观看 | 亚洲国产一区二区三区, | 亚洲一区国产精品 | 在线看片网站 | 九色国产 |