AVR外设汇总之8x8点阵屏.pdf
文本预览下载声明
1. 8*8点阵屏
//原理与MAX7219数码管差不多,故沿用其函数。解释详情请参见本文集中的AVR
设汇总之MAX7219数码管.doc文档。
//将PA3位置0
#defineMAX7219_LOAD2_0 {DDRA|=_BV(PA3);PORTA=~_BV(PA3);}
//将PA3位置 1
#defineMAX7219_LOAD2_1 {DDRA|=_BV(PA3);PORTA|=_BV(PA3);}
使用方法与数码管基本相同。
例子:
#includeavr/io.h
#includeutil/delay.h
#defineMAX7219_LOAD_0 {DDRA|=_BV(PA3);PORTA=~_BV(PA3);}//将PA3位置零
#defineMAX7219_LOAD_1 {DDRA|=_BV(PA3);PORTA|=_BV(PA3);}
#defineMAX7219_CLK_0 {DDRA|=_BV(PA2);PORTA=~_BV(PA2);}
#defineMAX7219_CLK_1 {DDRA|=_BV(PA2);PORTA|=_BV(PA2);}
#defineMAX7219_DIN_0 {DDRA|=_BV(PA0);PORTA=~_BV(PA0);}
#defineMAX7219_DIN_1 {DDRA|=_BV(PA0);PORTA|=_BV(PA0);}
//向7219发送地址和数据或控制
voidWrite7219(unsignedcharaddr,unsignedchardata)
{
unsignedchari=0;
MAX7219_LOAD_0;
MAX7219_CLK_0;
for(i=0;i8;i++)
{
if(addr0x80){MAX7219_DIN_1;}
else {MAX7219_DIN_0;}
_delay_us(2);
MAX7219_CLK_1;
_delay_us(2);
MAX7219_CLK_0;
addr=1;
}
MAX7219_CLK_0;
for(i=0;i8;i++)
{
if(data0x80){MAX7219_DIN_1;}
else {MAX7219_DIN_0;}
_delay_us(2);
MAX7219_CLK_1;
_delay_us(2);
MAX7219_CLK_0;
data=1;
}
MAX7219_LOAD_1;
}
voidinit7219(void)
{
Write7219(0x9,0x00);
Write7219(0xa,0x7);
Write7219(0xb,0x7);
Write7219(0xc,0x1);
}
unsignedcharfan[8]={0x5A,0xFF,0x5A,0xFF,0x18,0x7E,0x18,0x66};
unsignedcharchuang[8]={0x21,0x51,0xFD,0x55,0x75,0x55,0x4D,0x7F};
unsignedcharhong[8]={0x18,0xFF,0x89,0x7E,0x10,0x28,0x52,0xBF};
intmain(void)
{
init7219();
inti,j;
/* while(1){
for(j=0;j33;j++)
{
for(i=0;i8;i++)
{
if(j9){
Write7219(i+1,fan[i](8-j));}
elseif(j17){
Write7219(i+1
显示全部