前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习单片机第7天 LED点阵 + 直流电机实验

学习单片机第7天 LED点阵 + 直流电机实验

原创
作者头像
笃信好学
发布2022-09-26 03:31:27
2620
发布2022-09-26 03:31:27
举报
文章被收录于专栏:笃信好学笃信好学

LED 点阵实验

16*16LED 点阵模块
16*16LED 点阵模块

代码实现目标: 在点阵屏上点亮一个点

代码语言:javascript
复制
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存
器
#include "intrins.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
//--定义使用的IO 口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
***********
* 函数名: Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
* 函数功能: 通过595 发送四个字节的数据
* 输入: dat1:第4 个595 输出数值
* * dat2: 第5 个595 输出数值
* * dat3:第2 个595 输出数值
* * dat4:第1 个595 输出数值
* 输出: 无
*********************************************************************
**********/
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //发送8 位数
{
SER = dat1 >> 7; //从最高位开始发送
dat1 <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //发送8 位数
{
SER = dat2 >> 7; //从最高位开始发送
dat2 <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //发送8 位数
{
SER = dat3 >> 7; //从最高位开始发送
dat3 <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //发送8 位数
{
SER = dat4 >> 7; //从最高位开始发送
dat4 <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
/********************************************************************
***********
* 函数名: main
* 函数功能: 主函数
* 输入: 无
* 输出: 无
*********************************************************************
**********/
void main()
{
 while(1)
 {
  Hc595SendByte(0xff,0xfe,0x00,0x01);
 }
}

第1 个输出的是0xff,也就是后八列,列是低电平有效,所以这八列是无效的,点不亮。

第2 个输出的是0xfe,也就是前八列,列是低电平有效,所以这八列有七列是无效的,点不亮,只有第一列是低电平,是有效的,第一列上的灯可以点亮。

注意:这里是“可以”点亮, 还必须要行为高电平才一定点亮。

第3 个输出的是0x00,也就是后八行(P9-P16),行是高电平有效,所以这八列是无效的,点不亮:

第4 个输出的是0x01,也就是前八行(P1-P8),行是高电平有效,所以这八行有七行是无效的,点不亮,只有第一行是高电平,是有效的,第一行上的灯可以点亮。注意:这里是“可以”点亮,还必须要是列为低电平才一定点亮。

直流电机实验

直流电机简介
直流电机简介

在未学习PWM 之前,我们先简单使用GPIO 来控制电机的正反转和停止。不能直接使用GPIO 来驱动电机,而需要相应的驱动芯片来实现。

驱动芯片是ULN2003,该芯片是一个单片高电压、高电流的达林顿晶体管阵列集成电路。不仅可以用来驱动我们的直流电机,还可用来驱动五线四相步进电机,比如28BYJ-48 步进电机。

ULN2003芯片
ULN2003芯片
开发板上的ULN2003芯片接口
开发板上的ULN2003芯片接口

代码实现目标

代码语言:javascript
复制
#include "reg52.h" //此文件中定义了单片机的一些特殊功能
寄存器
#include<intrins.h> //因为要用到左右移函数,所以加入这个头文件
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit moto=P1^0;
/****************************************************************
***************
* 函数名: delay
* 函数功能: 延时函数,i=1 时,大约延时10us
*****************************************************************
**************/
void delay(u16 i)
{
while(i--);
}
/****************************************************************
***************
* 函数名: main
* 函数功能: 主函数
* 输入: 无
* 输出: 无
*****************************************************************
**************/
void main()
{
  u8 i;
  moto=0; //关闭电机
  for(i=0;i<100;i++) //循环100 次,也就是大约5S
  {
     moto=1; //开启电机
     delay(5000); //大约延时50ms
  }
  moto=0; //关闭电机
  while(1)
 {
 }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LED 点阵实验
  • 直流电机实验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档