0、前言
参考:
普中 51 单片机开发攻略 第12章
【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】 https://www.bilibili.com/video/BV1Mb411e7re/?p=21&share_source=copy_web&vd_source=77e36f24add8dc77c362748ffb980148
nop()是什么语句?
<< and >> 位运算操作符
1、74HC595芯片介绍
【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】 https://www.bilibili.com/video/BV1Mb411e7re/?p=21&share_source=copy_web&vd_source=77e36f24add8dc77c362748ffb980148
从18:30—— 结尾
2、硬件
3、软件
目前解决不了模块化编程,很难受。只能全部放在main.c里面了
main.c
#include <reg52.h>
#include <intrins.h>
#include "delayms.h"
typedef unsigned char u8;
typedef unsigned int u16;
//定义相应的IO口
#define LED_M P0//LED点阵,取0启动,取1关闭,0x00全亮
sbit RCLK_PIN = P3^5; //存储寄存器时钟输入
sbit SRCLK = P3^6; //移位寄存器时钟输入
sbit SER = P3^4; //串行数据输入
void LedMatrix(u8 dat); //LED点阵实现整行流水灯函数
void main()
{
while(1)
{
u8 LedNum = 0x01;
u8 i;
for(i=0;i<8;i++)
{
LedMatrix(LedNum);
LedNum <<= 1;
delayms(1000); //延时,产生流水灯效果,防止视觉停留过短
}
}
}
void LedMatrix(u8 dat) //LED点阵实现整行流水灯函数
{
u8 i;
LED_M = 0x00; //将LED点阵的整行点亮
SRCLK = 1;
RCLK_PIN = 1;
for(i=0;i<8;i++)
{
SER = dat>>7; //将dat的最高位传给SER
dat <<= 1; //将dat的数据右移一位
SRCLK = 0; //发送时序
_nop_(); //空函数,保证有时间发送时序
_nop_();
SRCLK = 1;
}
RCLK_PIN = 0; //
_nop_(); //空函数,保证有时间发送时序
_nop_();
RCLK_PIN = 1;
}