单片机概括 所谓的单片机也就相当于人的大脑,所有的命令都由其发出。与之通信通过各个管脚,上电运行之后,单片机能自动运行存储在其内部的程序,先是启动代码(为后续程序能够运行提供一个良好的环境,例如:分配堆、栈空间等,启动代码是用汇编程序写的,与具体的硬件环境相关)(为什么用汇编,因为汇编也就相当于机器语言,只不过汇编用助记符而已,机器可直接运行,至于启动代码完成什么工作,最基础的是能让后续代码正常运行。而高级语言相当于通用语言,其生成的机器语言与使用的编译器有关,每种硬件对应的都有其编译器。而高级语言为达到通用目的,自然会提取每个事物的共性,而忽略其个性。)(可以为其举个例子就是我们所说的语言,地球上有许多种语言,为方便交流,我们把英语作为国际语言,在国际事物中,我们都可以用英语交流,若不会英语,我们就需要有翻译人员,翻译给不同的国家的人,就需要不同能力的翻译人员)。
之后跳到main函数执行,除非有跳转语句,否则程序会顺序执行。为了防止main函数过于庞大及方便管理,我们编写一个个小程序,然后在main中调用这些小函数。所以说程序的执行过程不过是调用各个函数而已。
数码管 当数码管个数较多时,为节省io口,利用了74hc573锁存器,分段锁存,位锁存。位是决定哪个数码管工作,段是显示什么。利用人眼的视觉暂留,快速的进行切换,即可给人以都在工作的错觉。
LED 要让led点亮,需让led通过电流,若一端接vcc,则只需让单片机的对应管脚输出低电平,又因单片机输入输出的电流有一定限制 ,所以对于led的小负载需加限流电阻,当负载为直流电动机时,单片机就驱动不了,此处利用了uln2003,通过其来增大带负载能力(四两拨千斤)。对于直流电动机,练习了pwm控制,固定一个周期,改变通入电流的时间。(这个周期怎么取还不清楚)(应该根据通与不通应该最少要保证可以工作)
点阵双色点阵也就是一个发光孔里有两个不同颜色的小灯,共用一个公共端,控制另一端可让其发光或不发光。这里利用了74hc595,也相当于一个串转并芯片,由一个移位寄存器和存储器组成,通过级联可依次传输(因为每个芯片都有一个串行输出端口,串行输入的同时也从这里串行输出),8位传输完毕后可锁存,即可一次一直输出8位数据。
AD/DA pcf85914路ad、da转换器,通过i2c通信。ad、da都要用到参考电压,通过与之比较进行转换。(相当于天平秤重,饭吗相当于各二进制),ad转换的值放在了对应的寄存器中,读取即可。
scl=0;//因为没写这个,读命令时无应答的后一个上升沿,故pcf8991无法转换,可能初始化时转换的寄存器为全1,故一直显示的为全1.(因此对于关键部分必须搞清楚)
I2C总线 I2c总线:一根数据线,一根时钟线,由开始信号,之后传输数据,应答信号,结束信号组成。一条i2c总线上可挂接多个i2c器件,通过发送地址确认。(利用线与的功能)
I2c,spi总线等多种多样的时序,因为芯片的作用,复杂程度多种多样,所以通信也就不一样,像单总线,i2c都有一定时间限制,对于不同的场合,不同的作用,运用不同的方式,操作芯片,无非是写数据,写命令(也即向寄存器中写入相应的数据,先指定寄存器地址,随后写入的数据即放入了其中。也有的不用指定寄存器,datasheet中有的是输入相应的数据,就会产生相应的作用。先产生写命令时序,随后写入相应的数据,这些数据会被当成一个命令,就可产生相应的作用了。
写入不同数据,代表产生不同功能。
写入这个命令0x80即是对sec寄存器写操作,随后的数据就会写入这个寄存器中,发送0x81命令,即是读这个寄存器,之后会传出这个寄存器内的数据,接收即可。(0x80,0x81相当于此寄存器地址)
),读数据。(明确一个目标就是如何指定位置,即找到该位置,如何从指定位置读出或写入数据)
DS1302 Ds1302即实时时钟,可对年月日,时分秒计时,放在对应的寄存器中,读取即可(只不过为bcd码)。有自己的晶振与备用电源。 date=(date&0x0f)+0x30;//注意此处要加括号
严格按照时序即可,其中的下降沿读出,意思是下降沿时数据会放在数据线上。(严格按照时钟周期)
1602液晶 1602液晶内部带有ascll码字库,故输入ascll码会显示对应的字符。(不用刷新,只要有电会一直显示。)(注意写入的地址,第一行起始地址0x80,第二行0x80+0x40,有个命令写入后地址可自动加1,故只需换行即可)
蜂鸣器,音乐发声,300ms是每个频率的持续时间,1hz即1秒变化一次,周期为1秒。(300ms与1hz似乎不搭配)
DS18B20 DS18B20为单总线结构,通过一根数据线进行通讯,(时序比较严格,特定时间采样)另外两根为电源与地线。内部有个寄生电源,就是一个电容,当数据线为高电平时对电容进行充电,低电平时断开(也即接一个二极管,利用二极管的单向导电性)。用此电容对ds18b20供电,当然也可直接接一个5v电源。当温度变换时,因ds18b20工作电流较大,5k的上拉电阻式io没有足够的驱动能力,因此可在温度变换时,提供一个强的上拉。(例mosfet管或vdd引脚接外部电源)
注意正确解读(注意看datasheet的文字说明,不要猜测)
自我感觉是数据线由高电平拉低到低电平为一个时间片的开始。(那怎么结束呢,从开始之后60us内?)(仔细理解芯片手册,读写有时间限制)自我感觉是进行一次初始化代表一次读写结束或开始下次的器件从新操作。
不要太相信中文翻译,有时有错误而且有的没有翻译出来,有遗漏。对于ds18b20的写,每写一位,注意释放总线。
,晶振频率12M,51单片机上时延时为time*2+5us。注意:time的类型为unsigned int时,延时时间变化(可能因为51是8位的,int型时要取两次),函数体写为其他形式时,延时时间也变化(怎样变化要看生成什么样的汇编语言)。
RS232、485
串口通信 对于51单片机,设置好之后,把要发送的数据放到SBUF即可。接收时,等待接收中断标志位置位即把SBUF内的内容复制出来即可。异步通信要注意波特率,接收方与发送方的要一致,因为传送的数据帧有一定格式(可设置),两者一起配合,故可正确通信。而同步通信两方用的是一个时钟源,更可正确接收。利用的中断发送一串字符(发送或接收完会产生中断,做相应处理即可)。
中断处理矩阵键盘的方法很独特,如下图所示:,另一端是接的矩阵键盘的上拉电阻与vcc,j25接外部中断,没键按下时二极管不导通,所以j25为高电平,有键按下时,因有另一端会被拉低,使二极管导通,低电平传到j25端,产生中断,处理按键即可。(二极管的作用是什么,防止两个管脚连接?否则一个高电平一个低电平,二极管有压降0.7v)
|