PIC16F887 单片机 接线 实物器件说明 原理
1 烧写程序
前面我们已经利用MPLAB生成了hex文件,并把hex文件弄到proteus进行单片机仿真了。
这一节关注的就是怎么把hex文件弄到单片机实物上去运行。
这个就看《 单片机原理及应用(PIC 单片机)实验指导书》实验里第四章节内容。
2 LCD1602
仿真图里只关心数据线,电源线无所谓,所以可以看到下图里LCD1602就7根线好好接到了单片机,而别的引脚都可以不接。但在实物中需要关注得更多。
实物样子:
实物电路图:
从电路图就可以看到LCD1602很多引脚都是在PCB里连接了的:比如3号引脚就是接了一个滑动变阻器R40的,在实物图中也可以看到R40(蓝色的那个,可以用螺丝刀扭它),这个滑动变阻器作用就是调节LCD显示对比度的,在后面下载了程序缺看不到显示,就能看到很多黑色格子,这时调节一下这个动变阻器改变对比度或许是有用的。
此外应该关注到,P10跳线应该短接,这样VCC电源才能和LCD1602-VCC节点连接,相当于这是给LCD1602供电的设置,如果不短接,相当于电源断路,LCD1602不会工作。
关注了上面2点后,我们就可以关注到信号线了,我们应该像仿真图里的连接那样,将7根信号线连接好。
为什么我们没用仿真图里LCD1602的D0 D1 D2 D3信号线呢?
专注下面几个点:LCD1602可以8线控制,D0到D7都连接;我们这种接法是4线接法,只用连接D4 D5 D6 D7;4线接法比8线更加节省单片机引脚,利于资源充分利用;教科书上用的4线接法,有现成程序;我有试过8线控制,结果是仿真能好好运行,实物却不工作,这个时候需要调试时序;我手里没有PIC板子,所以不可能调试时序;4线和8线的程序不一样的。
LCD1602的程序为啥那么写?能解释一下吗?
是教科书的程序,想要深入研究可以百度一下LCD1602的用户手册;我们更关心怎么用它,想要它显示字符需要做2件事,第一件事就是调用函数LCD_CSH()
初始化它,第二件事就是想要在第0列第1行的位置上显示字符串hello就应该这么写:LcdWriteString( 0, 1, "hello" );
这类底层程序是非常基础的程序,不需要重复造*,百度一下现成程序知道怎么用就好。举个例子,下面这个函数,无非就是让单片机引脚依照LCD1602控制时序改变引脚高低电平,懂得深与浅又能怎么样呢,下次你想自己写个程序的时候,第一时间还是去复制粘贴上次写的,而不是翻着手册把下面这个函数再写一遍。
/* LCD写命令 */
void LCD_WRITE( unsigned char R1, unsigned char FLAG )
{
unsigned char R2;
LCD_BUSY();
LCD_RW = 0; NOP();
LCD_RS = FLAG;
R2 = (R1 >> 4) & 0x0F;
PORTD &= 0xF0; NOP();
LCD_E = 1;
PORTD |= R2;
NOP(); NOP();
LCD_E = 0;
R2 = R1 & 0x0F;
PORTD &= 0xF0; NOP();
LCD_E = 1; NOP();
PORTD |= R2;
NOP(); NOP();
LCD_E = 0; NOP();
LCD_RS = 0; NOP();
PORTD &= 0xF0;
}
3 PCF8591
如果是做波形发生器实验,我们需要PCF8591产生电压信号,PCF8591的15号引脚就是电压输出引脚。
对照下面的图,我们应该有几个操作:
(1)短接J3的2个排针,使得PCF8591芯片供电。
(2)不能短接P66的2个排针,应该拔下来,并把P66下面的排针(这里就是PCF8591的15号引脚)连接到示波器的屏蔽线笔的勾针;
(3)按照仿真图连接信号线SCL SDA到单片机;
(4)示波器的GND线应该和实验箱子上的任意一个GND连接。(共地)
控制PCF8591输出一个电压很简单:
iic_send_char( 0x90 ); /* iic写入iic器件地址 */
iic_send_char( 0x40 ); /* 写入DAC转换信号 */
iic_send_char( 100 ); /* 写入电压 */
0x90 是固定的器件地址,0x40是PCF8591内部的寄存器地址,最后写入一个0到255之间的整数就可以了,PCF8591就能根据这个整数输出一个电压值,0到255代表了0到5V。
什么是iic?
IIC是一种通信协议。协议详情又得多百度了,因为一句话说不完。我们只要知道,单片机和PCF8591的信号线只有2根,采用了IIC协议进行通信,单片机通过2根线发送了控制信息给PCF8591,PCF8591根据收到的控制信息产生了电压。
4 独立按键
8个独立按键互不相干,用多少连多少,只用关心信号线就好。
5 直流电机
ULN2003这块芯片就是电平驱动力转换的一块芯片。接直流电机直接姐在JP37的2根针处就好,同时单片机信号控制脚接到JP32的五号引脚,当单片机输出低电平,IN5也是低电平,直流电机导通。
仿真中为了简便,只注重信号线,如下图,黑色的就是电机,一端接VCC,一端接单片机引脚,单片机引脚输出低电平的时候电机就会转。从信号来说,实物P37那里也是单片机引脚输出低电平电机就会转。
6 小灯
实物中JP15接单片机引脚,单片机引脚输出低电平小灯点亮。
仿真里的小灯一直有点问题,不的不加个继电器在里面,但只需要关注信号就好,仿真里面也是单片机引脚输出低电平,小灯点亮。所以连接实物的时候去关注信号线是哪一个引脚就可以。
7 DS1302
一定得把纽扣电池装着,不然就不会正常工作。纽扣电池小心没电了。
三根信号线跟着仿真图接就好了,不要接错了。
8 DS18B20
(1)关注信号线,依照仿真图将信号线接在JP35处的排针。
(2)得找老师要一个DS18B20器件插到U5或者U7, U5和U7是对称的,随便插哪里效果一样;
(3)插的时候注意半圆方向。
(4)可以用手摸DS18B20加热,可见显示屏上读取显示的温度会改变。
9 蜂鸣器
关注信号线,依照仿真图将信号线接在JP22处的排针。
这是无源蜂鸣器。
无源蜂鸣器和有源蜂鸣器啥区别?
控制电路没区别,内部构造有区别。
有源蜂鸣器:在上面的原理图中如果蜂鸣器是有源蜂鸣器,那么JP22是低电平的时候,8550三极管导通,此时蜂鸣器上方电压就是VCC,下方就是GND,有源蜂鸣器的特点此时就直接就鸣叫了。有源蜂鸣器内部有一个500HZ(可能不是这么大小)的震荡电路,通电后直接工作起来使得振动片以500HZ振动,听起来就是500HZ的声音。有源蜂鸣器的声音频率是固定的。
无源蜂鸣器:在上面的原理图中如果蜂鸣器是无源蜂鸣器,那么JP22是低电平的时候,8550三极管导通,此时蜂鸣器上方电压就是VCC,下方就是GND,无源蜂鸣器的特点就是此时无源蜂鸣器不会鸣叫。因为无源蜂鸣器内部没有震荡电路,只能依靠频率地通电断电来控制。可知JP22是低电平是通电,JP22是高电平是断电。如果JP22是给一个1000HZ的50%占空比的方波,那么无源蜂鸣器就会以1000HZ的声音鸣叫。
无源蜂鸣器的程序:
(1)如果是想鸣叫一声:
for(i=0;i<100;i++)
{
给高电平
延时0.5ms
给低电平
延时0.5ms
}
(2)如何放音乐?
音乐简谱中可以知道每个音符的频率 和鸣叫时间。
举个例子
比如有一段音乐只有三个音,是下面这样:
首先1000HZ 响200ms,然后700HZ响50ms,最后1500HZ响100ms。
我们就需要控制单片机程序在蜂鸣器控制引脚上输出这个波形:
精准控制频率也就是时间,只有定时器功能去弄。
响多久可以用软件延时函数等待那么多时间。
本文地址:https://blog.csdn.net/x1131230123/article/details/108780168
上一篇: 我找谁买单去啊