基于8255的温度显示设计Word文档格式.docx
- 文档编号:21101681
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:22
- 大小:370.77KB
基于8255的温度显示设计Word文档格式.docx
《基于8255的温度显示设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于8255的温度显示设计Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
有了proteus和keil我们就需要在这两个软件中建立我们所需要的工程进行实验,具体步骤如下:
第一步:
在Keil2中建立一个新的工程,并命名,
第二步:
选择使用的单片机芯片,我们选择80c31,
第三步:
将新创建的.c文件添加到Target中。
这样我们就可以在keil2的环境下对单片机的程序进行编译和运行了。
2.51单片机AT89c51
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
主要特性:
·
与MCS-51兼容
4K字节可编程FLASH存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz-24MHz
三级程序存储器锁定
128×
8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
·
片内振荡器和时钟电路
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.数字温度传感器芯片DS18B20
DS18B20是Dallas公司生产的单总线数字温度传感器芯片,具有3脚TO-92小体积封装形式;
温度测量范围为-55℃~+125℃;
可编程为9~12位A/D转换精度;
用户可自设定非易失性的报警上下限值;
被测温度用16位补码方式串行输出;
测温分辨率可达0.0625℃;
其工作电压既可在远端引入,也可采用寄生电源方式产生;
多个DS18B20可以并联到3根或两根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少。
可广泛应用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。
4.DS18B20的操作方式
DS18B20详细引脚功能描述1GND地信号;
2DQ数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;
3VDD可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
DS18B20的使用方法。
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
5.可编程并行I/O接口芯片8255A
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:
与CPU连接部分、与外设连接部分、控制部分。
引脚功能:
RESET:
复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:
芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;
/CS=1时,8255无法与CPU做数据传输.
RD:
读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。
D0~D7:
三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
8255具有3个相互独立的输入/输出通道端口,用+5V单电源供电,能在一下三种方式下工作。
方式0————基本输入输出方式;
方式1————选通输入/出方式;
方式三————双向选通输入/输出方式;
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
工作于三种方式中的任何一种;
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
不能工作于方式二;
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
'
不能工作于方式一或二。
A1,A0:
地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.
当A1=0,A0=0时,PA口被选择;
当A1=0,A0=1时,PB口被选择;
当A1=1,A0=0时,PC口被选择;
当A1=1.A0=1时,控制寄存器被选择.
6.74HC373锁存器
当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,O0~O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端LE为高电平时,O随数据D而变。
当LE为低电平时,O被锁存在已建立的数据电平。
当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。
引出端符号:
D0~D7数据输入端
OE三态允许控制端(低电平有效)
LE锁存允许端
O0~O7输出端
真值表:
Dn
LE
OE
On
H
L
X
Q0
高阻态
7.8LED液晶显示器件7SEG-MPX8-CC-BLUE
此为8位共阴极数码管。
第三部分实验原理及程序代码:
1.硬件部分电路设计图
电路图如图:
2.软件部分设计
#include"
reg51.h"
intrins.h"
absacc.h"
#defineCOM8255XBYTE[0x7fff]//8255端口地址
#definePA8255XBYTE[0x7ffc]
#definePB8255XBYTE[0x7ffd]
#definePC8255XBYTE[0x7ffe]
constunsignedcharcodeSEG_CODE[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,};
constunsignedcharcodeDECIMAL_TEMPERATURE[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
//从DS19B20得小数部分对应表
sbitDQ=P1^0;
//数据通信线
sbitkey1=P1^5;
sbitkey2=P1^6;
unsignedinttemperature;
//测量温度
bitfg=0;
//温度正负标志
unsignedintdatatabl[10];
//温度数据库
unsignedchardatatab2[10];
unsignedintclock=0,num=0;
//步长控制
unsignedcharrolling=0;
bitback=0;
voiddelay(unsignedintn);
//延迟n毫秒
voidTxReset(void);
//产生复位脉冲初始化DS18B20
voidRxWait(void);
//等待应答脉冲
bitRdBit(void);
//读取数据的一位,满足读时隙要求
unsignedcharRdByte(void);
//读取数据的一个字节
voidWrByte(unsignedcharb);
//写数据的一个字节,满足写1和写0的时隙要求
voidconvert(void);
//启动温度转换
voidRdTemp(void);
//读取温度
voidDisplay(void);
voidInitialization(void);
//初始化子程序
voidRecord(void);
voidBackdisplay(void);
voidmain()
{unsignedchari;
COM8255=0x80;
Initialization();
while
(1)
{
while(~back)
{
TR0=1;
convert();
for(i=1;
i<
10;
i++)
Display();
RdTemp();
Record();
if(key1==0)
{
delay(10);
if(key1==0)
back=~back;
while(!
key1);
}
}
while(back)
TR0=0;
Backdisplay();
}
if(key2==0)
if(key2==0)
{
rolling++;
rolling=rolling%10;
}
key2);
}
}
voiddelay(unsignedintn)//延迟n毫秒
{
unsignedchari;
while(n--)
for(i=0;
110;
i++);
}
voidTxReset(void)//产生复位脉冲初始化DS18B20
{
unsignedinti;
DQ=0;
//拉低约900us
i=100;
while(i>
0)i--;
DQ=1;
//产生上升沿
i=4;
voidRxWait(void)//等待应答脉冲
while(DQ);
while(~DQ);
//检测到应答脉冲
bitRdBit(void)//读取数据的一位,满足读时隙要求
bitb;
i++;
b=DQ;
i=8;
return(b);
unsignedcharRdByte(void)//读取数据的一个字节
unsignedchari,j,b;
b=0;
for(i=1;
=8;
j=RdBit();
b=(j<
<
7)|(b>
>
1);
voidWrByte(unsignedcharb)//写数据的一个字节,满足写1和写0的时隙要求
unsignedcharj;
bitbtmp;
for(j=1;
j<
j++)
{
btmp=b&
0x01;
b=b>
1;
if(btmp)//写1
DQ=0;
i++;
i++;
DQ=1;
i=8;
while(i>
else//写0
while(i>
voidconvert(void)//启动温度转换
TxReset();
RxWait();
delay
(1);
WrByte(0xcc);
//skipROM命令
WrByte(0x44);
//convertT命令
voidRdTemp(void)//读取温度
unsignedchara,b;
WrByte(0xbe);
a=RdByte();
//温度值低位字节
b=RdByte();
//温度值高位字节
temperature=b;
temperature<
temperature=temperature|a;
if(temperature<
0x0fff)//判断温度正负,若为正,直接显示,否则取补码
fg=0;
else
temperature=~temperature+1;
fg=1;
voidDisplay(void)
if(fg==0)//温度为正时显示的数据
PB8255=0xfe;
//第一个数码管
PA8255=0x00;
//不显示
delay
(2);
PB8255=0xfd;
//第二个
PA8255=SEG_CODE[(temperature>
4)/10];
//输出十位数
delay
(2);
PB8255=0xfb;
//第三个
4)%10]|0x80;
//输出个位和小数点
PB8255=0xf7;
//第四个
PA8255=SEG_CODE[DECIMAL_TEMPE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8255 温度 显示 设计