娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

(8)趣味單片機新玩法-多個數碼管掃描顯示

發布者:Yuexiang666最新更新時間:2025-03-25 來源: jianshu關鍵字:數碼管  掃描顯示 手機看文章 掃描二維碼
隨時隨地手機看文章

我們先來看第一個效果,數碼管以秒計數顯示

動態效果圖



老套路,我們接下來進行分解,我們首先第一步就是讓每個數碼管都可控,不知道怎么使用74HC595的可以參考之前寫的文章

代碼

/* Main.ino file generated by New Project wizard

 *

 * Created:   周六 3月 20 2021

 * Processor: Arduino Uno

 * Compiler:  Arduino AVR (Proteus)

 */// Peripheral Configuration Code (do not edit)//---CONFIG_BEGIN---#pragma GCC push_options#pragma GCC optimize ('Os')#include // Required by cpu#include #pragma GCC pop_options// Peripheral ConstructorsCPU &cpu = Cpu;void peripheral_setup () {}void peripheral_loop() {}//---CONFIG_END---int STCP_Pin = 6;int SHCP_Pin = 4;int DS_Pin = 5; 


 char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void setup () {peripheral_setup();// TODO: put your setup code here, to run once:

    pinMode(STCP_Pin,OUTPUT);

    pinMode(SHCP_Pin,OUTPUT);

    pinMode(DS_Pin,OUTPUT);}void loop() {peripheral_loop();// TODO: put your main code here, to run repeatedly:


    digitalWrite(STCP_Pin,LOW); 

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xDF);

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[0]);

    digitalWrite(STCP_Pin,HIGH); 

    delay(500);



    digitalWrite(STCP_Pin,LOW); 

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xEF);

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[1]);

    digitalWrite(STCP_Pin,HIGH); 

    delay(500);


    digitalWrite(STCP_Pin,LOW); 

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xF7);

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[2]);

    digitalWrite(STCP_Pin,HIGH); 

    delay(500);


    digitalWrite(STCP_Pin,LOW); 

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFB);

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[3]);

    digitalWrite(STCP_Pin,HIGH); 

    delay(500);


    digitalWrite(STCP_Pin,LOW); 

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFD);

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[4]);

    digitalWrite(STCP_Pin,HIGH); 

    delay(500);


    digitalWrite(STCP_Pin,LOW); 

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFE);

    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[5]);

    digitalWrite(STCP_Pin,HIGH); 

    delay(500);}


我們接下來把速度提一提,延時改成50ms


感覺還是有點慢,我們再提點速度,改成10ms



但是,感覺顯示有點亂,我們嘗試在每個數碼管顯示過后給它關閉,在電視機鄰域有個專業的名詞叫消隱



    digitalWrite(STCP_Pin,LOW); 
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xDF);
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[0]);
    digitalWrite(STCP_Pin,HIGH); 
    delay(10);
    // 消隱
    digitalWrite(STCP_Pin,LOW); 
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);
    digitalWrite(STCP_Pin,HIGH); 
    delay(1);

我們再來看下效果,是不是沒有亂碼了,之前因為沒有關閉,由于人眼的余暉效應,會造成亂碼

然后我們稍微再提點速度≥50Hz的刷新率,6個數碼管,每個耗時3ms,這樣整個下來的總時間是18ms,基本上就不會看到閃爍。


    digitalWrite(STCP_Pin,LOW); 
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xDF);
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[0]);
    digitalWrite(STCP_Pin,HIGH); 
    delay(2);
    // 消隱
    digitalWrite(STCP_Pin,LOW); 
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);
    shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);
    digitalWrite(STCP_Pin,HIGH); 
    delay(1);

18ms刷新的效果,基本看不到閃爍的變化

文章開頭效果總代碼:




/* Main.ino file generated by New Project wizard

 *

 * Created:   周六 3月 20 2021

 * Processor: Arduino Uno

 * Compiler:  Arduino AVR (Proteus)

 */// Peripheral Configuration Code (do not edit)//---CONFIG_BEGIN---#pragma GCC push_options#pragma GCC optimize ('Os')#include // Required by cpu#include #pragma GCC pop_options// Peripheral ConstructorsCPU &cpu = Cpu;void peripheral_setup () {}void peripheral_loop() {}//---CONFIG_END---int STCP_Pin = 6;int SHCP_Pin = 4;int DS_Pin = 5; 


 char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void setup () {peripheral_setup();// TODO: put your setup code here, to run once:

    pinMode(STCP_Pin,OUTPUT);

    pinMode(SHCP_Pin,OUTPUT);

    pinMode(DS_Pin,OUTPUT);}int count = 0;int sec = 0;void loop() {peripheral_loop();


    count++;

    if(count>50)

    {

        count=0;

        sec++;

        if(sec>10)sec=0;

    }

    // TODO: put your main code here, to run repeatedly:


        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xDF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[sec]);

        digitalWrite(STCP_Pin,HIGH); 

        delay(2);

        // 消隱

        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);

        digitalWrite(STCP_Pin,HIGH); 

        delay(1);



        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xEF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[sec]);

        digitalWrite(STCP_Pin,HIGH); 

        delay(2);

        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);

        digitalWrite(STCP_Pin,HIGH); 

        delay(1);


        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xF7);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[sec]);

        digitalWrite(STCP_Pin,HIGH); 

        delay(2);

        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);

        digitalWrite(STCP_Pin,HIGH); 

        delay(1);


        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFB);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[sec]);

        digitalWrite(STCP_Pin,HIGH); 

        delay(2);

        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);

        digitalWrite(STCP_Pin,HIGH); 

        delay(1);


        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFD);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[sec]);

        digitalWrite(STCP_Pin,HIGH); 

        delay(2);

        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);

        digitalWrite(STCP_Pin,HIGH); 

        delay(1);


        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFE);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, table[sec]);

        digitalWrite(STCP_Pin,HIGH); 

        delay(2);

        digitalWrite(STCP_Pin,LOW); 

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0xFF);

        shiftOut(DS_Pin,SHCP_Pin,MSBFIRST, 0x00);

        digitalWrite(STCP_Pin,HIGH); 

        delay(1);}

