编辑: 丶蓶一 2014-10-18

如果不是第一次调用,那么它的值就是上一次函数调用结束后的值. 在 某一些场合中,一些变量只在一个函数中使用了,但是这个变量每次变化的值我们还想保存,如果定义成局部动态变量的话,每次进入函数后上一次的值就丢失了, 如果定义成全局变量的话,又违背了我们上面提到的关于全局变量使用的一般原则,这个时候我们就可以定义成局部静态变量了. 比如上节课中断程序中有一个用于动态刷新数码管控制的变量j,我们上节课的程序是定义成了全局变量,现在我们可以直接改成局部静态变量来试试. #include?包含寄存器的库文件? sbit??ADDR0?=?P1^0;

sbit??ADDR1?=?P1^1;

sbit??ADDR2?=?P1^2;

sbit??ADDR3?=?P1^3;

sbit??ENLED?=?P1^4;

unsigned?char?code?LedChar[用数组来表示数码管真值表 ????0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, ???? 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e, };

unsigned?char?LedNumber[6]?=?{0};

?//定义全局变量 unsigned?int?counter?=?0;

? void?main() { ????unsigned?long?stopwatch?=0;

? ???? ENLED?=?0;

?ADDR3?=?1;

?P0?=?0XFF;

???//74HC138和P0初始化部分 ???? TMOD?=?0x01;

??//设置定时器0为模式1 ???? TH0??=?0xFC;

????TL0??=?0x67;

??//定时值初值,定时1ms ????TR0??=?1;

打开定时器0 ????EA?=?1;

打开中中断 ???? ET0?=?1;

打开定时器0中断 ????while(1) ???? { ????????if(1000?==?counter)判断定时器0溢出是否达到50次 counter?=?0;

stopwatch++;

LedNumber[0]?=?stopwatch%10;

LedNumber[1]?=?stopwatch/10%10;

LedNumber[2]?=?stopwatch/100%10;

LedNumber[3]?=?stopwatch/1000%10;

LedNumber[4]?=?stopwatch/10000%10;

LedNumber[5]?=?stopwatch/100000%10;

????} }? ? void?InterruptTimer0() ?interrupt?1?中断函数的特殊写法,数字'

1'

为中断入口号 { ????static?unsigned?char?j?=?0;

????TH0?=?0xFC;

???//溢出后进入中断重新赋值 ???? TL0?=?0x67;

????counter+计数值counter加1 ????P0?=?0xFF;

???//消隐 ???? switch(j) ????{ case?0:?ADDR0=0;

?ADDR1=0;

?ADDR2=0;

?j++;

?P0=LedChar[LedNumber[0]];

?break;

? ????????case?1:?ADDR0=1;

?ADDR1=0;

?ADDR2=0;

?j++;

?P0=LedChar[LedNumber[1]];

?break;

case?2: ?ADDR0=0;

?ADDR1=1;

?ADDR2=0;

?j++;

?P0=LedChar[LedNumber[2]];

?break;

case?3:? ADDR0=1;

?ADDR1=1;

?ADDR2=0;

?j++;

?P0=LedChar[LedNumber[3]];

?break;

????????case?4: ?ADDR0=0;

?ADDR1=0;

?ADDR2=1;

?j++;

?P0=LedChar[LedNumber[4]];

?break;

case?5: ?ADDR0=1;

?ADDR1=0;

?ADDR2=1;

?j=0;

?P0=LedChar[LedNumber[5]];

?break;

????????default:?break;

动态刷新 }??? ????大家注意看这个程序的中断函数的静态变量j,如果加上了static,他的初始化j?=?0操作只进行一次,下边的程序会进行j++操作,下次进入中断函数的时候,j会保持上次的值.但是如果去掉static这个关键字,那每次进入函数后,j都会被初始化成0,大家可以自己修改程序做尝试. 1.3?点阵LED的初步认识 点阵LED显示屏作为一种现代电子媒体,具有灵活的显示面积(可分割、任意拼装)、高亮度、长寿命、数字化、实时性等特点,应用非常广泛. 前边学了LED小灯和LED数码管后,学LED点阵就要轻松得多了.一个数码管是8个LED组成,同理,一个8*8的点阵是由64个LED小灯组成.图7-1就是一个点阵LED最小单元,一个8*8的点阵LED,图7-2是它的内部结构图. 图7-1?8*8点阵LED 7-2?8*8点阵LED结构原理图 ????点阵LED内部原理图如图7-2所示,从7-2图上可以看出来,其实点阵LED点亮原理还是很简单的.在我们图上蓝色方框外侧的就是点阵LED的引脚号,左侧的8个引脚是接的内部LED的阳........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题
大家都在看的话题