![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
51单片机
尚久龙
这个作者很懒,什么都没留下…
展开
-
51单片机定时器
我们的晶振是 11.0592M,时钟周期就是 1/11059200,机器周期就是12/11059200,我们假如要定时 20ms,就是 0.02秒,要经过 x 个机器周期得到 0.02 秒,我们来算一下:x*12/11059200=0.02,得到 x= 18432。同时这个TF0位也可以不检测,直接写个中断函数,因为数据溢出后会产生中断,进入中断函数,执行其中的代码,定时器0的中断入口是1,定时器1的中断入口是3.程序如下面这样,上图中的按键按下后定时器开始工作,开始计时,每隔1秒钟数码管数字加1.原创 2023-12-18 15:49:07 · 873 阅读 · 0 评论 -
第一次设计PCB板的一些经验记录~!
第二个问题就是51单片机,没有经验的朋友,建议先做一个只有最小系统的元件就可以了,把所有的引脚都引出来弄个插针,好全方位的了解一下这个单片机,不要像我一样直接就想做成品,那是不可能的,幸好我的引脚什么的都标对了,下载程序,测试P0到P4都没有问题,P0端口要是用的话,记得加上拉电阻,不然不能用,P4.5口我没有测出来怎么用,点灯我是没有点亮的。我当时出了芯片都留了一个过孔,当时的过孔是45mil,感觉有点大,下次过孔设置成0.6mm就行,占用的空间小,一个插针正好进去,免得插针接触不良。原创 2023-11-21 19:11:13 · 169 阅读 · 0 评论 -
电脑通过串口助手和51单片机串口通讯
今天有时间把电脑和51单片机之间的串口通讯搞定了,电脑发送的串口数据,单片机能够正常接收并显示到oled屏幕上,特此记录一下,防止后面自己忘记了怎么搞得了。这些内容是我花了好几天的时间才理清楚的,希望看到的小伙伴,给点个爱心,并转发出去,希望帮到更多的人,这个东西网上很难找的。先来两个图片看看结果吧!原创 2023-10-01 12:57:11 · 2902 阅读 · 0 评论 -
51单片机用IIc控制OLED显示数组内容
为了能够看到51单片机接收到的串口数据,我选择了用oled显示收到的数据,特此花重金买了一块oled屏128X64的屏幕大概10来块钱吧!首先要达成的小目标就是能够显示数组的内容,建立一个字符数组,用来接收串口收到的数据,今天就研究怎么把数组的内容显示出来。下面就是程序了,先来个截图,防止有些小伙伴搞不明白,我是这么走过来的,知道有朋友找到我的文章后需要的是什么?现在是字体库,ASCII码中的字符,都在这个文件中,还有中文的显示,后面教大家怎么改汉字。串口_OLED.C文件,也是需要你自己来完成的文件。原创 2023-09-29 11:27:43 · 1982 阅读 · 0 评论 -
51单片机控制电动机正反转,PWM调速,记录转动圈数。
下面介绍一下程序的大体流程:按A键正转,按B键反转,0停止,1到9设置脉冲的高电平占用的百分比,10%到90%,也就是1最慢,9最快了。还能再快,没有写,到100%就是最快了,不管什么情况下,转够十圈都会停止转动。今天的实验需要用到的材料有:51单片机最小系统,4X4的矩阵键盘,DC直流6V-12V带编码器电机,L298N模块,一个led小灯。下面是电机的脉冲信号接法:4个脉冲1圈,图中单片机处接到51单片机的P3.2口,外部中断0。接下来就是我组装完了的一张图片了。原创 2023-09-28 11:17:32 · 2423 阅读 · 0 评论 -
51单片机连接的LCD1602,自己手写显示库
今天造成试了半天,也没有把lcd1602的显示库函数写好,总是报错,心情不太好,于是开车出去去另外的一个家,去收拾房子,上一家租户真的太邋遢了,弄得好乱,收拾了一天,算是把厕所收拾的差不多了,一看时间4点中了,回家,路上就一遍开车一遍想早晨的代码,为什么总是报错!下面把3段代码,3个文件都贴出来!望有缘者引用,如果有什么不对或是可以优化的地方,望不吝赐教!下面是main.C的源代码,主要是调用LCD1602.h的库文件使用,方便日后的显示问题,直接导入就能使用。下面是我的keil截图,说明文件之间的关系。原创 2023-04-10 17:34:57 · 637 阅读 · 0 评论 -
51单片机对步进电机的控制
以上两段代码都是经过测试的,可以直接复制编译成hex文件,最后导入proteus中模拟仿真。首先打开proteus软件,导入元器件并连线。先写一个用不精确的延时函数来控制转速的程序。接下来就是编写C代码了。L298的逻辑功能表。原创 2023-04-04 15:19:26 · 5411 阅读 · 1 评论 -
51单片机控制直流电机
上面代码的时间误差,有可能出现在赋初值上,可以手工把两种结果都算出来,就不用单片机自己算了,可以节约一部分时间,使结果更正确一些。下面的C代码就是用定时器来做的PWM,还是会有误差的。下面就是编写C程序了,代码经过测试了,可以直接复制粘贴。首先还是打开proteus软件,导入各个元器件,并连线。原创 2023-04-03 16:01:16 · 4124 阅读 · 3 评论 -
51单片机制作简易数字电压表
最后就是编译成hex文件并导入proteus中仿真了,然后调节滑动变阻器,就可以发现电压表的值和lcd的值是一样的了,肯定会有误差,而且这个误差没有办法消除。接下来就要编写c程序了,代码都是经过测试的,可以方型复制使用。首先打开proteus软件导入各个元器件,并连线。接下来介绍下adc0808的导入方法。原创 2023-04-02 21:38:43 · 5479 阅读 · 23 评论 -
51单片机生成模拟正弦波
最后就是编译成hex文件,导入proteus中,仿真运行,就能得到下面的正弦波形了。最后编译成hex文件导入proteus中模拟运行就得到下图的三角波波形了。然后编写c程序,看下面的代码。经过测试了,可以放心使用。首先打开proteus软件,如图导入各个元器件,并连线。下面在写一个怎么生成三角波形的程序。程序代码看下面,很简单的。原创 2023-04-01 18:19:51 · 4058 阅读 · 5 评论 -
51单片机生成PWM波并数字转模拟信号
上面有#define的用法,上次不会用了,找了半天也没有找到具体的用法,想要简写定义的单词,用#define还是很方便的。可以省去不少麻烦事,特此记录,方便后面我又忘了,好看自己的笔记。接下来编译成hex文件并导入proteus中进行仿真。最后放一个示波器,好观察输出的模拟信号的波形。首先打开proteus软件导入元器件并连线。输出了占空比为10%的PWM模拟信号波形。接下来就是编写c文件了。原创 2023-04-01 12:32:19 · 645 阅读 · 0 评论 -
51单片机控制点阵显示任何你想显示的文字
上图黄色的实心圆就是要亮的灯,想要这些个灯亮很简单,就是左面给高电平1,下面给低电平0,对应的led灯就会亮起,利用这个原理,把需要的图形画出来,然后把行和列的编码写出来,利用单片机速度很快的原理挨个点亮他们,超过了25赫兹人眼就分不出来有灯灭过了,也就是一直在亮了。其实点阵的原理很简单,就是操作起来麻烦一些,总的来说就是叫一部分灯亮起来,组成自己想要的图形而已,下面我就以显示数字0为例,来演示一下具体的操作过程。最后编译成hex文件导入proteus,模拟运行后,如图就能显示我们之前设计的图形0了。原创 2023-03-31 04:15:21 · 2614 阅读 · 0 评论 -
用lcd1602制作简单的时钟显示
如图打开proteus,导入元器件并连线,如果是实物的话,别忘了购买lcd屏上的对比度调节变阻器,不然显示不出来,对比度不是太浅就是太深,根本就看不到,需要注意。我就上了这个坑了,没有哪个文章或是视频提到过这个事,估计都没有拿实物做实验吧。接下来写c程序,我的程序都是经过测试的,跑起来没有问题,可以直接复制粘贴。最后编译成hex文件导入到proteus中或是烧录到单片机里就能正常运行了。不会编译的可以看我以前的文章,都有记录。本文最终的效果如图,lcd上能显示一个电子时钟,并能正确的显示时间。原创 2023-03-29 15:18:31 · 4002 阅读 · 6 评论 -
51单片机控制LCD1602显示字符串
然后编译成hex文件,导入proteus中,LCD1602就显示了我们要显示的字符串了。首先打开proteus如图导入元器件并连线。这里把写数据的过程通过时序图的方式展示一下。原创 2023-03-27 16:00:51 · 1518 阅读 · 0 评论 -
如何把keil中的子函数分离成库函数
这样我们写过的一些功能性文件都可以保存成一个文件(就像头文件一样)以后需要的时候,直接导入就直接能用了,不用再想具体的过程了。这就是上一篇文章写得串口通讯的c文件,现在咱们就把他来拆分一下,叫咱们的主文件只保留main函数,其他的代码单独写一个文件,在主文件中调用就好了,具体怎么拆分,首先新建两个文件和主文件一个目录下,一个点C文件,一个点h文件。从主文件中剪切下来的所有文件都放到新建的点c的文件中,然后把新建的点c的文件中的每个函数名复制到点h文件中,最后在主文件中include“点h”文件,就可以了。原创 2023-03-25 12:04:01 · 360 阅读 · 0 评论 -
51单片机通过sp485ee和电脑通讯
首先说一下接线的方法,下图就是正确的接线方法,51单片机的P3.0口接sp485的1口RO。sp485的8口接正5V,sp485的5口接地。sp485的6口接usb转485的A,sp485的7口接usb转485的B,usb转485插到电脑的usb口上。和上次的串口控制P2灯的程序一样,只是为了验证一下,电脑发送的数据,单片机能不能正常正确接收。接好线后的图片,多接了一个led灯,用来响应电脑发出的指令。原创 2023-03-24 17:17:30 · 2134 阅读 · 0 评论 -
电脑用串口控制89c52的P2的8个灯亮灭
首先要有一个89c52的单片机,用usb转ttl和单片机的P3.0和P3.1,gnd相连。在P2口接8个LED灯。下面开始编写c程,已经经过测试,可以放心正常使用。51单片机能和电脑通讯了,就可以做出很多好玩的东西了。下面是关于代码的一些简单解释。原创 2023-03-20 15:50:24 · 1358 阅读 · 0 评论 -
89c52RC单片机的串口通讯
在黑色Virturl Terminal中输入123456789,后能显示31 32 33 34 35 36 37 38 39,就能证明收发都没有问题了,显示的就是单片机发送过来的数据,是ASCII码表。接下来就是编译成hex文件,导入proteus中别忘了设置晶振频率为11.0592Mhz。下面先了解一下有关串口的寄存器的相关设置。下面就是编写c程序了,注意看每一步的注释。如图导入元器件并连线。原创 2023-03-19 12:16:32 · 690 阅读 · 0 评论 -
51单片机中断的实线与应用
本实验的主要功能是实现按下按钮,数码管增加1,到9后从0开始显示。如图打开proteus导入元器件并连线。下面了解一些中断的基础知识。原创 2023-03-18 15:25:26 · 75 阅读 · 0 评论 -
51单片机的计数器的工作原理
最后导入proteus中,按 按键3次实线数码管加1的效果。如图所示,导入元器件并连线。编写c程序并生成hex文件。原创 2023-03-17 10:58:53 · 2581 阅读 · 0 评论 -
51单片机设计16个按键的矩阵键盘
这样就能确定到底是哪一个按键被按下了,比如说按下的是7键,首先P3=0xf0,检查值有变化了就先保存下来,比如说是0x70,再把P3=0x0f,再检查P3的值有没有变化,如果有变化了,也要保存下来比如说是0x07,这会7键按下的值就是0x70+0x07=0x77,这样每一个键都会有一个固定的值,需要自己来编码,因为接线画图有不一样的地方,编码都会有变化的。如果有按键按下了,肯定就不是这个值了。第四列中的+-X÷任何一个被按下,L3的高电平都会被拉低,P3口就变成了00001110, P3=0x0E。原创 2023-03-15 15:34:18 · 5304 阅读 · 6 评论 -
51单片机按键的基本原理与实现
proteus导入hex文件后模拟运行,这样不论你按键安多快多慢,都能保证每次按下数码管加一个数。硬件消抖,说白了也是一种延时的处理方式,感觉还没有软件直接延时来的直接,直观,方便呢!由于人手按按键会发生不可避免的抖动问题,所以消抖就成为不能避免的步骤,行列式矩阵键盘,节省io资源,很少的io口,可以做出很多的按键出来。消抖主要有两种方式:1·硬件消抖 2·软件消抖。独立式键盘:直观,容易理解,占用io资源比较多。编写c代码并编译hex文件。如图搜索导入元器件并连线。原创 2023-03-14 12:19:05 · 589 阅读 · 0 评论 -
51单片机控制数码管动态显示
也就是位码的第一位为低电平,然后断码的除了g灯不亮其他都亮也就是0x3f,这样第一位就显示了0,后面就依次类推。由于这样接线太占用IO端口了,所以我们选用一个译码器来减少IO口的使用,用3个口控制8个口,这个译码器叫74ls138。如上图所示,这个芯片本省就带取反功能,也就是Y0输出1的条件是输入000 P端口十六进制为0x00。把编译的hex文件导入后就可以看到0到7都显示出来了,而且也不闪动,如果有闪动请降低延时数。根据这样的条件就可以用3个IO口控制数码管的8位位码了,节省5个IO口。原创 2023-03-08 16:26:11 · 20967 阅读 · 4 评论 -
数码管的静态显示
以上都是图片,下面把对应的值给到大家,0到9的十六进制值复制粘贴就好了:{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}首先说一下数码管,其实就是7个led灯,加上一个小数点正好8位,和51单片机的一个端口连接。最后打开proteus把生成的hex文件导入,模拟仿真就可以看到从0到9不停地显示数字了。接下来就实际操作一下,打开proteus,如图导入元器件并连线,数码管搜索SEG。使不同的灯亮起,就可以实现显示0到9这几个数字。原创 2023-03-08 10:41:38 · 2797 阅读 · 0 评论 -
二进制,十进制,十六进制的学习!
十六进制中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有 0~F 共16个数字,基数为16,加法运算时逢16进1,减法运算时借1当16。例如,数字 0、1、6、9、A、D、F、419、EA32、80A3、BC00 都是有效的十六进制。我们平时使用的数字都是由0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多个数字组合起来。原创 2023-03-07 20:17:52 · 293 阅读 · 0 评论 -
51单片机流水灯的通用方法
最后在proteus中导入新编译的.hex文件,然后开始仿真,流水灯正常运行。注释中提到了用户自定义路径,下图为自定义头文件路径的方法。首先打开proteus如图绘制电路图。原创 2023-03-07 15:38:02 · 126 阅读 · 0 评论 -
3步完成51单片机的流水灯
第二步:像下面的代码一样编写c程序,完事编译成.hex文件(不会可以看上一篇文章,有介绍!第三步:proteus中导入刚生成的.hex文件,之后模拟仿真,就可以看到流水灯的效果了!第一步:打开proteus,如图导入元器件并连线。原创 2023-03-06 15:18:33 · 176 阅读 · 0 评论 -
51单片机控制单个LED灯的亮灭
最后点击proteus左下角的开始仿真按钮,开始验证自己的程序和硬件连接。打开proteus按图导入LED,电阻和51单片机,并连线,之后写程序。按照下图的方式选择编译的hex文件存放位置和名称。然后打开proteus把刚刚生成的hex文件导入。之后点击keil左上角的编译图标,开始编译。然后看keil下方的信息提示栏。原创 2023-03-06 11:11:55 · 2470 阅读 · 0 评论 -
51单片机最小系统的绘制
今天学习了用proteus绘制51单片机的最小系统,这个proteus真是个不错的软件,什么硬件东西都不用购买就能够学习51单片机,完全仿真出来,真心不错的软件,希望被更多的人知晓使用。虽然51的开发板不贵,但是蚊子再小也是肉啊?下面的图就是51单片机的最小系统了,不会的小伙伴可以照着画几遍就会了。本电路中使用的电子元器件就这么多了!单片机搜索AT89C51。按钮搜索 BUTTON。晶振搜索CRYSTAL。原创 2023-03-05 18:02:06 · 1159 阅读 · 0 评论