函数内部声明的变量,只在函数内部有效,在本函数以外是不能使用的,叫局部变量。
在函数外部声明的变量就是全局变量,一个源程序可以包含一个或多个函数,全局变量的作用范围是从它开始声明的位置一直到程序结束。
1)降低函数的独立性,对任何一个函数的修改都可能影响到其他函数。
2)降低函数的通用性,不利于函数的重复利用。
3)降低程序的清晰度,每个函数执行都有可能改变全局变量值,无法清楚判断每个时刻的全局变量的值。
4)全局变量永久占用内存单元。
全局变量和局部变量同名,在局部变量作用域范围内,局部变量有效。
函数中的局部变量,如果不加static关键词修饰,都属于自动变量,也叫动态变量。
所有的全局变量都属于静态变量,局部变量加了static关键词修饰的话,也是静态变量
点阵的显示原理是多个LED小灯组合在一起,点亮不同的LED小灯集合下来组成不同的图案,点阵的动画显示实际上就是不同图案的高帧变化。
- clude <REGX52.H>
- sbit addr0 = P1^0;
- sbit addr1 = P1^1;
- sbit addr2 = P1^2;
- sbit addr3 = P1^3;
- sbit ENLED = P1^4;
- unsigned char code LedBuff[] = {
- 0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,
- 0xE7,0xC3,0x81,0x00,0x00,0x99,0xFF,0xC3,
- 0x81,0x99,0x99,0x99,0x99,0x99,0xFF,0xFF,
- };
-
- unsigned int flag1s = 0;
- unsigned int cnt = 0,i = 0;
-
- void main()
- {
- ENLED = 0;
- addr3 = 0;
- TMOD = 0x01;
- TH0 = 0xfc;
- TL0 = 0x67;
- TR0 = 1;
- while(1)
- {
- if(TF0 == 1)
- {
- TF0 = 0;
- cnt++;
- if(cnt >= 5)
- {
- cnt = 0;
- flag1s++;
- }
- }
- P0 = 0xff;
- switch (i)
- {
- case 0 :addr0 = 0;addr1 = 0;addr2 = 0;P0 = LedBuff[flag1s + 7];i++;break;
- case 1 :addr0 = 1;addr1 = 0;addr2 = 0;P0 = LedBuff[flag1s + 6];i++;break;
- case 2 :addr0 = 0;addr1 = 1;addr2 = 0;P0 = LedBuff[flag1s + 5];i++;break;
- case 3 :addr0 = 1;addr1 = 1;addr2 = 0;P0 = LedBuff[flag1s + 4];i++;break;
- case 4 :addr0 = 0;addr1 = 0;addr2 = 1;P0 = LedBuff[flag1s + 3];i++;break;
- case 5 :addr0 = 1;addr1 = 0;addr2 = 1;P0 = LedBuff[flag1s + 2];i++;break;
- case 6 :addr0 = 0;addr1 = 1;addr2 = 1;P0 = LedBuff[flag1s + 1];i++;break;
- case 7 :addr0 = 1;addr1 = 1;addr2 = 1;P0 = LedBuff[flag1s + 0];i=0;break;
- default:break;
- }
- if(flag1s >= 16)
- {
- flag1s = 0;
- }
-
- }
- }
- #include <REGX52.H>
- sbit addr0 = P1^0;
- sbit addr1 = P1^1;
- sbit addr2 = P1^2;
- sbit addr3 = P1^3;
- sbit ENLED = P1^4;
- unsigned char code LedBuff[] = {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x7D,0x01,0x01,0x7D,0xFF,0xFF,0xE3,0xC1,
- 0x81,0x03,0x03,0x81,0xC1,0xE3,0xFF,0xFF,
- 0x81,0x01,0x3F,0x3F,0x3F,0x01,0x81,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
- };
-
- unsigned int flag1s = 0;
- unsigned int cnt = 0,i = 0;
-
- void main()
- {
- ENLED = 0;
- addr3 = 0;
- TMOD = 0x01;
- TH0 = 0xfc;
- TL0 = 0x67;
- TR0 = 1;
- while(1)
- {
- if(TF0 == 1)
- {
- TF0 = 0;
- cnt++;
- if(cnt >= 5)
- {
- cnt = 0;
- flag1s++;
- }
- }
- P0 = 0xff;
- switch (i)
- {
- case 0 :addr0 = 0;addr1 = 0;addr2 = 0;P0 = LedBuff[flag1s + 7];i++;break;
- case 1 :addr0 = 1;addr1 = 0;addr2 = 0;P0 = LedBuff[flag1s + 6];i++;break;
- case 2 :addr0 = 0;addr1 = 1;addr2 = 0;P0 = LedBuff[flag1s + 5];i++;break;
- case 3 :addr0 = 1;addr1 = 1;addr2 = 0;P0 = LedBuff[flag1s + 4];i++;break;
- case 4 :addr0 = 0;addr1 = 0;addr2 = 1;P0 = LedBuff[flag1s + 3];i++;break;
- case 5 :addr0 = 1;addr1 = 0;addr2 = 1;P0 = LedBuff[flag1s + 2];i++;break;
- case 6 :addr0 = 0;addr1 = 1;addr2 = 1;P0 = LedBuff[flag1s + 1];i++;break;
- case 7 :addr0 = 1;addr1 = 1;addr2 = 1;P0 = LedBuff[flag1s + 0];i=0;break;
- default:break;
- }
- if(flag1s >= 32)
- {
- flag1s = 0;
- }
-
- }
- }
- #include <REGX52.H>
- sbit addr0 = P1^0;
- sbit addr1 = P1^1;
- sbit addr2 = P1^2;
- sbit addr3 = P1^3;
- sbit ENLED = P1^4;
- unsigned char code LedBuff[][8] = {
- 0xFF,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xFF,
- 0xFF,0xE3,0xDF,0xDF,0xEF,0xF7,0xC3,0xFF,
- 0xFF,0xC3,0xDF,0xDF,0xE3,0xDF,0xDF,0xC3,
- 0xFF,0xEF,0xE7,0xEB,0xC1,0xEF,0xEF,0xEF,
- 0xFF,0xC3,0xFB,0xC3,0xDF,0xDF,0xDF,0xE3,
- 0xFF,0xC3,0xDF,0xDF,0xC3,0xDB,0xDB,0xC3,
- 0xFF,0xC3,0xDF,0xEF,0xF7,0xF7,0xF7,0xF7,
- 0xFF,0xC3,0xDB,0xDB,0xE7,0xDB,0xDB,0xC3,
- 0xFF,0xC3,0xDB,0xDB,0xC3,0xDF,0xDF,0xEF,
- 0xFF,0xE7,0xDB,0xDB,0xDB,0xDB,0xDB,0xE7,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- };
-
- unsigned int flag1s = 0;
- unsigned int cnt = 0,i = 0;
-
- void main()
- {
- ENLED = 0;
- addr3 = 0;
- TMOD = 0x01;
- TH0 = 0xfc;
- TL0 = 0x67;
- TR0 = 1;
- while(1)
- {
- if(TF0 == 1)
- {
- TF0 = 0;
- cnt++;
- if(cnt >= 10)
- {
- cnt = 0;
- flag1s++;
- }
- }
- P0 = 0xff;
- switch (i)
- {
- case 0 :addr0 = 0;addr1 = 0;addr2 = 0;P0 = LedBuff[flag1s][0];i++;break;
- case 1 :addr0 = 1;addr1 = 0;addr2 = 0;P0 = LedBuff[flag1s][1];i++;break;
- case 2 :addr0 = 0;addr1 = 1;addr2 = 0;P0 = LedBuff[flag1s][2];i++;break;
- case 3 :addr0 = 1;addr1 = 1;addr2 = 0;P0 = LedBuff[flag1s][3];i++;break;
- case 4 :addr0 = 0;addr1 = 0;addr2 = 1;P0 = LedBuff[flag1s][4];i++;break;
- case 5 :addr0 = 1;addr1 = 0;addr2 = 1;P0 = LedBuff[flag1s][5];i++;break;
- case 6 :addr0 = 0;addr1 = 1;addr2 = 1;P0 = LedBuff[flag1s][6];i++;break;
- case 7 :addr0 = 1;addr1 = 1;addr2 = 1;P0 = LedBuff[flag1s][7];i=0;break;
- default:break;
- }
- if(flag1s >= 10)
- {
- flag1s = 0;
- }
-
- }
- }
- #include <REGX52.H>
- sbit addr0 = P1^0;
- sbit addr1 = P1^1;
- sbit addr2 = P1^2;
- sbit addr3 = P1^3;
- sbit ENLED = P1^4;
- unsigned int i = 0;
-
- void main()
- {
- EA = 1;
- ENLED = 0;
- TMOD = 0x01;
- TH0 = 0xfc;
- TL0 = 0x67;
- ET0 = 1;
- TR0 = 1;
- while(1)
- {
-
- }
- }
- void InterruptTimer0() interrupt 1
- {
- TH0 = 0xfc;
- TL0 = 0x67;
- P0 = 0xff;
- switch (i)
- {
- case 0 :addr3 = 0;addr0 = 0;addr1 = 0;addr2 = 0;P0 = 0;i++;break;
- case 1 :addr3 = 0;addr0 = 1;addr1 = 0;addr2 = 0;P0 = 0;i++;break;
- case 2 :addr3 = 0;addr0 = 0;addr1 = 1;addr2 = 0;P0 = 0;i++;break;
- case 3 :addr3 = 0;addr0 = 1;addr1 = 1;addr2 = 0;P0 = 0;i++;break;
- case 4 :addr3 = 0;addr0 = 0;addr1 = 0;addr2 = 1;P0 = 0;i++;break;
- case 5 :addr3 = 0;addr0 = 1;addr1 = 0;addr2 = 1;P0 = 0;i++;break;
- case 6 :addr3 = 0;addr0 = 1;addr1 = 0;addr2 = 1;P0 = 0;i++;break;
- case 7 :addr3 = 0;addr0 = 1;addr1 = 0;addr2 = 1;P0 = 0;i++;break;
-
- case 8 :addr3 = 1;addr0 = 0;addr1 = 0;addr2 = 0;P0 = 0;i++;break;
- case 9 :addr3 = 1;addr0 = 1;addr1 = 0;addr2 = 0;P0 = 0;i++;break;
- case 10 :addr3 = 1;addr0 =0;addr1 = 1;addr2 = 0;P0 = 0;i++;break;
- case 11 :addr3 = 1;addr0 = 1;addr1 = 1;addr2 = 0;P0 = 0;i++;break;
- case 12 :addr3 = 1;addr0 = 0;addr1 = 0;addr2 = 1;P0 = 0;i++;break;
- case 13 :addr3 = 1;addr0 = 1;addr1 = 0;addr2 = 1;P0 = 0;i++;break;
-
- case 14 :addr3 = 1;addr0 = 0;addr1 = 1;addr2 = 1;P0 = 0;i=0;break;
- default:break;
- }
- }