C語言問題!延時函式的作用求解Display函式中delay 的作用和P2 0xff P0 0xff的作用

2021-03-22 05:27:29 字數 6109 閱讀 7073

1樓:ㄨ『正典』灝皴

在解釋延時之前先給你解釋下第二個問題,p2=0xff;p0=0xff;讓數碼管關閉並不是因為省電,而是消隱防止有交叉重影,就像數碼管先顯示6然後很快的酒顯示3,如果兩次顯示之間的間隔很短那麼看起來就像是8一樣,所以為了防止重影出現一般數碼管動態顯示都要用消隱。

現在解釋延時,數碼管動態顯示是利用了人的視覺殘留,而在動態掃瞄時通常會使用消隱,那麼這樣又時會出現乙個問題,就是如果數碼管亮的時間比關的時間短那麼數碼管看起來就會很暗,顯示效果不理想,所以為了解決這個問題通常對亮的時候進行延時,讓數碼管亮的時間大於關的時間。

好了,希望我的解釋能幫到你

2樓:匿名使用者

如果沒有猜錯的話,相當於刷屏,亮一段時間,關閉一段時間,但是人在視覺上是看不出來燈滅掉過,於是效果一樣,這樣做的好處是省電。另外連續兩個賦值ff,其用意應該是確保一下管腳賦值正確的概率。

微控制器c語言中p2=0xff,0xff什麼意思?

3樓:非常可愛

0x是16進製制的字首,16進製制是計算機中資料的一種表示方法;

十六進位制的0xff就是二進位制的11111111,換算成十進位制就是255;

十進位制表示法不一樣,是逢16進1,它由0-9,a-f組成,字母不區分大小寫,例如10用16進製表示就是a;

p2=0xff,就是將p2.0~p2.7全部設為1,也就是p2=11111111,當然就不是p2=0x01;

擴充套件資料

微控制器c語言xbyte的使用

使用keil開發微控制器程式時,在absacc.h這個標頭檔案中,有xbyte這樣乙個巨集。它的定義是#definexbyte((unsignedcharvolatilexdata*)0)可以使用xbyte去訪問外部的ram,也可以用xbyte去訪問擴充套件的i/0裝置;

關於i/o的控制如下,低位元組表示的是p0埠,高位元組表示的是p2埠,p2埠通常作為控制埠,而p0通常作為資料埠;eg:xbyte[0x8800]=buz_stu;其中用p2做控制,p0的資料就是buz_stu的狀態。

注意:這裡是利用的英特爾匯流排進行訪問的,那麼就會有時序的問題,在c語言中,這些都幫你做完了,所以無需考慮

4樓:天雲一號

微控制器c語言中,p2=0xff的0xff表示16進製制的ff,對應的二進位制為1111 1111

在51微控制器中(以51微控制器為例),共有4組i/o埠,分別為p0、p1、p2和p3,每組埠共有8個資料位(引腳)(51微控制器是8位的微控制器),所以對埠進行賦值的時候,2位的16進製制剛好是8位的二進位製數。

而微控制器中,埠電平都是用高低電平表示的,也即0(低電平)和1(高電平)。所以每一位二進位制分別對應相應的電平值。如:p2=0xff表示對p2組埠的8個引腳分別置高電平。

5樓:匿名使用者

0x是16進製制的字首,16進製制是計算機中資料的一種表示方法。同我們日常中的十進位制表示法不一樣,它是逢16進1。它由0-9,a-f組成,字母不區分大小寫,例如10用16進製表示就是a。

此外計算機語言中常用的還有二進位制,如10用二進位制表示就是1010。你可以很容易體會到為什麼計算機語言中需要在數字 前加字首,來說明資料是什麼進製的。例如只給乙個1010,它可以是十進位制的一千零一十,也可以是二進位制時表示的十,兩者相差甚遠,為了避免這種誤會,引入了進製的字首。

