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

標題: 關于單片機數碼管動態顯示程序上的疑問 [打印本頁]

作者: fandongyang    時間: 2018-11-9 09:28
標題: 關于單片機數碼管動態顯示程序上的疑問
下面面這個是我在51hei論壇上看到的程序,我看了一下我有個疑問(1)當stopwatch=1的時候, LedNumbe[]這個數組是否除了LedNumbe[0]=1以外,其他LedNumbe[]是否都為0  ,假如是的話,請看問題2。(2)當stopwatch=1的時候,進入動態刷新,除了第一個數碼管能顯示1外 其他數碼管都會有顯示0,到最后的數碼管的效果就會變成這樣000001 000002 000003,而這個程序的效果應該是 1    2     3    4    5    6,就是多余位是不會顯示的0的。我現在疑問的是 我不知道自己所描述的疑問是否正確  

#include <reg52.h>               //包含寄存器的庫文件                  
sbit  ADDR0 = P1^0;
sbit  ADDR1 = P1^1;
sbit  ADDR2 = P1^2;
sbit  ADDR3 = P1^3;
sbit  ENLED = P1^4;
unsigned char code LedChar[] = {   //用數組來表示數碼管真值表
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
    0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e,
};
unsigned char LedNumber[6] = {0}; //定義全局變量
unsigned char j = 0;
unsigned int counter = 0;
void main()
{
    unsigned long stopwatch =0;
    ENLED = 0; ADDR3 = 1; P0 = 0XFF;   //74HC138P0初始化部分
    TMOD = 0x01;  //設置定時器0為模式1
    TH0  = 0xFC;
    TL0  = 0x67;  //定時值初值,定時1ms
    TR0  = 1;     //打開定時器0
    EA = 1;       //打開中中斷
    ET0 = 1;      //打開定時器0中斷
    while(1)
    {
        if(1000 == counter)     //判斷定時器0溢出是否達到1000
        {
            counter = 0;
            stopwatch++;
            LedNumber[0] = stopwatch%10;
            LedNumber[1] = stopwatch/10%10;
            LedNumber[2] = stopwatch/100%10;
            LedNumber[3] = stopwatch/1000%10;
            LedNumber[4] = stopwatch/10000%10;
            LedNumber[5] = stopwatch/100000%10;
        }
    }
}
void InterruptTimer0() interrupt 1               //中斷函數的特殊寫法,數字’1’為中斷入口號
{
    TH0 = 0xFC;   //溢出后進入中斷重新賦值
    TL0 = 0x67;
    counter++;   //計數值counter1
    P0 = 0xFF;   //消隱
    switch(j)
    {
        case 0: ADDR0=0; ADDR1=0; ADDR2=0; j++; P0=LedChar[LedNumber[0]]; break;
        case 1: ADDR0=1; ADDR1=0; ADDR2=0; j++; P0=LedChar[LedNumber[1]]; break;
        case 2: ADDR0=0; ADDR1=1; ADDR2=0; j++; P0=LedChar[LedNumber[2]]; break;
        case 3: ADDR0=1; ADDR1=1; ADDR2=0; j++; P0=LedChar[LedNumber[3]]; break;
        case 4: ADDR0=0; ADDR1=0; ADDR2=1; j++; P0=LedChar[LedNumber[4]]; break;
        case 5: ADDR0=1; ADDR1=0; ADDR2=1; j=0; P0=LedChar[LedNumber[5]]; break;
        default: break;
    }    //動態刷新
}   



作者: fandongyang    時間: 2018-11-12 19:50
有沒有人
作者: zhouwen    時間: 2018-11-13 11:34
(1)當stopwatch=1的時候, LedNumbe[]這個數組是否除了LedNumbe[0]=1以外,其他LedNumbe[]是否都為0  :
答:沒錯 當 stopwatch=1 時stopwatch/10 = 0,0%10 = 0,所以 LedNumber[1] = stopwatch/10%10 = 0 ;  
        
(2)當stopwatch=1的時候,進入動態刷新,除了第一個數碼管能顯示1外 其他數碼管都會有顯示0,到最后的數碼管的效果就會變成這樣000001 000002 000003,而這個程序的效果應該是 1    2     3    4    5    6,就是多余位是不會顯示的0的。
答:你的想法是對的
作者: zl2168    時間: 2018-11-14 08:27
4.2  LED數碼管動態顯示    實例56  PNP晶體管選通3位共陽LED數碼管動態顯示; 實例57  74LS139選通4位LED數碼管動態顯示 實例58  74LS138選通8位LED數碼管動態顯示 實例59  74LS595串行選通8位LED數碼管動態顯示 實例60  8255A擴展8位LED數碼管動態顯示 實例63  8155擴展8位LED數碼管動態顯示 實例64  MAX7221控制8位LED數碼管動態顯示    以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久亚洲国产精品日日av夜夜 | 国产视频1区 | 91在线资源 | 一区二区三区在线观看免费视频 | 日韩精品一区二区三区久久 | 精品伊人| 久久国产一区二区三区 | 亚洲欧美综合 | 日韩av成人 | 97超级碰碰 | 成人黄色电影在线播放 | 国产片侵犯亲女视频播放 | 激情在线视频网站 | 国产欧美一区二区三区久久 | 色婷婷av一区二区三区软件 | 精品国产乱码久久久久久丨区2区 | 欧美成人精品在线观看 | 国产精品揄拍一区二区 | 久久久精品亚洲 | 日韩精品在线一区 | 成人免费淫片aa视频免费 | 国产国拍亚洲精品av | 91麻豆精品国产91久久久久久久久 | 毛片网在线观看 | 久久99精品久久久久久国产越南 | 青青久视频 | 国产亚洲精品成人av久久ww | 欧美一区二区三区视频 | 一级毛片视频在线 | 日韩免费中文字幕 | 国产一级一片免费播放 | 日本精品久久久久久久 | www.亚洲一区二区 | 国产精品亚洲成在人线 | 成人午夜视频在线观看 | 日韩欧美国产一区二区三区 | 国产999精品久久久 日本视频一区二区三区 | 国内精品99 | 天天干夜夜操 | 日韩av一区二区在线 | 亚洲一区国产精品 |