ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:318.25KB ,
资源ID:8942186      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8942186.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PIC课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PIC课程设计报告.docx

1、PIC课程设计报告电子装置与系统设计课程设计 学院: 班级: 学号: 姓名: 指导老师: 日期: 电子装置与系统设计课程设计任务书任务一:以下是PIC评估板上可用的资源列表,请阅读以下芯片的手册资料。编号元件功能备注U9max232RS485U12at24C02I2C 存储器U6ds18b20数字温度传感器u3pcf8563时钟1602液晶模块K1-K164*4键盘任务二:完成以下单元模块电路1、双机RS232和RS485通讯,测试10m,50m不同距离时的通讯情况2、键盘显示功能(计算器)3、遥控日历查询4、I2C存储器读写(计数器,并能断点存储)5、温度测量并带报警(用键盘ps/2设置最高

2、值)任务三:设计一个简单系统,每10S进行温度采集(结合电路与程序,分析指标),在液晶屏上显示当前温度和前一状态的温度,并将结果存入存储器,具备可将温度的存储结果与PC机通讯和数据发送功能,可以使用键盘设定温度高低限制值,达到限制值时报警。任务二选择:键盘显示功能(计算器)相关资料:一、 PIC18F452芯片引脚说明:MCLR/VPP:主清0或编程电压 VDD:接电源VSS:接地RA0-RA7:双向I/O口RB0-RB7:数字I/O口RC0-RC7:数字I/O口RD0-RD7:数字I/O口RE0-RE3:数字I/O口PIC18F452外设功能:高灌/拉电流:25mA/25mA;3个外部中断引

3、脚,定时器0模块:具有8位可编程预分频器的8/16位定时器/计数器;定时器1模块:16位定时器/计数器;定时器2模块:具有8位周期寄存器的8位定时器/计数器(时基为脉宽调制);定时器3模块:16位定时器/计数器;辅助振荡器时钟选项:定时器1/定时器3;2个捕捉/比较/PWM模块。CCP引脚,可以配置为:捕捉输入:16位捕捉模块,最大分辨率是6.25ns(TCY/16);16位比较模块,最大分辨率为100ns(TCY);PWM输出:最大PWM是110位。最大PWM频率:当8位分辨率为156kHz,10位分辨率为39kHz;主同步串口(MSSP)模块;2种运作模式:3线SPITM(支持所有4线SP

4、I模式);I2CTM主从模式;模拟功能:兼容的10位模数转换模块带有:快速采样率;可用转换睡眠;线形1LSB;可编程低电压检测(PLVD);支持中断低电压检测;可编程欠压复位(BOR);微控制器的特殊功能:可进行100000次擦写操作的闪存程序存储器(标准值);闪存/数据EEPROM的保存时间:40年,在软件控制下自行编程;上电复位(POR),上电延时定时器(PWRT)和振荡器起振定时器(OST);采用自身片上RC振荡器可靠工作的看门狗定时器(WDT),可编程代码保护;省电的休眠模式;可选振荡器选项包括:碴倍锁相回路(初级振荡器);辅助振荡器(32kHz)时钟输入;通过2个引脚进行5V单电源供

5、电在线串行编程(ICSPTM);通过2个引脚进行在线调试 二、LCD1602液晶显示屏字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。一般1602字符型液晶显示器实物如图1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图LCD1602主要技术参数: 显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明:1602LCD采用标

6、准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第

7、5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。三、44键盘矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是44个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 按键

8、排列44矩阵键盘的编程方法:1、先读取键盘的状态,得到按键的特征编码。先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。举例说明如何得到按键的特征编码:假设“1”键被按下,找其按键的特征编码。从P1口的高四位输出低电平,即P1.4P1.7为输出口。低四位输出高电平,即P1.0P1.3为输入口。读P1口的低四位状态为“ 1101”,其值为“0DH”。再从P1口的高四位输出高电平,即P1.4P1.7为输

