#include

#include "intrins.h"

#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

uchar i=0,j=0,k=0, s=1,f=1,m=0,a[9]; //定义变量

sbit K4=P1^3; //位定义

sbit K5 =P1^4; //位定义

sbit fmq =P3^6; //位定义

sbit     DQ=P3^3;                               //温度输入口

sbit     DIN=P0^7;

uint     h;

uint     temp;

uint     num;

uint     numc;

//uchar code sz[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf} ; //数字编码表

//uchar code xw[]={ 0xff,0xfe,0xfd,0xfb,0xf7, //选位编码表

//0xef,0xdf,0xbf,0x7f

//};

//**************温度小数部分用查表法***********//

uchar code ditab[16]=

{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//

uchar code dis_7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};

//共阳LED段码表        "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9" "不亮" "-"

uchar code scan_con[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};    //列扫描控制字

uchar data temp_data[2]={0x00,0x00};             //读出温度暂放

uchar data display[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};     //显示单元数据,共4个数据和一个运算暂用

//uchar data display1[5]={};

//

//

//

void pf() //区分出个位和十位

{

a[1]=s/10;

a[2]=s%10;

a[3]=11;

a[4]=f/10;

a[5]=f%10;

a[6]=11;

a[7]=m/10;

a[8]=m%10;

}

/*****************11us延时函数*************************/

//

void delay(uint t)

{

for (;t>0;t--);

}

/*****************延时函数***********************/

void ys ( int d )

{

int b ,c ;

for (b = d;b>0;b--)

for (c=110;c>0;c--) ;

}

//****************1ms基准延时程序

void delay1ms(uint i)

{

uchar j;

while(i--)

{

for(j=0;j<115;j++)

{

;

}

}

}

/************500us基准延时程序         ******************/

void delay500us()

{

unsigned char j;

for(j=0;j<57;j++)

{

;

}

}

/****************显示扫描函数***************************/

void scan()

{

uchar k;

display[4]=num/1000;

display[5]=num/100-display[4]*100;

display[6]=num/10-display[5]*10;

display[7]=num-display[5]*100-display[6]*10;

numc=display[2]*100+display[1]*10+display[0];

for(k=0;k<8;k++)                     //4位LED扫描控制

{

P0=dis_7[display[k]];          //数据显示

if ((k==1)||(6==k))

{DIN=0;}                   //小数点显示

P2=scan_con[k];                 //位选

delay(100);

}

}

void xs(uint k)

{        uint i;

for(i=0;i

{

scan();

}

}

/***********产生1KHZ频率声音的函数 /****************/

void beep()

{

fmq=0;

delay500us();

fmq=1;

}

/****************DS18B20复位函数************************/

void ow_reset(void)

{

char presence=1;

while(presence)

{

while(presence)

{

DQ=1;_nop_();_nop_();//从高拉倒低

DQ=0;

delay(50);           //550 us

DQ=1;

delay(6);            //66 us

presence=DQ;         //presence=0 复位成功,继续下一步

}

delay(45);            //延时500 us

presence=~DQ;

}

DQ=1;                   //拉高电平

}

//

//

/****************DS18B20写命令函数************************/

//向1-WIRE 总线上写1个字节

void write_byte(uchar val)

{

uchar i;

for(i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();                  //从高拉倒低

DQ=0;_nop_();_nop_();_nop_();_nop_();  //5 us

DQ=val&0x01;                           //最低位移出

delay(6);                              //66 us

val=val/2;                             //右移1位

}

DQ=1;

delay(1);

}

//

/****************DS18B20读1字节函数************************/

//从总线上取1个字节

uchar read_byte(void)

{

uchar i;

uchar value=0;

for(i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();

value>>=1;

DQ=0;_nop_();_nop_();_nop_();_nop_();         //4 us

DQ=1;_nop_();_nop_();_nop_();_nop_();         //4 us

if(DQ)value|=0x80;

delay(6);                                     //66 us

}

DQ=1;

return(value);

}

//

/****************读出温度函数************************/

//

read_temp()

{

ow_reset();                  //总线复位

delay(200);

write_byte(0xcc);            //发命令

write_byte(0x44);            //发转换命令

ow_reset();

delay(1);

write_byte(0xcc);            //发命令

write_byte(0xbe);

temp_data[0]=read_byte();    //读温度值的第字节

temp_data[1]=read_byte();    //读温度值的高字节

temp=temp_data[1];

temp<<=8;

temp=temp|temp_data[0];      // 两字节合成一个整型变量。

return temp;                 //返回温度值

}

//

/****************温度数据处理函数************************/

//二进制高字节的低半字节和低字节的高半字节组成一字节,这个

//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩

//下的低字节的低半字节转化成十进制后,就是温度值的小数部分

/********************************************************/

void work_temp(uint tem)

{

uchar n=0;

if(tem>6348)                        // 温度值正负判断

{tem=65536-tem;n=1;}            // 负温度求补码,标志位置1

display[4]=tem&0x0f;           // 取小数部分的值

display[0]=ditab[display[4]];  // 存入小数部分显示值

display[4]=tem>>4;             // 取中间八位,即整数部分的值

display[3]=display[4]/100;     // 取百位数据暂存

display[1]=display[4]%100;     // 取后两位数据暂存

display[2]=display[1]/10;      // 取十位数据暂存

display[1]=display[1]%10;

/******************符号位显示判断**************************/

if(!display[3])

{

display[3]=0x0a;           //最高位为0时不显示

if(!display[2])

{

display[2]=0x0a;        //次高位为0时不显示

}

}

if(n){display[3]=0x0b;}      //负温度时最高位显示"-"

}

/*************显视函数*************/

void szxs()

{ uint jj;

pf() ;

for (k=1;k<=8;k++)

{

if(k<5)

{jj=4-k;}

else

jj=k-1;

P2=scan_con[jj];

P0=dis_7[a[k]];

ys(3);

}

}

void dczd() interrupt 1 //定时中断

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

i++;

if (i==20)

{

i=0;

m++;

if (m==60)

{

m=0;

f++;

if (f==60)

{

f=0;

s++;

if (s==24)

s=0;

}

}

}

}

