|
- void ET_1() interrupt 1 // 是由中斷向量表決定的, 這里用定時(shí)器0 是interrupt 1
- {
- static uchar wei=0x01,i=0; //用于局部變量中,成為靜態(tài)局部變量. 靜態(tài)局部變量有兩個(gè)用法,記憶功能和全局生存期.
- static uint j=0; // 這個(gè)沒有用
-
- TH0=(65536-2000)/256; //定時(shí)器T0的高8位重新賦初值
- TL0=(65536-2000)%256; //定時(shí)器T0的低8位重新賦初值
-
- //以下代碼完成數(shù)碼管動(dòng)態(tài)掃描刷新
- P2=0x00; // 解決數(shù)碼管鬼影, 關(guān)閉數(shù)碼管的位,賦值過程都做好后,再重新打開
- P0=duanma[led]; //運(yùn)用數(shù)碼管顯示字符轉(zhuǎn)換表 提取并轉(zhuǎn)為數(shù)碼管顯示字符
- P2=wei; // 打開數(shù)碼管的位
- wei=wei<<1; ////將字符變量wei,循環(huán)左移1位 ,重新賦給wei變量。 此外”<<“符號(hào)為左移命令符號(hào)。
- if(++i==8) //自增i 當(dāng)i的值等于8時(shí)
- {i=0;wei=0x01;} // 這里用8個(gè)位數(shù)碼管 達(dá)到8次后i計(jì)數(shù)值清零 數(shù)碼管的位重新賦最右位
- }
復(fù)制代碼
這是運(yùn)用數(shù)碼管動(dòng)態(tài)顯示的原理,并最終借助于中斷系統(tǒng)來完成實(shí)用的數(shù)碼管顯示程序。
多個(gè)數(shù)碼管顯示數(shù)字的時(shí)候,我們實(shí)際上是輪流點(diǎn)亮數(shù)碼管(一個(gè)時(shí)刻內(nèi)只有一個(gè)數(shù)碼管是亮的),利用人眼的視覺暫留現(xiàn)象(也叫余輝效應(yīng)),可以做到看起來是所有數(shù)碼管都同時(shí)亮了,這就是動(dòng)態(tài)顯示,也叫做動(dòng)態(tài)掃描。
這里用static把wei定義成了一個(gè)靜態(tài)局部變量。靜態(tài)局部變量和普通局部變量一樣,只能在定義它的函數(shù)里面使用它。普通局部變量在程序退出函數(shù)以后,就會(huì)釋放,靜態(tài)局部變量則不會(huì)被釋放,它在整個(gè)生命周期都存在。下次讀到是上次修改后的值。
我認(rèn)為這個(gè)是針對(duì)于static定義的局部變量而言的,除了只能在定義它的函數(shù)內(nèi)局部使用外其他的和全局變量是一樣的(只在第一次調(diào)用時(shí)初始化,用完后空間不會(huì)釋放,已存值不會(huì)改變)。比方說以上的 i 在第一次調(diào)用時(shí)被初始化為0.然后自加為1,那么第二次調(diào)用時(shí) i 的初始值就是1,運(yùn)行完就是2。
|
|