又有好久没有来这了,再写一写学习日志吧,不管是多是少,每天学一些,总会有些获,在这个浮躁的社会,能静下心来学一学自己感兴趣的东西,也是人生一大快事^_^呵呵……
好了,这次还是弄点阵,不过不显示图形了,让它显示数字,下面是俺的程序;
/******************************************************************
//文件名称: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);//这里什么函数也不写,只等待中断触发
}
呵呵,是的这是一个月前写的了,只是一直没有时间来写写学习日志,也许懒猫真的很懒吧,不过也有一个条件限制哦,懒猫住那地没有网络,所以只能在公司抽空总结一下了,呵呵,不过懒猫已经很知足了,毕竟还有个地方能让俺来学习……
呵呵,不废话了……
每天进步一点点,开心多一点^_^
文章评论(0条评论)
登录后参与讨论