数字温度计C程序
基于单片机的数字温度计设计_课程设计(仿真+C程序))
基于单片机的数字温度计设计_课程设计(仿真+C程序))前言科技发展到今天,人们的生活中涌现出各种各样的科技产品,各种各样的电子产品更是花样百出、遍及人们生活中的每一部分,现在人们更是感觉到了科技给人们带来的巨大发展,科学技术作为第一生产力在人类社会的发展中起了很大的推动作用,人类从原始向先进的发展都伴随着科学的发展。
当今微型计算机技术发展形成两大分支,一是以微处理器(Micro Processor Unit)为核心所构成的通用微机系统,主要用于科学计算、数据处理、图形图像处理、数据库管理、人工智能、数字模拟与仿真等领域。
另一分支是为控制器( Micro Controller Unit),俗称单片机。
单片机主要用于工业测控,如家用电器、计算机外围设备、工业智能化仪表、机器人、生产过程的自动控制、农业、化工、军事、航空航天等领域。
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
单片机也被称为微控制器(Microcontroller Unit),常用英文字母的缩写MCU 表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。
摘要:单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
基于51单片机的18B20温度计C程序
本程序为本人用单片机80c51与18b20做实验时写的,其中有些是汉语拼音,便于咱们中国同胞们理解.仅供参考#include <reg52.h>#define uint unsigned int#define uchar unsigned charuchar tab[]="0123456789WD:C";sbit ds=P2^6;sbit rs=P3^4;sbit rw=P3^5;sbit en=P3^6;uchar s,g,shu;/***延时2tus***/yanshi(uchar t){while(--t){;}}/***延时tms** */delay(uint t){uchar a,b;for(a=t;a>0;a--)for(b=110;b>0;b--);}/***18B20初始化***/chushi(){ds=0;yanshi(250); //延时500usds=1;yanshi(2);}/***等待应答***/yingda(){while(ds);while(~ds);yanshi(2);}/***写一个字节***/w_dat(uchar dat){uchar i;for(i=0;i<8;i++){dat=dat>>1;ds=0;yanshi(8);ds=CY;yanshi(30);ds=1;}}/***读一个字节***/ uchar du_dat(){uchar i,dat;for(i=0;i<8;i++){ dat=dat>>1;ds=0;yanshi(1);ds=1;if(ds==1){dat=dat|0x80;}yanshi(30);}return dat;}/***启动温度转换***/ zhuanhuan(){chushi();yingda();delay(1);w_dat(0xcc);w_dat(0x44);}/***读取温度***/uchar du_wendu(){uchar a,b,dat;chushi();yingda();delay(1);w_dat(0xcc);w_dat(0xbe);a=du_dat(); //低位字节;b=du_dat(); //高位字节;dat=(b<<4)|(a>>4);return dat;}////////////////////////////// 1602液晶/////////////////////////////w_ml(uchar com){rs=0;P0=com;delay(5);en=1;delay(5);en=0;}chushihua(){rw=0;en=0;w_ml(0x38);w_ml(0x0c);w_ml(0x06);w_ml(0x01); }w_1602(uchar date){rs=1;P0=date;delay(5);en=1;delay(5);en=0;}xianshi(){w_ml(0x80);w_1602(tab[10]);w_1602(tab[11]);w_1602(tab[12]);w_1602(tab[s]);w_1602(tab[g]);w_1602(tab[13]);}/***************//** 主函数**//**************/main(){chushihua();while(1){delay(1);zhuanhuan();delay(10);shu=du_wendu();s=shu/10;g=shu%10;xianshi();}}。
温度测量、报警系统 C程序
程序名称:DS18B20温度测量、报警系统简要说明:DS18B20温度计,温度测量范围0~99.9摄氏度可设置上限报警温度、下限报警温度即高于上限值或者低于下限值时蜂鸣器报警默认上限报警温度为38℃、默认下限报警温度为5℃报警值可设置范围:最低上限报警值等于当前下限报警值最高下限报警值等于当前上限报警值将下限报警值调为0时为关闭下限报警功能编写:最后更新:09/04/16晚于寝室******************************************************************/ #include <AT89X52.h>#include "DS18B20.h"#define uint unsigned int#define uchar unsigned char //宏定义#define SET P3_1 //定义调整键#define DEC P3_2 //定义减少键#define ADD P3_3 //定义增加键#define BEEP P3_7 //定义蜂鸣器bit shanshuo_st; //闪烁间隔标志bit beep_st; //蜂鸣器间隔标志sbit DIAN = P2^7; //小数点uchar x=0; //计数器signed char m; //温度值全局变量uchar n; //温度值全局变量uchar set_st=0; //状态标志signed char shangxian=38; //上限报警温度,默认值为38signed char xiaxian=5; //下限报警温度,默认值为38ucharcode LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x ff};/*****延时子程序*****/void Delay(uint num){while( --num );}/*****初始化定时器0*****/void InitTimer(void){TMOD=0x1;TH0=0x3c;TL0=0xb0; //50ms(晶振12M)}/*****定时器0中断服务程序*****/void timer0(void) interrupt 1{TH0=0x3c;TL0=0xb0;x++;}/*****外部中断0服务程序*****/void int0(void) interrupt 0{EX0=0; //关外部中断0if(DEC==0&&set_st==1){shangxian--;if(shangxian<xiaxian)shangxian=xiaxian; }else if(DEC==0&&set_st==2){xiaxian--;if(xiaxian<0)xiaxian=0;}}/*****外部中断1服务程序*****/void int1(void) interrupt 2{EX1=0; //关外部中断1if(ADD==0&&set_st==1){shangxian++;if(shangxian>99)shangxian=99;}else if(ADD==0&&set_st==2){xiaxian++;if(xiaxian>shangxian)xiaxian=shangxian; }}/*****读取温度*****/void check_wendu(void){uint a,b,c;c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差 a=c/100; //计算得到十位数字b=c/10-a*10; //计算得到个位数字m=c/10; //计算得到整数位n=c-a*100-b*10; //计算得到小数位if(m<0){m=0;n=0;} //设置温度显示上限if(m>99){m=99;n=9;} //设置温度显示上限}/*****显示开机初始化等待画面*****/Disp_init(){P2 = 0xbf; //显示-P1 = 0xf7;Delay(200);P1 = 0xfb;Delay(200);P1 = 0xfd;Delay(200);P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****显示温度子程序*****/Disp_Temperature() //显示温度{P2 =0xc6; //显示CP1 = 0xf7;Delay(300);P2 =LEDData[n]; //显示个位P1 = 0xfb;Delay(300);P2 =LEDData[m%10]; //显示十位DIAN = 0; //显示小数点P1 = 0xfd;Delay(300);P2 =LEDData[m/10]; //显示百位P1 = 0xfe;Delay(300);P1 = 0xff; //关闭显示}/*****显示报警温度子程序*****/Disp_alarm(uchar baojing){P2 =0xc6; //显示CP1 = 0xf7;Delay(200);P2 =LEDData[baojing%10]; //显示十位P1 = 0xfb;Delay(200);P2 =LEDData[baojing/10]; //显示百位P1 = 0xfd;Delay(200);if(set_st==1)P2 =0x89;else if(set_st==2)P2 =0xc7; //上限H、下限L标示P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****报警子程序*****/void Alarm(){if(x>=10){beep_st=~beep_st;x=0;}if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0; else BEEP=1;}/*****主函数*****/void main(void){uint z;InitTimer(); //初始化定时器EA=1; //全局中断开关TR0=1;ET0=1; //开启定时器0IT0=1;IT1=1;check_wendu();check_wendu();for(z=0;z<300;z++){Disp_init();}while(1){if(SET==0){Delay(2000);do{}while(SET==0);set_st++;x=0;shanshuo_st=1;if(set_st>2)set_st=0;}if(set_st==0){EX0=0; //关闭外部中断0EX1=0; //关闭外部中断1check_wendu();Disp_Temperature();Alarm(); //报警检测}else if(set_st==1){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(shangxian);} }else if(set_st==2){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(xiaxian);} }}}/*****END*****/DS18B20.h:#include <AT89X52.h>#define DQ P3_6 //定义DS18B20总线I/O/*****延时子程序*****/void Delay_DS18B20(int num){while(num--) ;}/*****初始化DS18B20*****/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位Delay_DS18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低Delay_DS18B20(80); //精确延时,大于480usDQ = 1; //拉高总线Delay_DS18B20(14);x = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay_DS18B20(20);}/*****读一个字节*****/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);}/*****写一个字节*****/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat>>=1;}}/*****读取温度*****/unsigned int ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0x44); //启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器a=ReadOneChar(); //读低8位b=ReadOneChar(); //读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; //放大10倍输出并四舍五入 return(t);}/*****END*****/。
C51DS18B20数字温度计C语言
C51--DS18B20数字温度计--C语言#include;#include;#define uint unsigned int#define uchar unsigned charsbit DQ=P2^6;sbit lcdrs=P1^0;sbit lcdrw=P1^1;sbit lcden=P1^2;void disp(uint a);void init(void);void delay(uint i);uchar ds18b20_init(void);void write_byte(uchar byte);uchar read_byte(void);uint read_ds18b20(void);void delay50us(void);void delayms(uint a);void lcd1602_wr_com(uchar com);void lcd1602_wr_data(uchar dat);void lcd_init(void);uchar code str[]="temperature"; void main(void){init();while(1){disp(read_ds18b20());delayms(50);}}void init(void)uchar i;lcd_init();lcd1602_wr_com(0x80+0x02); //显示的地址for(i=0;i;>;=1; //右移一位DQ=1;}delay(4);}uchar read_byte(void){uchar i,temp;for(i=0;i;>;=1; //右移一位DQ=1; //主机释放信号线_nop_();if(DQ)temp|=0x80; //将读出数据放在最高位,如果是0,信号线会设备继续拉低,1则为高delay(4);}return temp; //返回读出的一字节数据}uint read_ds18b20(void)uchar numh,numl;uint value;if(ds18b20_init()==0) //判断设置是否正常,0为正常{write_byte(0xcc); //跳过ROM序列号读取write_byte(0x44); //启动温度转换if(ds18b20_init()==0) //再次初始化{write_byte(0xcc);//跳过ROM序列号读取write_byte(0xbe);//读温度寄存器numl=read_byte();//读低位数据numh=read_byte();//读高位数据value=numh;value=value;0;i--)for(j=122;j>;0;j--);}void lcd1602_wr_com(uchar com){lcdrs=0;P0=com;delayms(2);lcden=1;delay50us();lcden=0;}void lcd1602_wr_data(uchar dat){lcdrs=1;P0=dat;delayms(2);lcden=1;delay50us();lcden=0;}void lcd_init(void){lcden=0;lcdrw=0;lcd1602_wr_com(0x38); //显示模式设置lcd1602_wr_com(0x0c); //开显示,不显示光标lcd1602_wr_com(0x06); //写字符后地址指针加1,整屏显示不移动lcd1602_wr_com(0x01); //清屏}。
C51单片机数字温度计汇编程序及说明书
1绪论1.1选题背景随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学试验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。
现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计。
这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确等优点,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
因此本课题就尝试通过编程与芯片的结合来解决传统数字温度计的弊端,设计出新型数字温度计。
1.2课题现状分析及研究意义温度传感器的发展现状:温度传感器使用范围广,数量多,居各种传感器之首,其发展大致经历了以下3个阶段:①传统的分立式温度传感器(含敏感元件)——热电偶传感器,主要是能够进行非电量和电量之间转换。
②模拟集成温度传感器/控制器。
集成传感器是采用硅半导体集成工艺制成的,因此亦称硅传感器或单片集成温度传感器。
③智能温度传感器。
它是微电子技术、计算机技术和自动测试技术(ATE_)的结晶。
智能温度传感器内部包含温度传感器、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。
本课题的研究可以应用领域生产、生活等很多领域。
对于家用电器从洗衣机、微波炉到音响等等到处都可以用到温度控制器来方便大家的日常生活。
开发此产品后也可方便应用安装在小至家庭大到工厂车间,小至一个芯片大到一个机械设备。
例如在家庭客厅卧室等必要地方显示室温,可防止家里食物是否变质及早采取措施。
转基于DS18B20数字温度计C语言程序设计
看了好多天单片机,找了好多资料想自己利用实验板上的DS18B20做个温度计(最近温度实在是太热了)。
在网上找了好多关于这个的程序,结果发现对我的板子来说就这个好用,温度三十度不算高,因为我把它放到风扇下面了,现在和大家分享一下吧,不过里面我自己也改了一点点。
希望高手不要见笑,红色的部分是我改的或者是后加上的。
如果还有什么更好的建议或意见请记得给我留言哦……#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit PS2=P2^6; //数码管十位,位选sbit PS1=P2^7; //数码管个位,段选sbit P_L=P1^0; //测量指示sbit DQ=P2^2; //DS18B20数据接口void delay(uint); //延时函数void DS18B20_init(void); //DS18B20初始化void get_temper(void); //读取温度程序void DS18B20_write(uchar in_data); //DS18B20写数据函数uchar DS18B20_read(void); ////读取数据程序uchar htd(uchar a); //进制转换函数void display(void); //显示函数uchar temp; //温度寄存器bit DS18B20; // 18B20存在标志,1---存在0---不存在uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //字段转换表void main(void){uint a;while(1){get_temper(); //测量温度for(a=0;a<200;a++) ;//显示,兼有延时的作用display();}}/****************************DS18B20读取温度函数**************************//*函数原型:void get_temper(void)/*函数功能:DS18B20读取温度/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void get_temper(void){uchar k,T_sign,T_L,T_H;DS18B20_init(); //DS18B20初始化if(DS18B20) //判断DS1820是否存在?若DS18B20不存在则返回{DS18B20_write(0xcc); // 跳过ROM匹配DS18B20_write(0x44); //发出温度转换命令DS18B20_init(); //DS18B20初始化if(DS18B20) //判断DS1820是否存在?若DS18B20不存在则返回{DS18B20_write(0xcc); //跳过ROM匹配DS18B20_write(0xbe); //发出读温度命令T_L=DS18B20_read(); //数据读出T_H=DS18B20_read();k=T_H&0xf8;if(k==0xf8)T_sign=1; //温度是负数elseT_sign=0; //温度是正数T_H=T_H&0x07;temp=(T_H*256+T_L)*0.0625; //温度转换常数}}}/****************************DS18B20写数据函数**************************//*函数原型:void DS18B20_write(uchar in_data)/*函数功能:DS18B20写数据/*输入参数:要发送写入的数据/*输出参数:无/*调用模块:_cror_()/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void DS18B20_write(uchar in_data) //写DS18B20的子程序(有具体的时序要求){uchar i,out_data,k;out_data=in_data;for(i=1;i<9;i++) //串行发送数据{DQ=0;DQ=1;_nop_();_nop_();k=out_data&0x01;if(k==0x01) //判断数据写1{DQ=1;}else //写0{DQ=0;}delay(4); //延时62usDQ=1;out_data=_cror_(out_data,1); //循环右移1位}}/**************************DS18B20读函数**************************/ /*函数原型:void DS18B20_read()/*函数功能:DS18B20读数据/*输入参数:无/*输出参数:读到的一字节内容/*调用模块:delay()/*建立时间:2005/11/14/*作者:站长/******************************************************************/uchar DS18B20_read(){uchar i,in_data,k;in_data=0;for(i=1;i<9;i++) //串行发送数据{DQ=0;DQ=1;_nop_();_nop_();k=DQ; //读DQ端if(k==1) //读到的数据是1{in_data=in_data|0x01;}else{in_data=in_data|0x00;}delay(3); //延时51usDQ=1;in_data=_cror_(in_data,1); //循环左移1位}return(in_data);}/**************************DS18B20初始化函数**************************/ /*函数原型:void DS18B20_init(void)/*函数功能:DS18B20初始化/*输入参数:无/*输出参数:无/*调用模块:delay()/*建立时间:2005/11/14/*作者:站长/******************************************************************/void DS18B20_init(void){uchar a;DQ=1; //主机发出复位低脉冲DQ=0;delay(44); //延时540USDQ=1;for(a=0;a<0x36&&DQ==1;a++){ //等待DS18B20回应a++;a--;}if(DQ)DS18B20=0; //18B20不存在else{DS18B20=1; // 18B20存在delay(120); //复位成功!延时240US}}/**************************数码管显示函数**************************//*函数原型:void display(void)/*函数功能:数码管显示/*输入参数:无/*输出参数:无/*调用模块:delay()/*建立时间:2005/11/14/*作者:站长/******************************************************************/void display(void){PS1=1;P0=0x01;PS1=0;PS2=1;P0=tab[htd(temp)>>4]; //转换成十进制输出PS2=0;delay(200);PS1=1;P0=0x02;PS1=0;PS2=1;P0=tab[htd(temp)&0x0f]; //转换成十进制输出PS2=0;delay(200);P_L=~DS18B20;}/*********************原显示函数***********************************void display(void){P0=tab[htd(temp)>>4]; //转换成十进制输出PS2=1;PS1=0;delay(200);P0=tab[htd(temp)&0x0f]; //转换成十进制输出PS1=1;PS2=0;delay(200);P_L=~DS18B20;}*******************************************************//**************************十六进制转十进制函数**************************//*函数原型:uchar htd(uchar a)/*函数功能:十六进制转十进制/*输入参数:要转换的数据/*输出参数:转换后的数据/*调用模块:无/*建立时间:2005/11/14/*作者:站长/******************************************************************/uchar htd(uchar a){uchar b,c;b=a%10;c=b;a=a/10;b=a%10;c=c|b<<4;return c;}/*******************************延时函数*********************************/ /*函数原型:delay(unsigned int delay_time)/*函数功能:延时函数/*输入参数:delay_time (输入要延时的时间)/*输出参数:无/*调用模块:无/*建立时间:2005/10/21/*作者:站长/**********************************************************************/ void delay(unsigned int delay_time) //延时子程序{for(;delay_time>0;delay_time--){}}。
基于单片机的数字温度计c程序(Microcontroller based digital thermometer C program)
基于单片机的数字温度计c程序(Microcontroller based digitalthermometer C program)#包括<< reg52。
”#包括<<信息。
”#定义unsigned char函数# unsigned int定义单元#定义delaynop() { _nop_();_nop_();_nop_();_nop_();}公司^ DQ=P2 2;普通双= P2 ^ 6;/ /定义锁存器锁存端普通焊接= P2 ^ 7;普通RS = P3 ^ 5;/ /定义1602液晶RS端公司lcden = P3 ^ 4;/ /定义1602液晶lcden端P3 ^了S1 = 0;//定义按键--功能键公司^ S2 = P3 1;/ /定义按键--增加键P3 ^了S3 = 2;//定义按键--减小键P3 ^了S4 = 6;//闹钟查看键P3 ^了RD = 7;普通哔= P2 ^ 3;/ /定义蜂鸣器端函数代码temp_disp_title [ ] = {“当前温度:“};函数current_temp_display_buffer [ ] = {“临时”};函数代码alarm_temp [ ] = {“报警温度高低”};函数alarm_hi_lo_str [ ] = {“嗨:Lo:“};函数temp_data [ 2 ] = { 0x00,0x00 };函数temp_alarm [ 2 ] = { 0x00,0x00 };函数显示[ 5 ] = { 0x00,0x00,0x00,0x00,0x00 };函数显示[ 3 ] = { 0x00,0x00,0x00 };函数代码df_table [ ] = { 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9 };函数,= 0;//当前读取的温度整数部分函数temp_value [ ] = { 0x00,0x00 };//从DS18B20读取的温度值函数display_digit [ ] = { 0,0,0,0 };//待显示的各温度数位点ds18b20_is_ok = 1;//传感器正常标志/ / ------------------------------------- 延时/ / 1/ / ------------------------------------- 无效的极限(个X){我的函数;当(x)为(i=0;i < 200;i +);}/ / ------------------------------------- 延时/ / 2/ / ------------------------------------- 虚空Delay(个X){(x);}/ / ------------------------------------/ /忙检查/ / ------------------------------------无效write_com(UCHAR COM)/液晶写命令函数{RS=0;lcden = 0;P0 = COM;极限(5);lcden = 1;极限(5);lcden = 0;}write_lcd_data(void函数日期)/液晶写数据函数{RS=1;lcden = 0;P0 =日期;极限(5);lcden = 1;极限(5);lcden = 0;}/ / -----------------------------/ /设置液晶显示位置/ / --------------------------------- 无效set_disp_pos(uchar Pos){write_com(POS | 0x80);}/ / -----------------------------/ /液晶初始化/ / ---------------------------------无效initialize_lcd(){函数数;RD = 0;//软件将矩阵按键第4列一端置低用以分解出独立按键班杜拉= 0;//关闭两锁存器锁存端,防止操作液晶时数码管会出乱码维拉= 0;lcden = 0;write_com(0X38);/ /初始化1602液晶write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);/ /设置显示初始坐标对于(num = 0;数<14;数+ +)/显示年月日星期{write_lcd_data(temp_disp_title [民]);极限(5);}}/ / -------------------------------------/ /函数功能:初始化DS18B20/ /出口参数:现状——DS18B20是否复位成功的标志/ / -------------------------------------init_ds18b20()函数{函数的状态;/ /储存DS18B20是否存在的标志,状态= 0,表示存在;状态= 1,表示不存在DQ=1;Delay(8);/ / / / 6微秒略微延时约先将数据线拉高DQ=0;Delay(90);//再将数据线从高拉低,要求保持480 ~ 960us600 /略微延时约微秒以向DS18B20发出一持续480 ~ 960us的低电平复位脉冲DQ=1;Delay(8);//释放数据线(将数据线拉高)/延时约30us(释放总线后需等待15 ~ 60us让DS18B20输出存在脉冲)状态= DQ;Delay(100);To detect whether the output of the microcontroller / presence pulse (DQ=0 said there was enough long time delay) / /, waiting for the existence of output pulse.DQ=1; / / data lines pulledReturn status; / / return test success}//-------------------------------------/ / function: read a byteExport parameters: dat--- / / read data//-------------------------------------Uchar, ReadOneByte (){Uchar, I, dat=0;DQ=1; (_nop_); / / the first data line up / / wait for a machine cycleFor (i=0; i<8; i++){DQ=0; / / SCM from DS18B20 according to the reading, the data line from high low start read timingDat>>=1;(_nop_); / / wait for a machine cycleDQ=1; / / data line "artificial" pull up, ready for the detection of DS18B20 MCU output level_nop_ (_nop_); (); / / delay of about 6us, so that the host sampling in 15USIf (DQ dat|=0x80); / / if the read data is 1, will be 1 in DAT, if the 0 will remain the original value unchanged.Delay (30); / / 3us delay, there must be more than 1US of the recovery period between two read timingDQ=1; / / data lines pulled, ready for the next data read}Return dat;}//-------------------------------------/ / function: write a byteEntrance parameters: dat--- / / data to be written//-------------------------------------Void WriteOneByte (uchar DAT){Uchar i;For (i=0; i<8; i++){DQ=0; / / data line from high low start write timingDQ=dat & 0x01; / / use and operation to remove a write binary data,/ / and sent to a data line for DS18B20 samplingDelay (5); / / delay of about 30us, sampling from the data line during DS18B20 about 15~60us in the low postDQ=1; / / release the data line.Dat>>=1; / / dat in the 1 bit binary data.}}//-------------------------------------/ / function: read the temperature valueEntrance parameters: / ///-------------------------------------Void, Read_Temperature (){If (Init_DS18B20) (//DS18B20 = = 1) faultDS18B20_IS_OK=0;Else{WriteOneByte (0xCC); / / read serial number column number operation skipWriteOneByte (0x44); / / convert temperature(Init_DS18B20); / / initialize DS18B20WriteOneByte (0xCC); / / read serial number column number operation skipWriteOneByte (0xBE); / / read the temperature register, the first two are low and high temperatureTemp_Value[0]=ReadOneByte (8); / / low temperatureTemp_Value[1]=ReadOneByte (high temperature); / / 8DS18B20_IS_OK=1;}}//-------------------------------------/ / function: display the current temperature in LCD/ / entrance parameters://-------------------------------------Void, Display_Temperature (){Uchar i;/ / delay value and negative identificationUchar, t=150, ng=0;5 all 1 / / high (0xF8) is negative, negative counter plus 1, and set the negative signIf ((Temp_Value[1] & 0xF8) ==0xF8){Temp_Value[1]=~Temp_Value[1];Temp_Value[0]=~Temp_Value[0]+1;If (Temp_Value[0]==0x00 Temp_Value[1]++); / / plus 1 if the low byte is 00 bits that carry, then added to the high byteNg=1; / / the 1 negative sign}Display_Digit[0]=df_Table[Temp_Value[0] & 0x0F]; / / find the decimal part temperature/ / get the temperature (high byte integer part of the lower 3 and the low byte in the high 4 bit unsigned)CurrentT= ((Temp_Value[0] & 0xF0) (>>4) | (Temp_Value[1] & 0x07) <<4);/ / integer part is decomposed into 3 bit digital to displayDisplay_Digit[3]=CurrentT/100; / / 100 digit[CurrentT/100];Display_Digit[2]=CurrentT%100/10; / / tenDisplay_Digit[1]=CurrentT%10; / / A/ / LCD display refresh bufferCurrent_Temp_Display_Buffer[11]=Display_Digit[0]+'0'; / / the first'0' will be converted into the integer 48, then add the digital front,Gets the ASCII character of the corresponding numberCurrent_Temp_Display_Buffer[10]='.';Current_Temp_Display_Buffer[9]=Display_Digit[1]+'0'; / / ACurrent_Temp_Display_Buffer[8]=Display_Digit[2]+'0'; / / tenCurrent_Temp_Display_Buffer[7]=Display_Digit[3]+'0'; / / 100Not to display 0 / / highIf (Display_Digit[3]==0) Current_Temp_Display_Buffer[7]='';For the 0 time and high / high 0 times, do not show highIf (Display_Digit[2]==0 and Display_Digit[3]==0)Current_Temp_Display_Buffer[8]='';/ / negative symbols are displayed in the right position If (NG){If (Current_Temp_Display_Buffer[8]=='')Current_Temp_Display_Buffer[8]='-';Else if (Current_Temp_Display_Buffer[7]=='')Current_Temp_Display_Buffer[7]='-';ElseCurrent_Temp_Display_Buffer[6]='-';}/ / in the first row show titleSet_Disp_Pos (0x00);For (i=0; i<16; i++){Write_LCD_Data (Temp_Disp_Title[i]);}Set_Disp_Pos (0x40); / / in the second line shows the current temperatureFor (i=0; i<16; i++){Write_LCD_Data (Current_Temp_Display_Buffer[i]);}/ / temperature display symbols/ / Set_Disp_Pos (0x4D); Write_LCD_Data (0x00);Set_Disp_Pos (0x4D); Write_LCD_Data (0xdf);Set_Disp_Pos (0x4E); Write_LCD_Data ('C');}//-------------------------------------/ / function: the main function/ / entrance parameters://------------------------------------- Void, main (){Initialize_LCD ();Read_Temperature ();Delay (50000);Delay (50000);While (1){Read_Temperature ();If (DS18B20_IS_OK) Display_Temperature (); Delay1 (100);}}。
数字温度计的c语言程序
void Read_Temperature()
{
if(Init_DS18B20( )==1)
DS18B20_IS_OK=0; //DS18B20故障
Temp_Value[1]=ReadOneByte(); //温度高8位
Alarm_Temp_HL[0]=ReadOneByte();
Alarm_Temp_HL[1]=ReadOneByte();
DS18B20_IS_OK=1;
}
}
///设置报警值
void Set_Alarm_Temp_Value()
程序名称:在数码管上显示温度
*************************************************************************/
void Display_Temperture()
{
uchar i;
uchar t=150; //延时值
uint Time0_Count=0;
/*******************************************************************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
DS18B20温度计 c程序 lcd1602显示
2007-12-14 19:05温度值精确到0.1度,lcd1602显示仿真电路图如下c程序如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P3^7;//ds18b20与单片机连接口sbit RS=P3^0;sbit RW=P3^1;sbit EN=P3^2;unsigned char code str1[]={"temperature: "};unsigned char code str2[]={" "};uchar data disdata[5];uint tvalue;//温度值uchar tflag;//温度正负标志/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的){unsigned int i,j;for(i=0;i<ms;i++)for(j=0;j<100;j++);}void wr_com(unsigned char com)//写指令//{ delay1ms(1);RS=0;RW=0;EN=0;P2=com;delay1ms(1);EN=1;delay1ms(1);EN=0;}void wr_dat(unsigned char dat)//写数据//{ delay1ms(1);;RS=1;RW=0;EN=0;P2=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;}void lcd_init()//初始化设置//{delay1ms(15);wr_com(0x38);delay1ms(5);wr_com(0x08);delay1ms(5);wr_com(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);}void display(unsigned char *p)//显示//{while(*p!='\0'){wr_dat(*p);p++;delay1ms(1);}}init_play()//初始化显示{ lcd_init();wr_com(0x80);display(str1);wr_com(0xc0);display(str2);}/******************************ds1820程序***************************************/ void delay_18B20(unsigned int i)//延时1微秒{while(i--);}void ds1820rst()/*ds1820复位*/{ unsigned char x=0;DQ = 1; //DQ复位delay_18B20(4); //延时DQ = 0; //DQ拉低delay_18B20(100); //精确延时大于480usDQ = 1; //拉高delay_18B20(40);}uchar ds1820rd()/*读数据*/{ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){ DQ = 0; //给脉冲信号dat>>=1;DQ = 1; //给脉冲信号if(DQ)dat|=0x80;delay_18B20(10);}return(dat);}void ds1820wr(uchar wdata)/*写数据*/{unsigned char i=0;for (i=8; i>0; i--){ DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1;}}read_temp()/*读取温度值并转换*/{uchar a,b;ds1820rst();ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0x44);//*启动温度转换*/ds1820rst();ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0xbe);//*读取温度*/a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff)tflag=0;else{tvalue=~tvalue+1;tflag=1;}tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数return(tvalue);}/*******************************************************************/ void ds1820disp()//温度值显示{ uchar flagdat;disdata[0]=tvalue/1000+0x30;//百位数disdata[1]=tvalue%1000/100+0x30;//十位数disdata[2]=tvalue%100/10+0x30;//个位数disdata[3]=tvalue%10+0x30;//小数位if(tflag==0)flagdat=0x20;//正温度不显示符号elseflagdat=0x2d;//负温度显示负号:-if(disdata[0]==0x30){disdata[0]=0x20;//如果百位为0,不显示if(disdata[1]==0x30){disdata[1]=0x20;//如果百位为0,十位为0也不显示}}wr_com(0xc0);wr_dat(flagdat);//显示符号位wr_com(0xc1);wr_dat(disdata[0]);//显示百位wr_com(0xc2);wr_dat(disdata[1]);//显示十位wr_com(0xc3);wr_dat(disdata[2]);//显示个位wr_com(0xc4);wr_dat(0x2e);//显示小数点wr_com(0xc5);wr_dat(disdata[3]);//显示小数位}/********************主程序***********************************/void main(){ init_play();//初始化显示while(1){read_temp();//读取温度ds1820disp();//显示}}。
C语言程序编写 温度计显示
_nop_();
adwr=0;
_nop_();
adwr=1;
delay(1);
P1=0xff;
adrd=1;
_nop_();
adrd=0;
_nop_();
adval=P1;
adrd=1;
return adval;
lpf=(dat[1]+dat[2]+dat[3])/3;
return lpf;
}
void temp_converted() //AD转换温度函数,每段拟合线性化,scope
{
uchar i;
float k;
uchar m;
uchar temp;
uchar code tabler[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};//led显示编码不带小数点
//AD转换的数值
uchar code tempdata[75]={11,17,34,41,52,61,69,79,90,100,111,117,126,132,138,145,149,154,160,165,169,173,178,182,186,188,193,196,199,203,205,207,208,209,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253};
数字温度计C程序
/*在使用这个例子时,要将J11插针短接到2、3两脚,引入温感数据脚到P33*/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit greenled=P3^1; //定义绿灯的控制端口sbit redled=P3^0; //定义红灯的控制端口sbit DS=P1^0; //定义DS18B20接口sbit speaker=P1^1; //定义蜂鸣器的控制端口sbit k1=P3^2; //定义功能键的控制键sbit k2=P3^3; //定义温度定位键sbit k3=P3^4; //定义温度加的控制键sbit k4=P3^5; //定义蜂鸣器减停止按键float m1=2,n1=10,q1=0; //最高温度显示位H20.0float m2=1,n2=10,q2=0; //最低温度显示位L10.0int temp;int temp1=0; //key1引起的外部中断0char zancun1=1;char zancun2=0;uchar flag1;void display(unsigned char *lp,unsigned char lc);//数字的显示函数;lp为指向数组的地址,lc 为显示的个数void delay();//延时子函数,5个空指令code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, // 0-90xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef, // 10-190x40,// 20 符号位"-"0x39,// 21 符号c0x00,// 22 空表0x76,// 23 高温H0x38};// 24 低温L//共阴数码管显示数的组成是"0-9""0-9有小数点的" "-" "C" "空表" "H " " L" unsigned char l_tmpdate[4]={0,0,0,0};//定义数组变量,int tmp(void);void tmpchange(void);void tmpwritebyte(uchar dat);uchar tmpread(void);bit tmpreadbit(void);void dsreset(void);void delayb(uint count);void main() //主函数{EA=1; //首先开启总中断EX0=1; //开启外部中断0IT0=1; // 设置成下降沿触发方式redled=1;greenled=1;while(1){if(temp1==0)//正常温度显示{while(1){uchar i;int l_tmp;tmpchange(); //温度转换l_tmp=tmp(); //读取温度值if(l_tmp<0) //负数处理{ l_tmpdate[0]=20;l_tmp--;l_tmp--;l_tmp=~l_tmp;l_tmp=l_tmp%1000;l_tmpdate[1]=l_tmp/100;//获取十位if(l_tmpdate[1]==0)l_tmpdate[1]=22;l_tmp=l_tmp%100;l_tmpdate[2]=l_tmp/10;//获取个位再l_tmpdate[2]+=10;//加入小数点,查表可得出有小数点的排在后10位,所以加10l_tmpdate[3]=l_tmp%10;//获取小数第一位}else //正数的处理{l_tmpdate[0]=l_tmp/1000; //显示百位if(l_tmpdate[0]==0)l_tmpdate[0]=22;//判断温度为正温度且没有上百,前面不显示,查表第12是空l_tmp=l_tmp%1000;l_tmpdate[1]=l_tmp/100; //显示十位if(l_tmpdate[0]==22&&l_tmpdate[1]==0) //百位和十位同时为0 则不显示l_tmpdate[1]=22;l_tmp=l_tmp%100;l_tmpdate[2]=l_tmp/10;//获取个位再l_tmpdate[2]+=10;//加入小数点,查表可得出有小数点的排在后10位,所以加10l_tmpdate[3]=l_tmp%10;//获取小数第一位}if(l_tmpdate[1]==22)//对于低温限制为小于10度的处理{if(m1*10+n1+q1*0.1>=(l_tmpdate[1]-22)*10+l_tmpdate[2]+l_tmpdate[3]*0.1&&m2*10+n2+q2*0.1<=(l_tmpdate[1]-22)*10+l_tmpdate[2]+l_tmpdate[3]*0.1){greenled=0;//温度高于最低限和最高限绿灯亮,红灯灭,蜂鸣器不报警redled=1;speaker=1;}else{greenled=1;//温度高于最低限和最高限绿灯灭,红灯亮,蜂鸣器报警redled=0;speaker=zancun2;}}else//对于低温为两位数字的处理{if(m1*10+n1+q1*0.1>=l_tmpdate[1]*10+l_tmpdate[2]+l_tmpdate[3]*0.1&&m2*10+n2+q2*0.1<=l_tmpdate[1]*10+l_tmpdate[2]+l_tmpdate[3]*0.1){greenled=0;///温度高于最低限和最高限绿灯亮,红灯灭,蜂鸣器不报警redled=1;speaker=1;}else{greenled=1;//温度高于最低限和最高限绿灯灭,红灯亮,蜂鸣器报警redled=0;speaker=zancun2;}}if(k4==0){ while(k4==0)//消抖程序{_nop_();}zancun2++;if(zancun2==2){zancun2=0;}}for(i=0;i<100;i++)//循环输出45次,提高亮度仿真时使用100 比较稳定{display(l_tmpdate,4);}if(zancun1==0){ zancun1=1;break;}}}if(temp1==1)//高温设置{ int i,n=0,m=0;l_tmpdate[0]=23;l_tmpdate[1]=m1;l_tmpdate[2]=n1;l_tmpdate[3]=q1;while(1){for(i=0;i<30;i++)//循环输出40次,提高亮度{display(l_tmpdate,4);if(k2==0)//确定调试第几个数码管{n++;if(n>=3)n=0;while(k2==0)//消抖程序{_nop_();}}if(n==0)// 第一位数码管的设置{if(k3==0){while(k3==0)//消抖程序{_nop_();}m1++;if(m1==10) //如果第一位数码管是9,则变为- m1=20;if(m1==21) //如果第一位数码管是-,则变为0 m1=0;l_tmpdate[1]=m1;l_tmpdate[2]=n1;l_tmpdate[3]=q1;}}if(n==1)//第二位数码管的设置{if(k3==0){while(k3==0)//消抖程序{_nop_();}n1++;if(n1>=20)n1=10;l_tmpdate[1]=m1;l_tmpdate[2]=n1;l_tmpdate[3]=q1;}}if(n==2)//第三位数码管的设置{if(k3==0){while(k3==0)//消抖程序{_nop_();}q1++;if(q1>=10)q1=0;l_tmpdate[1]=m1;l_tmpdate[2]=n1;l_tmpdate[3]=q1;}}}if(zancun1==0)// 当从中断程序回来时,可以跳出程序{ zancun1=1;break;}}}if(temp1==2)//低温设置{int i,n=0,m=0;l_tmpdate[0]=24;l_tmpdate[1]=m2;l_tmpdate[2]=n2;l_tmpdate[3]=q2;while(1){for(i=0;i<30;i++)//循环输出40次,提高亮度{display(l_tmpdate,4);if(k2==0)//确定调试第几个数码管{n++;if(n>=3)n=0;while(k2==0)//消抖程序{_nop_();}}if(n==0)// 第一位数码管的设置{if(k3==0){while(k3==0)//消抖程序{_nop_();}m2++;if(m2==10) //如果第一位数码管是9,则变为- m2=20;if(m2==21) //如果第一位数码管是-,则变为0 m2=0;l_tmpdate[1]=m2;l_tmpdate[2]=n2;l_tmpdate[3]=q2;}}if(n==1)//第二位数码管的设置{if(k3==0){while(k3==0)//消抖程序{_nop_();}n2++;if(n2>=20)n2=10;l_tmpdate[1]=m2;l_tmpdate[2]=n2;l_tmpdate[3]=q2;}}if(n==2)//第三位数码管的设置{if(k3==0){while(k3==0)//消抖程序{_nop_();}q2++;if(q2>=10)q2=0;l_tmpdate[1]=m2;l_tmpdate[2]=n2;l_tmpdate[3]=q2;}}}if(zancun1==0){ zancun1=1;break;}}}}}void key_scan1() interrupt 0{temp1++;if(temp1==3)temp1=0;zancun1=0;}void display(unsigned char *lp,unsigned char lc)//显示{unsigned char i; //定义变量P0=0x00; //端口2为输出P2=0xf7; //将P2口的输出1111 0111,对应第一个数码管for(i=0;i<lc;i++){ //循环显示P0=table[lp[i]]; //查表法得到要显示数字的数码段delay();delay();delay();P0=0x00; //清0端口,准备显示下位P2>>=1; //下一位数码管if(i==3) //检测显示完4位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据break;}}void delay(void) //空5个指令{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); }void delayb(uint count) //delay{uint i;while(count){i=200;while(i>0)i--;count--;}}/*。
51单片机程序(数字温度计)
数字温度计1、LCD.c#include <reg51.h>#include<LCD.h>unsigned char code number_X[]={ //宽x高=8x16,纵向字节倒序0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, //00x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, //10x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, //20x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, //30x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, //40x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, //50x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, //60x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, //70x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, //80x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, //90x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00, //-0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //nop 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00, //:0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};void LCD_WriteCommandE1(unsigned char com) {while(CRADD1 & 0x80);CWADD1 = com;}void LCD_WriteDataE1(unsigned char dat)while(CRADD1 & 0x80);DWADD1 = dat;}void LCD_WriteCommandE2(unsigned char com) {while(CRADD2 & 0x80);CWADD2 = com;}void LCD_WriteDataE2(unsigned char dat){while(CRADD2 & 0x80);DWADD2 = dat;}void LCD_Init(){LCD_WriteCommandE1(0xe2);LCD_WriteCommandE2(0xe2);LCD_WriteCommandE1(0xa4);LCD_WriteCommandE2(0xa4);LCD_WriteCommandE1(0xa9);LCD_WriteCommandE2(0xa9);LCD_WriteCommandE1(0xa0);LCD_WriteCommandE2(0xa0);LCD_WriteCommandE1(0xc0);LCD_WriteCommandE2(0xc0);LCD_WriteCommandE1(0xaf);LCD_WriteCommandE2(0xaf);}void LCD_Clear(void){unsigned char i,j;for(i=0;i<4;i++){LCD_WriteCommandE1(i+0xb8);LCD_WriteCommandE2(i+0xb8);LCD_WriteCommandE1(0x00);LCD_WriteCommandE2(0x00);for(j=0;j<0x50;j++){LCD_WriteDataE1(0x00);LCD_WriteDataE2(0x00);}}void display_cn(unsigned char lin,unsigned int col,unsigned int len,unsigned char *p) {unsigned int seg,i,j;unsigned char a,L,n;switch(lin){case 0: n=0xba;break;case 1: n=0xb8;break;}for(i=0;i<len;i++){for(j=0;j<2;j++){L=col;LCD_WriteCommandE1(n+j);LCD_WriteCommandE2(n+j);for(seg=0;seg<16;seg++){if (L < 61){a = L;LCD_WriteCommandE1(a);LCD_WriteDataE1(*p++);}else{a = L-61;LCD_WriteCommandE2(a);LCD_WriteDataE2(*p++);}L++;}}col=col+16;}}void display_number(unsigned char lin,unsigned int col,unsigned char num){unsigned int seg,i,j;unsigned char a,L,n,k;switch(lin){case 0: n=0xba;break;case 1: n=0xb8;break;}k=num*16;for(j=0;j<2;j++){L=col;LCD_WriteCommandE1(n+j);LCD_WriteCommandE2(n+j);for(seg=0;seg<8;seg++){if (L < 61){a = L;LCD_WriteCommandE1(a);LCD_WriteDataE1(number_X[k++]);}else{a = L-61;LCD_WriteCommandE2(a);LCD_WriteDataE2(number_X[k++]);}L++;}}}void display_unsigned_int(unsigned char lin,unsigned int col,unsigned int dat) {unsigned int seg;unsigned char k[4];k[3]=dat%10;k[2]=((dat/10)%10);k[1]=((dat/100)%10);k[0]=((dat/1000)%10);if(k[0]==0) {k[0]=12;}if((k[0]==12)&&(k[1]==0)){ k[0]=12;k[1]=12;}if((k[0]==12)&&(k[1]==12)&&(k[2]==0)){k[0]=12;k[1]=12;k[2]=12;}for(seg=0;seg<4;seg++){display_number(lin,col,k[seg]);col=col+10;}}void display_signed_int(unsigned char lin,unsigned int col,signed int dat){unsigned int seg;unsigned char k[5],a;k[0]=12;if(dat<0){dat=(~dat)+1;k[0]=11;}k[4]=dat%10;k[3]=((dat/10)%10);k[2]=((dat/100)%10);k[1]=((dat/1000)%10);a=k[0];if(k[1]==0) {k[0]=12;k[1]=a;}if((k[1]==a)&&(k[2]==0)){ k[0]=12;k[1]=12;k[2]=a;}if((k[1]==12)&&(k[2]==a)&&(k[3]==0)){k[0]=12;k[1]=12;k[2]=12;k[3]=a;}for(seg=0;seg<5;seg++){display_number(lin,col,k[seg]);col=col+10;}}void display_unsigned_char(unsigned char lin,unsigned int col,unsigned char dat) {unsigned int seg;unsigned char k[3];k[1]=dat%10;k[0]=((dat/10)%10);for(seg=0;seg<2;seg++){display_number(lin,col,k[seg]);col=col+10;}}2、LCD.h#include <reg51.h>#include <absacc.h>#ifndef __LCD__#define __LCD__#define CWADD1 XBYTE[0x8000]#define DWADD1 XBYTE[0x8001]#define CRADD1 XBYTE[0x8002]#define DRADD1 XBYTE[0x8003]#define CWADD2 XBYTE[0x8004]#define DWADD2 XBYTE[0x8005]#define CRADD2 XBYTE[0x8006]#define DRADD2 XBYTE[0x8007]extern void LCD_Init();extern void display_cn(unsigned char lin,unsigned int col,unsigned int len,unsigned char *p);extern void display_signed_int(unsigned char lin,unsigned int col,signed int dat);extern void display_unsigned_int(unsigned char lin,unsigned int col,unsigned int dat);extern void display_unsigned_char(unsigned char lin,unsigned int col,unsigned char dat);extern void LCD_Clear(void);#endif3、DS18B20.c#include <reg51.h>#include "string.h"#include "intrins.h"#include "DS18B20.h"sbit DQ=P1^0;void delay(unsigned int uSeconds){for(;uSeconds>0;uSeconds--);}unsigned char ow_reset(void){unsigned char xdata presence;DQ = 0;delay(48);DQ = 1;delay(7);presence = DQ;delay(48);return(presence);}unsigned char read_byte(void){unsigned char i;unsigned char value = 0;for (i=8;i>0;i--){value>>=1;DQ = 0; // pull DQ low to start read timeslotDQ = 1; // then rlease DQ_nop_();_nop_();_nop_();_nop_();_nop_(); // read DQ data at 1 to 15us,here delay 6us;if(DQ)value|=0x80;delay(7); // wait for rest of timeslot,72us }return(value);}void write_byte(char val){unsigned char i;for (i=8; i>0; i--) // writes byte, one bit at a time{DQ = 0; // pull DQ low to start timeslotDQ = val&0x01;delay(7); // hold value for remainder of timeslot,here 72us DQ = 1;val=val/2;}delay(5);}float Read_Temperature(void){unsigned char Hdata,Ldata,b;int a;bit flag;float x,y,z;ow_reset();write_byte(0xCC); // Skip ROMwrite_byte(0xBE); // Read Scratch Paddelay(100);Ldata=read_byte(); // Low byte firstHdata=read_byte(); // High byte afterow_reset();write_byte(0xCC); //Skip ROMwrite_byte(0x44); // Start Conversiona=Hdata*256+Ldata;x=(float)(Ldata&0x0f);x=x/16;if(a<0)flag=1;else flag=0;b=a>>4;z=(float)(b);if(flag==1){b=~b+1;z=(float)(b);z=0-z;}y=z+x;return y;}4、DS18B20.h#ifndef __DS18B20__#define __DS18B20__extern float Read_Temperature(void); #endif5、main.c#include <reg51.h>#include<LCD.h>#include<main.h>#include "DS18B20.h"void wait(unsigned int x){unsigned int i;i=0;for(i=0;i<x;i++);}void main(void){float F;signed int a;LCD_Init();LCD_Clear();display_cn(0,20,5,szwdj);display_cn(1,0,3,wdz);while(1){F=Read_Temperature( );a=(signed int)F;display_signed_int(1,40,a);wait(5000);}}6、main.h#ifndef MAIN_H__#define MAIN_H__// 中文字模库16x16点阵code unsigned char szwdj[]={ //纵向字节倒序。
温度计C语言程序
case TEMP_H_0:if(key_value == UP)
if(++Temp_h[0] > 9)
Temp_h[0] = 0;
if(key_value == DOWN)
if(--Temp_h[0] < 0)
Temp_h[0] = 9;
break;
case TEMP_H_1:if(key_value == UP)
presence = ~DQ;
}
DQ = 1;//拉高电平
}
//DS18B20写命令函数
void write_byte(U8 val)
{
U8 i;
for(i=8; i>0; i--){//串行移八次
DQ = 1;
_nop_();
_nop_();
DQ = 0;//从高拉倒低
_nop_();//5 us
{
U8 z;
U8 s;
z = Temper >> 4;//移位4次右移小数没有是整数
s = (Temper&0x000f)*100/16;//小数转换0.0625
buffer[7] = s/10;
buffer[6] = z%10;
buffer[5] = z/10;
buffer[4] = 16;
buffer[3] = 16;
while(presence){
DQ = 1;
_nop_();//空指令,代表延时1us/
_nop_();
DQ = 0;//从高拉倒低
delay(50);//550us
DQ = 1;
delay(6);//66us
presence = DQ;//presence = 0复位成功,继续下一步
C51单片机 温度计 C语言程序
disp_buff[0][4]=sec/10;
disp_buff[0][5]=sec%10;
//
disp_buff[1][0]=f;/*符号位*/
disp_buff[1][1]=TMP/1000;//百位
disp_buff[1][2]=TMP/100%10; /*十位*/
uchar KeyBuff;
code unsigned char Tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,
0x78,0x00,0x10,0xbf,0xff,0xc6};
{
unsigned int i;
unsigned char j;
bit testb;
for (j=1;j<=8;j++)
ቤተ መጻሕፍቲ ባይዱ
testb = dat & 0x01;
TL0=(unsigned char)(65536-4000);
Count4ms=Count4ms+1;
if (Count4ms==250)
{
Count4ms=0;
SecFlag=1;
}
P2_buff=Tab[disp_cnt];
if (KeyDownFlg)
}
//check data
hour=CheckData(hour,24);
min=CheckData(min,60);
sec=CheckData(sec,60);
基于铂电阻的数字温度计设计(含c语言程序)
基于铂电阻的数字温度计设计1、硬件设计根据测试系统所要求的测量范围,选用的传感器为铂电阻PT100,Pt100的测量范围是-200到850,单片机选用80C51,AD转换芯片选择AD574。
2、铂电阻PT100温区(-200~650℃)最常用的一种温度检测器,不仅广泛应用于工业测温,而且被制成各种标准温度计供计量和校准使用。
PT100的温度/电阻曲线如图1所示。
图1按IEC751国际标准,温度系数TCR=O.003851,Pt100(R0=100Ω)、Pt1000(R0=1000Ω)为统一设计型铂电阻。
TCR=(R100一R0)/(R0×100)。
PT100与PT1000的标准阻值如表1所示。
温度/电阻特性公式如下:-200<0℃Rt="R0[1+At+Bt2+C(t-100)t3]0<850℃Rt="R0(1+At+Bt2]其中Rt在t℃时的电阻值,R0在0℃时的电阻值3、测温电路测量范围为0~100℃的线性化、宽温域的Pt100测温电路。
电路图2所示电路有电压基准电路、线性化电路、差分放大电路和A/D转换电路组成。
电压基准电路有精密基准源LM199、电阻R1和电压跟随器A1构成,产生V R=6.855V的基准电压。
该基准一方面作为线性化电路的输入,另一方面经分压后得到V a=287.1mV的补偿电压。
实际应用时用二次多项式表示铂电阻的阻值与温度的关系,即R t =R 0(1+3.9684*10-3t+5.8458*10-7t 2) (1.1)线性化电路有A 2及外围电阻构成,R T 是铂电阻,R 是补偿电阻,R F =R f ,由电路可得2T o R T R V V R R=-(1.2)要使V o2与温度成线性关系,必须使0222=dtV d o即有2222/T TT dR d R R R dt dt ⎛⎫=- ⎪⎝⎭(1.3) 将式(1.1)代入式(1.3)得212001020233a R R R a R t a R ta =---在温度0℃~100℃的范围内对R 求平均值。
数字温度计设计报告C语言
1 设计概况1.1 设计概述本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温围广,测温准确,其输出温度采用数字显示,主要用于对测温比拟准确的场所,或科研实验室使用,该设计控制器使用单片机AT89C52,测温传感器使用DS18B20,用两只4位共阴极LED数码管以串口传送数据,实现温度显示,能准确到达以上要求。
1.2 设计符合以下要求:■根本围-20℃-70℃■精度误差为±0.5℃■LED数码管直读显示,当温度为"负〞,则显示负号;最低位显示摄氏度符号"C〞。
■当温度不在根本围时,蜂鸣器报警■当温度大于70℃,发光二极管闪烁;当温度小于-20℃,发光二极管闪烁1.3 所用材料:温度传感器DS18B20一个,AT89C52一个,12M晶振一个,四位共阴极数码管两个,蜂鸣器一个,发光二极管两个,电阻电容及导线假设干。
2 方案的总体设计框图温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C52,温度传感器采用DS18B20,用两只4位LED数码管以串口传送数据实现温度显示。
Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发本钱。
2.2 显示电路显示电路采用两只4位共阴LED数码管和数码管的驱动芯片74LS245。
四位数码管如下图:图2 数码管的外形尺寸图3 数码管的引脚排布注:管脚顺序:从数码管的正面看,以第一引脚为起点,管脚的顺序是逆时针排列的。
A-11B-7 C-4 D-2 E-1 F-10 G-5 DP-3数码管的驱动芯片74LS24574LS245用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据*74LS245还具有双向三态功能,既可以输出,也可以输入数据。
*当8051单片机的P0口总线负载到达或超过P0最大负载能力时,必须接入74LS245等总线驱动器*/G=1, DIR=*(*=0或者1),输入和输出均为高阻态;高阻态的含意就是相当于没有这个芯片。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验内容: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} ;。