|
楼主 |
发表于 2008-10-23 20:52:47
|
显示全部楼层
用的是手提上的摄像头效果不是太好请见谅!
#include<avr/io.h>
#include "stdio.h"
#include "string.h"
#include <avr/interrupt.h>
#include<avr/pgmspace.h>
#include<util/delay.h>
#include "Led_Port_Config.h"
#include "gb.inc"
unsigned char red_up_buf[128];
unsigned char red_down_buf[128];
unsigned char gre_up_buf[128];
unsigned char gre_down_buf[128];
void delay_Nms(unsigned int n)
{
while(n--)_delay_ms(1);
}
void write_byte (unsigned int Byte1,unsigned int Byte2,unsigned int Byte3,unsigned int Byte4)
{
unsigned char line;
unsigned char data = 0x80;
for (line=0;line<8;line++)
{
if (Byte4 & data)
{
LED_SER4_H();
}
else
{
LED_SER4_L();
}
if (Byte3 & data)
{
LED_SER3_H();
}
else
{
LED_SER3_L();
}
if (Byte2 & data)
{
LED_SER2_H();
}
else
{
LED_SER2_L();
}
if (Byte1 & data)
{
LED_SER1_H();
}
else
{
LED_SER1_L();
}
data = data>> 1;
LED_SCK_H();
NOP();
LED_SCK_L();
}
}
void write_line (unsigned char line)
{
unsigned char mul;
for (mul=0;mul<8;mul++)
{
write_byte(red_up_buf[line*8+mul],red_down_buf[line*8+mul],gre_up_buf[line*8+mul],gre_down_buf[line*8+mul]);
}
LED_RCK_H();
NOP();
LED_RCK_L();
}
void write_hz (unsigned char x,unsigned char hz)
{
unsigned char dd;
for (dd=0;dd<16;dd++)
{
red_up_buf[dd*8+x]=pgm_read_byte(hz*32+dd);
}
for (dd=0;dd<16;dd++)
{
red_up_buf[dd*8+x+1]=pgm_read_byte(hz*32+16+dd);
}
}
void print (void)
{
unsigned char line;
for (line=0;line<16;line++)
{
write_line(line);
LINE_PORT= line;
delay_Nms(1);
}
}
void drw_print (unsigned char DAT1,unsigned char DAT2,unsigned char DAT3,unsigned char DAT4)
{
unsigned char dat;
for (dat=0;dat<128;dat++)
{
red_up_buf[dat]=DAT1 ;
red_down_buf[dat]=DAT2;
gre_up_buf[dat]=DAT3;
gre_down_buf[dat]=DAT4;
}
}
void main(void)
{
unsigned char mm;
PORT_INI ();
drw_print(0x55,0x55,0xaa,0xaa);
for (mm=0;mm<10;mm++)
{
print();
}
while(1)
{
drw_print(0x00,0x00,0xff,0xff);
for (mm=0;mm<40;mm++)
{
print();
}
drw_print(0xff,0xff,0x00,0x00);
for (mm=0;mm<40;mm++)
{
print();
}
drw_print(0x00,0x00,0x00,0x00);
for (mm=0;mm<40;mm++)
{
print();
}
drw_print(0x55,0xaa,0x55,0xaa);
for (mm=0;mm<40;mm++)
{
print();
}
drw_print(0x55,0x55,0xaa,0xaa);
for (mm=0;mm<40;mm++)
{
print();
}
drw_print(0xaa,0xaa,0x55,0x55);
for (mm=0;mm<40;mm++)
{
print();
}
drw_print(0x55,0x55,0xaa,0xaa);
for (mm=0;mm<40;mm++)
{
print();
}
drw_print(0x55,0xaa,0x55,0xaa);
for (mm=0;mm<40;mm++)
{
print();
}
}
}
io——congfig
#define NOP() asm("nop")
#define LED_SER1_DDR DDRC
#define LED_SER1_PORT PORTC
#define LED_SER1_PIN PINC
#define LED_SER1_BIT 1
#define LED_SER4_DDR DDRC
#define LED_SER4_PORT PORTC
#define LED_SER4_PIN PINC
#define LED_SER4_BIT 0
#define LED_SER2_DDR DDRD
#define LED_SER2_PORT PORTD
#define LED_SER2_PIN PIND
#define LED_SER2_BIT 7
#define LED_SER3_DDR DDRD
#define LED_SER3_PORT PORTD
#define LED_SER3_PIN PIND
#define LED_SER3_BIT 6
#define LED_SCK_DDR DDRC
#define LED_SCK_PORT PORTC
#define LED_SCK_PIN PINC
#define LED_SCK_BIT 7
#define LED_RCK_DDR DDRC
#define LED_RCK_PORT PORTC
#define LED_RCK_PIN PINC
#define LED_RCK_BIT 6
#define LINE_DDR DDRA
#define LINE_PORT PORTA
#define LINE_PIN PINA
#define LED_SER4_H() LED_SER4_PORT |= 1<<LED_SER4_BIT
#define LED_SER4_L() LED_SER4_PORT &= ~(1<<LED_SER4_BIT)
#define LED_SER3_H() LED_SER3_PORT |= 1<<LED_SER3_BIT
#define LED_SER3_L() LED_SER3_PORT &= ~(1<<LED_SER3_BIT)
#define LED_SER2_H() LED_SER2_PORT |= 1<<LED_SER2_BIT
#define LED_SER2_L() LED_SER2_PORT &= ~(1<<LED_SER2_BIT)
#define LED_SER1_H() LED_SER1_PORT |= 1<<LED_SER1_BIT
#define LED_SER1_L() LED_SER1_PORT &= ~(1<<LED_SER1_BIT)
#define LED_SCK_H() LED_SCK_PORT |= 1<<LED_SCK_BIT
#define LED_SCK_L() LED_SCK_PORT &= ~(1<<LED_SCK_BIT)
#define LED_RCK_H() LED_RCK_PORT |= 1<<LED_RCK_BIT
#define LED_RCK_L() LED_RCK_PORT &= ~(1<<LED_RCK_BIT)
void PORT_INI() {
LINE_PORT=0x0F;
LED_SER1_L();
LED_SER2_L();
LED_SER3_L();
LED_SER4_L();
LED_RCK_L();
LED_SCK_L();
LINE_DDR=0x1F;
LED_SER1_DDR |= 1<<LED_SER1_BIT;
LED_SER2_DDR |= 1<<LED_SER2_BIT;
LED_SER3_DDR |= 1<<LED_SER3_BIT;
LED_SER4_DDR |= 1<<LED_SER4_BIT;
LED_RCK_DDR |= 1<<LED_RCK_BIT;
LED_SCK_DDR |= 1<<LED_SCK_BIT;
} |
|