- 博客(64)
- 资源 (1)
- 收藏
- 关注
原创 TL431的工作原理
VKA被拉低后,导致R1、R2上分压降低,则VREF降低,当VREF降低到<2.5V后,TL431截止,VKA电压又上升,R1、R2上分压增大,VREF电压又回升,当VREF电压回升到>2.5V后,TL431又导通,VKA又被拉低,如此循环往复。起初当VKA>2.5V时,431导通,K端和A端短接,K端电压被拉低到VKA<2.5V,则431立马截止,K端和A端断开,K端电压又升高到>2.5V,431再次导通,如此循环往复,由于导通截止是一个较快的过程,使得VKA最终稳定在2.5V。
2025-09-17 15:38:46
457
原创 进阶四 带记忆功能的000-255 计数器
/ 限制计数值在0-255范围内。// 读取当前计数值。// 8位数据接口,两行显示,5x7点阵。// 写入新数据后光标右移,显示不移动。// 读取当前计数值。// 显示开,光标关,闪烁关。if(button == 0) { // 检测按键按下。
2025-06-13 16:27:35
631
原创 进阶二:基于HC-SR04和LCD1602的超声波测距
本实验中,LCD1602的数据口接89C51的P0口,用于传输数据和指令;接通电源后,LCD1602液晶显示屏上正常显示“Distance: cm”,当改变被测物体与HC-SR04超声波测距模块之间的距离时,显示屏上的距离值能够实时更新,并且测量结果与实际距离基本相符。模块自动检测是否有返回信号,若有返回信号,ECHO引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。改变被测物体与HC-SR04超声波测距模块之间的距离,观察LCD1602液晶显示屏上显示的距离值是否相应变化。
2025-05-10 21:08:26
1013
原创 什么是IIC通信
即,是一种串行通信总线,由飞利浦公司在1980年代开发,主要用于连接主板、嵌入式系统或手机中的低速外围设备。IIC协议采用,允许多个主设备和从设备连接在同一总线上进行通信。IIC协议的工作原理:。SDA用于传输数据,SCL用于提供时钟信号以确保同步。IIC总线上的每个设备都有一个唯一的地址,主设备通过发送这个地址来选择与其通信的目标设备。:当SCL为高电平时,SDA从高电平跳变到低电平,表示通信开始。:在数据传输过程中,SCL为高电平时,SDA上的数据必须保持稳定;
2025-05-05 12:59:46
1140
原创 实验七:基于89C51和DS18B20的温度采集与显示
学习使用DS18B20数字温度传感器采集温度数据。使用4位共阳极数码管显示温度数据,显示精度到小数点后两位。熟悉89C51单片机的I/O口操作和位选控制。89C51单片机开发板DS18B20数字温度传感器4位共阳极数码管三极管8550(用于位选驱动)电阻、电容等辅助元件杜邦线若干:分别连接数码管的A - G段和DP(小数点)。P2.4P2.5P2.6P2.7:分别控制数码管的不同位显示。使用8550(PNP型)作为位选驱动,控制数码管位选通。DQ端连接89c51的P2.3。
2025-04-29 22:54:12
1085
原创 51单片机波特率与溢出率的关系
若计数初值为X(即从X开始计数),那么以工作在方式2的8位自动重装计数,则可以计数256,从而需要计数的位数为:256-X。1/fosc易知为一个晶振周期(也就是拍节),12/fosc也就是一个机器周期(因为单片机中一个机器周期为12个晶振周期)。波特率(Baud Rate)表示串口通信中每秒传输的位数(bps),而溢出率是定时器每秒溢出的次数。根据所需的波特率和晶振频率,计算定时器的初值 TH1。51单片机的串口有4种工作模式(模式0~3),其中模式1和模式3的波特率是可变的,由定时器1的溢出率决定。
2025-04-14 23:14:56
1272
原创 Timer/Counter Control Register.(Reset Value = 0000 0000b)
TCON Register - TCON (S:88h)
2025-03-25 15:20:35
287
原创 30 矩阵键盘行扫描法
0xf7)break;break;break;break;=0xf7);=0xfb)break;break;break;break;=0xfb);=0xfd)break;break;break;break;=0xfd);=0xfe)break;break;break;break;=0xfe);
2024-11-04 14:55:49
545
原创 关于堆栈的讲解
一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
2024-10-28 15:20:26
396
1
原创 STM32F103 点亮LED闪烁与仿真
/ 注意这里的函数非常的重要,这里是将对应的GPIO端口初始化成默认的样子,因为这个端口可能在以前使用过,其他的配置可能发生了改变。//打开对应的GPIO的时钟,注意这里不同的外设可能挂载的时钟不同,所以需要开原理图,GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PIN);//配置引脚的输出的模式。3、不同的芯片对应的库函数具有一定的差异,所以在进行引入库的时候,可能会出错误,
2024-06-08 10:52:38
856
原创 04 静态显示
/定义按键的输入端(为单片机P2口的P2.1按键)//定义按键的输入端(为单片机P2口的P2.1按键)//定义按键的输入端(为单片机P2口的P2.1按键)//定义按键的输入端(为单片机P2口的P2.1按键)
2024-04-10 11:25:29
377
原创 03 按键识别程序
/定义按键的输入端(为单片机P2口的P2.1按键)while(BY1==0);//按键锁定,每按一次count 只加1.#define uchar unsigned char//宏定义无符号字符型。//右移8-count位。//按键计数,每按一下,count 加1。//将count 清零。if(count==8) //计8次重新计数。//左移count位。//延时,软件去干扰。//定义为11111110。void delay10ms(void) //延时程序。if(BY1==0) //确认按键按下。
2024-04-10 11:08:02
919
原创 01 闪烁灯
/定义单片机P1口的第0位 (即P1.0)#define uchar unsigned char//宏定义无符号字符型。#define uint unsigned int //宏定义无符号整型。#include<reg52.h> //库文件。//点亮P1.0口灯。//熄灭P1.0口灯。while(1) //无限循环。void delay()//延时程序。
2024-04-10 08:56:44
483
原创 STM32之GPIO
开漏复用:GPIO口被复用成别的功能,即不是作为GPIO口使用,比如IIC模块对应的输出数据线GP,使用时需要外接上拉电阻。分为A.B.C.D.E.F.G组,每组16个IO,IO都是多功能的,使用之前需要先配置,默认是输入功能。推挽复用:GPIO口被复用成别的功能,即不是作为GPIO口使用,比如UART.SPI模块对应的输出数据线。开漏输出:IO输出0接GND,IO输出1悬空,需要外接上拉电阻,才能实现输出高电平。推挽输出:IO输出0接GND,IO输出1接VCC,拥有比较强的驱动能力。
2024-03-20 14:53:33
284
原创 C语言内部函数与外部函数
开发大型项目,可能包含很多源文件来分别实现,最终,再整合在一起,有时,一个源文件中,需要调用其他源文件中的函数。此时,就需要一些特殊函数,只在定义的文件中有效,这类函数称为内部函数。内部函数只能被本文件中其他函数调用。在定义内部函数时,需要在函数的返回值类型前面添加static关键字,也称静态函数。当多人开发时,可能出现函数重名的情况,不同源文件中的同名函数会相互干扰。编译器,通过extern关键字会知道,add()函数是定义在其他文件中的外部函数。定义外部函数的方式,在函数的返回值类型前面添加。
2023-06-30 19:33:45
495
2
原创 C语言中sprintf()函数的用法
printf 和sprintf都使用格式化字符串来指定串的格式,在格式串内部使用一些以”%”开头的格式说明符来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。注意8进制和16进制都不会打印出负数,都是无符号的,实际上也就是变量的内部编码的直接用16进制或8进制表示。9、sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(str)求字符串的长度。
2023-05-23 21:59:19
2163
原创 29 LCD1602 BY GPT
void lcd1602_display(unsigned char x, unsigned char y, unsigned char *str) //LCD1602显示字符串。void lcd1602_write_data(unsigned char dat) //LCD1602写数据。void lcd1602_write_cmd(unsigned char cmd) //LCD1602写命令。//LCD1602 RW引脚。void lcd1602_init() //LCD1602初始化。
2023-05-23 16:16:07
202
原创 28 单片机控制的88点阵
/* Main.c file generated by New Project wizard * * Created: 周五 5月 12 2023 * Processor: AT89C51 * Compiler: Keil for 8051 */#include #include unsigned char code TableH[] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};unsigned char co
2023-05-12 20:56:30
305
原创 27 DS18B20+4LED 显示温度
/后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就。//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就。//因为读取的温度是实际温度的补码,所以减1,再取反求出原码。switch(i) //位选,选择点亮的数码管,// i=1时 大约延时10us。//间隔一段时间扫描。
2023-05-04 09:46:23
226
原创 26 DS18b20 LED显示
/ 显示0~9的数字。DSPORT = 1;//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就。//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就。//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点。DSPORT = 1;
2023-05-03 21:09:48
153
原创 25 LED显示矩阵键盘键值(行扫描法)ASM+C51
初始化MOV A,R3;MOV P0,A;;扫描;;;LP1:clr p1.3jnb p1.7,$mov r3,#0nokey12:jnb p1.6,$mov r3,#4nokey13:jnb p1.5,$mov r3,#8nokey14:jnb p1.4,$mov r3,#12;;;LP2:clr p1.2jnb p1.7,$mov r3,#1。
2023-04-28 11:44:33
901
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