田苗法
(安徽機電職業(yè)技術(shù)學(xué)院,安徽 蕪湖 241000)
基于PIC單片機數(shù)字式溫度計電路設(shè)計與仿真
田苗法
(安徽機電職業(yè)技術(shù)學(xué)院,安徽 蕪湖 241000)
文章采用PIC單片機和數(shù)字溫度傳感器TC74設(shè)計數(shù)字式溫度計,硬件電路設(shè)計簡單,工作可靠,易于實現(xiàn),程序設(shè)計采用C語言編程實現(xiàn),最后利用電路仿真軟件proteus對電路進行仿真。
PIC單片機;數(shù)字式溫度計;電路設(shè)計
本設(shè)計主控制芯片采用 16F877A單片機,該單片機內(nèi)置I2C總線模塊,利用該模塊可以更方便地跟 I2C芯片進行通信,簡化了C程序代碼設(shè)計。利用I2C器件TC-74將溫度轉(zhuǎn)變?yōu)殡娦盘?,然后發(fā)給單片機,單片機對數(shù)據(jù)進行分析和計算等處理,最后通過1602液晶顯示屏顯示溫度值。
1.PIC16F877A單片機
PIC16F877A單片機是美國Microchip公司生產(chǎn)的8位單片機,具有獨特的RISC結(jié)構(gòu),即數(shù)據(jù)總線和指令總線分離的哈佛結(jié)構(gòu),該結(jié)構(gòu)具有執(zhí)行效率高和速度快等優(yōu)點。另外,片內(nèi)帶有EEPROM、A/D轉(zhuǎn)換器、USART通信模塊、MSSP通信模塊等,功能強大,可以簡化外圍硬件電路設(shè)計和程序設(shè)計。本次電路設(shè)計應(yīng)用了其內(nèi)部的 I2C通信功能模塊,作為 I2C通信硬件電路中的主控制器件使用,按照I2C通信協(xié)議與I2C從控制器件TC-74進行數(shù)據(jù)通信,實現(xiàn)溫度信號的傳輸。
圖1 PIC16F877A引腳示意圖
2.溫度傳感器TC-74
TC-74是適用于低成本和小尺寸應(yīng)用場合的可串行讀取的數(shù)字溫度傳感器,內(nèi)部溫度檢測元件將周圍環(huán)境溫度轉(zhuǎn)變?yōu)槟M信號,再通過內(nèi)部電路轉(zhuǎn)換成數(shù)字信號對外輸出。該芯片為I2C芯片,內(nèi)部置有I2C通信協(xié)議,作為I2C通信硬件電路中的從控制器件使用,數(shù)據(jù)按照該通信協(xié)議與主控制器件進行數(shù)據(jù)交換。圖2為TC-74各引腳的功能說明,其中VDD和GND分別接電源正極和電源負極,SDA和SCLK為I2C數(shù)據(jù)傳輸接口。
圖2 TC-74引腳示意圖
3.字符型1602液晶
圖3 1602液晶引腳示意圖
字符型1602液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用的有16×1、16×2、20×2和40×2等模塊,該電路設(shè)計采用的是16×1型號,該模塊采用標(biāo)準(zhǔn)的16引腳接口,如圖3所示。其中,DB0—DB7八個引腳為并行數(shù)據(jù)傳輸接口,各引腳功能見表1。
表1 1602液晶引腳接口說明表
1.硬件電路設(shè)計
應(yīng)用 proteus電路仿真軟件對硬件電路進行了設(shè)計與仿真,圖4所示,1602液晶芯片的并行數(shù)據(jù)接口DB0—DB7與單片機B端口的8個引腳連接,TC74的數(shù)據(jù)接口SCLK和SDA分別與單片機SCL、SDA引腳連接。R1和R2為I2C總線上的上拉電阻。打開仿真按鈕,液晶屏能夠正確顯示溫度傳感器上顯示的模擬溫度值。
圖4 proteus電路設(shè)計圖與仿真
2.程序設(shè)計
采用 C語言編程,按照結(jié)構(gòu)化程序設(shè)計和模塊化思想,
分別對1602液晶和TC74進行編程,C程序代碼如下:
#include〈pic.h〉
#define uchar unsigned char
#define uint unsigned int
#define RS RD0
#define E RD1
const uchar a[]="temp:";
void port_init() //單片機端口初始化
{
TRISB=0; TRISD0=0;
TRISD1=0; PORTB=0;
RD0=0; RD1=0;
TRISC=0xff;
}
void delay(uchar x) //延時函數(shù)
{
uchar i;
while(x--) for(i=0;i〈110;i++);
}
void lcd_com(uchar dat) //向LCD寫入命令函數(shù)
{
RS=0; PORTB=dat;
E=0; delay(2);
E=1; delay(2);
E=0; delay(2);
}
void lcd_date(uchar dat) //向LCD寫入數(shù)據(jù)函數(shù)
{
RS=1; PORTB=dat;
E=0; delay(2);
E=1; delay(2);
E=0; delay(2);
}
void lcd_init() //LCD初始化
{
lcd_com(0x30); delay(2);
lcd_com(0x0c); delay(2);
lcd_com(0x01); delay(2);
}
void i2c_init() //單片機I2C控制寄存器初始化
{
SSPSTAT=0x80; SSPCON=0X38;
SSPCON2=0X00; SSPADD=0X09;
}
uchar i2c_read() //讀取TC74中數(shù)據(jù)的函數(shù)
{
uchar dat; SSPIF=0;
SEN=1;
while(!SSPIF); SSPIF=0;
SSPBUF=0X9A;
while(!SSPIF); SSPIF=0;
SSPBUF=0X00;
while(!SSPIF); SSPIF=0;
RSEN=1;
while(!SSPIF); SSPIF=0;
SSPBUF=0X9B;
while(!SSPIF); SSPIF=0;
RCEN=1;
while(!(SSPSTAT & 0x01));
dat=SSPBUF; SSPIF=0;
ACKDT=1; SSPIF=0;
PEN=1;
while(!SSPIF); SSPIF=0;
return(dat);
}
void lcd_display(uchar dat) //液晶顯示溫度值函數(shù)
{
uchar shi,ge;
ge=dat % 10; shi=dat/10;
lcd_com(0x80+7); lcd_date(0x30+shi);
lcd_com(0x80+8); lcd_date(0x30+ge);
}
void main() //主函數(shù)
{
uchar i;
port_init(); i2c_init();
lcd_init(); lcd_com(0x80);
for(i=0;i〈8;i++)
{
lcd_date(a[i]);
}
while(1)
{
delay(500);
lcd_display((int)i2c_read());
}
}
通過對電路進行仿真,證明該電路設(shè)計是正確的,具有較強的實用性,并且電路硬件接線簡單,測量精度高,溫度測量范圍廣泛,抗干擾能力強,誤差較小??蓮V泛應(yīng)用于對溫度的檢測和控制等領(lǐng)域。
[1] 徐瑋,沈建良,莊建清.PIC單片機快速入門[M].北京:北京航空航天大學(xué)出版社,2010.
[2] 李學(xué)海.PIC 單片機實用教程—提高篇[M].北京:北京航空航天大學(xué)出版社,2002.
[3] 張明峰.PIC 單片機入門與實戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2004.
[4] 李廣弟,朱月秀,冷祖祈.單片機基礎(chǔ)(第三版)[M].北京:北京航空航天大學(xué)出版社,2007.
[5] 譚浩強.C 程序設(shè)計(第二版)[M].北京:清華大學(xué)出版社,2004.
TP311
A
1008-1151(2011)05-0027-02
2011-02-12
田苗法(1984-),男,山東定陶人,安徽機電職業(yè)技術(shù)學(xué)院汽車工程系助教,研究方向為汽車電子與電控技術(shù)。