用点阵显示一个爱心

#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int  uint16;

uint8 led[]={0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7};

sbit  ADDR0=P1^0;
sbit  ADDR1=P1^1;
sbit  ADDR2=P1^2;
sbit  ENLED1=P1^4;
sbit  ENLED2=P1^3;
void display_love();
void int_init();
void timer1_init();
main()
{
    P0=0x00;
	ENLED1=0;
	ENLED2=0;

	//选中定时器1方式1
	timer1_init();
	int_init();
	while(1);
}
void timer1_init()
{
    TMOD |= 0x10;
	TMOD &= 0xdf; 
	TR1   = 1;
   //0xF8CD 是2ms,定时器1方式1
	TH1=0xF8;
	TL1=0xCD;
}
void int_init()
{
	ET1 = 1;
	EA  = 1;
}



	
void display_love()
{
   static uint8 n=0;
  switch(n)
  {
    case 0:ADDR0=0;ADDR1=0;ADDR2=0; break;
	case 1:ADDR0=1;ADDR1=0;ADDR2=0; break;
	case 2:ADDR0=0;ADDR1=1;ADDR2=0; break;
	case 3:ADDR0=1;ADDR1=1;ADDR2=0; break;
	case 4:ADDR0=0;ADDR1=0;ADDR2=1; break;
	case 5:ADDR0=1;ADDR1=0;ADDR2=1; break;
	case 6:ADDR0=0;ADDR1=1;ADDR2=1; break;
	case 7:ADDR0=1;ADDR1=1;ADDR2=1; break;
	default:break;
  }
  P0=led[n];
  if(7==n++)n=0;
}

void interrupt_led() interrupt 3
{
  	TH1=0xF8;
	TL1=0xCD;
	//display();
	display_love();
}























  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
点阵显示器是一种常见的显示设备,可以通过控制每个像素的亮灭来显示各种图形、字符等。下面介绍一种基于51单片机的点阵显示显示爱心符号的方法。 1. 确定点阵显示器的接口类型和引脚定义。通常点阵显示器的接口类型有并口、串口、SPI等,需要根据具体的接口类型来确定接口电路和数据传输方式。同时,还需要根据点阵显示器的像素数和排列方式来确定引脚定义和数据格式。 2. 定义爱心符号的像素数据。爱心符号可以通过一组二进制数来表示,其中1表示该像素点亮,0表示该像素点不亮。例如,以下是一个8x8的爱心符号的像素数据: ``` 00011000 00111100 01111110 11111111 11111111 01111110 00111100 00011000 ``` 3. 编写程序,在点阵显示器上显示爱心符号。具体步骤如下: a. 将点阵显示器的引脚设置为输出模式,同时初始化显示器的状态。 b. 将爱心符号的像素数据存储在程序中,可以使用数组或常量等方式。 c. 循环扫描每个像素点,将符号中相应的像素点亮起来。 d. 控制程序的运行速度,可以使用延时等方式来控制刷新频率。 以下是一段简单的51单片机程序,可以在8x8的点阵显示器上显示爱心符号: ```c #include <reg52.h> sbit LATCH = P1^0; // 控制锁存器 sbit CLK = P1^1; // 控制时钟 sbit DATA = P1^2; // 控制数据 // 定义8x8的爱心符号像素数据 const code unsigned char HEART[8] = { 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18 }; // 向点阵显示器发送一个字节的数据 void writeByte(unsigned char byte) { unsigned char i; for (i = 0; i < 8; i++) { DATA = (byte >> i) & 0x01; CLK = 0; CLK = 1; } } // 在点阵显示器上显示一个像素点 void drawPixel(unsigned char x, unsigned char y, unsigned char value) { LATCH = 0; writeByte(0x01 << y); writeByte(value << x); LATCH = 1; } // 在点阵显示器上显示爱心符号 void drawHeart() { unsigned char x, y; for (y = 0; y < 8; y++) { for (x = 0; x < 8; x++) { if ((HEART[y] >> x) & 0x01) { drawPixel(x, y, 1); } else { drawPixel(x, y, 0); } } } } // 主函数 void main() { drawHeart(); while (1) { // 循环显示爱心符号 } } ``` 以上程序中,使用了三个控制引脚:LATCH、CLK和DATA。其中,LATCH用于控制锁存器,CLK用于控制时钟,DATA用于控制数据。程序中的writeByte函数用于向点阵显示器发送一个字节的数据,drawPixel函数用于在点阵显示器上显示一个像素点,drawHeart函数用于在点阵显示器上显示爱心符号。 需要注意的是,以上程序仅仅是一个简单的示例,实际应用中还需要根据具体的点阵显示器型号和接口类型进行适当的调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值