⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led_matrix2.c

📁 1. LED点阵依次显示绿色
💻 C
字号:
/*============================================================
File Name :LED_MATRIX2.c
说明 :
1. 'AVR'文字从下往上移动的的同时,文字的颜色也在变化
=============================================================*/

#include <avr/io.h>
#define PPI_0_PA (unsigned char *)0x5000;    // line的外部存储器地址
#define PPI_0_PB (unsigned char *)0x5001;    // 绿色的外部存储器地址
#define PPI_0_PC (unsigned char *)0x5002;    // 红色的外部存储器地址
#define PPI_0_CT (unsigned char *)0x5003;    // 82C55的控制端外部存储器地址

unsigned char font_A[]={0x18,0x24,0x42,0x42,0x7e,0x42,0x42,0x42};
unsigned char font_V[]={0x41,0x41,0x41,0x41,0x41,0x22,0x14,0x08};
unsigned char font_R[]={0x3c,0x42,0x42,0x42,0x3e,0x12,0x22,0x42};
unsigned char blank[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char font[8];

unsigned char *line,*green,*red,*ppi_ctrl;
void initialize_ppi(void);
void delay(int d1,int d2);
void display(unsigned char*green1,unsigned char*red1);
void move(unsigned char*shift1,unsigned char i);
void matrix(unsigned char*matrix1);

int main(void)
{
   MCUCR|=(1<<SRE);
   initialize_ppi();
   do{
       matrix(font_A);
	   matrix(font_V);
       matrix(font_R);
	  }while(1);
}
void matrix(unsigned char *matrix1)
{
   unsigned char i=0;
   for(i=0;i<8;i++)
   {
    move(matrix1,i);
    display(blank,font);                  // red on move
   }
for(i=0;i<4;i++)
	 display(font,font);                  // orange on
for(i=0;i<4;i++)
	  display(font,blank);                // green on
for(i=0;i<8;i++)
	  font[i]=0;                        // 初始化排列
} 

  void delay(int d1,int d2)
{
   int i,j;
   for(i=0;i<d1;i++){  
        for(j=0;j<d2;j++);      
       }
}

 void initialize_ppi(void)
{
  line=PPI_0_PA;
  green=PPI_0_PB;
  red=PPI_0_PC;
  ppi_ctrl=PPI_0_CT;
  *ppi_ctrl=0x80;               //82C55的 A, B都是输出
}  

 void move(unsigned char *move1,unsigned char i)
 {
    unsigned char k,j;
	k=0;
	j=7-i;
	do{
	    font[j]=move1[k];            // 将move1的最高位字节移至font的最低位字节
		j++;
		k++;
	   }while(i--);
}



void display(unsigned char *green1,unsigned char *red1)
{
  unsigned char i=0,j=0;
  for(j=0;j<20;j++)
  {                        // 点亮一种颜色的时间
      for(i=0;i<8;i++)
	  {                     // 点亮一种画面的时间
	     *green=green1[i];
		 *red=red1[i];
		 *line=(0x01<<i);
		 delay(100,70);            // 1 line on time
	  }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -