来个关于点阵的;
/******************************************************************
//文件名称:Led_matrix
//功 能:按键控制点阵显示
//作 者:懒猫爱飞
//日 期:2010.06.04
*******************************************************************/
#include<iom8515v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
//宏定义左移,右移函数crol为循环左移,cror为循环右移
#define crol(a,n) a=(a<<n)|(a>>(8-n))
#define cror(a,n) a=(a>>n)|(a<<(8-n))
uchar key_cunt=0;
uchar j;
uchar dat="0x80";
const uchar Dsy_matrix[4][8]=
{
{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00},
{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00},
{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00},
{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00}
};
/****************************************************************
//函数名称: delay(void)
//功 能:延时
//入口参数:无
//出口参数:无
*****************************************************************/
void delay(void)
{
uint i;
for(i=1;i<100;i++)
;
}
/****************************************************************
//函数名称:delay_1ms(void)
//功 能:延时1ms
//入口参数:无
//出口参数:无
*****************************************************************/
void delay_1ms(void)//1ms
{
uint i;
for(i=1;i<(uint)(8*143-2);i++)
;
}
/****************************************************************
//函数名称:delay_ms(uint time)
//功 能:延时time ms
//入口参数:time
//出口参数:无
*****************************************************************/
void delay_ms(uint time)//time*1ms
{
uint i="0";
while(i<time)
{
delay_1ms();
i++;
}
}
/****************************************************************
//函数名称:port_init(void)
//功 能:端口初始化
//入口参数:无
//出口参数:无
*****************************************************************/
void port_init(void)
{
DDRA = 0xff; //A口
PORTA = 0xff;
DDRB = 0x00; //B口
PORTB = 0x00;
DDRC = 0xff; //C口
PORTC = 0x80;
DDRD = 0x00; //D口
PORTD = 0x00;
}
/****************************************************************
//函数名称:init_devices(void)
//功 能:初始化器件
//入口参数:无
//出口参数:无
*****************************************************************/
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00; //低电平触发
EMCUCR = 0x00;
GICR = 0x40; //外部中断0
TCCR0|=(1<<CS02);//8M晶振,256分频
TIMSK|=(1<<TOIE0);//0x02;
SEI(); //re-enable interrupts
}
/****************************************************************
//函数名称:timer0_ovf_isr(void)
//功 能:Timer0中断处理函数
//入口参数:无
//出口参数:无
*****************************************************************/
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TIMSK &= ~BIT(TOIE0);
TCNT0 = 0x83; //reload counter value 256分频,4ms定时
PORTC=0x00; // 一定要消隐一下,不然仿真不成功
dat = crol(dat,1);
PORTA = ~Dsy_matrix[key_cunt][j];
PORTC = dat;
j = (j+1)%8;
TIMSK|=BIT(TOIE0);
}
/****************************************************************
//函数名称:int0_isr(void)
//功 能:中断处理函数
//入口参数:无
//出口参数:无
*****************************************************************/
#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(void)
{
PORTA = 0xff;
dat = 0x80;
j = 0;
key_cunt = (key_cunt+1)%4;
TIMSK|=BIT(TOIE0);
}
/****************************************************************
//函数名称:void main(void)
//功 能:主函数
//入口参数:无
//出口参数:无
*****************************************************************/
void main(void)
{
uchar i;
init_devices();
while(1);//这里什么函数也不写,只等待中断触发
}
每天进步一点点,开心多一点^_^
用户1306493 2010-6-20 13:51