老师一枚,服务于学生,制作了电子时钟融合温度检测的系统。

首先在焊接式前一定要仿真,更要注意仿真引脚和实际引脚的不同。

下面这个链接是常用元器件实物引脚图和解释。

CSDNhttps://mp.csdn.net/mp_blog/creation/editor/127420613参考代码:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned intsbit sounder=P3^7;
sbit qiehuan=P1^5;
sbit jia=P1^6;
sbit jian=P3^0;sbit DS=P3^6;
sbit LED1 = P3^4;
sbit LED2 = P3^5;
sbit LED3 = P1^2;
sbit LED4 = P1^4;
sbit anjian=P1^0;
uint temp;
uchar flag1;
uint a,b;
uchar d=0; // 切换标志位
uchar  hour0,minu0,sec0,hour1,minu1,sec1,h1,h2,m1,m2,s1,s2,k,s;
unsigned char code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};       //共阴极数码管
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,    //带小数点数字0x87,0xff,0xef};void DDDD(void);
void keyscan();
void init();
void delay(uchar z);
void display(uchar,uchar,uchar);
void sounde();
void delay1(unsigned int count);
void dsreset(void);
void tmpwritebyte(unsigned char dat);
void tmpchange(void);
void dis(unsigned int temp);
void AAAA(void);void main()
{
init();
while(1)
{       if(anjian==0)
{
delay(10);
while(anjian==0);
DDDD();
} keyscan();while(s==1)
{
keyscan();
display(hour1,minu1,sec1);
}
display(hour0,minu0,sec0);    }
}void init()
{
a=0;
b=0;s=0;
hour0=0;
minu0=0;
sec0=0;hour1=0;
minu1=0;
sec1=0;
TMOD=0x11;     TH1=(65536-50000)/256; //50ms
TL1=(65536-50000)%256;
EA=1;EX1=1;    ET1=1;IT1=1;PX1=1;TR1=1;
}
void ex1_int() interrupt 2
{
s++;
if(s==3)
s=0;
}
void timer1_int() interrupt 3 //T1
{
TH1=(65536-50000)/256;        //50ms
TL1=(65536-50000)%256;
if(s==2)
{
if(hour1==hour0 && minu0==minu1&&sec0==sec1)sounde();//蜂鸣器}
b++;
if(b==20)       //1s
{
b=0;
sec0++;
if(sec0==60)    //1m
{
sec0=0;
minu0++;
if(minu0==60)   //1h
{
minu0=0;
hour0++;
if(hour0==24)
hour0=0;
}
}
}
}void keyscan()        //按键扫描
{
if(s==0)
{
if(qiehuan==0){d++;if(d>3){d=0;}while(qiehuan==0);}if (jia==0){switch (d){case 1 : sec0++; if(sec0==60){sec0=0;}break;case 2 : minu0++;if( minu0==60){minu0=0;}break;case 3 : hour0++; if( hour0==24){hour0=0;}  break;}while(jia==0);}if (jian==0){switch (d){case 1 : sec0--; if(sec0==-1){sec0=59;}break;case 2 : minu0--;if( minu0==-1){minu0=59;}break;case 3 : hour0--;if( hour0==-1){hour0=23;}  break;}while(jian==0);}}if(s==1){ if(qiehuan==0){d++;if(d>3){d=0;}while(qiehuan==0);}if (jia==0){switch (d){case 1 : sec1++;if(sec1==60){sec1=0;}break;case 2 : minu1++;if( minu1==60){minu1=0;}break;case 3 : hour1++;if( hour1==24){hour1=0;}  break;}while(jia==0);}if (jian==0){switch (d){case 1 : sec1--; if(sec1==-1){sec1=59;}break;case 2 : minu1--;if( minu1==-1){minu1=59;}break;case 3 : hour1--;if( hour1==-1){hour1=23;}  break;}while(jian==0);}}}
void display(uchar hour,uchar minu,uchar sec)
{
h1=hour/10;
h2=hour%10;
m1=minu/10;
m2=minu%10;
s1=sec/10;
s2=sec%10;
P2=0xff;
P0=table[h1];
P2=select[7];
delay(1);
P2=0xff;
P0=table[h2];
P2=select[6];
delay(1);
P2=0xff;
P0=0x40;;
P2=select[5];
delay(1);
P2=0xff;
P0=table[m1];
P2=select[4];
delay(1);
P2=0xff;
P0=table[m2];
P2=select[3];
delay(1);
P2=0xff;
P0=0x40;
P2=select[2];
delay(1);
P2=0xff;
P0=table[s1];
P2=select[1];
delay(1);
P2=0xff;
P0=table[s2];
P2=select[0];
delay(1);
}//蜂鸣器
void sounde()
{LED1=~LED1;sounder=~sounder; }void delay(uchar z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}void delay1(uint count)      //delay
{uint i;while(count){i=200;while(i>0)i--;count--;}
}
void dsreset(void)       //send reset and initialization command
{uint i;DS=0;i=103;while(i>0)i--;DS=1;i=4;while(i>0)i--;
}bit tmpreadbit(void)       //read a bit
{uint i;bit dat;DS=0;i++;          //i++ for delayDS=1;i++;i++;dat=DS;i=8;while(i>0)i--;return (dat);
}uchar tmpread(void)   //read a byte date
{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tmpreadbit();dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);
}void tmpwritebyte(uchar dat)   //write a byte to ds18b20
{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb)     //write 1{DS=0;i++;i++;DS=1;i=8;while(i>0)i--;}else{DS=0;       //write 0i=8;while(i>0)i--;DS=1;i++;i++;}}
}void tmpchange(void)  //DS18B20 begin change
{dsreset();delay1(1);tmpwritebyte(0xcc);  // address all drivers on bustmpwritebyte(0x44);  //  initiates a single temperature conversion
}uint tmp()               //get the temperature
{float tt;uchar a,b;dsreset();delay1(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);a=tmpread();b=tmpread();temp=b;temp<<=8;             //two byte  compose a int variabletemp=temp|a;tt=temp*0.0625;temp=tt*10+0.5;return temp;
}void dis(uint temp)            //显示程序
{uchar A1,A2,A2t,A3,i;A1=temp/100;A2t=temp%100;A2=A2t/10;A3=A2t%10;i=0;
while(i<20)
{i++;P2=0xff;P0=table[A1];P2=select[7];delay1(1);P2=0xff;P0=table1[A2];P2=select[6];delay1(1);P2=0xff;P0=table[A3];P2=select[5];delay1(1);}}void DDDD(void)
{  uchar a;do{ tmpchange();for(a=10;a>0;a--){   dis(tmp());}//高于***值蜂鸣器慢响并led1闪烁if(temp>=380)    //当温度超过38度(仅作试验用,实际可设为其他更高的值),蜂鸣器便会报警。{LED1=0;LED2=0;sounder=0;delay1(50);sounder=1;LED1=1;LED2=1;   }else{  if(temp>=320){LED1=0;sounder=0;delay1(100);sounder=1;LED1=1;}}//低于***值蜂鸣器慢响并led1闪烁if(temp<=230)  //当温度低于23度  慢响单闪烁{LED3=0;LED4=0;sounder=0;delay1(50);sounder=1;LED3=1;LED4=1;}else{      if(temp<=270)/低于27度  快响双闪烁{LED3=0;sounder=0;delay1(100);sounder=1;LED3=1;}}if(anjian == 0) { delay(10);while(anjian==0);break;}
}while(1);
}

