這2個頭文件是自己原創的,函數都已經封裝好了,可以在你的程序中直接調用,現在分享在51黑電子論壇,方便大家.分別實現了溫度讀取和液晶顯示的功能.
DS18B20.h和LCD1602.h頭文件下載:
DS18B20和lcd1602調試好的頭文件.rar
(2.36 KB, 下載次數: 131)
2017-3-16 03:00 上傳
點擊文件名下載附件
DS18B20.h頭文件內容預覽:
LCD1602.h頭文件:
- /*1602液晶驅動程序*/
- //作者:詹磊
- //功能:能在1602液晶上顯示字符串(字母和阿拉伯數字)、自定義圖形(5x7點陣圖形)
- /*******************************************************************************/
- #ifndef __LCD1602_H__
- #define __LCD1602_H__
- #define uchar unsigned char
- #define uint unsigned int
- /*******************************************************************************/
- /*sbit RW_LCD=P2^1;
- sbit RS_LCD=P2^0;
- sbit E_LCD=P2^2;*/
- sbit RW_LCD=P2^5;//開發板上對印引腳
- sbit RS_LCD=P2^6;
- sbit E_LCD=P2^7;
- /**********************************字符表***************************************/
- uchar bmp_table1[8]=
- {
- 0x0E,0X1F,0X11,0X11,0X11,0X11,0X1F,0x00,//電池標號:空
- // 0 1 2 3 4 5 6 7
- };
- uchar bmp_table2[8]=
- {
- 0x0E,0X1F,0X11,0X11,0X11,0X1F,0X1F,0x00,//電池標號:一格
- // 0 1 2 3 4 5 6 7
- };
- uchar bmp_table3[8]=
- {
- 0x0E,0X1F,0X11,0X11,0X1F,0X1F,0X1F,0x00,//電池標號:兩格
- // 0 1 2 3 4 5 6 7
- };
- uchar bmp_table4[8]=
- {
- 0x0E,0X1F,0X11,0X1F,0X1F,0X1F,0X1F,0x00,//電池標號:三格
- // 0 1 2 3 4 5 6 7
- };
- uchar bmp_table5[8]=
- {
- 0x0E,0X1F,0X1F,0X1F,0X1F,0X1F,0X1F,0x00//電池標號:四格
- // 0 1 2 3 4 5 6 7
- };
- uchar bmp_table6[8]=
- {
- 0x04,0X08,0X10,0X1F,0X1F,0X1F,0X1F,0x00//FM標號
- // 0 1 2 3 4 5 6 7
- };
- uchar bmp_table7[8]=
- {
- 0x10,0X07,0X08,0X08,0X08,0X08,0X07,0x00//溫度標號
- // 0 1 2 3 4 5 6 7
- };
- /*******************************************************************************/
- void delay_ms(uint z)//毫秒延時函數
- {
- uint i,m;
- for(i=z;i>0;i--)
- for(m=123;m>0;m--);
- }
- void delay_us(uint time)//微秒延時函數
- {
- while(time--);
- }
- /*******************************************************************************/
- uchar R_TEST_LCD()
- {
-
- bit i;
- RS_LCD=0;
- RW_LCD=1;
- E_LCD=1;
- delay_us(1);
- i=(bit)(P0&0x80);
- E_LCD=0;
- RW_LCD=0;
- RS_LCD=1;
- return i;
- }
- /*******************************************************************************/
- void W_CMD_LCD(uchar cmd)
- {
- while(R_TEST_LCD());
- RS_LCD=0;
- RW_LCD=0;
- P0=cmd;
- E_LCD=1;
- E_LCD=0;
- RW_LCD=1;
- RS_LCD=1;
- }
- /*******************************************************************************/
- void W_DAT_LCD(uchar dat)
- {
- while(R_TEST_LCD());
- RS_LCD=1;
- RW_LCD=0;
- P0=dat;
- E_LCD=1;
- E_LCD=0;
- RW_LCD=1;
- RS_LCD=0;
- }
- /*******************************************************************************/
- void position(uchar x,uchar y)//x為橫坐標;y為縱坐標
- {
- if(y==1)
- {
- W_CMD_LCD(0x7F+x);
- }
- else
- {
- W_CMD_LCD(0xBF+x);
- }
- }
- /*******************************************************************************/
- void printf(uchar *dat,uchar x,uchar y)//顯示函數;x為橫坐標;y為縱坐標
- {
- position(x,y);//指定首字位置
- while(*dat>0)//當加到頭時,指針指向NULL退出循環
- {
- W_DAT_LCD(*dat);//按指針所指的地址取內容,寫入LCD寄存器
- dat++;//指針++
- }
- }
- /*******************************************************************************/
- void printf_Digital(uchar dat,uchar x,uchar y)//dat<99
- {
- position(x,y);
- W_DAT_LCD(dat/10+'0');
- W_DAT_LCD(dat%10+'0');
- }
- /*******************************************************************************/
- void W_CGRAM(uchar *dat,uchar n)
- {
- uchar i;
- W_CMD_LCD(0x40+n*8);
- for(i=0;i<8;i++)
- {
- W_DAT_LCD(*dat);//按指針所指的地址取內容,寫入CGRAM
- dat++;//指針++
- }
- dat=0;
- }
- /*******************************************************************************/
- void LCD_init()
- {
- delay_ms(15);
- W_CMD_LCD(0x38);
- delay_ms(1);
- W_CMD_LCD(0x08);
- delay_ms(1);
- W_CMD_LCD(0x01);
- delay_ms(1);
- W_CMD_LCD(0x06);
- delay_ms(1);
- W_CMD_LCD(0x0C);
- W_CGRAM(bmp_table1,0);
- W_CGRAM(bmp_table2,1);
- W_CGRAM(bmp_table3,2);
- W_CGRAM(bmp_table4,3);
- W_CGRAM(bmp_table5,4);
- W_CGRAM(bmp_table6,5);
- W_CGRAM(bmp_table7,6);
- }
- /*******************************************************************************/
- // 沐雨迎風設 //
- // 2012/03/16 //
- /*******************************************************************************/
- #endif
復制代碼
|