void cs() //初始函数

{

TMOD=0x01; //设置为定时工作方式

TH0=(65535-50000)/256; //定时器装初值

TL0=(65535-50000)%256; //定时器装初值

EA=1; //打开总中断

ET0=1; //打开定时中断

TR0=1; //起用定时器

//P3=0X00;

}

void szxs1(uint t)

{

uint a;

for(a=0;a

{szxs();

}

}

void shizhong()

{

szxs1(1);

if(( K4==0)&&(0!=K5))

{

szxs1(2);

if( ( K4==0)&&(0!=K5))

{

szxs1(10);

s++;

s%=24;

}

}

if(( K5==0)&&(0!=K4))

{

szxs1(2);

if(( K5==0)&&(0!=K4))

{

szxs1(10);

f++;

f%=60;

}

}

}

void cw()

{

work_temp(read_temp());     //处理温度数据

scan();

if(( K5==0)&&(0!=K4))                                        //上限+

{

//delay1ms(15);

xs(3);                                          //用显示程序延时,下同

if(( K5==0)&&(0!=K4))

{

num=num+1;

}

//while(!K5);

xs(14);

}

if(( K4==0)&&(0!=K5))                                  //上限-

{

//delay1ms(15);

xs(3);

if(( K4==0)&&(0!=K5))

{

num=num-1;

}

//while(!K4);

xs(14);

}

if(numc>num)

{

beep();

}                  //显示温度值

}

void main ()

{

uint b=0;

cs();

num=300;

P0=0xff;                 //初始化端口

P2=0xff;

for(h=0;h<4;h++)              //开机显示"0000"

{display[h]=0;}

ow_reset();                   //开机先转换一次

write_byte(0xcc);             //Skip ROM

write_byte(0x44);             //发转换命令

xs(20);            //开机显示"00000300"

while(1)

{

for(b=0;b<200;b++)

shizhong();

for(b=0;b<200;b++)

cw();

}

}

温度报警程序c语言设计,单片机温度报警器与时钟显示C程序和原理图相关推荐

  1. max7219c语言,51单片机+MAX7219数码管显示C程序

    /************************************************** *程序名称:  MAX7219 C语言控制程序 *程序功能: 3线串行控制8位共阴数码管 *3线 ...

  2. 单片机旋转led程序c语言,基于单片机POV的旋转LED灯程序

    /************************************************************************************** *Name:旋转LED ...

  3. 微信小程序:字体设计符号组合多功能微信小程序源码

    这是一款主打字体设计,符号组合等多模板功能的一款微信小程序源码 内含多种功能,比如: 花式字体设计 表情字体组合设计 翅膀字体组合 火星文一键生成 符号库 空白名称 彩色网名等等 还有很多,所以小编就 ...

  4. 51单片机 IIC OLED驱动显示通用程序模板

    51单片机 IIC OLED驱动显示通用程序模板 本模板是通过中景园OLED屏幕资料中提取保留ASCII字符集,点阵大小:6x8和8X16. 汉字取模方式 取模软件:pctolcd2002 /汉字取模 ...

  5. 单片机跑马灯程序c语言,MCS-51单片机控制跑马灯的三种方法

    描述 在MCS一51单片机的控制系统中,它的四个并行8位输入输出端口P0一P3是我们经常使用的.在并行端口的编程学习中,"跑马灯"是单片机并行端口输出控制的典型实例.所谓跑马灯,是 ...

  6. 想设计一个母亲节小程序c语言,明天母亲节,用这款小程序,给妈妈送一张贺卡吧!...

    原标题:明天母亲节,用这款小程序,给妈妈送一张贺卡吧! 小程序体验师:陈丹阳 妈妈,再打我一次吧. 明天就是一年一度的母亲节了,还没想好给妈妈送什么吗? 现在,「知晓程序」就给你推荐一款贺卡小程序「小 ...

  7. .net应用程序中添加chm帮助文档打开显示此程序无法显示网页问题

    在做.net大作业时添加了chm帮助文档结果在打开时显示"此程序无法显示网页问题",但是把帮助文档拷到别的路径下却显示正常, 经过从网上查找,终于找到了答案: (1).chm文件的 ...

  8. 温度报警程序c语言设计,51单片机课程设计:基于DS18B20的温度报警器

    51单片机课程设计:基于DS18B20的温度报警器 本程序用于读取DS18B20温度,同时具备报警功能,工程分为3个文件,main.c.temp.c.temp.h,经本人修改部分代码,适用于吉林农业大 ...

  9. 煤气检测与报警程序C语言,基于单片机的煤气检测报警系统毕业设计.doc

    基于单片机的煤气检测报警系统毕业设计 届 别 学 号 毕业设计 基于单片机的煤气检测报警系统 姓 名 系 别. 专 业 导 师 姓 名.职 称 完 成 时 间 目录 摘要3 Abstract3 1 绪 ...

最新文章

  1. 【深度学习理论】(3) 激活函数
  2. 利用 VMWare 搭建随机拓扑网络
  3. 从python开始学编程pdf 解压密码_从Python开始学编程PDF高清完整版网盘免费分享...
  4. Redis缓存雪崩、缓存穿透、热点Key解决方案和分析
  5. 2013_chengdu_visit
  6. 树莓派使用STEP4:安装vim
  7. 基于SARIMA-LSTM的门诊量预测研究
  8. linux sar命令找不到,linux的sar命令未找到
  9. 如何写一个不带BOM的UTF8文件
  10. 云计算仿真框架CloudSim介绍
  11. android 折叠式布局,Android卡片式折叠交互效果
  12. mysql启动失败“MySQL Daemon failed to start”
  13. Node聊天程序实例04:chat_ui.js
  14. scrapy爬取统计局的城乡代码,以目录文件夹形式生成,同时最后保存在excel中
  15. edge 浏览器打开总跳向 hao.360
  16. 谈胶印机供水装置调节的技巧
  17. Debian 6(Squeeze)升级至Debian 7(Wheezy)
  18. 地面互动的原理以及特殊优势
  19. 2019下半年中小学教资考试教育知识与能力试题(中学)——主观题
  20. iOS开发键盘设置,IOS7深灰色键盘

热门文章

  1. 稳定dns服务器,国内DNS服务器推荐 选对了让你网速开挂
  2. 用java导入导出zip文件
  3. 基于逻辑回归算法的心脏病不平衡数据分类代码实现
  4. 学校计算机安全隐患排查情况报告,学校安全隐患排查情况报告
  5. 车辆逆行识别检测系统 opencv
  6. ios键盘通知和自定义键盘
  7. 差速齿轮原理_浅析限滑差速器的功用及工作原理
  8. PMP新考纲考试内容介绍
  9. 视频转mp3 kux视频怎么转换成mp3格式
  10. 解锁ESP32-C3的GPIO11