两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

在上一講代碼基礎(chǔ)上,根據(jù)常識,變量沒有到達10時,數(shù)碼管1和數(shù)碼管2應(yīng)該是不需要點亮的,也就是高位不顯示0。

 

1.代碼參考

筆者參考了宋老師的代碼,他的做法就是額外開辟出一個數(shù)組用來做緩存,P0去取這個數(shù)組里的值即可,初始化的時候如下

unsigned char LedBuff[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

然后各塊內(nèi)存用來存放對應(yīng)的數(shù)碼管顯示的狀態(tài)值,比如像上一講的代碼,我們這樣存放好:

LedBuff[0]= LedChar[Second%10];

LedBuff[1]= LedChar[(Second/10)%10];

LedBuff[2]= LedChar[(Second/100)%10];

到時賦給P0的值就是LedBuff[0],LedBuff[1],LedBuff[2]。像一開始LedBuff[1]和LedBuff[2]的值都是0xFF, Second沒到10時,

不執(zhí)行“LedBuff[1]= LedChar[(Second/10)%10]; ”,即使數(shù)碼管1已在允許被點亮狀態(tài),

但是由于“P0= LedBuff[1];(也就是P0= 0xFF;)”導致所有段的燈都無法點亮也就不顯示內(nèi)容了。

當然用額外的數(shù)組存放數(shù)碼管狀態(tài)值還有另一個好處,當我們學到后面的計分功能要這樣顯示時

數(shù)碼管3

中間要顯示非數(shù)字或字母時,給LedBuff[2]和LedBuff[3]提前賦值0xBF只點亮一段燈就在中間顯示一杠了。

現(xiàn)在我們實現(xiàn)上一講的功能但高位不顯示0。

 

2.代碼實現(xiàn)

#include <reg52.h> 
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;

unsigned char code LedChar[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//數(shù)碼管狀態(tài)值初始化
unsigned char LedBuff[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//數(shù)碼管顯示緩存區(qū)

void main()
{  
    unsigned int i=0,x;
    unsigned char Second=0;//定義一個一秒之后自增1的變量
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
  
    while(1)
    {   
        LedBuff[0]=LedChar[Second%10];   
        if(Second>=10)LedBuff[1]= LedChar[(Second/10)%10];  //Second沒到達10之前不更新LedBuff[1]的初始值
        if(Second>=100)LedBuff[2]= LedChar[(Second/100)%10];//Second沒到達100之前不更新LedBuff[2]的初始值
        if(Second==0){ LedBuff[1]=0xFF;LedBuff[2]=0XFF; }   //Second到達255之后再加1就溢出變?yōu)?了,這時候要再次熄滅這兩個數(shù)碼管
        for(x=0;x<32765;x++)//循環(huán)持續(xù)一定的時間
        { 
            P0=0xFF;//端口狀態(tài)全部熄滅數(shù)碼管里的LED達到刷新作用
            switch(i)
            {
                case 0:
                ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;P0=LedBuff[0];i++;break;
      
                case 1:
                ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;P0=LedBuff[1];i++;break;     
      
                case 2:
                ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P0=LedBuff[2];i=0;break;  
            }  
        } 
        Second++;//持續(xù)一定的時間之后變量自加1 
    }
}

筆者在修改for循環(huán)的x值時,軟件調(diào)試發(fā)現(xiàn)無法使Second準確地間隔1秒后自加,這里大家不用太糾結(jié)Second能否均勻的1秒后自加1,而是學會了本節(jié)想表達的知識點,后面我們也不會用到for循環(huán)來實現(xiàn)讓三八譯碼器間隔導通不同的三極管了,到時學會定時器知識內(nèi)容即可完美實現(xiàn)這方面的功能,筆者也是考慮到大家剛?cè)腴T需要多點基礎(chǔ)的例程代碼來熟悉單片機編程,所以才不會跨度太大地教大家新知識。

點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學奧賽或C++選手的 必學C++課程

藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導課程

Dotcpp在線編譯      (登錄可減少運行等待時間)