![]() |
马上学习 发表于 2024-10-31 10:58 是有点毛病,delay应该放在第二个for循环里面,大意了 |
应该提出要求:比如灯具体要怎么流动,从左到右,从上到下,单个点亮,逐个点亮 |
谢谢Graves,你优化后只能8只灯循环 谢谢飞云居士,你的优化很好 |
飞云居士 发表于 2024-10-25 18:26 谢谢指导 |
#include <reg51.h> // AT89C51寄存器定义 // 定义LED点阵连接的端口 #define ROW P0 // 行连接到P0 #define COL P1 // 列连接到P1 // 延时函数 void delay(unsigned int time) { unsigned int i, j; for(i = 0; i < time; i++) for(j = 0; j < 120; j++); } // 流水灯显示函数 void display() { unsigned char i, j; unsigned char row_pattern[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 行数据 unsigned char col_pattern[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 列数据 for(i = 0; i < 8; i++) { // 遍历每一行 ROW = row_pattern[i]; // 设置当前行 for(j = 0; j < 8; j++) { COL = ~col_pattern[j]; // 设置当前列并反转,点亮对应的LED delay(50); // 控制流水灯的速度 } } } void main() { while(1) { display(); // 不断显示流水灯效果 } } 代码说明: 行与列的控制:ROW和COL分别定义了点阵的行和列连接的端口,程序中通过简单的扫描来实现流水灯效果。 行列数据:row_pattern和col_pattern数组用于定义哪一行、哪一列的LED应该点亮。 延时:通过delay()函数控制流水灯的速度。 |
#include<reg51.h> const unsigned char P1_arry[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; const unsigned char P3_arry[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(unsigned int i) { while(i--); } void main() { u8 i; u8 j; while(1) { for(i=0;i<8;i++) { p3 = P3_arry[i]; for(j=0;j<8;j++) { p1 = P1_arry[j]; } delay(3000); } } } |