【51单片机】LED 点阵

0、前言

参考:普中 51 单片机开发攻略 第13章

1、硬件

在这里插入图片描述

2、软件

mian.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;  //串行数据输入

u8 ledduan[]={
   0x38,0x7c,0x7e,0x3f,0x3f,0x7e,0x7c,0x38}; //显示“0”,类似于动态数码管的段选
u8 ledwei[]={
   0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; // 选择第几列显示,类似于动态数码管的位选

void LedMatrix(u8 line, u8 dat); //LED点阵实现显示“0”数字

void main() 
{
    
	while(1)
	{
   
		u8 i;
		for(i=0;i<8;i++)
		{
   
			LedMatrix(~ledwei[i], ledduan[i]);
			delayms(1);  //延时,产生流水灯效果,防止视觉停留过短
		}
	} 
}

void LedMatrix(u8 line, u8 dat) //LED点阵实现显示“0”数字
{
   
	u8 i;
	SRCLK = 1;
	RCLK_PIN = 1;
	LED_M = line;
	
	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;	
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-22 07:32:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-22 07:32:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-22 07:32:01       82 阅读
  4. Python语言-面向对象

    2024-01-22 07:32:01       91 阅读

热门阅读

  1. SpringBoot整理-Spring Boot配置

    2024-01-22 07:32:01       52 阅读
  2. 本地仓库如何与远程仓库进行关联

    2024-01-22 07:32:01       57 阅读
  3. SQL Server 恢复软件

    2024-01-22 07:32:01       52 阅读
  4. PG DBA培训26:PostgreSQL运维诊断与监控分析

    2024-01-22 07:32:01       57 阅读
  5. 第一节 K8S的基础概念

    2024-01-22 07:32:01       53 阅读
  6. 扫雷游戏(c++题解)

    2024-01-22 07:32:01       69 阅读
  7. C++:特殊类的设计和类型转换

    2024-01-22 07:32:01       46 阅读
  8. CAP 角度下的 Redis 与 Zookeeper 锁架构比较

    2024-01-22 07:32:01       58 阅读
  9. pve创建ubuntu cloud虚拟机模版

    2024-01-22 07:32:01       59 阅读