参考原理图:

各位同学,你检索到我的文件了,请注意,这是共阴极数码管,请务必理解程序后再焊接。

八位一体共阴极数码管显示电子时钟+闹铃+温度检测相关推荐

  1. 四位共阴极数码管显示“12.34”的主程序

    四位共阴极数码管显示"12.34"的主程序 本程序使用共阴极数码管,使用了TM1650驱动芯片,在stm32F103调试成功 #include "gpio.h" ...

  2. 入门必做的51单片机实验2----》利用外部中断的方法来控制发光二极管和共阴极数码管显示十六进制的0到F

    嘿!各位中午好! 我是肖肖的猪会飞 欢迎收看肖小猪频道 刚刚做了个单片机实验->ヽ( ̄ω ̄( ̄ω ̄")ゝ 分享一下 文章目录 前言 一,实验题目 二,程序 三,仿真效果 前言 此实验为 ...

  3. [STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字

    本节我们目标是实现TM1640点亮16位共阴极数码管,显示"0~F"数字: 1. 硬件设计 GPIO初始化配置 SCL(PB6)  SDA(PB7):开漏输出,通过IO模拟驱动TM ...

  4. C51单片机-共阳极数码管循环显示数字0至9,共阴极数码管循环显示5201314(动态)

    keil uVision4界面: #include<reg51.h> //包含8051单片机寄存器定义的头文件 //共阳极数码管0到9 unsigned char seg1[]={0xc0 ...

  5. c语言共阴极数码管数字6,共阴数码管 显示数字 C语言程序

    共阴数码管显示数字C语言程序#include void Delay(unsigned char a) { unsigned char i; while( --a != 0) { for(i = 0; ...

  6. 共阴极和共阳极数码管显示的十六进制代码

    共阳极数码管 unsigned char LED7Code[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82,0xf8, 0x80, 0x90, 0x88, ...

  7. 共阳数码管段码表_简单共阴极数码管电路图大全

    共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a.b.c.d.e.f.g及dp(小数点),如下图所示.图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个L ...

  8. 利用全加器实现7段数码管_简单共阴极数码管电路图大全(CD4511/段译码/驱动器)...

    共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a.b.c.d.e.f.g及dp(小数点),如下图所示.图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个L ...

  9. 【Multisim仿真】74LS47译码器驱动共阳数码管显示(0-8)数字显示

    [Multisim仿真]74LS47译码器驱动共阳数码管显示(0-8)数字显示 Multisim仿真演示 74ls47引脚功能 LT: 试灯输入,是为了检查数码管各段是否能正常发光而设置的.当LT=0 ...

最新文章

  1. 面试题:2018最全Redis面试题整理
  2. phpinfo.php ctf,这你不是你所常见的PHP文件包含漏洞(利用phpinfo)
  3. WayOS路由智能小区组网方案
  4. 用Kettle的一套流程完成对整个数据库迁移 费元星
  5. 孕期出血是否先兆流产——B超看婴儿是否在子宫内+hcg值是否过低孕激素不足...
  6. JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用
  7. ajax datatype_小白跟我一起学习ajax
  8. JavaScript中的Window窗口对象【转载】
  9. 信息学奥赛C++语言:蛋糕盒子
  10. qq2006导致alt-tab切换失灵,还不知道怎么报告和解决(英文win2000)
  11. hihoCoder 1378 网络流二·最大流最小割定理 (网络流学习#2 记录)
  12. 解决android sdk manage打开闪退的解决方法
  13. 数学建模1:lingo软件求解优化模型
  14. ENVI5.3 辐射校正相关操作
  15. 智能车室内光电组ROS-2020—— 创建工作空间以及移植比赛模型文件
  16. 多行文字内容溢出显示点点点(...)省略号
  17. ubuntu上网显示找不到服务器,解决ubuntu中firefox浏览器总是提示找不到服务器的问题...
  18. 知识产权贯标认证的好处,如何申请?
  19. 看井上雄彦是如何作画的!
  20. 我所了解的竞价排名那点事儿

热门文章

  1. 使用Javascript Rhino重载Java方法
  2. 高等数学习题笔记(二)
  3. 扭曲的空间和扭曲的能量场
  4. ABB机器人仿真软件robotstudio v6.08安装教程
  5. 图论:关于弦图的几个图论结论
  6. java生成缩略图例子_具体介绍java生成缩略图的方法示例代码
  7. 实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架
  8. #叉积#zoj 1041 poj 1106 ssl 1232 雷达覆盖问题 Transmitters
  9. IP地址管理工具Netbox 安装指南
  10. FreeBSD网络配置