51单片机第七天

发布时间:2016-08-06 No Comments

学了i2c通讯。
感觉算是结束了初学阶段。
后边就是扩展了,拿到一个新的芯片,首先看下引脚定义,推荐接法,然后看看时序,就可以用了。
而拿到一个新的单片机呢,当然也是看看说明书。
经过常见外围设备的学习,已经基本理解了单片机开发到底是做什么的。
下一步准备学电路,有了电路才能自己组合原件实现想要的功能。要不就只能用现成的。

51单片机第六天

发布时间:2016-08-02 No Comments

买的设备终于送到了。开始实测。
依次进行了流水灯,数码管静态显示,数码管动态显示,

阅读剩余部分...

51单片机第五天

发布时间:2016-07-31 No Comments

今天学习的DAC,AD使用。这两个是数字转模拟,模拟转数字的芯片。
这个呢,典型的就是录音,然后播放出来。
具体用法就是按照所选用的DA,AD芯片的说明书操作就好了。
注意时序要符合要求。模拟转数字位越高越精确。51的是0-5v变化,所以其他电压的得经过转换电路转换到这个范围内,再进行采样。还要有限流电阻,防止电流过大击穿AD。

51单片机第四天

发布时间:2016-07-30 No Comments

今天学习的是键盘扫描。
首先我们要注意的是按键按下并不是很理想的数字波形,而是在按下和抬起的瞬间会有抖动。
首先是独立键盘,很简单,先给io口写个1,然后再进行读取。如果变成0了,说明按键按下了。
这时候可以让数码管显示一个数字。每按一次进行数字加1,加到9就清零。然后为了去掉抖动,在按下和抬起的处理位置进行延时。
很简单的一个例子,结合数码管的静态显示。
然后是矩阵键盘,教程接的是4x4的键盘,用P3的高四位和低四位进行交叉得到一个12按键的键盘。
然后通过快速的分别检测来确定按下了哪个键。方法是先给低4位分别清零,让P3读取的数值和0b11110000进行位与,这样可以过滤掉低四位的状态只看高四位的,如果与完还是0b11110000说明没有按下键。如果高四位哪个变0了,就说明低四位清零的口和高四位变0口的交叉点的按键被按下了。我们可以用switch来根据与后的值给一个变量赋值。让不同按键分别标识不同数字。然后用数码管显示出来。这里也要注意抖动的问题。另外还要注意循环退出问题。
有了这个呢,应该就可以做计算器了。

51单片机第三天

发布时间:2016-07-29 No Comments

今天找到了mcu8051ide的使用方法。

阅读剩余部分...

51单片机第二天

发布时间:2016-07-28 No Comments

主要学习了复用数码管的静态点亮,中断。
复用数码管根据点亮不同的灯来显示数字,字母,可以先定义一个码表(数组)方便我们调取
然后根据位选点亮不同位置的数,段选点亮不同的数字。
扩展信息:动态点亮就是对几个数码管进行快速扫描,利用视觉暂留效应让人以为复用数码管的不同位显示的数字不同。
中断分为外部中断和内部定时器中断。
不同芯片的中断可用数量不同,中断可以嵌套,51单片机支持二级嵌套。
任何中断都需要打开中断总开关。
外部中断可以有压降触发或者低电平触发,低电平触发可以保持,压降就是一瞬间了。
内部有定时器计数器。这里算时间好麻烦,讲师说假定晶振是12MHz,那么50000就是50毫秒。如果想得到1秒,我们需要20个50毫秒。
定时器打开定时器中断开关,设置为不需要外部控制的模式,51里有两个定时器,可以选一个来用。然后赋初始值,当他数到65535就清零并且发送给cpu一个中断信号。如果想他数50000下,就给他初始值65535-50000,并且要分为高8位和低8位分别赋值。然后呢,想要每次都是50毫秒,在中断处理函数中也要赋值。
讲师说用定时器获得的1秒比用for获得的1秒要准。

单片机学习初始

发布时间:2016-07-18 2 Comments

先读了c++手册,然后正式开始学习51单片机。
然后发现我或许应该读c手册,而不是c++。嘛无所谓了,都差不多啦。
刚开始,我试图用我的ubuntu直接做51开发。
我也找到了一些前人留下的东西。比如as31 emu8051 dis51 cycfx2prog sdcc mcu8051ide emu8051-gtk gSTC-ISP
我可以用vi编写一个c文件。然后
sdcc file.c && makebin -p < file.ihx > file.bin
然后用emu8051-gtk file.bin调试
最后gSTC-ISP烧录。
或者用mcu8051ide编写c文件并进行调试。这里很好玩的地方是他可以虚拟硬件。比如led,让你在电脑上运行你的流水灯。
但是随着深入发现这些东西很难继续下去。我在网上看到的资料大部分都是在windows下做的,包括教程视频,文档资料。项目实例很多都是keil编写,拿到mcu8051ide下不知道为什么就是不能编译。而且mcu8051ide的比特率竟然不能设置为110952,它只有5位数(也可能是我不会用)。
不得已装了win7的虚机。然后跟着郭天祥老师的十天征服单片机视频教程进行学习。看视频教程感觉进度有些慢,不过呢,这里边老师可能会无意间扩充一些内容,比单独看资料了解到的要多一些。
刚看到第二讲,感觉或许我还应该扩展一些电路方面的知识,在不是用实验板自己做板子的时候需要计算电流电压以保障电子原件不会烧掉。如果用usb供电还要有滤波让电流更稳定。
昨天晚上扩展阅读了焊接注意事项,压电陶瓷,矿石收音机,无线充电的知识。
在别人已经在做3d打印机的时候,我才刚刚开始学习,感觉要走的路还很长。刚开始学习一点点,第一步,点亮一个发光二极管。感觉单片机很容易。真的很容易,先写一个几乎是固定格式的函数体,然后定义变量,再给变量赋值为0.对应引脚连接的灯就亮了。然后开始做一个循环让他闪烁,再然后学习根据晶振频率调出1秒延迟。这些都不算难,就像建房子很简单,最基础就是一些砖头堆叠在一起,并且用水泥粘住。但是如果现在说让做一个3d打印机控制板,就会感觉无从下手,就像建房子一下让原来在堆砖头的人去建摩天大楼。虽然有很长的路要走。但是只要走下去,总有达到的那一天。
现在学单片机的目的就是想做一套智能家居方案。我应该算是很懒的人,但是这种懒,并不是什么都不做,而是喜欢一劳永逸,并且不愿意做重复不变的工作。我经常用电脑做一些事情的时候就会写一个脚本让他自动处理。写脚本花掉的时间可能比做好几次这种事情还要多。这种习惯在我用到生活用品的时候就会很难办,很多事情我们要每天去做,难道不能自动吗?这促使我寻找解决方案。但是找了好久也没有很完美的方案,大部分时候只能找到部分解决的东西。现在国内市面上所谓的智能家居,都是通过一种东西(比如手机)去控制家里的电器这样的。而我想要的是自动化,讲真,那些东西我懒得去控制他们。举个栗子,手机控制空调,我用手机控制空调和用遥控器控制空调,真的区别不大,我更希望的是空调自己控制自己,别没事一直吹,(不知道是只有我见到的空调是这样还是都是这样,制冷的时候一直吹不知道停,特傻)该制冷制冷,该除湿除湿,该制热制热,自动维护室内的温湿度在一个人体舒适的范围内。还有那个窗帘,每天窗帘自己开关就好了嘛,干嘛非要我控制。还有煤气开关,用的时候自动打开,不用了自动关上。等等等等,这些促使我去学单片机,以期找到一个解决方案。