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

📄 main.c

📁 大型的点阵屏的驱动
💻 C
字号:
//*************头文件***************************
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
//*************宏定义************************
#define clr    0
#define en_   1
#define refresh_   2
#define c_595  PORTB     
#define c_154  PORTA             
#define num_words  1  //修改字数
//*************全局变量声明******************
//-------------------------------------------
//  数组初始化,直接复制过来,【行】, 【列】
//-------------------------------------------
const unsigned char word_1[num_words][32*4]=
{

/*--  调入了一幅图像:D:\Download\1.bmp  --*/
/*--  宽度x高度=32x33  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x30,0x0F,0xFF,0xFF,0xF8,
0x0F,0xFF,0xFF,0xF8,0x0E,0x1E,0x00,0x78,0x0E,0x1C,0x18,0x78,0x0E,0x1F,0xFC,0x78,
0x0E,0x3F,0xFE,0x78,0x0E,0x3C,0x38,0x78,0x0E,0x7E,0x78,0x78,0x0E,0xE6,0xF0,0x78,
0x0E,0xC7,0xE0,0x78,0x0F,0x83,0xC0,0x78,0x0F,0x87,0xC0,0x78,0x0E,0x0F,0xE0,0x78,
0x0E,0x1C,0x78,0x78,0x0E,0x78,0x3F,0xF8,0x0E,0xE7,0x8F,0xF8,0x0F,0x83,0xE0,0x78,
0x0E,0x00,0xF0,0x78,0x0E,0x00,0x70,0x78,0x0E,0x38,0x00,0x78,0x0E,0x1F,0xE0,0x78,
0x0E,0x03,0xF8,0x78,0x0E,0x00,0x78,0x78,0x0E,0x00,0x38,0x78,0x0E,0x00,0x00,0x78,
0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0E,0x00,0x00,0x70,0x00,0x00,0x00,0x00,

};
//*************函数声明**********************
void Delay(unsigned int x);
void init(void);
void Byte_out(unsigned char);
//*************主程序************************
void main (void)
{
   /////////////////
   init();
   Delay(50);
   /////////////////
   while(1)
   {
		
   }
}

//***初始化*****************************
void init(void)
{
	//***关中断***
     	cli(); 
	DDRA = 0xff;   PORTA = 0xff;//A口输出
 	DDRB = 0xff;   PORTB = 0xff;//B口输出
 	DDRC = 0xff;   PORTC = 0xff;
 	DDRD = 0xff;   PORTD = 0xff;
	
 	TCNT1H = 0xfa; TCNT1L = 0x24; //8Mhz,1.5ms
	//***控制寄存器***
 	TCCR1A = 0x00;
 	TCCR1B = 0x02;//8分频
	//T1溢出中断使能
     	TIMSK |= _BV(TOIE1);
	//***禁止JTAG***
	MCUCSR |= _BV(JTD);
	MCUCSR |= _BV(JTD);
	MCUCSR |= _BV(JTD);
	MCUCSR |= _BV(JTD);
	/*初始化SPI*/
	/*配置输入输出*/
	SPCR = (1<<SPE)|(1<<DORD)|(1<<MSTR);/*使能,主机,分频4*/
	SPSR = (1<<SPI2X);//倍频 8Mhz
	//***开中断***
     	sei();
	c_595 &=~ _BV(en_);//使能,一直有效
	
}


/******************************************************************/
/* 函数名:定时器中断
/* 参  数:无
/* 功  能:用于时间的刷新,日期的维护
/******************************************************************/ 
SIGNAL (SIG_OVERFLOW1 )
{
	 static unsigned char time_add;
	 static unsigned int  j=0;
	 static unsigned char i=0;
	 unsigned char  k;
	 unsigned char  dis_[num_words*4];
	 
	 TCNT1H = 0xfa; TCNT1L = 0x24; //8Mhz,1.5ms
	 
	 time_add++;

	 //-------------------------------------------------------------
	 //  显示缓存的概念:
	 //
	 //  在每次输出前,维护显存,就可以实现字符的移动。
	 //-------------------------------------------------------------
	 
	 i++; //位置很重要
	 if(i>=32){i=0;}
	 
	 dis_[0]=word_1[0][(i)*4+0];//先发1,[0]
	 dis_[1]=word_1[0][(i)*4+1];
	 dis_[2]=word_1[0][(i)*4+2];
	 dis_[3]=word_1[0][(i)*4+3];
 
	 if (time_add == 25)//移动的速度
	 {
	 	time_add = 0;
	 	j++;	
	 }
	 
	 c_595 &=~ _BV(clr);//寄存器清零
	 c_595 |=    _BV(clr);
	 
	 for(k=0; k<num_words*4; k++)
	 {
	 	 Byte_out(dis_[k]);
	 	 //Byte_out(i);
	 }
	 
	 c_154= i;//一定要在刷新之前
	 
	 c_595 &=~ _BV(refresh_);//数据更新
	 c_595 |=    _BV(refresh_);
	 
	 
	 
}

//-------------------------------------------------------------------------------------------------------
//  函数名称:Byte_out()
//  输入参数:byte,需要从74LS164并行口输出的数据
//  输出参数:无
//  功能说明:发送八位串行数据至并口
//--------------------------------------------------------------------------------------------------------
void  Byte_out(unsigned char byte)
{
	unsigned char i;
	
	SPDR=byte;
	while(!(SPSR & (1<<SPIF)));// 等待SPIF置位,即等待数据发送完毕
	
}
/******************************************************************/
/* 函数名:Delay(unsigned int x)
/* 参  数:int型延时参数
/* 功  能:延时
/******************************************************************/ 
void Delay(unsigned int x)  
{
  unsigned int j;
  while(x--)
  {
		for (j=0;j<200;j++){;}
  }
}

⌨️ 快捷键说明

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