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