山东省无障碍网站建设标准,哪个公司做网站,做钓鱼网站教程,更换网站logo硬件型号、软件版本、以及烧录流程
操作系统#xff1a;Windows 10 x84-64单片机#xff1a;STC89C52RC编译器#xff1a;SDCC烧录软件#xff1a;stcgal 1.6开发板#xff1a;普中51单片机开发板A2套件#xff08;2022#xff09;
在 VS Code 中新建项目到烧录的过程…硬件型号、软件版本、以及烧录流程
操作系统Windows 10 x84-64单片机STC89C52RC编译器SDCC烧录软件stcgal 1.6开发板普中51单片机开发板A2套件2022
在 VS Code 中新建项目到烧录的过程
左侧EIDE图标 - 新建项目 - 空项目 - 8位MCU项目 - 保存文件夹。更改构建配置SDCC更改烧录配置stcgal。在项目文件夹下新建 src/main.c右键 项目资源 - 添加源文件夹 - 普通文件夹选择 src。在 src 目录下开发最后点击右上角 构建、烧录单片机上电完成烧录。
LED 点阵屏 8x8 LED 点阵屏和之前用的数码管很相似通过交叉选择的方式来减少控制引脚从 8⋅8648\cdot 8648⋅864降到了 881688168816 个引脚比如控制第1行、第1列对应的引脚 A1、K1 分别为 高、低 电平那么左上角的LED就会亮起。
74HC595 串转并模块
单片机通过 IO 引脚来和外界交互但是这些引脚比较有限需要对引脚进行扩展或者说把占用引脚数较多的设备通过一些方式减少引脚数量。
38译码器。如果 8 位输出在同一时间可以只需要选择其中一位置高或置低那么一共就只有 8 个状态0000 0001, 0000 0010, 0000 0100, 0000 1000, 0001 0000, 0010 0000, 0100 0000, 1000 0000。这样就只需要 3 个二进制位就足以表达 3 个状态2382^38238这就是38译码器比如在控制数码管的时候其实并不需要让它们同时亮起只需要反复扫描刷新超过了人眼的刷新率就可以让它看起来是同时亮起了。串行转并行。如果实际需求 8 位要同时独立控制也就是 256 个状态这是无法使用38译码器来实现的那么可以使用串行数据转并行数据的方法用时间换空间的思路将输出的一段时间的连续信号通过移位寄存器存储起来然后同时将存储的 8 个信号直接推到 8 个引脚上也就是并行输出。
74HC595 是一个串转并模块将接收到的串行信号以并行的形式输出。不过它同样要占用单片机的 3 个引脚来实现这个效果。
SER单片机将高/低电平输出到 SER 引脚。SRCLK模块接收到 SRCLK 的上升沿时读取 SER 的电平作为移位寄存器的新的输入8 位移位寄存器整体被推动一位溢出位给到QH′QH^\primeQH′用来级联时输出到下一块 74HC595 的 SER 端RLCK模块接收到 RLCK 的上升沿时将当前 8 位寄存器存储的数据一并推到 8 位输出端QA, QB, QC, QD, QE, QF, QG, QH。
文字取模
找一个文字取模软件设置长宽然后在上面点出想要显示的内容即可。 把按列生成的16进制数组复制下来粘贴到代码里面。
完整代码
#include 8051.h
#define RLCK P3_5
#define SRCLK P3_6
#define SER P3_4unsigned char animate[] {0x00,0x62,0x91,0x89,0x46,0x00,0x00,0x7E,0x01,0x02,0x00,0x2F,0x00,0x00,0x32,0x49,
0x51,0x3E,0x00,0x7F,0x08,0x10,0x1F,0x00,0x10,0x7F,0x11,0x00,0x00,0x1E,0x01,0x0E,
0x01,0x1E,0x00,0x00,0x2F,0x00,0x1F,0x08,0x10,0x0F,0x00,0x06,0x09,0x09,0x7E,0x01,
0x00,0x00,};void Delay() //11.0592MHz
{unsigned char i;i 200;while (--i);
}void _74HC595(unsigned char data) {for (int i 0; i 8; i) {SER data (0x80 i);SRCLK 0; // 产生上升沿移位寄存器向下移位SRCLK 1;}RLCK 0; // 产生上升沿将寄存器的数据推到输出端RLCK 1;
}void MatrixLED(unsigned char data, unsigned char column) {_74HC595(data);P0 0xFF ^ (1 (7 - column));Delay();P0 0xFF;
}void main() {unsigned int cnt 0, cnt2 0, offset 5;while (1) {for (unsigned char i 0; i 8; i)MatrixLED(animate[(i offset) % 50], i);cnt;if (cnt 20){cnt 0;offset (offset 1) % 50;}}
}