历史上的今天
今天是:2025年02月15日(星期六)
2020年02月15日 | 51单片机18b20温度及按键可调上下限报警源程序
2020-02-15 来源:51hei
于18b20显示2位温度并显示上下限,超限报警,温度上下限均可调整,附带闪烁灯
单片机源程序如下:
#include #define uchar unsigned char #define uint unsigned int sbit ds=P2^2; sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; sbit dula=P2^6; sbit wela=P2^7; sbit beep=P2^3; bit key=0; sbit led=P1^2; uint get_temp(); void send(uchar); uint temp,num,p,cycle,high,low,zd,xs,TL; uint l=19; //定义温度下限 uint h=25; //定义温度上限 uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0xbf,0x86, 0xdb,0xcf,0xe6,0xed, 0xfd,0x87,0xff,0xef}; void delay(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void delay1(uint ms) { uchar j; while(ms--) for(j=110;j>0;j--); } /////中断///////////////////// void init() { TMOD|=0X10; TH0=(65536-2000)/256; TL0=(65536-2000)%256; EA=1; ET0=1; TR0=1; } //按键扫描程序****************************************************** void keyscan() { if(key3==0) delay1(5); if(key3==0) { while(!key3); key=!key; while(key3==0); } if(key==0) { if(key1==0) { delay1(5); if(key1==0) { //while(!key1) ; l++; delay(50); if(l==99) l=0; } } if(key2==0) { delay1(5); if(key2==0) {// while(!key2); if(l!=0) l--; delay(50); } } } if(key==1) { if(key1==0) { delay1(5); if(key1==0) {// while(!key1) ; h++; delay(50); if(h==99) h=0; } } if(key2==0) { delay1(5); if(key2==0) {//while(!key2); if(h!=0) h--; delay(50); } } } } //温度传感器******************************************************** void dsreset()//ds18b20复位 初始化函数 { uint i; ds=0; i=80; while(i>0)i--; ds=1; i=4; while(i>0)i--; } bit tempreadbit() { uint i; bit dat; ds=0;i++; //i++起延时作用 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return(dat); } uchar tempread() { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); //读出数据最低位在最前面,这样刚好一个字节在dat里 } return(dat); } void tempwritebyte(uchar dat) //向ds18b20写一个字节数据函数 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb)//写一 { ds=0; i++;i++; ds=1; i=8; while(i>0)i--; } else { ds=0;//写0 i=8;while(i>0)i--; ds=1; i++;i++; } } } void tempchange() //DS18B20开始获取温度并转换 { dsreset(); delay(1); tempwritebyte(0xcc); //写跳过读ROM指令 tempwritebyte(0x44); //写温度转换指令 } uint get_temp() { uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); //读低八位 b=tempread(); //读高八位 temp=b; temp<<=8;//两个字节组合为一个字 temp=temp|a; temp=temp*0.0625; //温度在寄存器中为12位,分辨率位0.0625 度 SBUF=temp; return temp;//temp是整型 } //数码管显示********************************************************************** void display(uchar num,uchar dat)//数据显示程序 { //num是第几个数码管,dat是要显示的数字
史海拾趣
|
图附件电路:IC为控制电路,Q端输出控制信号3V左右,控制三极管的导通。工作电压5--24V, K为24V继电器。 主要意图:24V电源供电,当Q没有输出时,继电器不工作,但有漏电流。当Q端有输出时,三极管导通,继电器工作。电路目前问题是:三极管导通 ...… 查看全部问答> |
|
各位兄弟姐妹大家好,小弟这两天正在苦心学习verilog,书中看到一段话不太明白: 简单的十进制数格式的整数代表一个有符号的数,负数可使用两种补码形式表示。因此32在5位的二进制形式中为10000,在6位二进制形式中为110001;-15在5位的二进制形式 ...… 查看全部问答> |
|
关于dsp的开发工具 CCStudio v3.3 的帮助问题! 为什么我打开help|content 而后在index栏输入 需要查找的内容 如输入stm,sym,mpy等等都没相关主题,倒是有一些不相关的内容!难道是我的东西没安装完全吗!如果是怎样把他安装完全!我的安装程序一共635MB,从网 ...… 查看全部问答> |
|
我要通过GPRS猫发送彩信,有几个问题请教大家: 1、看网上说可以通过Http post发送,是什么意思?是将HTTP post封装到WSP PDU中吗?还是指得HTTP post通过Internet发送? 2、因为我的GPRS猫没有继承MMS模块,所以各层的协议要自己实现,由低到高 ...… 查看全部问答> |
|
我用40G硬盘,分成1个fAT区,2G,其他的为其它的分区。 启动后,存储管理器可以到该硬盘。但是没有挂接上。 我的操作: 1、添加ATAPI PCI/IDE Storage Block Driver 2、添加FAT File System 3、添加CD/UDFS File System 请问是否需要更改注册 ...… 查看全部问答> |
|
请教一个问题,代码如下: sbit int_1 = P1^2; sbit int_2 = P1^3; sbit int_3 = P3^7; uchar code drive_1[4] = {0xff,0x00,0xff,0x00}; uchar code drive_2[4] = {0x00,0xff,0x00,0xff}; int main() { uchar i = 0; & ...… 查看全部问答> |
|
Cannot open include file: 'icmpapi.h': No such file or directory 我编程(参考别人的)的时候, 需要这个文件,可是怎么也找不到 fatal error C1083: Cannot open include file: \'icmpapi.h\': No such file or directory 到哪里找这个文件… 查看全部问答> |
|
DriverStudio开发IRP_MJ_DEVICE_CONTROL的routine时设置OutBuffer的问题 请问,我在写自定义的某个IRP_MJ_DEVICE_CONTROL的CODE的时候,采用了METHOD_BUFFERED的方式,发现设置不了输出缓冲中的内容。书上说BUFFERED方式输出缓冲与输入缓冲都是IO MANAGER分配的系统内存,传进来的时候是in buffer,传出动是out buffer, ...… 查看全部问答> |




