资源目录
压缩包内文档预览:(预览前20页/共30页)
编号:6170693
类型:共享资源
大小:77.20MB
格式:RAR
上传时间:2017-12-02
上传人:超****计
IP属地:浙江
3.6
积分
- 关 键 词:
-
pic
单片机
学习
软件
及其
资料
- 资源描述:
-
PIC单片机学习软件及其资料,pic,单片机,学习,软件,及其,资料
- 内容简介:
-
本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 1第一个 PIC 的 C 语言实例 -Proteus 仿真 TMR0 计数器 本例构思如下,利用 TMR0 的计数器功能,来记录外接按键的按键次数,并在中断程序中将按键次数通过数码管显示出来。开始时,数码管显示 0,一旦有按键按下, TMR0 将记录其次数,并产生中断,在中断程序中将按键次数转化为 BCD 码,并通过与 PORTB 口相连的 BCD to 7 Segment 转化器 4511 将 BCD 码转换为七段数码管的输入数据,然后在七段数码管上显示出来。为了简化实例,当按键次数大于 9 次时,计数器将返回到 0。 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 2在 Proteus 中仿真的效果如下图: 第二个 PIC 的 C 语言实例 -Proteus 仿真 TMR1 定时器 接着看第二个例子,本来是打算利用其特点做一个类似实时时钟的东西,但程序写好后,外接的 32.768kHz 的晶振貌似不能起振,搞的挺郁闷 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 3本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 4检查了好长时间,也没有发现个所以然来,自己总觉得没有什么错误。可仿真就是没有效果,数码管显示的数字一直都是两个 0。硬件电路如下图: 我个人觉得可能原因就是外界晶振不能起振。 既然这个例子不能成功,就修改了一下,做了一个使用内部时钟的例子。源程序如下图所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 5本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 6使用了内部时钟,设置其中的一个数码管(图中上面的数码管)显示毫秒,另一个数码管(下面的数码管)显示秒数。 仿真的效果如下图所示 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 7第三个 PIC 的 C 语言实例 -Proteus 仿真 TMR2 中断产生方波 本例利用 TMR2 定时器的中断在 RB0 口产生并输出一个方波。源程序如下图所示: 上图中注释有些错误,方波的周期应为 16ms2,硬件电路图如下所示(十分简单,就是一片 PIC16F877 接上一个示波器) : 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 8仿真运行,示波器上显示的波形如下: 如果开始时同时显示了四个通道的波形的话,只需将其他三个通道关闭,只显示 Channel A 即可。然后适当调整,即可清晰地看到输出的波形。从上图中可以看出,一个周期的方波占据 8 个空格的宽度,每个空格表示 4ms,所以方波周期为 84ms,即 32ms。 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 9第四个 PIC 的 C 语言实例 -Proteus 仿真 CCP1 输入捕捉 事实上这个例子是如此的简单,不能称为一个好的例子,但我本来准备做的利用 CCP1 的输入捕捉功能来测量输入脉冲信号的脉宽的例子暂时没能调试通过,所以就先拿这个例子来凑数了。 例子的功能如下,当按下在 CCP1 端口上外接的按键时, CCP1 利用输入捕捉来捕捉住这个脉冲,并在中断程序中将捕捉次数加 1。我们在主程序中将捕捉次数显示出来。源程序如下图所示 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 10在 Proteus 中构建的电路图如下: 可以看到,当我们按下接在 CCP1 端口上的按键时,接在 PORTB 口上的数码管将会实时显示已经捕捉到的按键次数。但需注意,此处我们为了使例子和程序简单,只使用了一位数码管,所以,当按键次数超出显示范围时,我们将重新初始化按键次数为 0。 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 11第五个 PIC 的 C 语言实例 -Proteus 仿真 CCP1 输出比较 本例使用 CCP1 的输出比较功能, 并将其设置为产生软件中断模式, 当产生中断时, 将 RB0 取反, 从而在 PORTB端口的最低位 RB0 上输出一个方波。例子源程序如下图所示: 在 Proteus 中构建例子的电路图如下(十分简单,只是在相应的输出端口上接一个示波器而已) : 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 12仿真时,我们可以看到在 CCP1 端口产生了我们需要的波形: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 13第六个 PIC 的 C 语言实例 -Proteus 仿真 ADC 模块 本例我们来学习 PIC 单片机的 ADC 功能,首先需要说明的是,本例只是模拟一下 ADC 功能,所以没有对采集到的数据进行任何处理就直接输出显示了。显示出来的数字也没有太大意义。本例利用 PIC 单片机的 ADC 来采集接在单片机 AD 通道 AN0 上的可变电阻在电路中分得的电压值,接着讲采集到的数值送到接在 PORTB 和PORTD 端口的三个数码管上显示。例子的源程序如下图所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 14在 Proteus 中构建的电路图如下: 仿真时,我们可以通过改变可变电阻的电阻值来查看采集到的结果。可以看到,采样值随着电阻的改变呈现一个同样的线性变化,事实上,我们只需对采样到的数据稍作处理,即可得到一个测量电路中电压的电压表。仿真中的一个画面可以从上图看到。 第七个 PIC 的 C 语言实例 -Proteus 仿真 USART 同步发送数据 现在我们来看一个 PIC 单片机的 USART 的例子,为了简化,我们利用 74LS164 将 USART 输出的串行数据转化为并行数据送到七段数码管,从而在七段数码管上显示出相应的数字。 USART 发送数据的波特率设置为 9600比特,发送的数据为从 0 到 F 的七段数码管的段码(需要注意的是 USART 发送数据时低位在前) 。在 Proteus 中构建本例的电路图如下所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 15例子源程序如下图: 第八个 PIC 的 C 语言实例 -Proteus 仿真 MSSP 的 SPI 模式扩展接口 本例仿真 PIC 单片机的 MSSP 模块的 SPI 接口模式的功能。将使用 SPI 接口输出数据,然后通过 74LS164 串并口转换器件将输出的串行数据转换为并行数据,并利用其来驱动七段数码管。 在 Proteus 中构建如下图所示的电路图: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 16装载入程序以后,点击仿真按钮,可以看到预期的效果。仿真中的一个画面如上图所示。 例子的源程序如下图所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 17第九个 PIC 的 C 语言实例 -Proteus 仿真写入 SPI 接口的 EEPROM: 25C040 本例继续来看 PIC 单片机的 MSSP 模块的 SPI 模式。将仿真往 SPI 接口的 EEPROM 中写入数据,此例中我们采用的芯片是 25C040。本例的源程序如下图所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 18在 Proteus 中构建的电路图如下所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 19电路图十分简单,只是将 SPI 接口的 25C040 与 PIC16F877 单片机的相应引脚接到一起即可。但在上图中,我们为了指示往 25C040 中写入数据结束,而在 RC0 口接上了一个 LED,开始时, LED 处于熄灭状态,当数据写入结束时,我们将 LED 点亮。 装载入程序以后,点击仿真按钮,待到 LED 点亮时,我们点击暂停按钮,并调出 25C040 的内容窗口,即可以看到我们写入的数据,如下图所示: 不过本例我本来的打算是再将写入的数据读出,并将其在七段数码管上显示出来。然后,读出程序一直未能将数据读出,不知道什么原因。我写的读数据程序如下图所示: 我自己觉得没有什么问题,检查了好长时间也没有发现错误,可不知为什么就是不能从 25C040 中读出数据。还希望有高手能指点一下,我将不尽感激! 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 20第十个 PIC 的 C 语言实例 -Proteus 仿真读出写入 SPI 接口的 EEPROM: 25C040 调了两天,终于把使用 PIC 单片机的 MSSP 模块的 SPI 模式,往 SPI 接口的 EEPROM 中写入数据,并从中读出在七段数码管上显示出来的例子调试成功了。结果发现,只是漏掉了一行程序。挺郁闷,不过也挺开心,毕竟解决了问题。但也应该注意,小心是任何时候都不可或缺的。 首先还是来看一下源程序,和不成功的第九个例子中的程序的差别就在于增加了读出数据部分: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 21本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 22我们来对比一下调试通过的读出程序和第九个例子中不成功的读出程序的区别。没错,就是在读出数据“data=SSPBUF”前增加了一句 “SSPBUF=0”,即往数据线上发送数据以启动时钟信号。目的只是启动时钟,发送同步时钟信号,所以无论发送什么数据都没有影响。 调试通过后,将生成的代码装入单片机进行仿真(电路图见下面的仿真效果图) ,我们可以看到和第九个例子中相同的写入结果,如下图: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 23但本例比第九例多出的部分就是在将数据写入 EEPROM 后, 接着把其中的数据读出并显示在两位七段数码管上。仿真中的一个画面如下图所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 24第十一个 PIC 的 C 语言实例 -Proteus 仿真 SPI 接口温度传感器 TC77 用 PIC 单片机的 MSSP 的 SPI 模式和 Microchip 公司的 SPI 接口的温度传感器 TC77 连接,做了一个简易的温度计。例子构思如下: PIC 单片机通过 SPI 接口与 TC77 温度传感器相连,并将测得的温度数据读入,对数据进行处理之后,将其送到接在 RB 口的两位 7 段数码管上显示出来。 不过需要注意的是,为了简化例子,我们只显示了温度的整数数值,而没有显示温度的小数值。 例子的源程序如下图所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 25本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 26本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 27在 MPLAB 中编译通过并生成 HEX 文件之后,我们接着在 Proteus 中构建例子的仿真电路。电路图如下所示 装入程序后,点击仿真按钮开始仿真,仿真中的一个画面我们也可以从上图看到。仿真中我们可以点击 TC77 上的增减温度按钮来改变温度,可以从七段数码管上看到显示的测得温度。 但你可能在仿真中已经看到了,因为程序中我们忽略了数据的小数部分,所以显示数据为舍去小数后的部分。如下图所示: 事实上程序中还有一点比较畸形。看源程序第二图 convert 子程序中: for(i=0;i8;+i) /将高位 (整数部分 )转换为十进制 add*=2; if(temph&(0x01i) result+=add; 我自己觉得可以直接这样: for(i=0;i8;+i) if(temph&(0x01i) result+=2(i+1); 可不知为什么,调试总是不对。于是只能改成图中那种比较畸形又比较难以理解的形式了。呵呵。 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 28第十二个 PIC 的 C 语言实例 -Proteus 仿真 16X16LED 点阵显示汉字 最后再来一个使用 PIC 单片机丰富的接口来驱动 16X16LED 点阵显示汉字的例子。 关于在 Proteus 中构建 16X16LED 点阵的方法请参阅博文 Proteus 仿真 16*16LED 点阵显示汉字 。 下面我们首先来看例子的源程序,如下图所示: 本资料由 lusen 整理,版权归 中原孔海洋 所有! 倡导奉献精神,从自己做起。 。 。 29程序中字模是使用软件 HzDotReader 生成的。需要注意的是生成字模时我们要根据电路图进
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。