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

在上一講的代碼中幾個(gè)數(shù)碼管只能同時(shí)顯示相同的數(shù)字和字母,這一講我們實(shí)現(xiàn)同時(shí)3個(gè)數(shù)碼管點(diǎn)亮但每個(gè)數(shù)碼管顯示的數(shù)字都不一樣,所以我們做一個(gè)用來(lái)顯示一個(gè)變量一秒后自加1的顯示效果。

例如,此時(shí)時(shí)間過(guò)去了162秒

數(shù)碼管2


1.取余

先定義一個(gè)8位的變量Second,最多能計(jì)到255秒,所以我們只用到3個(gè)數(shù)碼管而已,這3個(gè)數(shù)碼管的顯示只能顯示0~9。

這里我們首先來(lái)了解一下取余。

162%10=2;

(162/10)%10=6;

(162/100)%10=1;

大家要知道Second是unsigned char無(wú)符號(hào)整型變量,比如當(dāng)Second等于169時(shí),(Second/10)是等于16的,后面的小數(shù)直接舍去,就算小數(shù)是9也照樣舍去,沒(méi)有四舍五入的說(shuō)法。

到這里我們也就不難理解,當(dāng)Second為162時(shí),分別讓3個(gè)數(shù)碼管顯示各自的位數(shù),數(shù)碼管2顯示百位數(shù)1,數(shù)碼管1顯示十位數(shù)6,數(shù)碼管0顯示個(gè)位數(shù)2。

 

2.代碼分析

首先要同時(shí)點(diǎn)亮3個(gè)數(shù)碼管就必須讓三八譯碼器的IO0~IO2輪流快速輸出低電平,然后在數(shù)碼管0被點(diǎn)亮的瞬間之后P0被賦值為L(zhǎng)edChar[Second%10],這樣數(shù)碼管0就顯示了這個(gè)變量的個(gè)位數(shù)。

然后又到了數(shù)碼管1被點(diǎn)亮,馬上P0被賦值為L(zhǎng)edChar[(Second/10)%10],數(shù)碼管1顯示了這個(gè)變量的十位數(shù)。

接著就是到了數(shù)碼管2被點(diǎn)亮,馬上P0被賦值為L(zhǎng)edChar[(Second/100)%10],數(shù)碼管2顯示了這個(gè)變量的百位數(shù)。

大家要有一個(gè)意識(shí),那就是隨著每次IO0,IO1,IO2輸出低電平之后的瞬間,P0都會(huì)改變它8個(gè)IO端口輸出狀態(tài)以顯示不同的數(shù)字。

 

3.代碼

#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)值初始化

void main()
{  
    unsigned int i=0,x;
    unsigned char Second=0;//定義一個(gè)一秒之后自增1的變量
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
  
    while(1)
    {    
        for(x=0;x<20627;x++)//軟件調(diào)試得出這個(gè)循環(huán)耗時(shí)1秒
        { 
            P0=0xFF;//P0端口狀態(tài)全部熄滅數(shù)碼管里的LED達(dá)到刷新作用
            switch(i)
            {
                case 0:
                ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;P0=LedChar[Second%10];       i++;break;
      
                case 1:
                ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;P0=LedChar[(Second/10)%10];  i++;break;     
      
                case 2:
                ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P0=LedChar[(Second/100)%10]; i=0;break;  
            }  
        } 
        Second++;//一秒之后變量自加1 
    }
}


4.代碼實(shí)現(xiàn)原理

我們知道for循環(huán)的持續(xù)時(shí)間為1秒,我們拆開(kāi)代碼分析就像這樣

第一次for循環(huán)執(zhí)行的內(nèi)容為

P0=0xFF;
ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;P0=LedChar[Second%10];i++;

第二次for循環(huán)執(zhí)行的內(nèi)容為

P0=0xFF;
ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;P0=LedChar[(Second/10)%10];i++;

第三次for循環(huán)執(zhí)行的內(nèi)容為

P0=0xFF;
ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P0=LedChar[(Second/100)%10];i=0;

一直循環(huán)下去,也就達(dá)到了三八譯碼器IO0~IO2輪流快速地切換輸出低電平了,也就做到同時(shí)點(diǎn)亮的作用,直到for循環(huán)持續(xù)的時(shí)間結(jié)束就“Second++;”但這條語(yǔ)句執(zhí)行地很快于是又重新for循環(huán)了,但是Second卻改變了數(shù)字,LedChar[Second%10]也就不是之前的狀態(tài)值了。

點(diǎn)贊(3)

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

一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程

解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程

從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程

只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時(shí)間)