五、变量进阶与LED点阵

一、局部变量和全局变量

在这里插入图片描述
局部变量一般存在函数的内部,不占用内存,全局变量的作用范围为整个工程,占用内存,一般情况下,能使用局部变量就不适用全局变量,减少内存占用,并且,使用全局变量会使代码变得更加复杂,降低移植性。

二、自动变量和静态变量

在这里插入图片描述
自动变量是可以变动的变量,通常用auto进行声明,可以省略。自动变量在代码每次运行到该位置的时候都会对其进行重新赋值,例如在程序的开头处声明的变量,都是动态变量。静态变量用static进行声明,不可以省略。静态变量在程序运行的过程中只赋值一次。

三、点阵介绍

在这里插入图片描述
在该点阵中,使用74HC138芯片控制点阵的高电平开关,使用的是PNP型三极管,低电平导通,P0控制晶振的阴极。

四、实例

#include<reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned char code image[] = {
	0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,
	};	


void main()
{
	EA = 1;//总中断开关
	ENLED = 0;//74HC138使能
	ADDR3 = 0;
	TMOD = 0x01;//模式选择
	TH0 = 0xFC;
	TL0 = 0x67;
	ET0 = 1;//使能中断
	TR0 = 1;//时钟中断使能
	while(1);
}

void InterruputTimer0() interrupt 1
{  	
	static unsigned char i = 0;//静态变量,只赋值一次
	static unsigned char index =0;
	static unsigned char tmr = 0;
	TH0 = 0xFC;
	TL0 = 0x67;

	P0 = 0xFF;//消除鬼影
	switch(i)
	{
		case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index + 0];break;
		case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index + 1];break;
		case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index + 2];break;
		case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index + 3];break;
		case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index + 4];break;
		case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index + 5];break;
		case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index + 6];break;
		case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index + 7];break;
		default: break;
	}

	tmr++;
	if(tmr >= 250)
	{
		tmr = 0;
		index++;
		if(index >= 32)
		{
			index = 0;
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值