原创 AVR学习日志(四十一)--8×8LED点阵屏显示数字

2010-7-3 19:28 4752 3 3 分类: MCU/ 嵌入式


     又有好久没有来这了,再写一写学习日志吧,不管是多是少,每天学一些,总会有些获,在这个浮躁的社会,能静下心来学一学自己感兴趣的东西,也是人生一大快事^_^呵呵……


         好了,这次还是弄点阵,不过不显示图形了,让它显示数字,下面是俺的程序;


 /******************************************************************
//文件名称: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 dat="0x80";


const uchar Dsy_matrix[]=
{
  0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,
 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,
 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,
 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,
 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,
 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00,
 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00,
 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,
 0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,
 0x00,0x32,0x49,0x49,0x49,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 = 0x00;  //
 
 TCCR0|=(1<<CS02); //8M晶振,256分频
 
 TIMSK|=(1<<TOIE0); //
 
 SEI();       //re-enable interrupts
}


uchar i="0";
uchar t="0";
uchar Num_Index=0;
/****************************************************************
//函数名称: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[Num_Index * 8 +i];
 PORTC = dat;
 
 if(++i==8) i = 0;
 if(++t == 250)
 {
   t = 0x00;
  if(++Num_Index == 10) Num_Index = 0;
 }
 
 TIMSK|=BIT(TOIE0);
}


/****************************************************************
//函数名称:void main(void)
//功    能:主函数
//入口参数:无
//出口参数:无
*****************************************************************/
void main(void)
{
 uchar i;
 init_devices();
 while(1);//这里什么函数也不写,只等待中断触发
}


         呵呵,是的这是一个月前写的了,只是一直没有时间来写写学习日志,也许懒猫真的很懒吧,不过也有一个条件限制哦,懒猫住那地没有网络,所以只能在公司抽空总结一下了,呵呵,不过懒猫已经很知足了,毕竟还有个地方能让俺来学习……


      呵呵,不废话了……


每天进步一点点,开心多一点^_^


 



 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /1 下一条