常用的進製的字首總結如下

0x 十六進位制

d(decimal) 十進位制

b(binary) 二進位制

6樓:匿名使用者

p2口輸出1111 1111

7樓:匿名使用者

應該是設定p2口為輸入,這與微控制器埠結構有關。

使用bios***()函式的問題 10

8樓:三天起個名

我沒有用過bios***函式,看起來應該是某個硬體廠商提供的。

同時提供的一定還有類似於bios.obj或是bois.c之類的。光有h是不夠的。

main() { p2 = 0x00; delay(600); p2 = 0xff; delay(3000); } 這個程式主函式沒有while(1)為什麼會迴圈

9樓:匿名使用者

主程式是一直在執行的

10樓:匿名使用者

你現在所貼的程式是全部嗎?我覺得你貼的是一部分,現在這個程式不會迴圈。

p2口各個引腳賦值為0然後賦值為1,但是在每次賦值完成後應該會把賦值結果通過led或什麼的顯示出來才是,所以現在僅僅是程式的一部分。

delay的c語言怎麼用

11樓:河蟹和諧河蟹

delay([毫秒數]);

作用是讓當前程序等待[毫秒數],防止100% cpu占有率。

12樓:匿名使用者

給你乙個e2prom下,控制led顯示時間的程式希望對你的學習有幫助。

#include

#define uchar unsigned char#define uint unsigned intsbit sda=p2^0;

sbit scl=p2^1;

sbit dula=p2^6;

sbit wela=p2^7;

uchar flag,sec;

uint num;

uchar code table=;

void delay()

void start() //開始訊號

void stop() //停止

void respons() //應答

void init()

void write_byte(uchar date)sda=1;

delay();

}uchar read_byte()

return k;

}void delayms(uchar x)void write_add(uchar address,uchar date)

uchar read_add(uchar address)void display(uchar shi,uchar ge)void main()}}

void t0_time() interrupt 1}}

13樓:匿名使用者

這兩個函式都是將程式的執行暫停一段時間。

sleep是api函式,delay似乎是c專有的。

裡面的引數都是毫秒。

delay(1000)是暫停1000毫秒(1秒)sleep(1)是暫停1毫秒

自然會有不同

14樓:福建省寧德市

用 法: void delay(unsigned milliseconds);

程式例:

/* emits a 440-hz tone for 500 milliseconds */

#include

int main(void)

函式名: delay

功 能: 將程式的執行暫停一段時間(毫秒)(該函式是tc下特有的函式,vc下應使用sleep()函式)函式標頭檔案:#include

微控制器中數碼管程式p2=0xef; p0=table[a]; delay(1);是啥意思

15樓:匿名使用者

這個 是數碼管掃瞄一部分,

p2=0xef;  \\開通這一位的數碼管,讓它把數字顯示在p2_7的這位上

p0=table[a];\\table是乙個陣列,裡面應該是數碼管的段碼,這樣就會就能在上面開通那位顯示具體的資料。『a'

delay(1);  \\延時作用,因為人眼對光的反應沒有微控制器運算那麼快,如果不延時就會讓眼睛看到數碼多顯。

16樓:匿名使用者

p2有八個引腳啊,p2=oxef是11101111,對應p2.0-p2.7的電平;同理p0口對應賦值為table[a]這個陣列中第a+1個元素的值;delay(1)呼叫延時函式,1要看delay函式中具體指的時間長短單位

c語言基礎 有一句話說:c語言要求變數必須先定義,後使用!什麼叫定義?

17樓:匿名使用者

可以這樣理解:定義就是分配記憶體空間!

定義了乙個變數後,那麼在記憶體裡就有

一段空間屬於這個變數。

對變數的值進行操作,就是對記憶體中的內容進行操作。

整型變數,其實可以理解成整數,包括負整數 零 正整數。

比如:int data; // 定義乙個整型變數,變數的名字為 data 。