9、入口。低四位输出低电平,即P10P13为输出口,读P1口的高四位状态为“1110”,其值为“E0H”。将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“EDH”。用同样的方法可以得到其它15个按键的特征编码。 2、根据按键的特征编码,查表得到按键的顺序编码。将用上述方法得到的16个按键的特征编码按图2按键排列的顺序排成一张特征编码与顺序编码的对应关系表,然后用当前读得的特征编码来查表,当表中有该特征编码时,它所在的位置就是对应的顺序编码。程序代码:#include#define uint unsigned int#define uchar unsigned char#define

10、 e PORTBbits.RB3 #define rw PORTBbits.RB4 #define rs PORTBbits.RB5 void disp_init(void); /液晶屏初始化void disp(uint num1,uint i);void dispc(uint num1); void disp1(uint num1,uint num2,uint num3,uint num4,uint num5);void write_com(uchar com); /写指令void write_data(uchar dat); /写数据unsigned int anjian(void);un

11、signed int jisuan(uint a1,uint a2,uint fuhao);void delay(uint z) uint x,y; for(x=110;x0;x-) for(y=z;y0;y-);rom unsigned char SEGCODE= 0x30,0x31,0x32,0x33, 0x34,0x35,0x36,0x37, 0x38,0x39,0x2B,0x2D, 0x2A,0x2F,0x3D,0x24,;rom unsigned char KEYCODE= 0xEE,0xDE,0xBE,0x7E, 0xED,0xDD,0xBD,0x7D, 0xEB,0xDB,0xB

12、B,0x7B, 0xE7,0xD7,0xB7,0x77,;void main(void) uint a=0,b=0,c,s=0; uint temp,fuhao; uint i,j,ii=0,temp1=0,temp2=0; disp_init(); loop: while(1) for(i=0;i6;i+) temp=anjian(); if(temp!=0x24) disp(temp,i);temp1=temp-0x30; if(temp!=0x2B)&(temp!=0x2D)&(temp!=0x2A)&(temp!=0x2F) a=a*10+temp1; else fuhao=temp;

13、 i=6; ii+; else a=(a-temp1)/10; i-; disp(0x20,i); i-; ii-; for(j=0;j6;j+) temp=anjian(); if(temp!=0x24) disp(temp,j+ii);temp2=temp-0x30; if(temp!=0x3D) b=b*10+temp2; else j=6; else b=(b-temp2)/10; j-; disp(0x20,j+ii); j-; c=jisuan(a,b,fuhao); /c的值 dispc(c); temp=anjian(); /c的显示 if(temp=0x24) a=0; b=

14、0;ii=0; disp_init(); goto loop; unsigned int jisuan(uint a1,uint a2,uint fuhao) uint c; switch(fuhao) case 0x2B:c=a1+a2; break; case 0x2D:c=a1-a2; break; case 0x2A:c=a1*a2; break; case 0x2F:c=a1/a2; break; return c;unsigned int anjian(void) /按键扫描 unsigned char i; unsigned char KeyTemp; TRISC=0xFF; w

