实验分享——单片机控制LED点阵实验
一、设计目的
设计一个单片机控制的LED点阵显示系统,基本要求为:LED点阵能够“心型”图形。然后在此基础上,可以自行增加功能,例如但不限于:交替显示“心型”一个自定义图形。(自定义图形可选但不限于下列图形:Δ、▲、△、◆、◇、★、☆、♀、♂等)。所谓交替显示是指点阵中依次显示A、B、C三种文字或图形(每个图形点亮若干时间)并循环往复。
二、设计任务及要求
1.学习课程资料中附上的“普中51单片机开发攻略--A5(V5.5).pdf” 其中的第16 章LED 点阵实验。
2.学习完该内容后,设计一个单片机控制的LED点阵显示系统,基本要求为:LED点阵能够“心型”图形。然后在此基础上,同学们可以自行增加功能,例如但不限于:交替显示“心型”一个自定义图形。(自定义图形可选但不限于下列图形:Δ、▲、△、◆、◇、★、☆、♀、♂等)。所谓交替显示是指点阵中依次显示A、B、C三种文字或图形(每个图形点亮若干时间)并循环往复。
3.使用单片机开发板可能需要用到的知识及软件:
详见“普中51单片机开发攻略--A5(V5.5).pdf” --2.2 开发板使用方法(18到25页内容)
三、方案设计
首先将符号进行字模提取,并且编写程序,将单片机的2口和3口作为输出口,分别接入LED点阵的上下两排引脚。使用扫描的方式,使LED点阵可以正常的显示。进一步设计,增加延时函数,使得在一个图形显示完后,能够紧接着显示另一个图像,并循环往复,最终完成设计。
(一)前期准备
心形点阵图
图片
图片
图片
(二)软件设计
#include<reg52.h>
char code hang0[]={0x18,0x24,0x42,0x84,0x84,0x42,0x24,0x18};
char code hang1[]={0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18};
char code hang2[]={0x18,0x3C,0x7E,0xFF,0xFF,0x7E,0x3C,0x18};
char code lie1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
char code lie0[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
int i;
int num;
int m;
int n;
int c;
void delay(int a)
{
while(a--);
}
void main(){
int t;
t=6;
n=0;
while(1){
n++;
c=n%2;
for(i=0;i<1500;i++){
if(i<500)
{
for(num=0;num<8;num++){
if(c==0){
P1=lie0[num];
}else{
P3=lie0[num];
}
P2=hang0[num];
delay(t);
}
}
if(i>=500&&i<1000)
{
for(num=0;num<8;num++){
if(c==0){
P1=lie0[num];
}else{
P3=lie0[num];
}
P2=hang1[num];
delay(t);
}
}
if(i>=1000)
{
for(num=0;num<8;num++){
if(c==0){
P1=lie0[num];
}else{
P3=lie0[num];
}
P2=hang2[num];
delay(t);
}
}
}
}
}
四、调试及结果
实物图1
实物图2
五、设计总结
单片机控制LED点阵的实验设计总结如下:
1. 材料准备:准备LED点阵、单片机开发板(如Arduino、Raspberry Pi等)、面包板、导线等。
2. 连接电路:将LED点阵与单片机开发板连接起来,确保正确的极性和接线。通常需要使用导线和电阻来连接。
3. 编程:编写控制LED点阵的程序,包括控制LED灯的亮灭、行列扫描和显示图案等功能。具体的编程语言和代码逻辑根据使用的单片机和开发板而有所不同。
4. 上传程序:将编写的程序上传到单片机开发板上。
5. 测试:开启单片机开发板,观察LED点阵是否按照预期的方式显示。可以测试不同的图案、动画或文字,并确保LED点阵能够正确显示。
6. 调整和改进:根据测试结果进行调整和改进,确保LED点阵能够准确显示设计好的图案。
总的来说,单片机控制LED点阵的实验设计需要包括硬件连接和软件编程,通过这个实验可以更好地理解单片机控制外围设备的原理,并且锻炼了编程能力和电路连接能力。
基于STM32F103的单片机编程入门LED闪烁实验
STM32F103是STM32系列中非常经典的一款。LED闪烁实验主要目的是让初学者熟悉单片机的基本开发流程和编程方法。
原理:
LED灯本身是一种发光二极管,可以发出不同颜色的光。它具有极性,正极连接电源,负极接地时可以发光。我们通过stm32的GPIO口输出高低电平来控制LED的亮灭。
stm32的GPIO可配置为推挽输出。当输出高电平(1)时,端口输出与电源电压相同的电平,此时LED灯导通发光。当输出低电平(0)时,端口输出接地,LED灯截止熄灭。
通过循环改变GPIO的输出电平,我们可以反复让LED灯在点亮和熄灭之间切换,由于人眼的视觉残留效应,会产生视觉上的闪烁效果。为了避免LED频繁点亮熄灭对硬件的影响,我们在改变GPIO输出状态之间添加一定的延时,这样可以很容易地用代码方式实现LED的闪烁,这是stm32控制外设的一个典型案例。
实验主要步骤:
硬件电路连接
使用面包板进行接线,将LED灯、限流电阻连接到STM32F103开发板的GPIO口(以PB1作为实例),再连接好电源。这个电路非常简单,主要起到演示和验证的作用。
软件设计
我们可以使用基于Eclipse的STM32CubeIDE进行开发。首先需要配置工程选项,包括目标MCU型号STM32F103、时钟设置等参数。然后编写主函数,实现LED闪烁控制逻辑。
/* 定义LED连接的GPIO端口和引脚 */#define LED_PIN GPIO_Pin_1#define LED_PORT GPIOBint main(void){/* 初始化LED相关GPIO */GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin = LED_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_Init(LED_PORT, &GPIO_InitStruct);while (1) {/* LED灯亮 */GPIO_SetBits(LED_PORT, LED_PIN);/* 延时函数 */Delay(500);/* LED灯灭 */GPIO_ResetBits(LED_PORT, LED_PIN);/* 延时函数 */Delay(500);}}
上面是基于STM32F103的主要控制代码。通过设置GPIO电平来控制LED的亮灭,实现闪烁效果。代码中对具体的MCU型号相关内容(如GPIO端口定义)做了指定。
程序调试
编写完代码后,可以直接在开发板上调试运行,验证LED闪烁效果。
我这里分享一个包含150G学习资料的免费资料包,里面包含的学习内容、面试经验和项目实例都是比较新的和全面的「链接」
相关问答
51 单片机 C程序 实验LED 灯:[1]单个灯闪烁?单片机控制LED灯间隔时间闪烁,所用程序很简单,实际情况可作相应变化,也有多种方式实现。那么51单片机C程序实验LED灯:[1]单个灯闪烁?我们该怎么办呢?所需...单...
单片机 控制的 LED 动态扫描显示原理?1、首先要了解的是此数码管为共阴极数码管,即三极管Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相应的单片机P23、P22、P21、P20为低电平。2、动态扫描显示...
单片机LED 灯不亮问题!(初学者)?P0如果不等于0,默认就是高电平。看电路,P0为高时,LED负极是高电平时,不导通LED肯定不会亮。P0如果不等于0,默认就是高电平。看电路,P0为高时,LED负极是高电平...
为什么 单片机实验 中编程成功了但 LED 灯却不亮?你的LED灯是几只,怎么接的?如果是8只LED接P0,且共阳极接法的话P0=1:00000001除了最右边一只不亮,7只都亮P0=0XFF:11111111则8只LED都不亮。你的LED灯是几只,....
单片机 的显示屏数字闪烁什么原因?单片机的显示屏数字闪烁可能是由以下原因导致的:1.单片机部件损坏:可能是由于某个部件损坏导致的问题,比如说脉冲发生器、电压比较器、电压调节电路等。2...
单片机 实现 led 优点?300个肯定用串联了。。有专门的LED控制器单卖6块钱一个,最多可串联2000个LED。。控制器功能,可间隔0.5S闪烁,可变换光色(仅限于多色LED),可以一直亮着。...3...
求问关于 单片机LED 灯的问题我让P0^2亮是左数第三个亮,为什么...[最佳回答]第一种可能:看单片机的数据手册,确定P0^2对应的是第几个BIT.看你的结果,貌似是P0^0对应最高bit第二种可能:你的板子上LED的排列导致的.第一种可能...
单片机led 灯延时2秒后闪烁?单片机led闪烁有以下原因1、LED灯珠与LED驱动电源不匹配,正常单颗足1W灯珠承受电流:280-300mA,电压:3.0-3.4V,如果灯珠芯片不是足功率的就会造成灯光光源频...
单片机 如何控制一个 LED 灯闪烁频率不断加快?暂时想到两种解决方案:1.最简方案——利用延时函数:进入主函数后,初始化LED,设置一个延时初始值,然后进入while循环,里边只做四件事,打开LED,利用键盘返回...
单片机 的外部中断仿真 实验 。在 单片机 P1口上接有8只 LED 。在外部中断0输入引脚(P3.2)接一只按钮开关K1?中断处理函数感觉有些问题,for循环之前使用P1=0x0f;然后将for内的P1=0x0f;改为P1=~P1;同时for循环中应该需要调用延时函数Delay(10);这里的值看你自...