相應的,系統就會有 4 個位元組的記憶體儲存這個變數。

data = 1;

對變數的操作就會修改記憶體中的內容。

18樓:匿名使用者

1.c語言先要定義後使用,這是跟編譯器的執行順序有關的,像c++就不會了,基本在想用得時候才定義變數

2.int表示整型,我覺得你應該拋開int,char等這樣的字眼,這些東西其實就是乙個說明符方便我們記憶和理解變數的,實際內部是通過位元組來表示的,比如說int在32位下表示4個位元組,char表示1個位元組,其他的自己參考~

int var1 ; //這表示宣告了乙個int變數var1

var1 = 99 ; //給var1賦值99,可以理解為定義,定義這個東西其實我覺得要看意境理解了

*****=

類似下面

int var2 = 100 ;//表示宣告乙個變數的同時給他賦值,可以理解為定義了

19樓:匿名使用者

定義的意思就是在使用某一變數之前先清楚的告訴計算機這個變數是什麼型別的,這樣該變數就具有了這種型別的特性。整型指的是該變數只能取整數,比如0、1、1000、-50等等。例:

main()

20樓:匿名使用者

#include

typedef unsigned char uint8; //8位位元組定義資料型別

typedef unsigned int uint16; //16位位元組定義資料型別

#define s1 0xee; //按鍵的位定義

#define s2 0xde; //按鍵的位定義

#define s3 0xbe; //按鍵的位定義

#define s4 0x7e; //按鍵的位定義

#define s5 0xed; //按鍵的位定義

#define s6 0xdd; //按鍵的位定義

#define s7 0xbd; //按鍵的位定義

#define s8 0x7d; //按鍵的位定義

#define s9 0xeb; //按鍵的位定義

#define s10 0xdb; //按鍵的位定義

#define s11 0xbb; //按鍵的位定義

#define s12 0x7b; //按鍵的位定義

#define s13 0xe7; //按鍵的位定義

#define s14 0xd7; //按鍵的位定義

#define s15 0xb7; //按鍵的位定義

#define s16 0x77; //按鍵的位定義

code uint8 segment[10]=;

code uint8 select[8]=; void delay(uint16 t) //延時函式

uint8 scankey1(void) //按鍵函式

p1=0xf0;

switch(p1)

key=row*4+col;

while(p1!=0xf0);

return(key);

} void display(uint8 n) //數碼管顯示函式

p2=select[num];

num++;

num%=8;//if(num==8) num=0;

}main() // 主函式

}程式裡面都是先定義,後呼叫的,就像你先得有名字,然後才知道在叫你呢?

C語言問題求解,c語言問題求解

31的平方961,32的平方1024,要找4位數,打算從31找起,認為高兩位不會是0的,最小情況,從32開始算也成。從31的平方開始遞增找這個數,一旦條件適合,就找到這個前二位相同和後二位相同的四位數。較快的搜出乙個不小於k的平方根的第乙個整數,因k 是四位整數,至少1000,平方根是也就是31以下...

C語言問題求解?C語言問題,求解釋

簡單的說 由於你的 是非標準方法訪問變數,導致結果非常不確定,沒有固定答案,不同編譯器結果不一樣。你這樣是故意記憶體訪問越界來計算麼?為什麼要研究這個呢?因為這樣做非常明顯的違背軟體工程的。問題是這個答案是沒有標準答案的,因為編譯器會對結構內的記憶體布局稍微做調整,不同編譯器和不同編譯條件導致的布局...

c語言問題,求解答,求解答c語言問題

首先執行getchar,就是先讓你輸入乙個字元,然後執行putchar,就是將剛剛的字元輸出,然後判斷字元是不是 是的話退出,否則繼續執行迴圈。迴圈體只有乙個 getchar每接收乙個字元,putchar就進行輸出,當為 時,則!後面若還有字元,按換行鍵後則不會輸出 輸出的字元要從getchar函式...