📄 app.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 + -