当前位置:文档之家› 数字温度计C程序

数字温度计C程序

实验内容:DS18b20温度传感器晶振:11.0592M实验连线:*/#include<absacc.h>#include <string.h>#include<reg51.H>unsigned char disp0, disp1, disp2, disp3;sbit DQ = P2^7;sbit led0=P2^0;sbit led1=P2^1;sbit led2=P2^2;sbit led3=P2^3;sbit led4=P2^4;sbit led5=P2^5;#define Com_Buf 0x45//命令缓冲单元#define Dat_Buf 0x46//数据缓冲单元#define Leng 0x47//读写字节长度存放单元#define Table 0x78//表首地址存放单元#define SoftRes 0xe2//液晶软件复位指令#define Disp_On 0xaf//液晶显示指令#define Page_Add 0xb8//液晶页面选择指令#define Col_Add 0x00//液晶列设置指令#define Colen 0x43//列地址长度存储单元#define dd 0xd0typedef unsigned char BYTE;#define Lcd_Bus P0 //MCU P1<------> LCM unsigned char code HK_HZ[12][16];unsigned char code HK_HZ1[11][32];sbit A0=P2^3; //Master chip enablesbit E1=P2^0; //Slave chip enablesbit E2=P2^1; //6800 mode Enable singlesbit RW=P2^2; //Data or Instrument Selectsbit Lcd_Rst=P2^4; //Lcm reset/*------------------延时子程序-----------------------------*/ void delay(unsigned int t)unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<10;j++);}/*------------------写命令到LCD------------------------------*/ void write_com(unsigned char cmdcode){A0=0;Lcd_Bus=cmdcode;E1=0;E2=0;//delay(1);E1=1;//delay(1);E1=0;//delay(1);E2=1;//delay(1);E2=0;//delay(1);}/*-------------------写数据到LCD----------------------------*/void write_data(unsigned char Dispdata){A0=1;Lcd_Bus=Dispdata;E1=0;E2=0;//delay(1);E1=1;//delay(1);E1=0;//delay(1);E2=1;//delay(1);E2=0;//delay(1);}/*-------------------写数据到LCD----------------------------*/void write_data1(unsigned char Dispdata){A0=1;Lcd_Bus=Dispdata;E1=0;E2=0;E1=1;delay(1);E1=0;}/*-------------------写数据到LCD----------------------------*/void write_data2(unsigned char Dispdata){A0=1;Lcd_Bus=Dispdata;E1=0;E2=0;E2=1;delay(1);E2=0;}/*------------------清除内存---------------*/void Clr_Scr(){unsigned char j,k;for(k=0;k<4;k++){write_com(Page_Add+k);write_com(Col_Add+0);for(j=0;j<61;j++)write_data(0x00);}/*---------------------指定位置显示汉字16*16-----------------------*/void hz_disp16_1(unsigned char pag,unsigned char col, unsigned char code *hzk) {unsigned char j=0,i=0;for(j=0;j<2;j++){write_com(Page_Add+pag+j);write_com(Col_Add+col);for(i=0;i<16;i++) write_data1(hzk[16*j+i]);}}/*---------------------指定位置显示汉字------8*16---------------*/void hz_disp16_2(unsigned char pag,unsigned char col, unsigned char code *hzk) {unsigned char j=0,i=0;for(j=0;j<2;j++){write_com(Page_Add+pag+j);write_com(Col_Add+col);for(i=0;i<8;i++) write_data2(hzk[8*j+i]);}}/*------------------初始化LCD屏--------------------------*/void init_lcd(){Lcd_Rst=1;A0=0;RW=0;delay(100);write_com(SoftRes);//软复位write_com(Disp_On);//打开显示write_com(dd);}/*------------------------------温度信息显示------------------------*/void Msg(){// Clr_Scr();//E1=1;E2=0;hz_disp16_1(0,0,(BYTE *)&HK_HZ1[0][0]);hz_disp16_1(0,15,(BYTE *)&HK_HZ1[1][0]);hz_disp16_1(0,30,(BYTE *)&HK_HZ1[2][0]);hz_disp16_1(0,45,(BYTE *)&HK_HZ1[3][0]);E1=0;E2=1;hz_disp16_2(2,0,(BYTE *)&HK_HZ[disp0][0]); //salverhz_disp16_2(2,8,(BYTE *)&HK_HZ[disp1][0]);hz_disp16_2(2,16,(BYTE *)&HK_HZ[10][0]);hz_disp16_2(2,24,(BYTE *)&HK_HZ[disp2][0]);hz_disp16_2(2,32,(BYTE *)&HK_HZ[disp3][0]);hz_disp16_2(2,40,(BYTE *)&HK_HZ[11][0]);}/*------------------------------题号.姓名.学号信息显示------------------------*/ void Msg1(){Clr_Scr();{ ///*-- 文字: 张栋--*//*-- 宋体12; 宽x高=16x16 --*/E1=1;E2=0;hz_disp16_1(0,0,(BYTE *)&HK_HZ1[8][0]);hz_disp16_1(0,15,(BYTE *)&HK_HZ1[4][0]);hz_disp16_1(0,30,(BYTE *)&HK_HZ1[5][0]);/*-- 学号: 90408605 --*//*-- 宽x高=8x16 --*/E1=0;E2=1;hz_disp16_2(0,0,(BYTE *)&HK_HZ[9][0]);hz_disp16_2(0,8,(BYTE *)&HK_HZ[0][0]);hz_disp16_2(0,16,(BYTE *)&HK_HZ[4][0]);hz_disp16_2(0,24,(BYTE *)&HK_HZ[0][0]);hz_disp16_2(0,32,(BYTE *)&HK_HZ[8][0]);hz_disp16_2(0,40,(BYTE *)&HK_HZ[6][0]);hz_disp16_2(0,48,(BYTE *)&HK_HZ[0][0]);hz_disp16_2(0,56,(BYTE *)&HK_HZ[5][0]);/*-- 文字: 李凡凡--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ E1=1;E2=0;hz_disp16_1(2,0,(BYTE *)&HK_HZ1[6][0]);hz_disp16_1(2,15,(BYTE *)&HK_HZ1[7][0]);hz_disp16_1(2,30,(BYTE *)&HK_HZ1[7][0]);/*-- 学号: 90402102 --*//*-- 宽x高=8x16 --*/E1=0;E2=1;hz_disp16_2(2,0,(BYTE *)&HK_HZ[9][0]);hz_disp16_2(2,8,(BYTE *)&HK_HZ[0][0]);hz_disp16_2(2,16,(BYTE *)&HK_HZ[4][0]);hz_disp16_2(2,24,(BYTE *)&HK_HZ[0][0]);hz_disp16_2(2,32,(BYTE *)&HK_HZ[2][0]);hz_disp16_2(2,40,(BYTE *)&HK_HZ[1][0]);hz_disp16_2(2,48,(BYTE *)&HK_HZ[0][0]);hz_disp16_2(2,56,(BYTE *)&HK_HZ[2][0]); delay(20000);}}/*DS18b20温度传感器读写程序(c51版)*/ void delayus(int us){int s;for ( s=0; s<us; s++);}void rst(void) //单线复位脉冲时序{DQ = 1;delayus(2); //大约在15us左右DQ = 0;delayus(30); //精确延时480~960usDQ = 1;delayus(8);}unsigned int read(void){int i=0;unsigned int u=0;for (i=0;i<16;i++){DQ = 0;u >>= 1;DQ = 1;if(DQ) u|= 0x8000;delayus(4);}return(u);}void write(unsigned char ku){int i = 0;for (i=0;i<8;i++){DQ = 0;DQ = ku&0x01;delayus(3);DQ = 1;ku >>= 1;}}void read0(void){int t0,t1,t2;unsigned int tp;unsigned int lsb;rst();write(0xCC);write(0x44);rst();write(0xCC);write(0xBE);tp = read();lsb = (unsigned int)(tp*6.25);t0 = lsb/1000;disp0 = t0; //第1位,最高位if(!t0) disp0 = 0x00;t2 = lsb%1000;t1 = t2/100;disp1 = t1; //第2位t1 = t2%100;t2 = t1/10;disp2 = t2; //第3位,最低位disp3 = t1%10; //第4位,最低位}/*-- ------- 主程序------- --*/void main(){Clr_Scr();init_lcd();read0();Msg1();delay(3000) ;delay(3000) ;delay(3000) ; //调用输出汉字页面的程序{Clr_Scr();init_lcd();while(1){read0();Msg();delay(3000) ;Clr_Scr(); //温度显示页面程序}}}unsigned char code HK_HZ[][16]={ //H16 W80xF8,0xFC,0x04,0xC4,0x24, // -0- 0xFC,0xF8,0x00,0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,0x00,0x10,0x18,0xFC,0xFC, // -1-0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,0x08,0x0C,0x84,0xC4,0x64, // -2-0x3C,0x18,0x00,0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,0x08,0x0C,0x44,0x44,0x44, // -3-0xFC,0xB8,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,0xC0,0xE0,0xB0,0x98,0xFC, // -4-0xFC,0x80,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x7C,0x7C,0x44,0x44,0xC4, // -5-0xC4,0x84,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,0xF0,0xF8,0x4C,0x44,0x44, // -6-0xC0,0x80,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,0x0C,0x0C,0x04,0x84,0xC4, // -7-0x7C,0x3C,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0xB8,0xFC,0x44,0x44,0x44, // -8-0xFC,0xB8,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,0x38,0x7C,0x44,0x44,0x44, // -9-0xFC,0xF8,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,// 10 0x00,0x00,0x00,0x00,0x00, // -.-0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0xF0,0xF8,0x0C,0x04,0x04, // -C- 11 0x0C,0x18,0x00,0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00,} ;unsigned char code HK_HZ1[][16]={/*-- 文字: 当--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x40,0x42,0x44,0x58,0x40,0x40,0x7F,0x40,0x40,0x50,0x48,0xC6,0x00,0x00,0x00,0x00,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,//0/*-- 文字: 前--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x08,0xE8,0x29,0x2E,0x28,0xE8,0x08,0x08,0xC8,0x0C,0x0B,0xE8,0x08,0x08,0x00,0x00,0x00,0xFF,0x09,0x49,0x89,0x7F,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00, //1/*-- 文字: 温--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,//2/*-- 文字: 度--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,//3/*-- 文字: 张--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x02,0xE2,0x22,0x22,0x3E,0x80,0x80,0xFF,0x80,0xA0,0x90,0x88,0x86,0x80,0x80,0x00,0x00,0x43,0x82,0x42,0x3E,0x00,0x00,0xFF,0x40,0x21,0x06,0x08,0x10,0x20,0x40,0x00, //4/*-- 文字: 栋--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0xD0,0xFF,0x90,0x08,0x88,0x68,0x18,0x0F,0xE8,0x08,0x08,0x08,0x08,0x00,0x04,0x03,0x00,0xFF,0x00,0x21,0x11,0x0D,0x41,0x81,0x7F,0x01,0x05,0x09,0x30,0x00, //5/*-- 文字: 李--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x84,0x44,0x44,0x24,0x14,0x0C,0xFF,0x0C,0x14,0x24,0x44,0x44,0x84,0x80,0x00,0x08,0x08,0x08,0x08,0x09,0x49,0x89,0x79,0x0D,0x0B,0x09,0x08,0x08,0x08,0x08,0x00,//6/*-- 文字: 凡--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0xFE,0x02,0x22,0x42,0x82,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x30,0x0C,0x03,0x00,0x00,0x00,0x01,0x00,0x3F,0x40,0x40,0x40,0x78,0x00, //7/*-- 文字: ①--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0xE0,0x18,0x04,0x02,0x02,0x21,0x11,0xF9,0x01,0x01,0x02,0x02,0x04,0x18,0xE0,0x00,0x03,0x0C,0x10,0x20,0x20,0x40,0x40,0x4F,0x40,0x40,0x20,0x20,0x10,0x0C,0x03,0x00,//8} ;。

相关主题