基于51单片机电子贺卡Proteus仿真+程序

功能介绍:设计使用51单片机为控制芯片,主要包含点阵字符显示和蜂鸣器音乐播放,在播放音乐的同时,通过一个8*8点阵来滚动显示字符,同时轮流点亮四周的发光二极管。完美仿真出一个电子贺卡的相关功能,程序采用keil编写,有中文注释,新手容易看懂,仿真采用Proteus,全套仿真资料齐全:文末有资料链接

231-基于51单片机电子贺卡(程序+仿真+全套资料)

 

 

程序部分展示,有中文注释,新手容易看懂

void init_devices(void)
{
	TMOD=0x11;
	TH1=0x71;
	TL1=0x48;	//40ms的定时
	TH0=0x00;
	TL0=0x00;	//初始化
	IT1=1;
	EA=1;
	EX1=1;
	ET0=1;
	ET1=1;	
}

void int1() interrupt 2 using 0
{
	sign++;	//下一曲
	switch(sign)
	{	case 1:TR0=1;pf=Happy_Birthday;flag=16;break;
		case 2:pf=Legend;flag=8;break;
		case 3:pf=Childhood;flag=8;break;
		case 4:TR0=0;sign=0;Buzz=1;break;//停唱Buzz=1,三极管关断,防止大电流
		default :pf=Happy_Birthday;flag=16;break;	
	}
    p=pf;
}

//定时器0产生频率
void timer0() interrupt 1 using 1
{
	uint temp=65536-*p;
	TH0=(uchar)(temp>>8);
	TL0=(uchar)temp; 
	if(*p) Buzz^=1;
	else Buzz=1;	//Buzz=1,三极管关断,防止大电流

}

//定时器1产生40ms延时
void timer1() interrupt 3 using 2
{		
	TH1=0x71;
	TL1=0x48;	//40ms的定时
		  
	if(flag==0)
	{	
		flag=*(p+1);
		if(flag==0) 
		{
			p=pf;
			flag=*(p+1);
		}
		else 
		{	p++;
			p++;
		}
	}
	else flag--; 
	time++;		//流水灯定时
	if(time%5==0)
	{  switch(time)
	   {case 5:P0=0x01;break;
	    case 10:P0=0x02;break;
	  	case 15:P0=0x04;break;
		case 20:P0=0x08;break;
	    case 25:P0=0x10;break;
	  	case 30:P0=0x20;break;
		case 35:P0=0x40;break;
		case 40:P0=0x80;time=0;break;
		default :time=0;break;	   
	   }
	}
}

void delay(uint i)
{	
	while(i--);
}
void word(uchar *ps)	 //显示单个字符
{	uchar i,j;
	uchar _bit=0X80;
	for(i=0;i<200;i++)
	{		
		for(j=0;j<8;j++)
		{  P1=0xff;
		   P2=~_bit;
		   P1=*(ps+j);
		   delay(100);
		   _bit>>=1;
		}
		_bit=0X80;
	}
}
void display(uchar *ps)	 //显示移动字符
{	uchar i,j;
	uchar _bit=0X80;
	while(*(ps+8)!=0xaa)
	{		
		for(i=0;i<20;i++)
		{		
				for(j=0;j<8;j++)
				{  P1=0xff;
				   P2=~_bit;
				   P1=*(ps+j);
				   delay(100);
				   _bit>>=1;
				}
			_bit=0x80;
		}
		ps++;
	}
}

百度云盘资料下载链接 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值