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

1.回顧

大家還記得我們用數(shù)組來存取流水燈的狀態(tài)值嗎,那么數(shù)碼管也是一樣的,我們可以知道數(shù)碼管能顯示出在單片機(jī)編程中最常見的數(shù)字和字母為0~9,A,b,C,d,E,F這16種狀態(tài),那么這一講我們實(shí)現(xiàn)單個數(shù)碼管從0到F間隔一秒來循環(huán)顯示。

2.單片機(jī)內(nèi)存

首先要知道我們寫的程序是占用內(nèi)存的,這些內(nèi)存就是單片機(jī)內(nèi)部的FLASH。STC89C52RC芯片中用來存放程序代碼的FLASH內(nèi)存為8K字節(jié)(8192字節(jié))。

而初始化的數(shù)組的內(nèi)存都是存放在單片機(jī)的RAM中的,我們平時定義的變量也都是占用RAM的,因?yàn)槎x的變量數(shù)值是要改變的,所以這些變量只能存放在RAM中。

但STC89C52RC芯片中RAM的內(nèi)存很小,只有512個字節(jié),且這些內(nèi)存相當(dāng)珍貴。而讓數(shù)碼管顯示的16種狀態(tài)值我們不用改變它的值,它們只起到賦值作用而已,所以為了不占用珍貴的RAM資源,我們把這16種狀態(tài)的值(也就是16個字節(jié))存放在FLASH中,因?yàn)镕LASH的內(nèi)存比較大。

可能對計算機(jī)基礎(chǔ)知識相對薄弱的同學(xué)來說,對上面的知識點(diǎn)比較模糊,這里筆者建議閱讀一下《手把手教你學(xué)51單片機(jī)》文檔2.1節(jié),10.4節(jié)。

 

3.code的用法

拿我們以前講的數(shù)組存放流水燈狀態(tài)值的初始化來說

unsigned char LEDSET[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

如果把這8個字節(jié)的內(nèi)存放到FLASH中,只需加多code即可

unsigned char code LEDSET[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

詳細(xì)了解請看文檔的5.3.3節(jié),6.1.1節(jié),6.1.4節(jié),12.3.1節(jié)。

 

4.真值表

共陽數(shù)碼管的0~9,A,b,C,d,E,F 這16種狀態(tài)值如下

0:0xC0
1:0xF9
2:0xA4
3:0xB0
4:0x99
5:0x92
6:0x82
7:0xF8
8:0x80
9:0x90
A:0x88
b:0x83
C:0xC6
d:0xA1
E:0x86
F:0x8E

 

數(shù)組初始化:

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

 

5.代碼

像這種加入code關(guān)鍵字來存放在FLASH中的代碼我們寫在最開始的函數(shù)外部。

實(shí)現(xiàn)數(shù)碼管從0到F間隔一秒循環(huá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)值初始化

void delay_ms(unsigned int x)
{
    unsigned int i,j;
    if(x==1000)
    {
        for(i=0;i<19601;i++)//延時1s
        {
            for(j=5;j>0;j--);
        }
    }
    else while(x--)for(j=115;j>0;j--);
}

void main()
{  
    unsigned char i=0;
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
  
    ADDR2 = 0;//**************************
    ADDR1 = 0;//讓三八譯碼器的IO0輸出低電平
    ADDR0 = 0;//**************************
    
    while(1)
    {
        P0=LedChar[i];
        delay_ms(1000);//延時1s
        i++;
        if(i>=16)i=0;  //讓i在0~15之間變化
    }
}
點(diǎn)贊(1)

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

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

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

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

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

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

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

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

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