- 博客(22)
- 收藏
- 关注
原创 初学51单片机之I2C总线与E2PROM以及UART简单实例应用
reset password ” 命令能修改24C02存储的数据,以输入命令“reset password 2024”为例,通信软件接收收区会显示命令语句reset password 2024,并且液晶上会显示“2024”,同时修改了E2PROM密码存储区的数据,修改后的密码。并开始处理数据帧命令。2:程序的密码是存放在24C02这个E2PROM器件“非易失区”的4个存储地址中(0x00,0x01,0x02,0x03),以密码2024为例,它是以字符形式‘2’、‘0’、‘2’、‘4’分别按顺序存入的。
2024-10-12 19:39:19 518
原创 初学51单片机之I2C总线与E2PROM二
1:ACK信号在SCL为高电平期间会一直保持。2:在字节数据传输过程中如果发送电平跳变,那么电平信号就会变成重复起始或者结束的信号。(上篇博文的测试方法还是不能够明确证明这个结论,因为笔者的开发版晶振已经固定是11.0592M,而改变电平信号是用赋值语句比如SDA = 0;它是需要1个机器周期的即1us。而24C02是可以工作在400KB的速率下的。因此笔者由程序引起电平跳动时序过程是必然满足起始或者结束条件的时序时间的)因此这个结论只能是。
2024-09-30 17:31:24 1036 1
原创 初学51单片机之I2C总线与E2PROM
首先先推荐B站的I2C相关的视频看完视频估计就大概知道怎么操作I2C了,他的LCD1602讲的也很不错,把数据建立tsp和数据保持thd,比喻成拍照时候的两个过程,感觉还是很形象的。数据建立tsp和数据保持thd,这两个参数在描述上就很反直觉。“建立”是数据传输的开头代表摆pose,“保持”是数据传输的结尾代表按快门,而且LCD1602和I2C在thd上不太一样,后续笔者会描述一下原因(是笔者的个人见解)。在描述I2C之前向分享一下,笔者在写程序的时候遇到的一些错误,其实是抄程序(后续会贴出函数。
2024-09-23 09:56:31 1212
原创 初学51单片机之IO口上下拉电阻相关
这个时候IO端口电压输出高电平,而且因为T1的上拉电阻很小(有没有阻值不知道反正也看不出,看它写了个强,那限流电阻肯定很小),因此是端口能够输出较大的电流给外部装置,这种工作方式对外部装置说就是“拉”电流,对单片机来说是把电流推出去一样,也叫“推”电流,它和上面的那个工作方式一起叫做推挽工作模式,因为限流电阻小说以叫强推挽输出。而到了85K的时候,端口突然输出高电平,从现象来看应该是工作在弱上拉的状态,弱上拉的上拉电阻相比于现在的下拉电阻偏小,因此欧姆定律分压端口呈现高电平。,现在端口电压输出低电平了。
2024-09-13 10:34:31 1449
原创 初学51单片机1602液晶时序图实例分析
上述说法是不对的,“忙”判断结束后bit7和“忙”状态检测就没有关系了,纯粹是因为赋值运算把bit7拉低了,而且这个时间恰好发生在赋值语句执行一半的时候发生,(整个语句要2个机器周期即2us)且bit7这个端口既是忙状态检测也是数据输入输出端口这个要分开,当然这个前端初始化也没有“忙”判断,可能是15ms的延时时间使得无需再忙判断。这个清屏效果大概持续了1.38ms,在这个过程中E端是周期7.6us的方波,bit7是高电平,RS选择端是低电平,RW选择端是高电平。该句写入的地址是:0x00+2=0x02;
2024-08-09 18:47:41 1055
原创 初学51单片机之 LCD1602液晶相关
while(1);/*等待液晶准备好 */do{//读取状态字//bit7等于1表示液晶正忙,重复检测直到等于0为止/*向LCD1602液晶写入一字节命令,cmd为待写入的命令值 *///高脉冲//高脉冲/*向LCD1602液晶写入一字节数据,dat为待写入数据 *//* 设置显示RAM起始地址,亦即光标位置,(x,y)为对应屏幕上的字符坐标*/if(y == 0)else。
2024-07-31 16:58:29 1556
原创 初学51单片机之指针基础与串口通信应用
开始之前推荐一个电路学习软件,这个软件笔者也刚接触。名字是Circuit有在线版本和不在线版本,这是笔者在B站看视频翻到的。这是地址。离线版本在网站内点这个进去根据你的系统下载你需要的版本红线的是windows版本。它的使用说明都是英文,如果是英文苦手,可以使用QQ浏览器自带网页翻译或者使用翻译工具百度或者搜狗,它有个文件翻译功能可以翻译整个文件。虽然有些翻译的不正确,总比没有的好。这期浅述下C语言指针与串口通信的一些功能。在学C之前笔者就听过C指针的恶名,这次写程序的时候也确实狠狠的体验了一把。
2024-07-22 11:24:47 964 2
原创 初学51单片机之UART串口通信
上电瞬间单片机会先检测需不需要下载程序,虽然单片机的VCC是由开关来控制的,但是由于CH340T的3脚是输出引脚,如果没有此二极管,开关后级单片机在断电的情况下,CH340T的3脚和单片机的P3.0(RXD)引脚连在一起,有电流会通过这个引脚流入后级电路并且给后级的电容充电,造成后级有一定幅度的电压,这个电压值虽然只有2~3V左右,但是可能会影响正常的冷启动。然后是单片机1的TXD引脚接到单片机2的RXD引脚上,功能是单片机1向单片机2发送信息,(这个过程分为两部分,单片机1的。即不受外部信号的控制。
2024-07-11 16:50:05 1254
原创 初学51单片机之简易电子密码锁及PWM应用扩展
前一篇博文提到了定时炸弹。从实用角度来说,这么危险的东西如果流出去将是一个很大的风险。因此考虑需要做个电子密码锁。由于笔者没有看过正规的关于密码锁的文档,做这个是笔者的一时兴起,这个密码锁的结构可能充满着野路子。
2024-06-28 16:21:24 914
原创 初学51单片机之长短键应用定时炸弹及扩展应用
51单片机的RAM分为两个部分,一块是片内RAM,一块是片外RAM。data: 片内RAM从 0x00 ~0x7F 寻址范围(0-127) 容量共128Bidata: 片外RAM从 0x00~0xFF 寻址范围(0-255) 容量共256Bpdata:片外RAM从 0x00~0xFF 寻址范围(0-255) 容量共256Bxdata:片外RAM从 0x0000~0xFFFF 寻址范围(0-65535)容量共65536B从上述的范围可以看出,。
2024-06-27 17:35:20 1083
原创 初学51单片机之PWM实例呼吸灯以及遇到的问题(已解答)
事实上主函数第一次执行 ConfigPWM()的时候,把PWMOUT赋值为1,是可以进入一次if函数的,然后会经过9ms的等待再次进入中断进入else()函数,从此后就再也无法进入if函数了,后续现象和视频一样。第二:在debug时间误差的时候笔者发现,定时器0中断,程序指针一直无法进入if函数,直接进入了else函数,导致中断时间间隔一直都是1ms,看视频。总结:不知道是keil5软件本身有问题,还是笔者的keil5软件有问题,还是笔者哪里没有考虑到,路过的小伙伴如果知道缘由,
2024-06-19 18:23:33 2356
原创 初学51单片机之数字秒表
一开始写大概率这种逻辑的,但是从debug的过程中可以看到,第5次中断的时候会进入if函数,那么时间间隔就会发生变化了,当然这依然可以时间补偿,就是求时间的时候需要注意一下,而且这会导致每5次中断,其中一个数码管的刷新时间变得长一点,虽然不影响显示结果,因此该函数放在LedSCan()后面,而且因为几乎必然发生的显示延迟,对于进位结果下个中断使能,好像也不是很难接受的结果。对于时间流逝流程如下图,(这个过程不太好描述,笔者无法准确表述,各位自己感悟一下,秒表的显示逻辑是这样的,我们肉眼看到也是如此)
2024-06-13 22:20:07 1224
原创 初学51单片机基础知识与步进电机28BYJ-48详解
尽信书,则不如无书。也许有很多优秀的教材在它出现的那个年代是不错的指导,但是随着时代的变化,当初的研究对象可能都已经发生了变化,然而教材却一成不变。引用它的人不去验证,曾经的闪光点都可能变成最大的错误。
2024-06-07 21:44:41 2654 14
原创 初学51单片机之矩阵按键的应用末篇
形参(形式参数)是在函数或方法定义中用来接收参数值的变量。它们在函数或方法调用时被实参(实际参数)的值赋予,从而在函数或方法体内使用这些值来完成特定的操作。形参在函数或方法定义中声明,可以有多个,每个形参用逗号分隔。形参可以有指定的数据类型,也可以是泛型类型。形参的定义可以包括参数名和数据类型,例如:int x, String name, T item等。实参是在函数调用时传递给函数的输入值,它们是函数定义中的形参的具体值。实参可以是常量、变量、表达式或者其他函数调用的返回值。
2024-05-29 18:05:37 1301
原创 初学51单片机矩阵按键与消抖
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上就稳定接通,在断开时也不会一下子彻底断开,而且在闭合和断开的瞬间伴随一连串的抖动。而keyin1的电压由开发版上的开关K1,K5控制。对于本案的复位电路来说,当一上电,电容类似一条导线,5V电压全部在R31的电阻上,随着电容充电,电容两端慢慢(这个所谓的慢慢其实极快是微秒级的)变大,这个过程的状态是。在某个系统中,如果需要使用很多的按键,做成独立的按键会大量的占用IO口,因此引入了矩阵按键的涉及。
2024-05-10 23:35:16 1419
原创 初学51单片机点阵LED,数码管,流水灯同时工作的程序实现
两句三八译码器从U3切换到U4了,这时点阵LED上的就会显示图象,显示的图像就由前个中断刷新语句ADDR2=0;程序已经实现了三个模块的同时工作,该篇的程序前文都有放出,笔者只是把各个功能模块整合在了一起,在实现这个程序的时候笔者遇到了一个问题导致了鬼影的产生。之前的博文都是放在刷新语句的前面了,现在是放在中断函数里ADDR3和ENLED的前面,因为这两句是切换38译码器U3和U4的语句,举个例子:上图是定时器0的中断函数程序,假设在进入该中断前已经执行了中断1的刷新语句的case3语句,
2024-05-07 16:03:09 1195
原创 初学51单片机之点阵LED、数组、变量
1:具有相同的数据类型。2:具有相同的名字。3:在存储器中是被连续存放的数组的初始化数据类型 数组名[数组长度] = [初值列表]举例:unsigned char LedChar[8] ={0xF7,0xF6,0xB6,0xB6,0xB6,0xB6,0x80,0xFF,}1:初值列表里的数据之间要用逗号隔开,最后一个逗号可以取消2:初值列表里的初值数量必须等于或者小于数组长度,当小于数组长度时,数组的后面没有赋值的元素由系统自动赋值为0.3:若给数组的所有元素都赋初值,可以省略数组的长度。
2024-05-06 22:45:52 2553
原创 初学51单片机定时器数码管及C语言实践
TL0 = 0x00;if(shift1 == 0x01 && shift2 == 0x80) //判断循环变量1到最右端且循环变量2到最 左端。if(shift1 ==0x80 && shift2 == 0x01) //循环变量都移到最左端和最右端。if(shift1 == 0x08 && dir1 == 0) //判断是否 shit1运动到端口4并且是向左移动。if(shift1 == 0x10 && dir1 == 1) //判断是否 shift1运动到端口5并且是向右运动。
2024-04-11 21:11:55 1205
原创 初学51单片机流水灯实现及C语言实践相关
不过笔者并没有气馁(一度放弃主要很多时候发现写语句的时候没注意这里少一点那里那个搞错了,逻辑也不是很明朗,最后在debug的时候发现第二版程序P0口变成变量值了而且运行二十几次就超出INt的范围,然后对比老师的程序之前的程序发现P0不是变量不会出现local里面,考虑到可能是输入法造成的果断删掉重写,这次就没这个问题了。if(shift1 == 0x01 && shift2 == 0x80) //判断循环变量1到最右端且循环变量2到最 左端。//shift2在端口5 0x10的位置往右移一位,
2024-04-06 23:06:30 1344
原创 VS 2019中文输出乱码问题
我们需要找到这个点C文件右键用笔记本打开然后 文件-另存为-编码方式选择ANSI-保存-选者“是”可以看到除了C字母正确输出,后续的中文输出都已经乱码了。关于vs2019软件输出中文乱码的一种解决方法。然后我们重新CTREL +F5。这时候中文输出就不再乱码了。
2024-04-05 23:03:12 825
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人