失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C51---9 LED点阵屏

C51---9 LED点阵屏

时间:2023-05-13 20:21:29

相关推荐

C51---9 LED点阵屏

C51---9 LED点阵屏

LED点阵屏介绍🎉显示原理74HC595开发板引脚C51的sfr、sbitLED点阵屏显示图形🎉main函数代码实验结果LED点阵屏显示动画🎉main函数代码实验结果

LED点阵屏介绍🎉

显示原理

74HC595

74HC595是串行输入并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。

开发板引脚

C51的sfr、sbit

sfr (special function register): 特殊功能寄存器声明

例:sfr PO = 0x80;

声明PO口寄存器,物理地址为0x80

sbit (special bit) : 特殊位声明

例: sbit PO_1 = 0x81;

或 sbit PO_1 = PO^1;

声明PO寄存器的第1位

可位寻址/不可位寻址:在单片机系统中,操作任意寄存器或者某一位的数据时,必须给出其物理地址,又因为一个寄存器里有8位,所以位的数量是寄存器数量的8倍,单片机无法对所有位进行编码,故每8个寄存器中,只有一个是可以位寻址的。对不可位寻址的寄存器,若要只操作其中一位而不影响其它位时,可用“&=”、"|="、“^=”的方法进行位操作

LED点阵屏显示图形🎉

main函数代码

#include <REGX52.H>#include "Delay.h"sbit RCK=P3^5;//RCLKsbit SCK=P3^6;//SRCLKsbit SER=P3^4;//SER#define MATRIX_LED_PORTP0/*** @brief 74HC595写入一个字节* @param Byte 要写入的字节* @retval 无*/void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){SER=Byte&(0x80>>i);SCK=1;SCK=0;}RCK=1;RCK=0;}/*** @brief LED点阵屏显示一列数据* @param Column 要选择的列,范围:0~7,0在最左边* @param Data 选择列显示的数据,高位在上,1为亮,0为灭* @retval 无*/void MatrixLED_ShowColumn(unsigned char Column,Data){_74HC595_WriteByte(Data);MATRIX_LED_PORT=~(0x80>>Column);Delay(1);MATRIX_LED_PORT=0xFF;}void main(){SCK=0;RCK=0;while(1){MatrixLED_ShowColumn(0,0x3C);MatrixLED_ShowColumn(1,0x42);MatrixLED_ShowColumn(2,0xA9);MatrixLED_ShowColumn(3,0x85);MatrixLED_ShowColumn(4,0x85);MatrixLED_ShowColumn(5,0xA9);MatrixLED_ShowColumn(6,0x42);MatrixLED_ShowColumn(7,0x3C);}}

实验结果

LED点阵屏显示动画🎉

main函数代码

#include <REGX52.H>#include "Delay.h"#include "MatrixLED.h"//动画数据unsigned char code Animation[]={0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C,0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C,0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C,};void main(){unsigned char i,Offset=0,Count=0;MatrixLED_Init();while(1){for(i=0;i<8;i++)//循环8次,显示8列数据{MatrixLED_ShowColumn(i,Animation[i+Offset]);}Count++;//计次延时if(Count>15){Count=0;Offset+=8;//偏移+8,切换下一帧画面if(Offset>16){Offset=0;}}}}

MatrixLED.c代码

#include <REGX52.H>#include "Delay.h"sbit RCK=P3^5;//RCLKsbit SCK=P3^6;//SRCLKsbit SER=P3^4;//SER#define MATRIX_LED_PORTP0/*** @brief 74HC595写入一个字节* @param Byte 要写入的字节* @retval 无*/void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){SER=Byte&(0x80>>i);SCK=1;SCK=0;}RCK=1;RCK=0;}/*** @brief 点阵屏初始化* @param 无* @retval 无*/void MatrixLED_Init(){SCK=0;RCK=0;}/*** @brief LED点阵屏显示一列数据* @param Column 要选择的列,范围:0~7,0在最左边* @param Data 选择列显示的数据,高位在上,1为亮,0为灭* @retval 无*/void MatrixLED_ShowColumn(unsigned char Column,Data){_74HC595_WriteByte(Data);MATRIX_LED_PORT=~(0x80>>Column);Delay(1);MATRIX_LED_PORT=0xFF;}

实验结果

如果觉得《C51---9 LED点阵屏》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。