PAGE1
PAGE1
18.项目案例分析
在这一节中,我们将通过几个具体的项目案例,深入分析如何使用PIC16系列单片机进行实际开发。每个项目案例将涵盖项目背景、硬件设计、软件开发和调试等多个方面,帮助读者全面理解PIC16单片机在不同应用场景中的使用方法。
18.1项目一:温度监测系统
18.1.1项目背景
温度监测系统在工业、医疗、农业等多个领域都有广泛的应用。通过监测环境温度,可以实现对设备的保护、对生产过程的控制以及对环境的优化。本项目使用PIC16系列单片机,结合温度传感器和LCD显示屏,实现一个简单的温度监测系统。
18.1.2硬件设计
18.1.2.1温度传感器
我们将使用DS18B20作为温度传感器。DS18B20是一款数字温度传感器,具有高精度和低功耗的特点。它通过单总线与PIC16单片机通信,可以提供-55°C到+125°C范围内的温度测量。
18.1.2.2LCD显示屏
我们将使用16x2字符型LCD显示屏来显示温度数据。16x2LCD显示屏通过并行接口与PIC16单片机通信,可以显示两行各16个字符。
18.1.2.3单片机选择
我们将使用PIC16F877A单片机,因为它具有丰富的I/O端口和内置的ADC功能,适合本项目的需求。
18.1.3软件开发
18.1.3.1DS18B20驱动程序
首先,我们需要编写DS18B20的驱动程序,实现温度数据的读取。以下是一个简单的DS18B20驱动程序示例:
#includexc.h
#includehtc.h
#includestdio.h
#includedelay.h
#define_XTAL_4000000//假设使用4MHz晶振
#defineDS18B20_PINPORTBbits.RB0
#defineDS18B20_DIRTRISBbits.TRISB0
voidDS18B20_Init(void){
DS18B20_DIR=1;//设为输入
DS18B20_PIN=1;//上拉电阻
}
voidDS18B20_Reset(void){
DS18B20_DIR=0;//设为输出
DS18B20_PIN=0;//拉低
delay_us(480);//延时480us
DS18B20_PIN=1;//拉高
delay_us(70);//延时70us
DS18B20_DIR=1;//设为输入
delay_us(410);//延时410us
}
unsignedcharDS18B20_ReadBit(void){
unsignedcharbit=0;
DS18B20_DIR=0;//设为输出
DS18B20_PIN=0;//拉低
delay_us(15);//延时15us
DS18B20_PIN=1;//拉高
delay_us(5);//延时5us
DS18B20_DIR=1;//设为输入
delay_us(60);//延时60us
bit=DS18B20_PIN;//读取数据
delay_us(390);//延时390us
returnbit;
}
unsignedcharDS18B20_ReadByte(void){
unsignedchari,j,data=0;
for(i=0;i8;i++){
data=1;
if(DS18B20_ReadBit()){
data|=0x80;
}
}
returndata;
}
voidDS18B20_WriteByte(unsignedchardat){
unsignedchari;
for(i=0;i8;i++){
DS18B20_DIR=0;//设为输出
DS18B20_PIN=0;//拉低
delay_us(15);//延时15us
DS18B20_PIN