15、hile(1) TRISC=0xF0; LATC=0xF0; if(0xF0!=(PORTC & 0xF0) delay(50); if(0xF0!=(PORTC & 0xF0) KeyTemp=PORTC & 0xF0; TRISC=0x0F; LATC=0x0F; KeyTemp|=(PORTC & 0x0F); for(i=0;isizeof(KEYCODE);i+) if(KeyTemp=KEYCODEi) KeyTemp=i; i=sizeof(KEYCODE)+1; return SEGCODEKeyTemp; /while(0x0F!=(PORTC & 0x0F); void w

16、rite_com(uchar com) /对液晶屏写指令 TRISB=0b000000000; /TRISB=0b00010000; TRISD=0; e=0; rw=0; rs=0; /写指令:RS=L,RW=L,D0D7=指令码,E=高脉冲 PORTD=com; /写指令到液晶 delay(5); e=1; delay(5); e=0; void write_data(uchar dat) /写数据 TRISD=0; e=0; rw=0; rs=1; /写数据:RS=H,RW=L,D0D7=指令码,E=高脉冲 PORTD=dat; /写数据到液晶 delay(5); e=1; delay(

17、5); e=0; void disp_init() TRISD=0; /选择D端口为液晶屏数据的输入口 write_com(0x38); /液晶开显示 write_com(0x0c); /显示光标,光标闪烁 write_com(0x06); /读或写一个字符后地址指针加一,光标加一 write_com(0x01); /显示清屏:1、数据指针清零;2、所有显示清零 write_com(0x80); /第一行首位void disp(uint num1,uint i) write_com(0x80+i); /液晶第一行第i位数 write_data(num1); delay(1);void disp

18、c(uint num1) uint c1,c2,c3,c4,c5; c1=num1/10000; /ADC结果千位上的数字 c2=num1%10000/1000; /ADC结果百位上的数字 c3=num1%1000/100; /ADC结果十位上的数字 c4=num1%100/10; c5=num1%10; disp1(c1,c2,c3,c4,c5); void disp1(uint num1,uint num2,uint num3,uint num4,uint num5) write_com(0x80+0x40); write_data(num1+0x30); /液晶第二行第一位数 delay

19、(1); write_com(0x80+0x41); write_data(num2+0x30); /液晶第二行第二位数 delay(1); write_com(0x80+0x42); write_data(num3+0x30); /液晶第二行第三位数 delay(1); write_com(0x80+0x43); write_data(num4+0x30); /液晶第二行第四位数 delay(1); write_com(0x80+0x44); write_data(num5+0x30); /液晶第二行第五位数 delay(1);任务三:相关资料:一、max232 RS485MAX232芯片是

20、专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OU

21、T送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚DNG、16脚VCC(+5v)。下图为MAX232引脚图和接线图,带有转串口的电路。二、ds18b20 数字温度传感器1DS1820的特性单线接口:仅需一根口线与MCU 连接无需外围元件由总线提供电源测温范围为-5575,精度为0.5九位温度读数A/D 变换时间为200ms用户自设定温度报警上下限,其值是非易失性的报警搜索命令可识别哪片DS1820 超温度限2DS1820 引脚及功能(见图4) GND:地; DQ:数据输入输出脚(单线接口,可

22、作寄生供电); VDD:电源电压。3DS18B20内部结构DS1820的内部结构如图5所示。由图5可知,DS1820由三个主要数字器件组成: 64bit闪速ROM;温度传感器;非易失性温度报警触发器TH和TL。4. 温度寄存器格式5.DS18B20的使用方法由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来

23、保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20

24、的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。程序代码:/40MHZ,连在RA4脚上#include #include/=void PIC18F_HIGH_ISR(void); /高优先级中断服务函数void PIC18F_LOW_ISR(void); /低优先级中断服务函数#pragma code high_vector_secti

25、on=0x08void high_vector (void) _asm goto PIC18F_HIGH_ISR _endasm#pragma code low_vector_section=0x18void low_vector (void) _asm goto PIC18F_LOW_ISR _endasm#pragma code/-宏定义#define uint unsigned int #define uchar unsigned char#define ds LATAbits.LATA4#define DQ1_data PORTA&0x10#define e PORTBbits.RB3

26、 /液晶屏e端接RB5#define rw PORTBbits.RB4 /液晶屏rw端接RB6#define rs PORTBbits.RB5 /液晶屏rs端接RB7#define LEDSEG_C LATC#define Key_Data PORTBbits.RB1#define Key_CLK PORTBbits.RB0rom unsigned char LEDSEGCODE= /0-9笔段代码 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,;/-全局变量uint temp; float f_temp; /温度传感器转换结果保存在le

27、dnumuchar a1,a2,a3,a4,num; /a1-a4分别为液晶屏第二行第1、3、4、5位数unsigned int value=0; unsigned int value2=0; unsigned int value3=0;unsigned char recebuf;uchar IntNum = 0; /中断次数计数uchar KeyV; /键值unsigned char BF = 0;unsigned char k;unsigned char flag;unsigned char i=0;unsigned char flagok=0;unsigned char data2;unsigned int lednum=0,lednum0=0;unsigned char SndStr=the tempreture is:;/-函数声明void disp(uchar num1,uchar num2,uchar num3); /液晶显示void disp1(uchar num11,uchar num21); void disp2(uchar num11,uchar num21,uchar num31); void disp3(uchar

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1