基于C语言在8×8点阵上实现 I LOVE U 的动态显示

基于C语言在点阵上实现 I LOVE U 的动态显示。
本程序是基于STC-51开发板电路实现的。

#include<reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

code unsigned char image[] = {		
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,
0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,
0x99,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};      //图片字模表

void main()
{
	ENLED = 0;		
	ADDR3 = 0;		//使能U4(74HC138),选择点阵

	TMOD = 0x01;	 //设置T0为模式1
	TH0 = 0xfc;
	TL0 = 0x67;		 //设置定时初值为0xFC67,定时为1ms
	TR0 = 1;	     //打开定时器T0

	EA = 1;			 //打开总中断
	ET0 = 1;		 //打开T0中断

	while(1);
}

 //定时器T0中断,发生中断时更新图片
void InterruptTimer0() interrupt 1
{
	static unsigned char i = 0;     //点阵行号
	static unsigned char index = 0;	 //动态图片编号
	static unsigned char tmr = 0;    //用于200ms定时(每200ms更新一张图片)
	
	TH0 = 0xFC;
	TL0 = 0x67;	   //定时溢出时,重新赋值,保证每次定时为1ms

	P0 = 0xFF;	  //点阵消隐
	switch(i)
	{
		case 0 : ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;i++;P0 = image[0+index];break; //使第0行点阵数码管正极为高电平,通过P0点亮需要点亮的部分
		case 1 : ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;i++;P0 = image[1+index];break;
		case 2 : ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;i++;P0 = image[2+index];break;
		case 3 : ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;i++;P0 = image[3+index];break;
		case 4 : ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;i++;P0 = image[4+index];break;
		case 5 : ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;i++;P0 = image[5+index];break;
		case 6 : ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;i++;P0 = image[6+index];break;
		case 7 : ADDR2 = 1;ADDR1 = 1;ADDR0 = 1;i=0;P0 = image[7+index];break;
		default : break;
	}

	tmr++;
	if(tmr>=250)
	{
		tmr = 0;
		index++;
		if(index==33)
		{
			index = 0;
		}
	}
} 

显示效果如图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值