本帖最后由 curton 于 2019-8-12 14:43 编辑

8×8点阵屏可以显示简单的图形符号,还记得前面显示心形图案吗?将你的大作呈现在小伙伴面前,是不是很得意呢?我们看到这个制作,都很好奇,咱们能不能让它跳起来,更有动感呢?
跳动的心,很有创意。有创意就要付出行动。一起学习吧!
首先设计两幅心形图案,
95eef01f3a292df5caee9fd2944b636535a87342.jpeg
8b82b9014a90f60355cfde7b10688c1eb051ed0a.jpeg
如果在程序中设计上1秒中显示图案一,下1秒显示图案二,不停循环显示,是不是看到的就是一颗跳动的心呢?
硬件图 8b82b9014a90f60355cfde7b10688c1eb051ed0a.jpeg
1.程序设计
#include <reg52.h>//头文件
#defi ne uchar unsigned char
#defi ne uint unsigned int
uchar table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//P0
//uchar table1[]={0xFF,0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7};//P1心形图案
uchar table11[]={0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7};
//uchar table2[]={0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF};//P1心形图案上移
uchar table22[]={0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF};
uchar i,num;//定义变量
/*延时函数*/
void delay(uint a)
{
while(a--);
}
/*主函数*/
void main()
{
TMOD=0X01;//0000 0001//定时器0工作方式1
TH0=0X3C;//装入初值,50ms
TL0=0XB0;//装入初值
EA=1;//打开总中断开关
ET0=1;//打开定时器0中断开关
TR0=1;//启动定时器0
while(1)
{
if(num>=0&&num<=20)
{
for(i=0;i<8;i++)
{
P0=table
P1=table11
delay(30);
}
P1=0xff;
}
if(num>20&&num<=40)
{
for(i=0;i<8;i++)
{
P0=table
P1=table22
delay(30);
}
}
}
}
void timer0()interrupt 1 //中断函数
{
TH0=0X3C;//装入初值
TL0=0XB0;//装入初值
num++;//变量累加
if(num>40)
{
num=0;
}
}
2.程序解释
if(num>=0&&num<=20)
“&&”表示逻辑与,num>=0&&num<=20的含义是num>=0与num<=20同时满足,才能执行“{}”中的语句。
激动人心的时刻即将到来,下载程序,跳动的心呈现在眼前。采用table1与table2是空心跳动的心,采用table11与table22是实心跳动的心。