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

📄 app.c

📁 用于单白色144颗LED8段追光
💻 C
字号:

//ICC-AVR application builder : 2006-1-5 
//Target : ATtiny2313
// Crystal: 7.3728Mhz
#include <iot2313v.h>
#include <macros.h>
typedef unsigned char uchar;
typedef unsigned int  uint;
#define CLK  PORTD3
#define DA   PORTD4
#define RCK  PORTD5
#define EN   PORTD6
static uchar  fg_rin;
static uchar  redata[48]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
//********************************
const uchar  table[16]=
{
//0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//**********************************
const uchar  table1[24][8]=
{
//**********************************
0x44,0x44,0x44,0x41,0x14,0x44,0x44,0x44,
0x44,0x44,0x44,0x11,0x11,0x44,0x44,0x44,
0x44,0x44,0x41,0x11,0x11,0x14,0x44,0x44,
0x44,0x44,0x11,0x11,0x11,0x11,0x44,0x44,
0x44,0x41,0x11,0x11,0x11,0x11,0x14,0x44,
0x44,0x11,0x11,0x11,0x11,0x11,0x11,0x44,
0x41,0x11,0x11,0x11,0x11,0x11,0x11,0x14,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
//**************************************
0x11,0x11,0x11,0x12,0x21,0x11,0x11,0x11,
0x11,0x11,0x11,0x22,0x22,0x11,0x11,0x11,
0x11,0x11,0x12,0x22,0x22,0x21,0x11,0x11,
0x11,0x11,0x22,0x22,0x22,0x22,0x11,0x11,
0x11,0x12,0x22,0x22,0x22,0x22,0x21,0x11,
0x11,0x22,0x22,0x22,0x22,0x22,0x22,0x11,
0x12,0x22,0x22,0x22,0x22,0x22,0x22,0x21,
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
//************************************
0x22,0x22,0x22,0x24,0x42,0x22,0x22,0x22,
0x22,0x22,0x22,0x44,0x44,0x22,0x22,0x22,
0x22,0x22,0x24,0x44,0x44,0x42,0x22,0x22,
0x22,0x22,0x44,0x44,0x44,0x44,0x22,0x22,
0x22,0x24,0x44,0x44,0x44,0x44,0x42,0x22,
0x22,0x44,0x44,0x44,0x44,0x44,0x44,0x22,
0x24,0x44,0x44,0x44,0x44,0x44,0x44,0x42,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
//***********************************

};
//***************************
const uchar  table2[16][8]=
{
0x11,0x11,0x22,0x22,0x55,0x55,0x44,0x44,
0x11,0x12,0x22,0x25,0x55,0x54,0x44,0x41,
0x11,0x22,0x22,0x55,0x55,0x44,0x44,0x11,
0x12,0x22,0x25,0x55,0x54,0x44,0x41,0x11,
0x22,0x22,0x55,0x55,0x44,0x44,0x11,0x11,
0x22,0x25,0x55,0x54,0x44,0x41,0x11,0x12,
0x22,0x55,0x55,0x44,0x44,0x11,0x11,0x22,
0x25,0x55,0x54,0x44,0x41,0x11,0x12,0x22,
0x55,0x55,0x44,0x44,0x11,0x11,0x22,0x22,
0x55,0x54,0x44,0x41,0x11,0x12,0x22,0x25,
0x55,0x44,0x44,0x11,0x11,0x22,0x22,0x55,
0x54,0x44,0x41,0x11,0x12,0x22,0x25,0x55,
0x44,0x44,0x11,0x11,0x22,0x22,0x55,0x55,
0x44,0x41,0x11,0x12,0x22,0x25,0x55,0x54,
0x44,0x11,0x11,0x22,0x22,0x55,0x55,0x44,
0x41,0x11,0x12,0x22,0x25,0x55,0x54,0x44,
};
//========函数定义
void port_init(void);
void watchdog_init(void);
void uart0_init(void);
void delay(uchar count );
void init_devices(void);
void send(void);
/************************
**Main  Program
**************************/
void main(void)
{
 signed n;
 uchar i,j,word,temp;
 uchar *redata_addr;
 const uchar *paddr;
 //****************
 init_devices(); 
 delay(5);
 fg_rin=0;
//********************************

while(1)
{
//*********************
for(i=0;i<16;i++)
{
 for(n=47;n>0;n--)        
   redata[n]=(redata[n]<<4)|(redata[n-1]>>4); 
 redata[n]<<=4;
 redata[0]|=table[i]&0x0f;	      
 //*******************************transmit data 
 send();
 delay(2);
 }
 //while(1)
 //WDR();
}
//**************************Three Color Test
//*********************

//******************************
}//MAIN PROGRAM
/*********************************
**接收数据
**********************************/
#pragma interrupt_handler uart0_rx_isr:8
void uart0_rx_isr(void)
{
	    uchar i,temp;
	    uchar addr=40;
	    temp=UDR;		 			 
		if(temp==addr||temp==100||temp==255)//地址判断
		   {		
		    UCSRA&=~BIT(MPCM);//取消地址接收	                  
            for(i=0;i<8;i++)
               {
                while(!(UCSRA&0x80))WDR();				;			
                redata[7-i]=UDR;//读UDR时RXC将自动清除
               }
			UCSRA|=BIT(MPCM);//允许地址接收
			fg_rin=0x01;//设置接收数据标志
		  }
}
void port_init(void)
{
 PORTB = 0xff;
 DDRB  = 0x00; 
 PORTD = 0x00;
 DDRD  = 0xff; 
}

void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR|=(1<<WDCE)|(1<<WDE); 
 WDTCR = (1<<WDE)|(1<<WDP2)|(1<<WDP0); //WATCHDOG ENABLED - dont forget WDR
}
void uart0_init(void)
{
 UBRRH = 0x00; //set baud rate
 UBRRL = 0x01; //set baud rate
 UCSRA|=BIT(MPCM);
 UCSRB = 0X94;
 UCSRC = 0x06; //enable
}
void init_devices(void)
{
 CLI(); //disable all interrupts
 port_init();
 watchdog_init();
 MCUCR = 0x00;//禁止休眠(disable sleep)//
 GIMSK = 0x00;//屏蔽两个外部中断disable exit interrupts//
 TIMSK = 0x00;//屏蔽定时器中断 disable timer interrupts//
}
/*******************************
**delay
********************************/
void delay(uchar count )
{
uchar dd1,dd2,dd3;
for(dd1=0;dd1<count;dd1++)
   for(dd2=0;dd2<30;dd2++)
      for(dd3=0;dd3<250;dd3++)
        WDR();
}
/*******************************
**发送数据
********************************/
void send(void)
{
 signed char i;
 
 PORTD&=~BIT(RCK);
 PORTD&=~BIT(CLK);
 
 for(i=48;i>=0;i--)
 {
 //****************
 if(redata[i]&0x40)//
    PORTD|=BIT(DA);
 else
    PORTD&=~BIT(DA);	
 PORTD|=BIT(CLK);
		 NOP();
 PORTD&=~BIT(CLK);
 //==============
 if(redata[i]&0x20)//
    PORTD|=BIT(DA);
 else
    PORTD&=~BIT(DA);
 PORTD|=BIT(CLK);		
		 NOP();
 PORTD&=~BIT(CLK);
 //===============
 if(redata[i]&0x10)//
    PORTD|=BIT(DA);
 else
    PORTD&=~BIT(DA);
 PORTD|=BIT(CLK);		
		 NOP();
 PORTD&=~BIT(CLK);
 //===============
 if(redata[i]&0x04)//
    PORTD|=BIT(DA);
 else
    PORTD&=~BIT(DA);
 PORTD|=BIT(CLK);		
		 NOP();
 PORTD&=~BIT(CLK);
 //===============
 if(redata[i]&0x02)//
    PORTD|=BIT(DA);
 else
    PORTD&=~BIT(DA);
 PORTD|=BIT(CLK);		
		 NOP();
 PORTD&=~BIT(CLK);
 //===============
 if(redata[i]&0x01)//
    PORTD|=BIT(DA);
 else
    PORTD&=~BIT(DA);
 PORTD|=BIT(CLK);		
		 NOP();
 PORTD&=~BIT(CLK);
 //===============
 }
PORTD|=BIT(EN);//OFF DISPLAY
NOP();
PORTD|=BIT(RCK);
NOP();
PORTD&=~BIT(RCK);//LATCH DATA
NOP();
PORTD&=~BIT(EN);//ON DISPLAY

}

⌨️ 快捷键说明

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