51单片机利用独立按键控制8*8LED矩阵显示图案

图案能自己运行但不能利用按键控制,如何利用按键控制LED显示特定的图案

img

  • 文章:8个独立按键控制LED 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: 51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件)中的 三、显示复杂的数字 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • //显示一个零
    #include<reg51.h>
    #include<intrins.h>
    
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    sbit SRCLK = P3^6; 
    sbit RCLK = P3^5;  
    sbit SER = P3^4;
    
    u16 led_x[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
    u8 led_y[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
    
    void delay(u16 i)
    {
    	while(i--);
    }
    
    void hc595sendbyte(u8 a) 
    {	 
    	u16 i ;
    	SRCLK = 0;
    	RCLK = 0;
    	for (i = 0; i < 8; i++) {
    		SER = a >> 7;  
    		a <<= 1;    
    		SRCLK = 1;
    		_nop_();
    		_nop_();
    		SRCLK = 0;
    	}
    	RCLK = 1;  
    	_nop_();
    	_nop_();
    	RCLK = 0;
    }
    
    void main() 
    {	u16 i;
    	while(1){
    	for (i = 0; i < 8; i++){
    		P0=led_x[i]; //(1)
    		hc595sendbyte(led_y[i]); //(2)
    		delay(100);  //(3)
    		hc595sendbyte(0x00);  // (4)
    	}
    	}
    }
    

    注释:

    1. P0控制阴极,我们从左到右进行扫描,依次给每一列阴极低电平。
    2. 当列阴极是低电平时,我们就响应给以列提供预设号的状态。
    3. 把延时函数加大,你将看到led灯从左边第一列依次向右亮起。
    4. 这就是消除拖影的操作。 很简单,不多说了。
      在这里插入图片描述