總結

復雜的原理來自多年實驗的總結,同樣也來自生活實踐。


關鍵字:數碼管  掃描顯示 引用地址:(8)趣味單片機新玩法-多個數碼管掃描顯示

上一篇:(9)趣味單片機新玩法-單片機虛擬仿真軟件Proteus入門1
下一篇:(7)趣味單片機新玩法-認識不一樣的數碼管

推薦閱讀最新更新時間:2025-07-03 16:48

51單片機學習:動態數碼管實驗
實驗名稱:動態數碼管實驗 接線說明: 實驗現象:下載程序后“數碼管模塊”顯示01234567 注意事項: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //對系統默認數據類型進行重定義 typedef unsigned char u8; #define SMG_A_DP_PORT P0 //使用宏定義數碼管段碼口 //定義數碼管位選信號控制腳 sbit LSA=P2^2; sbit LSB=P2^3; sbit L
[單片機]
51單片機 獨立按鍵k1控制數碼管移位 k2控制數值加
按下獨立按鍵k1數碼管左移,按下獨立按鍵k2數碼管數值加1。 typedef unsigned char u8; u8 code smgwei ={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c}; u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit key1=P3^1; sbit key2=P3^0; u8 wei,shu; void delay(u16 i) { while(i--); } void button() { if(key1==0) { delay(1000);
[單片機]
51實驗8:數碼管最后三位顯示123
#include reg52.h typedef unsigned int u16; typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; void delay(u16 i) { while(i--); } u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79, 0x71}; void DigDisplay() { u8 i; for(i=5;i 8;i
[單片機]
BASCOM-AVR 驅動數碼管簡潔代碼
'''''''''''''''''''''' BASCOM-AVR 驅動一個數碼管顯示數字 0-9 下載附件查看原理圖 代碼 實物照片 ''''''''''''''''''''''''''''''''
[單片機]
BASCOM-AVR 驅動<font color='red'>數碼管</font>簡潔代碼
(5)單片機動態數碼管
#include reg52.h typedef unsigned char u8; typedef unsigned int u16; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 i) { while(i--); } void digdisplay() { u8 i; for (i=0;i 8;i++) { switc
[單片機]
avrstudio 5 同時點亮8只數碼管
avrstudio 5開發程序: 備注: 1.在proteus的里面可以導入elf文件,來實現也就是說不一定非要生成hex文件 2.關鍵點:是要消影子,這點在原來的書上是沒有的,可能是編書時的錯漏。 源代碼: /* * eight_led_return.c * Project: eight led * Created: 2011-3-25 12:23:09 * Author : xmphoenix.fish */ #include avr/io.h #include util/delay.h #define F_CPU 8000000UL //led light char const char table ={0x
[單片機]
avrstudio 5 同時點亮8只<font color='red'>數碼管</font>
數碼管動態靜態顯示原理
8段發光二極管連接有兩種結構:共陰極和共陽極。 8位數碼管字段碼為8位,從高位到低位的順序依次是dp、g、f、e、d、c、b、a。 例如共陰數碼管數字0的字段碼為00111111B(3FH) 共陰極:八段發光二極管的陰極端連接在一起,陽極端分開控制,使用時候公共端接地,要使哪個發光二極管亮,則對應的陽極端接高電平; 共陽極:八段發光二極管的陽極端連接在一起,陰極端分開控制,使用時候公共端接電源,要使哪個發光二極管亮,則對應的陰極端接低地。 靜態顯示方式: led靜態顯示時,其公共端接地(共陰極)或接電源(共陽極),各段選線分別與I/O口接線相連。要顯示字符,直接在I/O線發送相應的字段碼。 優點:靜態顯示結
[單片機]
51單片機數碼管顯示原理
一個數碼管有八段:A,B,C,D,E,F ,G,H即由八個發光二極管組成;發光二極管導通的方向是一定的(導通電壓一般取為1.7V),這八個發光二極管的公共端有兩種:可以分別接+5V(即為共陽極數碼管)或接地(即為共陰極數碼管) 共陽極: 位選為高電平(即1)選中數碼管, 各段選為低電平(即0接地時)選中各數碼段, 共陰極: 位選為低電平(即0)選中數碼管, 各段選為高電平(即1接+5V時)選中各數碼段。 1位數碼顯示數字其實就是這8個發光二極管,哪個亮哪個不亮,從而達到顯示數字的效果,亮和不亮無非就是0或1。以共陰極為例。 數碼管的段依次從低到高如圖中的a,b,c,d,e,f,g,h(h是小數點),如果要顯示數字1,即b,
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 四川省| 德令哈市| 黄浦区| 靖边县| 梁平县| 尚义县| 永修县| 武鸣县| 威宁| 东山县| 波密县| 黄大仙区| 静乐县| 图们市| 台前县| 永宁县| 田林县| 南部县| 龙门县| 荆州市| 阳江市| 海南省| 新蔡县| 南陵县| 河津市| 莎车县| 巧家县| 衡阳市| 牡丹江市| 汤原县| 应用必备| 无锡市| 筠连县| 昌邑市| 阿巴嘎旗| 玉门市| 射洪县| 池州市| 新巴尔虎右旗| 余江县| 和田县|